diff --git a/libyul/backends/wasm/BinaryTransform.cpp b/libyul/backends/wasm/BinaryTransform.cpp index 8abd2b080..ad2628695 100644 --- a/libyul/backends/wasm/BinaryTransform.cpp +++ b/libyul/backends/wasm/BinaryTransform.cpp @@ -311,7 +311,11 @@ bytes BinaryTransform::operator()(BuiltinCall const& _call) bytes args = visit(_call.arguments); if (_call.functionName == "unreachable") - return toBytes(Opcode::Unreachable); + return toBytes(Opcode::Unreachable); + else if (_call.functionName == "nop") + return toBytes(Opcode::Nop); + else if (_call.functionName == "drop") + return toBytes(Opcode::Drop); else { yulAssert(builtins.count(_call.functionName), "Builtin " + _call.functionName + " not found"); diff --git a/libyul/backends/wasm/WasmDialect.cpp b/libyul/backends/wasm/WasmDialect.cpp index 52fbafe3a..947326306 100644 --- a/libyul/backends/wasm/WasmDialect.cpp +++ b/libyul/backends/wasm/WasmDialect.cpp @@ -94,6 +94,7 @@ WasmDialect::WasmDialect() // We could introduce "i32.drop". addFunction("drop", {i64}, {}); + addFunction("nop", {}, {}); addFunction("unreachable", {}, {}, false); m_functions["unreachable"_yulstring].sideEffects.invalidatesStorage = false; m_functions["unreachable"_yulstring].sideEffects.invalidatesMemory = false; diff --git a/test/tools/yulInterpreter/EwasmBuiltinInterpreter.cpp b/test/tools/yulInterpreter/EwasmBuiltinInterpreter.cpp index d105c505d..e4c190e9c 100644 --- a/test/tools/yulInterpreter/EwasmBuiltinInterpreter.cpp +++ b/test/tools/yulInterpreter/EwasmBuiltinInterpreter.cpp @@ -93,7 +93,7 @@ u256 EwasmBuiltinInterpreter::evalBuiltin(YulString _fun, vector const& _a ); return 0; } - else if (_fun == "drop"_yulstring) + else if (_fun == "drop"_yulstring || _fun == "nop"_yulstring) return {}; else if (_fun == "i32.wrap_i64"_yulstring) return arg.at(0) & uint32_t(-1);