core/vm, common/math: Add fast getByte for bigints, improve opByte
This commit is contained in:
@ -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) {
|
||||
|
Reference in New Issue
Block a user