From a0d0f85dd04ac0531f27913523700fada1d7df63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Wed, 3 Dec 2014 17:18:25 +0100 Subject: [PATCH] JIT VM updated --- libevmjit-cpp/VM.cpp | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/libevmjit-cpp/VM.cpp b/libevmjit-cpp/VM.cpp index b968008aa..d61b23bd7 100644 --- a/libevmjit-cpp/VM.cpp +++ b/libevmjit-cpp/VM.cpp @@ -4,9 +4,8 @@ #include #include -#include "ExecutionEngine.h" -#include "Compiler.h" -#include "Type.h" +#include "../libevmjit/ExecutionEngine.h" +#include "../libevmjit/Compiler.h" namespace dev { @@ -20,8 +19,30 @@ bytesConstRef VM::go(ExtVMFace& _ext, OnOpFunc const&, uint64_t) Compiler::Options defaultOptions; auto module = Compiler(defaultOptions).compile(_ext.code); + RuntimeData data = {}; + +#define set(INDEX, VALUE) data.elems[INDEX] = eth2llvm(VALUE) + set(RuntimeData::Gas, m_gas); + set(RuntimeData::Address, fromAddress(_ext.myAddress)); + set(RuntimeData::Caller, fromAddress(_ext.caller)); + set(RuntimeData::Origin, fromAddress(_ext.origin)); + set(RuntimeData::CallValue, _ext.value); + set(RuntimeData::CallDataSize, _ext.data.size()); + set(RuntimeData::GasPrice, _ext.gasPrice); + set(RuntimeData::PrevHash, _ext.previousBlock.hash); + set(RuntimeData::CoinBase, fromAddress(_ext.currentBlock.coinbaseAddress)); + set(RuntimeData::TimeStamp, _ext.currentBlock.timestamp); + set(RuntimeData::Number, _ext.currentBlock.number); + set(RuntimeData::Difficulty, _ext.currentBlock.difficulty); + set(RuntimeData::GasLimit, _ext.currentBlock.gasLimit); + set(RuntimeData::CodeSize, _ext.code.size()); // TODO: Use constant + data.callData = _ext.data.data(); + data.code = _ext.code.data(); +#undef set + ExecutionEngine engine; - auto exitCode = engine.run(std::move(module), m_gas, false, _ext); + auto env = reinterpret_cast(&_ext); + auto exitCode = engine.run(std::move(module), &data, env); switch (static_cast(exitCode)) {