From 68d9076424f63317312138bb08284f8ad765db97 Mon Sep 17 00:00:00 2001 From: navelbuffle Date: Sat, 4 Jan 2025 15:12:22 +0300 Subject: [PATCH] return to: all opcode implementations inline --- onchain/src/Push3Interpreter.sol | 92 +++++++++++++++----------------- 1 file changed, 44 insertions(+), 48 deletions(-) diff --git a/onchain/src/Push3Interpreter.sol b/onchain/src/Push3Interpreter.sol index ffa3cfe..f6d0415 100644 --- a/onchain/src/Push3Interpreter.sol +++ b/onchain/src/Push3Interpreter.sol @@ -342,10 +342,52 @@ contract Push3Interpreter { // do nothing } else if (uint8(op) <= OPCODE_INTEGER_OFFSET) { - (intTop, intStack) = execIntOpCode(intTop, intStack, op); + // INTEGER OPCODES + if (op == OpCode.INTEGER_PLUS) { + // pop top 2 => sum + if (intTop >= 2) { + int256 a = intStack[intTop - 1]; + int256 b = intStack[intTop - 2]; + intTop -= 2; + intStack[intTop] = b + a; + intTop++; + } + } + else if (op == OpCode.INTEGER_MINUS) { + // pop top 2 => minus + if (intTop >= 2) { + int256 a = intStack[intTop - 1]; + int256 b = intStack[intTop - 2]; + intTop -= 2; + intStack[intTop] = b - a; + intTop++; + } + } + else if (op == OpCode.INTEGER_MULT) { + // pop top 2 => minus + if (intTop >= 2) { + int256 a = intStack[intTop - 1]; + int256 b = intStack[intTop - 2]; + intTop -= 2; + intStack[intTop] = b * a; + intTop++; + } + } + else if (op == OpCode.INTEGER_DUP) { + if (intTop >= 1) { + int256 a = intStack[intTop - 1]; + intStack[intTop] = a; + intTop++; + } + } + else if (op == OpCode.INTEGER_POP) { + if (intTop >= 1) { + intTop -= 1; + } + } } else if (uint8(op) <= OPCODE_BOOL_OFFSET) { - (boolTop, boolStack) = execBoolOpCode(boolTop, boolStack, op); + // BOOL OPCODES } } else if (tag == CodeTag.INT_LITERAL) { @@ -392,50 +434,4 @@ contract Push3Interpreter { finalIntStack[i] = intStack[i]; } } - - function execIntOpCode(uint256 intTop, int256[] memory intStack, OpCode op) internal returns (uint256, int256[] memory) { - if (op == OpCode.INTEGER_PLUS) { - // pop top 2 => sum - if (intTop >= 2) { - int256 a = intStack[intTop - 1]; - int256 b = intStack[intTop - 2]; - intTop -= 2; - intStack[intTop] = b + a; - intTop++; - } - } - else if (op == OpCode.INTEGER_MINUS) { - // pop top 2 => minus - if (intTop >= 2) { - int256 a = intStack[intTop - 1]; - int256 b = intStack[intTop - 2]; - intTop -= 2; - intStack[intTop] = b - a; - intTop++; - } - } - else if (op == OpCode.INTEGER_MULT) { - // pop top 2 => minus - if (intTop >= 2) { - int256 a = intStack[intTop - 1]; - int256 b = intStack[intTop - 2]; - intTop -= 2; - intStack[intTop] = b * a; - intTop++; - } - } - else if (op == OpCode.INTEGER_DUP) { - if (intTop >= 1) { - int256 a = intStack[intTop - 1]; - intStack[intTop] = a; - intTop++; - } - } - else if (op == OpCode.INTEGER_POP) { - if (intTop >= 1) { - intTop -= 1; - } - } - return (intTop, intStack); - } }