diff --git a/evmjit/include/evmjit/JIT.h b/evmjit/include/evmjit/JIT.h index 5972bfa88..f4bb9d159 100644 --- a/evmjit/include/evmjit/JIT.h +++ b/evmjit/include/evmjit/JIT.h @@ -6,6 +6,8 @@ namespace dev { namespace evmjit { +enum class ReturnCode; +class ExecutionContext; class JIT { @@ -16,6 +18,8 @@ public: /// In this case the code can be executed without overhead. /// \param _codeHash The Keccak hash of the EVM code. static bool isCodeReady(h256 _codeHash); + + EXPORT static ReturnCode exec(ExecutionContext& _context); }; } diff --git a/evmjit/libevmjit-cpp/JitVM.cpp b/evmjit/libevmjit-cpp/JitVM.cpp index a4eed5793..d40aa2b1c 100644 --- a/evmjit/libevmjit-cpp/JitVM.cpp +++ b/evmjit/libevmjit-cpp/JitVM.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include "Utils.h" @@ -53,7 +54,7 @@ bytesConstRef JitVM::go(ExtVMFace& _ext, OnOpFunc const& _onOp, uint64_t _step) m_data.codeHash = eth2llvm(sha3(_ext.code)); m_context.init(m_data, reinterpret_cast(&_ext)); - auto exitCode = evmjit::ExecutionEngine::run(m_context); + auto exitCode = evmjit::JIT::exec(m_context); switch (exitCode) { case evmjit::ReturnCode::Suicide: diff --git a/evmjit/libevmjit-cpp/JitVM.h b/evmjit/libevmjit-cpp/JitVM.h index 4fccca7df..5bba7b5f0 100644 --- a/evmjit/libevmjit-cpp/JitVM.h +++ b/evmjit/libevmjit-cpp/JitVM.h @@ -2,7 +2,6 @@ #include #include -#include namespace dev { diff --git a/evmjit/libevmjit/CMakeLists.txt b/evmjit/libevmjit/CMakeLists.txt index 67e5f5800..525030285 100644 --- a/evmjit/libevmjit/CMakeLists.txt +++ b/evmjit/libevmjit/CMakeLists.txt @@ -12,12 +12,11 @@ set(SOURCES Endianness.cpp Endianness.h ExecStats.cpp ExecStats.h ExecutionContext.cpp ExecutionContext.h - ExecutionEngine.cpp ExecutionEngine.h Ext.cpp Ext.h GasMeter.cpp GasMeter.h Instruction.cpp Instruction.h interface.cpp interface.h - ${EVMJIT_INCLUDE_DIR}/evmjit/JIT.h + JIT.cpp ${EVMJIT_INCLUDE_DIR}/evmjit/JIT.h Memory.cpp Memory.h Optimizer.cpp Optimizer.h RuntimeManager.cpp RuntimeManager.h diff --git a/evmjit/libevmjit/Cache.cpp b/evmjit/libevmjit/Cache.cpp index e64cb5430..0e19b6276 100644 --- a/evmjit/libevmjit/Cache.cpp +++ b/evmjit/libevmjit/Cache.cpp @@ -10,7 +10,7 @@ #include #include "preprocessor/llvm_includes_end.h" -#include "ExecutionEngine.h" +#include "ExecStats.h" #include "Utils.h" #include "BuildInfo.gen.h" @@ -23,7 +23,7 @@ namespace { CacheMode g_mode; std::unique_ptr g_lastObject; - ExecutionEngineListener* g_listener; + JITListener* g_listener; static const size_t c_versionStampLength = 32; llvm::StringRef getLibVersionStamp() @@ -38,7 +38,7 @@ namespace } } -ObjectCache* Cache::init(CacheMode _mode, ExecutionEngineListener* _listener) +ObjectCache* Cache::init(CacheMode _mode, JITListener* _listener) { g_mode = _mode; g_listener = _listener; diff --git a/evmjit/libevmjit/Cache.h b/evmjit/libevmjit/Cache.h index 61635b8a1..2f152c9f8 100644 --- a/evmjit/libevmjit/Cache.h +++ b/evmjit/libevmjit/Cache.h @@ -14,7 +14,7 @@ namespace dev { namespace evmjit { -class ExecutionEngineListener; +class JITListener; enum class CacheMode { @@ -43,7 +43,7 @@ public: class Cache { public: - static ObjectCache* init(CacheMode _mode, ExecutionEngineListener* _listener); + static ObjectCache* init(CacheMode _mode, JITListener* _listener); static std::unique_ptr getObject(std::string const& id); /// Clears cache storage diff --git a/evmjit/libevmjit/ExecStats.h b/evmjit/libevmjit/ExecStats.h index 3ea77733b..4a5ae00e1 100644 --- a/evmjit/libevmjit/ExecStats.h +++ b/evmjit/libevmjit/ExecStats.h @@ -5,14 +5,39 @@ #include #include -#include "ExecutionEngine.h" - namespace dev { namespace evmjit { -class ExecStats : public ExecutionEngineListener +enum class ExecState +{ + Started, + CacheLoad, + CacheWrite, + Compilation, + Optimization, + CodeGen, + Execution, + Return, + Finished +}; + +class JITListener +{ +public: + JITListener() = default; + JITListener(JITListener const&) = delete; + JITListener& operator=(JITListener) = delete; + virtual ~JITListener() {} + + virtual void executionStarted() {} + virtual void executionEnded() {} + + virtual void stateChanged(ExecState) {} +}; + +class ExecStats : public JITListener { public: using clock = std::chrono::high_resolution_clock; diff --git a/evmjit/libevmjit/ExecutionEngine.h b/evmjit/libevmjit/ExecutionEngine.h deleted file mode 100644 index 04c3218b0..000000000 --- a/evmjit/libevmjit/ExecutionEngine.h +++ /dev/null @@ -1,46 +0,0 @@ -#pragma once - -#include "evmjit/DataTypes.h" - -namespace dev -{ -namespace evmjit -{ -class ExecutionContext; -enum class ReturnCode; - -enum class ExecState -{ - Started, - CacheLoad, - CacheWrite, - Compilation, - Optimization, - CodeGen, - Execution, - Return, - Finished -}; - -class ExecutionEngineListener -{ -public: - ExecutionEngineListener() = default; - ExecutionEngineListener(ExecutionEngineListener const&) = delete; - ExecutionEngineListener& operator=(ExecutionEngineListener) = delete; - virtual ~ExecutionEngineListener() {} - - virtual void executionStarted() {} - virtual void executionEnded() {} - - virtual void stateChanged(ExecState) {} -}; - -class ExecutionEngine -{ -public: - EXPORT static ReturnCode run(ExecutionContext& _context); -}; - -} -} diff --git a/evmjit/libevmjit/ExecutionEngine.cpp b/evmjit/libevmjit/JIT.cpp similarity index 94% rename from evmjit/libevmjit/ExecutionEngine.cpp rename to evmjit/libevmjit/JIT.cpp index 79ae1315c..6fc44e5eb 100644 --- a/evmjit/libevmjit/ExecutionEngine.cpp +++ b/evmjit/libevmjit/JIT.cpp @@ -1,17 +1,8 @@ -#include "ExecutionEngine.h" - -#include -#include -#include -#include -#include -#include +#include "evmjit/JIT.h" #include "preprocessor/llvm_includes_start.h" #include #include -#include -#include #include #include #include @@ -20,7 +11,6 @@ #include "preprocessor/llvm_includes_end.h" #include "ExecutionContext.h" -#include "evmjit/JIT.h" #include "Compiler.h" #include "Optimizer.h" #include "Cache.h" @@ -161,7 +151,7 @@ bool JIT::isCodeReady(h256 _codeHash) return JITImpl::instance().codeMap.count(_codeHash) != 0; } -ReturnCode ExecutionEngine::run(ExecutionContext& _context) +ReturnCode JIT::exec(ExecutionContext& _context) { static auto s_ee = init(); diff --git a/evmjit/libevmjit/interface.cpp b/evmjit/libevmjit/interface.cpp index 4aef5995f..34491e772 100644 --- a/evmjit/libevmjit/interface.cpp +++ b/evmjit/libevmjit/interface.cpp @@ -1,4 +1,4 @@ -#include "ExecutionEngine.h" +#include "evmjit/JIT.h" #include "ExecutionContext.h" extern "C" @@ -23,7 +23,7 @@ EXPORT int evmjit_run(ExecutionContext* _context) noexcept { try { - auto returnCode = ExecutionEngine::run(*_context); + auto returnCode = JIT::exec(*_context); return static_cast(returnCode); } catch(...)