From 88aa0db42bc9f00d4247e71a7e9967d9f72ce472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Tue, 12 Dec 2017 14:34:26 +0100 Subject: [PATCH] evmjit: Use EVMJIT instead of Interpreter --- core/vm/evm.go | 6 +++--- core/vm/evmjit.go | 7 +++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/vm/evm.go b/core/vm/evm.go index 344435f73c..3b01947cb1 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -100,7 +100,7 @@ type EVM struct { vmConfig Config // global (to this context) ethereum virtual machine // used throughout the execution of the tx. - interpreter *Interpreter + interpreter *EVMJIT // abort is used to abort the EVM calling operations // NOTE: must be set atomically abort int32 @@ -121,7 +121,7 @@ func NewEVM(ctx Context, statedb StateDB, chainConfig *params.ChainConfig, vmCon chainRules: chainConfig.Rules(ctx.BlockNumber), } - evm.interpreter = NewInterpreter(evm, vmConfig) + evm.interpreter = NewJit(evm, vmConfig) return evm } @@ -374,4 +374,4 @@ func (evm *EVM) Create(caller ContractRef, code []byte, gas uint64, value *big.I func (evm *EVM) ChainConfig() *params.ChainConfig { return evm.chainConfig } // Interpreter returns the EVM interpreter -func (evm *EVM) Interpreter() *Interpreter { return evm.interpreter } +func (evm *EVM) Interpreter() *EVMJIT { return evm.interpreter } diff --git a/core/vm/evmjit.go b/core/vm/evmjit.go index a0dec20563..60bc3a7527 100644 --- a/core/vm/evmjit.go +++ b/core/vm/evmjit.go @@ -99,6 +99,9 @@ import ( type EVMJIT struct { jit *C.struct_evm_instance env *EVM + intPool *intPool + readOnly bool + returnData []byte // Last CALL's return data for subsequent reuse } type EVMCContext struct { @@ -113,7 +116,7 @@ type ContextWrapper struct { func NewJit(env *EVM, cfg Config) *EVMJIT { // FIXME: Destroy the jit later. - return &EVMJIT{C.evmjit_create(), env} + return &EVMJIT{C.evmjit_create(), env, nil, false, nil} } @@ -428,7 +431,7 @@ func getRevision(env *EVM) C.enum_evm_revision { return C.EVM_FRONTIER } -func (evm *EVMJIT) Run(contract *Contract, input []byte) (ret []byte, err error) { +func (evm *EVMJIT) Run(snapshot int, contract *Contract, input []byte) (ret []byte, err error) { evm.env.depth++ defer func() { evm.env.depth-- }()