diff --git a/system-contracts/contracts/EvmEmulator.yul b/system-contracts/contracts/EvmEmulator.yul index 3c784aa42..fa1ecab2b 100644 --- a/system-contracts/contracts/EvmEmulator.yul +++ b/system-contracts/contracts/EvmEmulator.yul @@ -86,8 +86,12 @@ object "EvmEmulator" { addr := 0x0000000000000000000000000000000000008009 } + function PANIC_RETURNDATASIZE_OFFSET() -> offset { + offset := mul(23, 32) + } + function ORIGIN_CACHE_OFFSET() -> offset { - offset := mul(24, 32) + offset := add(PANIC_RETURNDATASIZE_OFFSET(), 32) } function GASPRICE_CACHE_OFFSET() -> offset { @@ -203,19 +207,15 @@ object "EvmEmulator" { revert(0, 0) } - function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas - mstore(0, 0) - revert(0, 32) - } - - function revertWithGas(evmGasLeft) { - mstore(0, evmGasLeft) - revert(0, 32) + function $llvm_NoInline_llvm$_invalid() { // revert consuming all EVM gas + panic() } function panic() { // revert consuming all EVM gas + // we return empty 32 bytes encoding 0 gas left if caller is EVM, and 0 bytes if caller isn't EVM + // it is done without if-else block so this function will be inlined mstore(0, 0) - revert(0, 32) + revert(0, mload(PANIC_RETURNDATASIZE_OFFSET())) } function cached(cacheIndex, value) -> _value { @@ -648,16 +648,16 @@ object "EvmEmulator" { } function consumeEvmFrame() -> passGas, isStatic, callerEVM { - // function consumeEvmFrame() external returns (uint256 passGas, uint256 auxDataRes) + // function consumeEvmFrame(_caller) external returns (uint256 passGas, uint256 auxDataRes) // non-standard selector 0x04 - mstore(0, 0x0400000000000000000000000000000000000000000000000000000000000000) - mstore(1, caller()) + mstore(0, or(0x0400000000000000000000000000000000000000000000000000000000000000, caller())) - performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 33) + performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 32) let _returndatasize := returndatasize() if _returndatasize { callerEVM := true + mstore(PANIC_RETURNDATASIZE_OFFSET(), 32) // we should return 0 gas after panics returndatacopy(0, 0, 32) passGas := mload(0) @@ -2579,7 +2579,7 @@ object "EvmEmulator" { } - if eq(isCallerEVM, 1) { + if isCallerEVM { offset := sub(offset, 32) size := add(size, 32) @@ -2590,345 +2590,344 @@ object "EvmEmulator" { revert(offset, size) } case 0xFE { // OP_INVALID - evmGasLeft := 0 - revertWithGas(evmGasLeft) + $llvm_NoInline_llvm$_invalid() } // We explicitly add unused opcodes to optimize the jump table by compiler. case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } default { - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } } @@ -3009,8 +3008,12 @@ object "EvmEmulator" { addr := 0x0000000000000000000000000000000000008009 } + function PANIC_RETURNDATASIZE_OFFSET() -> offset { + offset := mul(23, 32) + } + function ORIGIN_CACHE_OFFSET() -> offset { - offset := mul(24, 32) + offset := add(PANIC_RETURNDATASIZE_OFFSET(), 32) } function GASPRICE_CACHE_OFFSET() -> offset { @@ -3126,19 +3129,15 @@ object "EvmEmulator" { revert(0, 0) } - function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas - mstore(0, 0) - revert(0, 32) - } - - function revertWithGas(evmGasLeft) { - mstore(0, evmGasLeft) - revert(0, 32) + function $llvm_NoInline_llvm$_invalid() { // revert consuming all EVM gas + panic() } function panic() { // revert consuming all EVM gas + // we return empty 32 bytes encoding 0 gas left if caller is EVM, and 0 bytes if caller isn't EVM + // it is done without if-else block so this function will be inlined mstore(0, 0) - revert(0, 32) + revert(0, mload(PANIC_RETURNDATASIZE_OFFSET())) } function cached(cacheIndex, value) -> _value { @@ -3571,16 +3570,16 @@ object "EvmEmulator" { } function consumeEvmFrame() -> passGas, isStatic, callerEVM { - // function consumeEvmFrame() external returns (uint256 passGas, uint256 auxDataRes) + // function consumeEvmFrame(_caller) external returns (uint256 passGas, uint256 auxDataRes) // non-standard selector 0x04 - mstore(0, 0x0400000000000000000000000000000000000000000000000000000000000000) - mstore(1, caller()) + mstore(0, or(0x0400000000000000000000000000000000000000000000000000000000000000, caller())) - performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 33) + performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 32) let _returndatasize := returndatasize() if _returndatasize { callerEVM := true + mstore(PANIC_RETURNDATASIZE_OFFSET(), 32) // we should return 0 gas after panics returndatacopy(0, 0, 32) passGas := mload(0) @@ -4236,7 +4235,7 @@ object "EvmEmulator" { } } - function $llvm_NoInline_llvm$_simulate( + function simulate( isCallerEVM, evmGasLeft, isStatic, @@ -5490,7 +5489,7 @@ object "EvmEmulator" { } - if eq(isCallerEVM, 1) { + if isCallerEVM { offset := sub(offset, 32) size := add(size, 32) @@ -5501,345 +5500,344 @@ object "EvmEmulator" { revert(offset, size) } case 0xFE { // OP_INVALID - evmGasLeft := 0 - revertWithGas(evmGasLeft) + $llvm_NoInline_llvm$_invalid() } // We explicitly add unused opcodes to optimize the jump table by compiler. case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } default { - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } } @@ -5859,7 +5857,7 @@ object "EvmEmulator" { } } - if eq(isCallerEVM, 1) { + if isCallerEVM { // Includes gas returnOffset := sub(returnOffset, 32) checkOverflow(returnLen, 32) @@ -5884,7 +5882,7 @@ object "EvmEmulator" { // segment of memory. getDeployedBytecode() - let returnOffset, returnLen := $llvm_NoInline_llvm$_simulate(isCallerEVM, evmGasLeft, isStatic) + let returnOffset, returnLen := simulate(isCallerEVM, evmGasLeft, isStatic) return(returnOffset, returnLen) } } diff --git a/system-contracts/contracts/EvmGasManager.yul b/system-contracts/contracts/EvmGasManager.yul index 56fb18b69..4e99eee56 100644 --- a/system-contracts/contracts/EvmGasManager.yul +++ b/system-contracts/contracts/EvmGasManager.yul @@ -221,7 +221,7 @@ object "EvmGasManager" { // We do not have active frame. This means that the EVM contract was called from the EraVM contract. // mark caller and txorigin as warm - let _msgsender := calldataload(1) + let _msgsender := and(ADDRESS_MASK(), _calldata0Slot) let _origin := origin() warmAccount(_msgsender) if iszero(eq(_msgsender, _origin)) { diff --git a/system-contracts/evm-emulator/EvmEmulator.template.yul b/system-contracts/evm-emulator/EvmEmulator.template.yul index ac3988999..c7083e839 100644 --- a/system-contracts/evm-emulator/EvmEmulator.template.yul +++ b/system-contracts/evm-emulator/EvmEmulator.template.yul @@ -123,7 +123,7 @@ object "EvmEmulator" { - function $llvm_NoInline_llvm$_simulate( + function simulate( isCallerEVM, evmGasLeft, isStatic, @@ -136,7 +136,7 @@ object "EvmEmulator" { - if eq(isCallerEVM, 1) { + if isCallerEVM { // Includes gas returnOffset := sub(returnOffset, 32) checkOverflow(returnLen, 32) @@ -161,7 +161,7 @@ object "EvmEmulator" { // segment of memory. getDeployedBytecode() - let returnOffset, returnLen := $llvm_NoInline_llvm$_simulate(isCallerEVM, evmGasLeft, isStatic) + let returnOffset, returnLen := simulate(isCallerEVM, evmGasLeft, isStatic) return(returnOffset, returnLen) } } diff --git a/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul b/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul index f388086be..8cbe2096c 100644 --- a/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorFunctions.template.yul @@ -26,8 +26,12 @@ function MSG_VALUE_SYSTEM_CONTRACT() -> addr { addr := 0x0000000000000000000000000000000000008009 } +function PANIC_RETURNDATASIZE_OFFSET() -> offset { + offset := mul(23, 32) +} + function ORIGIN_CACHE_OFFSET() -> offset { - offset := mul(24, 32) + offset := add(PANIC_RETURNDATASIZE_OFFSET(), 32) } function GASPRICE_CACHE_OFFSET() -> offset { @@ -143,19 +147,15 @@ function abortEvmEnvironment() { revert(0, 0) } -function $llvm_NoInline_llvm$_panic() { // revert consuming all EVM gas - mstore(0, 0) - revert(0, 32) -} - -function revertWithGas(evmGasLeft) { - mstore(0, evmGasLeft) - revert(0, 32) +function $llvm_NoInline_llvm$_invalid() { // revert consuming all EVM gas + panic() } function panic() { // revert consuming all EVM gas + // we return empty 32 bytes encoding 0 gas left if caller is EVM, and 0 bytes if caller isn't EVM + // it is done without if-else block so this function will be inlined mstore(0, 0) - revert(0, 32) + revert(0, mload(PANIC_RETURNDATASIZE_OFFSET())) } function cached(cacheIndex, value) -> _value { @@ -588,16 +588,16 @@ function pushEvmFrame(passGas, isStatic) { } function consumeEvmFrame() -> passGas, isStatic, callerEVM { - // function consumeEvmFrame() external returns (uint256 passGas, uint256 auxDataRes) + // function consumeEvmFrame(_caller) external returns (uint256 passGas, uint256 auxDataRes) // non-standard selector 0x04 - mstore(0, 0x0400000000000000000000000000000000000000000000000000000000000000) - mstore(1, caller()) + mstore(0, or(0x0400000000000000000000000000000000000000000000000000000000000000, caller())) - performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 33) + performSystemCall(EVM_GAS_MANAGER_CONTRACT(), 32) let _returndatasize := returndatasize() if _returndatasize { callerEVM := true + mstore(PANIC_RETURNDATASIZE_OFFSET(), 32) // we should return 0 gas after panics returndatacopy(0, 0, 32) passGas := mload(0) diff --git a/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul b/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul index be56ed95b..aaf26e57b 100644 --- a/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorLoop.template.yul @@ -1243,7 +1243,7 @@ for { } true { } { } - if eq(isCallerEVM, 1) { + if isCallerEVM { offset := sub(offset, 32) size := add(size, 32) @@ -1254,12 +1254,11 @@ for { } true { } { revert(offset, size) } case 0xFE { // OP_INVALID - evmGasLeft := 0 - revertWithGas(evmGasLeft) + $llvm_NoInline_llvm$_invalid() } // We explicitly add unused opcodes to optimize the jump table by compiler. default { - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } } diff --git a/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul b/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul index a59e4eb58..a9f121f82 100644 --- a/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul +++ b/system-contracts/evm-emulator/EvmEmulatorLoopUnusedOpcodes.template.yul @@ -1,333 +1,333 @@ case 0x0C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x0F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x1F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x21 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x22 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x23 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x24 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x25 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x26 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x27 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x28 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x29 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x2F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x49 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4A { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4B { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4C { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4D { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4E { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0x4F { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xA9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xAF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xB9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xBF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xC9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xCF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xD9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDD { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xDF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE0 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE1 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE3 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE4 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE5 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xE9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEA { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xED { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEE { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xEF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF2 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF6 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF7 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF8 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xF9 { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFB { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFC { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } case 0xFF { // Unused opcode - $llvm_NoInline_llvm$_panic() + $llvm_NoInline_llvm$_invalid() } \ No newline at end of file