Skip to content

Commit

Permalink
Reorder opcode according to byte order (#285)
Browse files Browse the repository at this point in the history
  • Loading branch information
koushiro authored May 19, 2024
1 parent 0c114ed commit a376f95
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 28 deletions.
33 changes: 25 additions & 8 deletions interpreter/src/etable.rs
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ impl<S, H, Tr> Etable<S, H, Tr> {
table[Opcode::MULMOD.as_usize()] = eval_mulmod as _;
table[Opcode::EXP.as_usize()] = eval_exp as _;
table[Opcode::SIGNEXTEND.as_usize()] = eval_signextend as _;

table[Opcode::LT.as_usize()] = eval_lt as _;
table[Opcode::GT.as_usize()] = eval_gt as _;
table[Opcode::SLT.as_usize()] = eval_slt as _;
Expand All @@ -157,22 +158,27 @@ impl<S, H, Tr> Etable<S, H, Tr> {
table[Opcode::XOR.as_usize()] = eval_xor as _;
table[Opcode::NOT.as_usize()] = eval_not as _;
table[Opcode::BYTE.as_usize()] = eval_byte as _;

table[Opcode::SHL.as_usize()] = eval_shl as _;
table[Opcode::SHR.as_usize()] = eval_shr as _;
table[Opcode::SAR.as_usize()] = eval_sar as _;
table[Opcode::CODESIZE.as_usize()] = eval_codesize as _;
table[Opcode::CODECOPY.as_usize()] = eval_codecopy as _;

table[Opcode::CALLDATALOAD.as_usize()] = eval_calldataload as _;
table[Opcode::CALLDATASIZE.as_usize()] = eval_calldatasize as _;
table[Opcode::CALLDATACOPY.as_usize()] = eval_calldatacopy as _;
table[Opcode::CODESIZE.as_usize()] = eval_codesize as _;
table[Opcode::CODECOPY.as_usize()] = eval_codecopy as _;

table[Opcode::POP.as_usize()] = eval_pop as _;
table[Opcode::MLOAD.as_usize()] = eval_mload as _;
table[Opcode::MSTORE.as_usize()] = eval_mstore as _;
table[Opcode::MSTORE8.as_usize()] = eval_mstore8 as _;

table[Opcode::JUMP.as_usize()] = eval_jump as _;
table[Opcode::JUMPI.as_usize()] = eval_jumpi as _;
table[Opcode::PC.as_usize()] = eval_pc as _;
table[Opcode::MSIZE.as_usize()] = eval_msize as _;

table[Opcode::JUMPDEST.as_usize()] = eval_jumpdest as _;

table[Opcode::PUSH0.as_usize()] = eval_push0 as _;
Expand Down Expand Up @@ -244,7 +250,9 @@ impl<S, H, Tr> Etable<S, H, Tr> {
table[Opcode::SWAP16.as_usize()] = eval_swap16 as _;

table[Opcode::RETURN.as_usize()] = eval_return as _;

table[Opcode::REVERT.as_usize()] = eval_revert as _;

table[Opcode::INVALID.as_usize()] = eval_invalid as _;

Self(table, PhantomData)
Expand All @@ -261,43 +269,52 @@ where
let mut table = Self::core();

table.0[Opcode::SHA3.as_usize()] = eval_sha3 as _;

table.0[Opcode::ADDRESS.as_usize()] = eval_address as _;
table.0[Opcode::BALANCE.as_usize()] = eval_balance as _;
table.0[Opcode::SELFBALANCE.as_usize()] = eval_selfbalance as _;
table.0[Opcode::ORIGIN.as_usize()] = eval_origin as _;
table.0[Opcode::CALLER.as_usize()] = eval_caller as _;
table.0[Opcode::CALLVALUE.as_usize()] = eval_callvalue as _;

table.0[Opcode::GASPRICE.as_usize()] = eval_gasprice as _;
table.0[Opcode::EXTCODESIZE.as_usize()] = eval_extcodesize as _;
table.0[Opcode::EXTCODEHASH.as_usize()] = eval_extcodehash as _;
table.0[Opcode::EXTCODECOPY.as_usize()] = eval_extcodecopy as _;
table.0[Opcode::RETURNDATASIZE.as_usize()] = eval_returndatasize as _;
table.0[Opcode::RETURNDATACOPY.as_usize()] = eval_returndatacopy as _;
table.0[Opcode::EXTCODEHASH.as_usize()] = eval_extcodehash as _;

table.0[Opcode::BLOCKHASH.as_usize()] = eval_blockhash as _;
table.0[Opcode::COINBASE.as_usize()] = eval_coinbase as _;
table.0[Opcode::TIMESTAMP.as_usize()] = eval_timestamp as _;
table.0[Opcode::NUMBER.as_usize()] = eval_number as _;
table.0[Opcode::DIFFICULTY.as_usize()] = eval_difficulty as _;
table.0[Opcode::GASLIMIT.as_usize()] = eval_gaslimit as _;
table.0[Opcode::CHAINID.as_usize()] = eval_chainid as _;
table.0[Opcode::SELFBALANCE.as_usize()] = eval_selfbalance as _;
table.0[Opcode::BASEFEE.as_usize()] = eval_basefee as _;

table.0[Opcode::SLOAD.as_usize()] = eval_sload as _;
table.0[Opcode::SSTORE.as_usize()] = eval_sstore as _;

table.0[Opcode::GAS.as_usize()] = eval_gas as _;

table.0[Opcode::LOG0.as_usize()] = eval_log0 as _;
table.0[Opcode::LOG1.as_usize()] = eval_log1 as _;
table.0[Opcode::LOG2.as_usize()] = eval_log2 as _;
table.0[Opcode::LOG3.as_usize()] = eval_log3 as _;
table.0[Opcode::LOG4.as_usize()] = eval_log4 as _;
table.0[Opcode::SUICIDE.as_usize()] = eval_suicide as _;
table.0[Opcode::CHAINID.as_usize()] = eval_chainid as _;
table.0[Opcode::BASEFEE.as_usize()] = eval_basefee as _;

table.0[Opcode::CREATE.as_usize()] = eval_call_create_trap as _;
table.0[Opcode::CREATE2.as_usize()] = eval_call_create_trap as _;
table.0[Opcode::CALL.as_usize()] = eval_call_create_trap as _;
table.0[Opcode::CALLCODE.as_usize()] = eval_call_create_trap as _;

table.0[Opcode::DELEGATECALL.as_usize()] = eval_call_create_trap as _;
table.0[Opcode::CREATE2.as_usize()] = eval_call_create_trap as _;

table.0[Opcode::STATICCALL.as_usize()] = eval_call_create_trap as _;

table.0[Opcode::SUICIDE.as_usize()] = eval_suicide as _;

table
}
}
Expand Down
53 changes: 33 additions & 20 deletions interpreter/src/opcode.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,13 @@ impl Opcode {
/// `BYTE`
pub const BYTE: Opcode = Opcode(0x1a);

/// `SHL`
pub const SHL: Opcode = Opcode(0x1b);
/// `SHR`
pub const SHR: Opcode = Opcode(0x1c);
/// `SAR`
pub const SAR: Opcode = Opcode(0x1d);

/// `CALLDATALOAD`
pub const CALLDATALOAD: Opcode = Opcode(0x35);
/// `CALLDATASIZE`
Expand All @@ -68,13 +75,6 @@ impl Opcode {
/// `CODECOPY`
pub const CODECOPY: Opcode = Opcode(0x39);

/// `SHL`
pub const SHL: Opcode = Opcode(0x1b);
/// `SHR`
pub const SHR: Opcode = Opcode(0x1c);
/// `SAR`
pub const SAR: Opcode = Opcode(0x1d);

/// `POP`
pub const POP: Opcode = Opcode(0x50);
/// `MLOAD`
Expand All @@ -83,6 +83,7 @@ impl Opcode {
pub const MSTORE: Opcode = Opcode(0x52);
/// `MSTORE8`
pub const MSTORE8: Opcode = Opcode(0x53);

/// `JUMP`
pub const JUMP: Opcode = Opcode(0x56);
/// `JUMPI`
Expand All @@ -91,6 +92,7 @@ impl Opcode {
pub const PC: Opcode = Opcode(0x58);
/// `MSIZE`
pub const MSIZE: Opcode = Opcode(0x59);

/// `JUMPDEST`
pub const JUMPDEST: Opcode = Opcode(0x5b);

Expand Down Expand Up @@ -165,48 +167,48 @@ impl Opcode {
pub const SWAP15: Opcode = Opcode(0x9e);
pub const SWAP16: Opcode = Opcode(0x9f);

/// See [EIP-3541](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3541.md)
pub const EOFMAGIC: Opcode = Opcode(0xef);

/// `RETURN`
pub const RETURN: Opcode = Opcode(0xf3);

/// `REVERT`
pub const REVERT: Opcode = Opcode(0xfd);

/// `INVALID`
pub const INVALID: Opcode = Opcode(0xfe);

/// See [EIP-3541](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-3541.md)
pub const EOFMAGIC: Opcode = Opcode(0xef);
}

// External opcodes
impl Opcode {
/// `SHA3`
pub const SHA3: Opcode = Opcode(0x20);

/// `ADDRESS`
pub const ADDRESS: Opcode = Opcode(0x30);
/// `BALANCE`
pub const BALANCE: Opcode = Opcode(0x31);
/// `SELFBALANCE`
pub const SELFBALANCE: Opcode = Opcode(0x47);
/// `BASEFEE`
pub const BASEFEE: Opcode = Opcode(0x48);
/// `ORIGIN`
pub const ORIGIN: Opcode = Opcode(0x32);
/// `CALLER`
pub const CALLER: Opcode = Opcode(0x33);
/// `CALLVALUE`
pub const CALLVALUE: Opcode = Opcode(0x34);

/// `GASPRICE`
pub const GASPRICE: Opcode = Opcode(0x3a);
/// `EXTCODESIZE`
pub const EXTCODESIZE: Opcode = Opcode(0x3b);
/// `EXTCODECOPY`
pub const EXTCODECOPY: Opcode = Opcode(0x3c);
/// `EXTCODEHASH`
pub const EXTCODEHASH: Opcode = Opcode(0x3f);
/// `RETURNDATASIZE`
pub const RETURNDATASIZE: Opcode = Opcode(0x3d);
/// `RETURNDATACOPY`
pub const RETURNDATACOPY: Opcode = Opcode(0x3e);
/// `EXTCODEHASH`
pub const EXTCODEHASH: Opcode = Opcode(0x3f);

/// `BLOCKHASH`
pub const BLOCKHASH: Opcode = Opcode(0x40);
/// `COINBASE`
Expand All @@ -219,34 +221,45 @@ impl Opcode {
pub const DIFFICULTY: Opcode = Opcode(0x44);
/// `GASLIMIT`
pub const GASLIMIT: Opcode = Opcode(0x45);
/// `CHAINID`
pub const CHAINID: Opcode = Opcode(0x46);
/// `SELFBALANCE`
pub const SELFBALANCE: Opcode = Opcode(0x47);
/// `BASEFEE`
pub const BASEFEE: Opcode = Opcode(0x48);

/// `SLOAD`
pub const SLOAD: Opcode = Opcode(0x54);
/// `SSTORE`
pub const SSTORE: Opcode = Opcode(0x55);

/// `GAS`
pub const GAS: Opcode = Opcode(0x5a);

/// `LOGn`
pub const LOG0: Opcode = Opcode(0xa0);
pub const LOG1: Opcode = Opcode(0xa1);
pub const LOG2: Opcode = Opcode(0xa2);
pub const LOG3: Opcode = Opcode(0xa3);
pub const LOG4: Opcode = Opcode(0xa4);

/// `CREATE`
pub const CREATE: Opcode = Opcode(0xf0);
/// `CREATE2`
pub const CREATE2: Opcode = Opcode(0xf5);
/// `CALL`
pub const CALL: Opcode = Opcode(0xf1);
/// `CALLCODE`
pub const CALLCODE: Opcode = Opcode(0xf2);

/// `DELEGATECALL`
pub const DELEGATECALL: Opcode = Opcode(0xf4);
/// `CREATE2`
pub const CREATE2: Opcode = Opcode(0xf5);

/// `STATICCALL`
pub const STATICCALL: Opcode = Opcode(0xfa);

/// `SUICIDE`
pub const SUICIDE: Opcode = Opcode(0xff);
/// `CHAINID`
pub const CHAINID: Opcode = Opcode(0x46);
}

impl Opcode {
Expand Down

0 comments on commit a376f95

Please sign in to comment.