aboutsummaryrefslogtreecommitdiffstats
path: root/core/vm/instructions.go
diff options
context:
space:
mode:
authorMartin Holst Swende <martin@swende.se>2018-06-14 17:23:37 +0800
committerPéter Szilágyi <peterke@gmail.com>2018-06-14 17:23:37 +0800
commit947e0afeb3bce9c52548979daddd1e00aa0d7ba8 (patch)
treeab3e44f8cf74d60e541df07c5ef81ad0ca9797d2 /core/vm/instructions.go
parent1836366ac19e30f157570e61342fae53bc6c8a57 (diff)
downloaddexon-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.go8
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
}