Browse Source

Code migration.

cl-refactor
Paweł Bylica 10 years ago
parent
commit
bcc0cfd055
  1. 4
      evmjit/include/evmjit/JIT.h
  2. 3
      evmjit/libevmjit-cpp/JitVM.cpp
  3. 1
      evmjit/libevmjit-cpp/JitVM.h
  4. 3
      evmjit/libevmjit/CMakeLists.txt
  5. 6
      evmjit/libevmjit/Cache.cpp
  6. 4
      evmjit/libevmjit/Cache.h
  7. 31
      evmjit/libevmjit/ExecStats.h
  8. 46
      evmjit/libevmjit/ExecutionEngine.h
  9. 14
      evmjit/libevmjit/JIT.cpp
  10. 4
      evmjit/libevmjit/interface.cpp

4
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);
};
}

3
evmjit/libevmjit-cpp/JitVM.cpp

@ -7,6 +7,7 @@
#include <libdevcrypto/SHA3.h>
#include <libevm/VM.h>
#include <libevm/VMFactory.h>
#include <evmjit/JIT.h>
#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<evmjit::Env*>(&_ext));
auto exitCode = evmjit::ExecutionEngine::run(m_context);
auto exitCode = evmjit::JIT::exec(m_context);
switch (exitCode)
{
case evmjit::ReturnCode::Suicide:

1
evmjit/libevmjit-cpp/JitVM.h

@ -2,7 +2,6 @@
#include <libevm/VMFace.h>
#include <evmjit/libevmjit/ExecutionContext.h>
#include <evmjit/libevmjit/ExecutionEngine.h>
namespace dev
{

3
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

6
evmjit/libevmjit/Cache.cpp

@ -10,7 +10,7 @@
#include <llvm/Support/raw_os_ostream.h>
#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<llvm::MemoryBuffer> 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;

4
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<llvm::Module> getObject(std::string const& id);
/// Clears cache storage

31
evmjit/libevmjit/ExecStats.h

@ -5,14 +5,39 @@
#include <string>
#include <chrono>
#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;

46
evmjit/libevmjit/ExecutionEngine.h

@ -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);
};
}
}

14
evmjit/libevmjit/ExecutionEngine.cpp → evmjit/libevmjit/JIT.cpp

@ -1,17 +1,8 @@
#include "ExecutionEngine.h"
#include <array>
#include <mutex>
#include <iostream>
#include <unordered_map>
#include <cstdlib>
#include <cstring>
#include "evmjit/JIT.h"
#include "preprocessor/llvm_includes_start.h"
#include <llvm/IR/Module.h>
#include <llvm/ADT/Triple.h>
#include <llvm/ExecutionEngine/ExecutionEngine.h>
#include <llvm/ExecutionEngine/SectionMemoryManager.h>
#include <llvm/ExecutionEngine/MCJIT.h>
#include <llvm/Support/TargetSelect.h>
#include <llvm/Support/Host.h>
@ -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();

4
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<int>(returnCode);
}
catch(...)

Loading…
Cancel
Save