aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/instructions.go
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2017-05-29 05:39:33 +0800
committerMartin Holst Swende <martin@swende.se>2017-06-05 14:44:11 +0800
commit3285a0fda37207ca1b79ac28e2c12c6f5efff89b (patch)
treef17d74593a9ed24dd99bf94a48d5ddeaff2e41c6 /core/vm/instructions.go
parent6171d01b1195abd7ac75044dcd507d4758d83cde (diff)
downloadgo-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.go13
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) {