diff options
author | Martin Holst Swende <martin@swende.se> | 2018-06-14 17:23:37 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2018-06-14 17:23:37 +0800 |
commit | 947e0afeb3bce9c52548979daddd1e00aa0d7ba8 (patch) | |
tree | ab3e44f8cf74d60e541df07c5ef81ad0ca9797d2 /core/vm/instructions.go | |
parent | 1836366ac19e30f157570e61342fae53bc6c8a57 (diff) | |
download | dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar.gz dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar.bz2 dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar.lz dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar.xz dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.tar.zst dexon-947e0afeb3bce9c52548979daddd1e00aa0d7ba8.zip |
core/vm: optimize MSTORE and SLOAD (#16939)
* vm/test: add tests+benchmarks for mstore
* core/vm: less alloc and copying for mstore
* core/vm: less allocs in sload
* vm: check for errors more correctly
Diffstat (limited to 'core/vm/instructions.go')
-rw-r--r-- | core/vm/instructions.go | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 3a67e1865..9475322cd 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -556,7 +556,7 @@ func opMload(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *St func opMstore(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { // pop value of the stack mStart, val := stack.pop(), stack.pop() - memory.Set(mStart.Uint64(), 32, math.PaddedBigBytes(val, 32)) + memory.Set32(mStart.Uint64(), val) evm.interpreter.intPool.put(mStart, val) return nil, nil @@ -570,9 +570,9 @@ func opMstore8(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack * } func opSload(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { - loc := common.BigToHash(stack.pop()) - val := evm.StateDB.GetState(contract.Address(), loc).Big() - stack.push(val) + loc := stack.peek() + val := evm.StateDB.GetState(contract.Address(), common.BigToHash(loc)) + loc.SetBytes(val.Bytes()) return nil, nil } |