diff options
author | Martin Holst Swende <martin@swende.se> | 2017-05-29 05:39:33 +0800 |
---|---|---|
committer | Martin Holst Swende <martin@swende.se> | 2017-06-05 14:44:11 +0800 |
commit | 3285a0fda37207ca1b79ac28e2c12c6f5efff89b (patch) | |
tree | f17d74593a9ed24dd99bf94a48d5ddeaff2e41c6 /core/vm/instructions.go | |
parent | 6171d01b1195abd7ac75044dcd507d4758d83cde (diff) | |
download | go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar.gz go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar.bz2 go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar.lz go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar.xz go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.tar.zst go-tangerine-3285a0fda37207ca1b79ac28e2c12c6f5efff89b.zip |
core/vm, common/math: Add fast getByte for bigints, improve opByte
Diffstat (limited to 'core/vm/instructions.go')
-rw-r--r-- | core/vm/instructions.go | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 42f1781d8..bcaf18e8a 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -256,15 +256,14 @@ func opXor(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stac } func opByte(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - th, val := stack.pop(), stack.pop() - if th.Cmp(big.NewInt(32)) < 0 { - byte := evm.interpreter.intPool.get().SetInt64(int64(math.PaddedBigBytes(val, 32)[th.Int64()])) - stack.push(byte) + th, val := stack.pop(), stack.peek() + if th.Cmp(common.Big32) < 0 { + b := math.BigEndian32ByteAt(val, int(th.Int64())) + val.SetInt64(int64(b)) } else { - stack.push(new(big.Int)) + val.SetUint64(0) } - - evm.interpreter.intPool.put(th, val) + evm.interpreter.intPool.put(th) return nil, nil } func opAddmod(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { |