mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-21 20:26:41 +00:00
Using call helper
This commit is contained in:
parent
2493ef5f9e
commit
4684c6f363
3 changed files with 9 additions and 14 deletions
|
|
@ -32,10 +32,10 @@ protected:
|
||||||
llvm::IRBuilder<>& getBuilder() { return m_builder; }
|
llvm::IRBuilder<>& getBuilder() { return m_builder; }
|
||||||
|
|
||||||
template<typename ..._Args>
|
template<typename ..._Args>
|
||||||
llvm::CallInst* call(llvm::Function* _func, _Args*... _args)
|
llvm::CallInst* createCall(llvm::Function* _func, _Args*... _args)
|
||||||
{
|
{
|
||||||
llvm::Value* args[] = {_args...};
|
llvm::Value* args[] = {_args...};
|
||||||
return m_builder.CreateCall(_func, args);
|
return getBuilder().CreateCall(_func, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
friend class RuntimeHelper;
|
friend class RuntimeHelper;
|
||||||
|
|
|
||||||
|
|
@ -109,8 +109,7 @@ llvm::Value* Ext::create(llvm::Value* _endowment, llvm::Value* _initOff, llvm::V
|
||||||
m_builder.CreateStore(_endowment, m_args[0]);
|
m_builder.CreateStore(_endowment, m_args[0]);
|
||||||
m_builder.CreateStore(_initOff, m_arg2);
|
m_builder.CreateStore(_initOff, m_arg2);
|
||||||
m_builder.CreateStore(_initSize, m_arg3);
|
m_builder.CreateStore(_initSize, m_arg3);
|
||||||
llvm::Value* args[] = {getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_arg3, m_args[1]};
|
createCall(m_create, getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_arg3, m_args[1]);
|
||||||
m_builder.CreateCall(m_create, args);
|
|
||||||
llvm::Value* address = m_builder.CreateLoad(m_args[1]);
|
llvm::Value* address = m_builder.CreateLoad(m_args[1]);
|
||||||
address = Endianness::toNative(m_builder, address);
|
address = Endianness::toNative(m_builder, address);
|
||||||
return address;
|
return address;
|
||||||
|
|
@ -128,9 +127,7 @@ llvm::Value* Ext::call(llvm::Value*& _gas, llvm::Value* _receiveAddress, llvm::V
|
||||||
m_builder.CreateStore(_outSize, m_arg7);
|
m_builder.CreateStore(_outSize, m_arg7);
|
||||||
auto codeAddress = Endianness::toBE(m_builder, _codeAddress);
|
auto codeAddress = Endianness::toBE(m_builder, _codeAddress);
|
||||||
m_builder.CreateStore(codeAddress, m_arg8);
|
m_builder.CreateStore(codeAddress, m_arg8);
|
||||||
|
createCall(m_call, getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8, m_args[1]);
|
||||||
llvm::Value* args[] = {getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_arg3, m_arg4, m_arg5, m_arg6, m_arg7, m_arg8, m_args[1]};
|
|
||||||
m_builder.CreateCall(m_call, args);
|
|
||||||
_gas = m_builder.CreateLoad(m_args[0]); // Return gas
|
_gas = m_builder.CreateLoad(m_args[0]); // Return gas
|
||||||
return m_builder.CreateLoad(m_args[1]);
|
return m_builder.CreateLoad(m_args[1]);
|
||||||
}
|
}
|
||||||
|
|
@ -139,8 +136,7 @@ llvm::Value* Ext::sha3(llvm::Value* _inOff, llvm::Value* _inSize)
|
||||||
{
|
{
|
||||||
m_builder.CreateStore(_inOff, m_args[0]);
|
m_builder.CreateStore(_inOff, m_args[0]);
|
||||||
m_builder.CreateStore(_inSize, m_arg2);
|
m_builder.CreateStore(_inSize, m_arg2);
|
||||||
llvm::Value* args[] = {getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_args[1]};
|
createCall(m_sha3, getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_args[1]);
|
||||||
m_builder.CreateCall(m_sha3, args);
|
|
||||||
llvm::Value* hash = m_builder.CreateLoad(m_args[1]);
|
llvm::Value* hash = m_builder.CreateLoad(m_args[1]);
|
||||||
hash = Endianness::toNative(m_builder, hash);
|
hash = Endianness::toNative(m_builder, hash);
|
||||||
return hash;
|
return hash;
|
||||||
|
|
@ -148,10 +144,10 @@ llvm::Value* Ext::sha3(llvm::Value* _inOff, llvm::Value* _inSize)
|
||||||
|
|
||||||
llvm::Value* Ext::exp(llvm::Value* _left, llvm::Value* _right)
|
llvm::Value* Ext::exp(llvm::Value* _left, llvm::Value* _right)
|
||||||
{
|
{
|
||||||
|
// TODO: Move ext to Arith256
|
||||||
m_builder.CreateStore(_left, m_args[0]);
|
m_builder.CreateStore(_left, m_args[0]);
|
||||||
m_builder.CreateStore(_right, m_arg2);
|
m_builder.CreateStore(_right, m_arg2);
|
||||||
llvm::Value* args[] = {getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_args[1]};
|
createCall(m_exp, getRuntimeManager().getRuntimePtr(), m_args[0], m_arg2, m_args[1]);
|
||||||
m_builder.CreateCall(m_exp, args);
|
|
||||||
return m_builder.CreateLoad(m_args[1]);
|
return m_builder.CreateLoad(m_args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -166,8 +162,7 @@ llvm::Value* Ext::codesizeAt(llvm::Value* _addr)
|
||||||
{
|
{
|
||||||
auto addr = Endianness::toBE(m_builder, _addr);
|
auto addr = Endianness::toBE(m_builder, _addr);
|
||||||
m_builder.CreateStore(addr, m_args[0]);
|
m_builder.CreateStore(addr, m_args[0]);
|
||||||
llvm::Value* args[] = {getRuntimeManager().getRuntimePtr(), m_args[0], m_args[1]};
|
createCall(m_codesizeAt, getRuntimeManager().getRuntimePtr(), m_args[0], m_args[1]);
|
||||||
m_builder.CreateCall(m_codesizeAt, args);
|
|
||||||
return m_builder.CreateLoad(m_args[1]);
|
return m_builder.CreateLoad(m_args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ void GasMeter::countSStore(Ext& _ext, llvm::Value* _index, llvm::Value* _newValu
|
||||||
auto isDel = m_builder.CreateAnd(oldValueIsntZero, newValueIsZero, "isDel");
|
auto isDel = m_builder.CreateAnd(oldValueIsntZero, newValueIsZero, "isDel");
|
||||||
auto cost = m_builder.CreateSelect(isAdd, Constant::get(2 * sstoreCost), Constant::get(sstoreCost), "cost");
|
auto cost = m_builder.CreateSelect(isAdd, Constant::get(2 * sstoreCost), Constant::get(sstoreCost), "cost");
|
||||||
cost = m_builder.CreateSelect(isDel, Constant::get(0), cost, "cost");
|
cost = m_builder.CreateSelect(isDel, Constant::get(0), cost, "cost");
|
||||||
call(m_gasCheckFunc, cost);
|
createCall(m_gasCheckFunc, cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GasMeter::giveBack(llvm::Value* _gas)
|
void GasMeter::giveBack(llvm::Value* _gas)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue