mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-22 04:36:42 +00:00
Remove PREVHASH instruction
This commit is contained in:
parent
024639bef6
commit
681adc12af
5 changed files with 4 additions and 6 deletions
|
|
@ -20,7 +20,6 @@ bytesConstRef JitVM::go(ExtVMFace& _ext, OnOpFunc const&, uint64_t)
|
||||||
m_data.set(RuntimeData::CallValue, _ext.value);
|
m_data.set(RuntimeData::CallValue, _ext.value);
|
||||||
m_data.set(RuntimeData::CallDataSize, _ext.data.size());
|
m_data.set(RuntimeData::CallDataSize, _ext.data.size());
|
||||||
m_data.set(RuntimeData::GasPrice, _ext.gasPrice);
|
m_data.set(RuntimeData::GasPrice, _ext.gasPrice);
|
||||||
m_data.set(RuntimeData::PrevHash, _ext.previousBlock.hash);
|
|
||||||
m_data.set(RuntimeData::CoinBase, fromAddress(_ext.currentBlock.coinbaseAddress));
|
m_data.set(RuntimeData::CoinBase, fromAddress(_ext.currentBlock.coinbaseAddress));
|
||||||
m_data.set(RuntimeData::TimeStamp, _ext.currentBlock.timestamp);
|
m_data.set(RuntimeData::TimeStamp, _ext.currentBlock.timestamp);
|
||||||
m_data.set(RuntimeData::Number, _ext.currentBlock.number);
|
m_data.set(RuntimeData::Number, _ext.currentBlock.number);
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,8 @@ Compiler::Compiler(Options const& _options):
|
||||||
|
|
||||||
void Compiler::createBasicBlocks(bytes const& _bytecode)
|
void Compiler::createBasicBlocks(bytes const& _bytecode)
|
||||||
{
|
{
|
||||||
|
// FIXME: Simplify this algorithm. All can be done in one pass
|
||||||
|
|
||||||
std::set<ProgramCounter> splitPoints; // Sorted collections of instruction indices where basic blocks start/end
|
std::set<ProgramCounter> splitPoints; // Sorted collections of instruction indices where basic blocks start/end
|
||||||
|
|
||||||
std::vector<ProgramCounter> indirectJumpTargets;
|
std::vector<ProgramCounter> indirectJumpTargets;
|
||||||
|
|
@ -632,7 +634,6 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
|
||||||
case Instruction::CALLDATASIZE:
|
case Instruction::CALLDATASIZE:
|
||||||
case Instruction::CODESIZE:
|
case Instruction::CODESIZE:
|
||||||
case Instruction::GASPRICE:
|
case Instruction::GASPRICE:
|
||||||
case Instruction::PREVHASH:
|
|
||||||
case Instruction::COINBASE:
|
case Instruction::COINBASE:
|
||||||
case Instruction::TIMESTAMP:
|
case Instruction::TIMESTAMP:
|
||||||
case Instruction::NUMBER:
|
case Instruction::NUMBER:
|
||||||
|
|
@ -801,6 +802,7 @@ void Compiler::compileBasicBlock(BasicBlock& _basicBlock, bytes const& _bytecode
|
||||||
|
|
||||||
default: // Invalid instruction - runtime exception
|
default: // Invalid instruction - runtime exception
|
||||||
{
|
{
|
||||||
|
// TODO: Replace with return statement
|
||||||
_runtimeManager.raiseException(ReturnCode::BadInstruction);
|
_runtimeManager.raiseException(ReturnCode::BadInstruction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ enum class Instruction: uint8_t
|
||||||
EXTCODESIZE, ///< get external code size (from another contract)
|
EXTCODESIZE, ///< get external code size (from another contract)
|
||||||
EXTCODECOPY, ///< copy external code (from another contract)
|
EXTCODECOPY, ///< copy external code (from another contract)
|
||||||
|
|
||||||
PREVHASH = 0x40, ///< get hash of most recent complete block
|
BLOCKHASH = 0x40, ///< get hash of most recent complete block
|
||||||
COINBASE, ///< get the block's coinbase address
|
COINBASE, ///< get the block's coinbase address
|
||||||
TIMESTAMP, ///< get the block's timestamp
|
TIMESTAMP, ///< get the block's timestamp
|
||||||
NUMBER, ///< get the block's number
|
NUMBER, ///< get the block's number
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ struct RuntimeData
|
||||||
CallValue,
|
CallValue,
|
||||||
CallDataSize,
|
CallDataSize,
|
||||||
GasPrice,
|
GasPrice,
|
||||||
PrevHash,
|
|
||||||
CoinBase,
|
CoinBase,
|
||||||
TimeStamp,
|
TimeStamp,
|
||||||
Number,
|
Number,
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,6 @@ llvm::Twine getName(RuntimeData::Index _index)
|
||||||
case RuntimeData::CallValue: return "callvalue";
|
case RuntimeData::CallValue: return "callvalue";
|
||||||
case RuntimeData::CallDataSize: return "calldatasize";
|
case RuntimeData::CallDataSize: return "calldatasize";
|
||||||
case RuntimeData::GasPrice: return "gasprice";
|
case RuntimeData::GasPrice: return "gasprice";
|
||||||
case RuntimeData::PrevHash: return "prevhash";
|
|
||||||
case RuntimeData::CoinBase: return "coinbase";
|
case RuntimeData::CoinBase: return "coinbase";
|
||||||
case RuntimeData::TimeStamp: return "timestamp";
|
case RuntimeData::TimeStamp: return "timestamp";
|
||||||
case RuntimeData::Number: return "number";
|
case RuntimeData::Number: return "number";
|
||||||
|
|
@ -154,7 +153,6 @@ llvm::Value* RuntimeManager::get(Instruction _inst)
|
||||||
case Instruction::CALLVALUE: return get(RuntimeData::CallValue);
|
case Instruction::CALLVALUE: return get(RuntimeData::CallValue);
|
||||||
case Instruction::CALLDATASIZE: return get(RuntimeData::CallDataSize);
|
case Instruction::CALLDATASIZE: return get(RuntimeData::CallDataSize);
|
||||||
case Instruction::GASPRICE: return get(RuntimeData::GasPrice);
|
case Instruction::GASPRICE: return get(RuntimeData::GasPrice);
|
||||||
case Instruction::PREVHASH: return get(RuntimeData::PrevHash);
|
|
||||||
case Instruction::COINBASE: return get(RuntimeData::CoinBase);
|
case Instruction::COINBASE: return get(RuntimeData::CoinBase);
|
||||||
case Instruction::TIMESTAMP: return get(RuntimeData::TimeStamp);
|
case Instruction::TIMESTAMP: return get(RuntimeData::TimeStamp);
|
||||||
case Instruction::NUMBER: return get(RuntimeData::Number);
|
case Instruction::NUMBER: return get(RuntimeData::Number);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue