mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
Rename sload, sstore & sha3 Env functions
This commit is contained in:
parent
408fda8498
commit
6f84f3d1ad
6 changed files with 19 additions and 19 deletions
|
|
@ -18,14 +18,14 @@ extern "C"
|
|||
using jit::i256;
|
||||
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 value = _env->store(index); // Interface uses native endianness
|
||||
*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 value = llvm2eth(*_value);
|
||||
|
|
@ -104,7 +104,7 @@ extern "C"
|
|||
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});
|
||||
*o_hash = hash;
|
||||
|
|
|
|||
|
|
@ -70,6 +70,6 @@ bytesConstRef VM::go(ExtVMFace& _ext, OnOpFunc const&, uint64_t)
|
|||
namespace
|
||||
{
|
||||
// MSVS linker ignores export symbols in Env.cpp if nothing point at least one of them
|
||||
extern "C" void ext_store();
|
||||
void linkerWorkaround() { ext_store(); }
|
||||
extern "C" void env_sload();
|
||||
void linkerWorkaround() { env_sload(); }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -577,7 +577,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
|
|||
case Instruction::SLOAD:
|
||||
{
|
||||
auto index = stack.pop();
|
||||
auto value = _ext.store(index);
|
||||
auto value = _ext.sload(index);
|
||||
stack.push(value);
|
||||
break;
|
||||
}
|
||||
|
|
@ -587,7 +587,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
|
|||
auto index = stack.pop();
|
||||
auto value = stack.pop();
|
||||
_gasMeter.countSStore(_ext, index, value);
|
||||
_ext.setStore(index, value);
|
||||
_ext.sstore(index, value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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};
|
||||
|
||||
m_store = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_store", module);
|
||||
m_setStore = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "ext_setStore", module);
|
||||
m_sload = llvm::Function::Create(llvm::FunctionType::get(Type::Void, {argsTypes, 3}, false), Linkage::ExternalLinkage, "env_sload", 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_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);
|
||||
|
|
@ -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);
|
||||
|
||||
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.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]);
|
||||
}
|
||||
|
||||
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(_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)
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ class Ext : public RuntimeHelper
|
|||
public:
|
||||
Ext(RuntimeManager& _runtimeManager, Memory& _memoryMan);
|
||||
|
||||
llvm::Value* store(llvm::Value* _index);
|
||||
void setStore(llvm::Value* _index, llvm::Value* _value);
|
||||
llvm::Value* sload(llvm::Value* _index);
|
||||
void sstore(llvm::Value* _index, llvm::Value* _value);
|
||||
|
||||
llvm::Value* balance(llvm::Value* _address);
|
||||
void suicide(llvm::Value* _address);
|
||||
|
|
@ -44,8 +44,8 @@ private:
|
|||
llvm::Value* m_arg7;
|
||||
llvm::Value* m_arg8;
|
||||
llvm::Value* m_data = nullptr;
|
||||
llvm::Function* m_store;
|
||||
llvm::Function* m_setStore;
|
||||
llvm::Function* m_sload;
|
||||
llvm::Function* m_sstore;
|
||||
llvm::Function* m_calldataload;
|
||||
llvm::Function* m_balance;
|
||||
llvm::Function* m_suicide;
|
||||
|
|
|
|||
|
|
@ -148,7 +148,7 @@ void GasMeter::countSStore(Ext& _ext, llvm::Value* _index, llvm::Value* _newValu
|
|||
{
|
||||
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 newValueIsZero = m_builder.CreateICmpEQ(_newValue, Constant::get(0), "newValueIsZero");
|
||||
auto oldValueIsntZero = m_builder.CreateICmpNE(oldValue, Constant::get(0), "oldValueIsntZero");
|
||||
|
|
|
|||
Loading…
Reference in a new issue