Browse Source

Rename sload, sstore & sha3 Env functions

cl-refactor
Paweł Bylica 10 years ago
parent
commit
6f84f3d1ad
  1. 6
      libevmjit-cpp/Env.cpp
  2. 4
      libevmjit-cpp/VM.cpp
  3. 4
      libevmjit/Compiler.cpp
  4. 14
      libevmjit/Ext.cpp
  5. 8
      libevmjit/Ext.h
  6. 2
      libevmjit/GasMeter.cpp

6
libevmjit-cpp/Env.cpp

@ -18,14 +18,14 @@ extern "C"
using jit::i256; using jit::i256;
using jit::eth2llvm; using jit::eth2llvm;
EXPORT void ext_store(ExtVMFace* _env, i256* _index, i256* o_value) EXPORT void env_sload(ExtVMFace* _env, i256* _index, i256* o_value)
{ {
auto index = llvm2eth(*_index); auto index = llvm2eth(*_index);
auto value = _env->store(index); // Interface uses native endianness auto value = _env->store(index); // Interface uses native endianness
*o_value = eth2llvm(value); *o_value = eth2llvm(value);
} }
EXPORT void ext_setStore(ExtVMFace* _env, i256* _index, i256* _value) EXPORT void env_sstore(ExtVMFace* _env, i256* _index, i256* _value)
{ {
auto index = llvm2eth(*_index); auto index = llvm2eth(*_index);
auto value = llvm2eth(*_value); auto value = llvm2eth(*_value);
@ -104,7 +104,7 @@ extern "C"
o_ret->a = ret ? 1 : 0; o_ret->a = ret ? 1 : 0;
} }
EXPORT void ext_sha3(byte* _begin, uint64_t _size, h256* o_hash) EXPORT void env_sha3(byte* _begin, uint64_t _size, h256* o_hash)
{ {
auto hash = sha3({_begin, _size}); auto hash = sha3({_begin, _size});
*o_hash = hash; *o_hash = hash;

4
libevmjit-cpp/VM.cpp

@ -70,6 +70,6 @@ bytesConstRef VM::go(ExtVMFace& _ext, OnOpFunc const&, uint64_t)
namespace namespace
{ {
// MSVS linker ignores export symbols in Env.cpp if nothing point at least one of them // MSVS linker ignores export symbols in Env.cpp if nothing point at least one of them
extern "C" void ext_store(); extern "C" void env_sload();
void linkerWorkaround() { ext_store(); } void linkerWorkaround() { env_sload(); }
} }

4
libevmjit/Compiler.cpp

@ -577,7 +577,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
case Instruction::SLOAD: case Instruction::SLOAD:
{ {
auto index = stack.pop(); auto index = stack.pop();
auto value = _ext.store(index); auto value = _ext.sload(index);
stack.push(value); stack.push(value);
break; break;
} }
@ -587,7 +587,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
auto index = stack.pop(); auto index = stack.pop();
auto value = stack.pop(); auto value = stack.pop();
_gasMeter.countSStore(_ext, index, value); _gasMeter.countSStore(_ext, index, value);
_ext.setStore(index, value); _ext.sstore(index, value);
break; break;
} }

14
libevmjit/Ext.cpp

@ -43,8 +43,8 @@ Ext::Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan):
llvm::Type* argsTypes[] = {Type::EnvPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr}; llvm::Type* argsTypes[] = {Type::EnvPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr, Type::WordPtr};
m_store = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_store", module); m_sload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "env_sload", module);
m_setStore = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_setStore", module); m_sstore = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "env_sstore", module);
m_calldataload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_calldataload", module); m_calldataload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_calldataload", module);
m_balance = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_balance", module); m_balance = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_balance", module);
m_suicide = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_suicide", module); m_suicide = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 2}, false), Linkage::ExternalLinkage, "ext_suicide", module);
@ -60,21 +60,21 @@ Ext::Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan):
m_log4 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 7}, false), Linkage::ExternalLinkage, "ext_log4", module); m_log4 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 7}, false), Linkage::ExternalLinkage, "ext_log4", module);
llvm::Type* sha3ArgsTypes[] = {Type::BytePtr, Type::Size, Type::WordPtr}; llvm::Type* sha3ArgsTypes[] = {Type::BytePtr, Type::Size, Type::WordPtr};
m_sha3 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, sha3ArgsTypes, false), Linkage::ExternalLinkage, "ext_sha3", module); m_sha3 = llvm::Function::Create(llvm::FunctionType::get(Type::Void, sha3ArgsTypes, false), Linkage::ExternalLinkage, "env_sha3", module);
} }
llvm::Value* Ext::store(llvm::Value* _index) llvm::Value* Ext::sload(llvm::Value* _index)
{ {
m_builder.CreateStore(_index, m_args[0]); m_builder.CreateStore(_index, m_args[0]);
m_builder.CreateCall3(m_store, getRuntimeManager().getEnv(), m_args[0], m_args[1]); // Uses native endianness m_builder.CreateCall3(m_sload, getRuntimeManager().getEnv(), m_args[0], m_args[1]); // Uses native endianness
return m_builder.CreateLoad(m_args[1]); return m_builder.CreateLoad(m_args[1]);
} }
void Ext::setStore(llvm::Value* _index, llvm::Value* _value) void Ext::sstore(llvm::Value* _index, llvm::Value* _value)
{ {
m_builder.CreateStore(_index, m_args[0]); m_builder.CreateStore(_index, m_args[0]);
m_builder.CreateStore(_value, m_args[1]); m_builder.CreateStore(_value, m_args[1]);
m_builder.CreateCall3(m_setStore, getRuntimeManager().getEnv(), m_args[0], m_args[1]); // Uses native endianness m_builder.CreateCall3(m_sstore, getRuntimeManager().getEnv(), m_args[0], m_args[1]); // Uses native endianness
} }
llvm::Value* Ext::calldataload(llvm::Value* _index) llvm::Value* Ext::calldataload(llvm::Value* _index)

8
libevmjit/Ext.h

@ -17,8 +17,8 @@ class Ext : public RuntimeHelper
public: public:
Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan); Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan);
llvm::Value* store(llvm::Value* _index); llvm::Value* sload(llvm::Value* _index);
void setStore(llvm::Value* _index, llvm::Value* _value); void sstore(llvm::Value* _index, llvm::Value* _value);
llvm::Value* balance(llvm::Value* _address); llvm::Value* balance(llvm::Value* _address);
void suicide(llvm::Value* _address); void suicide(llvm::Value* _address);
@ -44,8 +44,8 @@ private:
llvm::Value* m_arg7; llvm::Value* m_arg7;
llvm::Value* m_arg8; llvm::Value* m_arg8;
llvm::Value* m_data = nullptr; llvm::Value* m_data = nullptr;
llvm::Function* m_store; llvm::Function* m_sload;
llvm::Function* m_setStore; llvm::Function* m_sstore;
llvm::Function* m_calldataload; llvm::Function* m_calldataload;
llvm::Function* m_balance; llvm::Function* m_balance;
llvm::Function* m_suicide; llvm::Function* m_suicide;

2
libevmjit/GasMeter.cpp

@ -148,7 +148,7 @@ void GasMeter::countSStore(Ext& _ext, llvm::Value* _index, llvm::Value* _newValu
{ {
assert(!m_checkCall); // Everything should've been commited before assert(!m_checkCall); // Everything should've been commited before
auto oldValue = _ext.store(_index); auto oldValue = _ext.sload(_index);
auto oldValueIsZero = m_builder.CreateICmpEQ(oldValue, Constant::get(0), "oldValueIsZero"); auto oldValueIsZero = m_builder.CreateICmpEQ(oldValue, Constant::get(0), "oldValueIsZero");
auto newValueIsZero = m_builder.CreateICmpEQ(_newValue, Constant::get(0), "newValueIsZero"); auto newValueIsZero = m_builder.CreateICmpEQ(_newValue, Constant::get(0), "newValueIsZero");
auto oldValueIsntZero = m_builder.CreateICmpNE(oldValue, Constant::get(0), "oldValueIsntZero"); auto oldValueIsntZero = m_builder.CreateICmpNE(oldValue, Constant::get(0), "oldValueIsntZero");

Loading…
Cancel
Save