diff --git a/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp b/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp index eb08889d251008947138ecd101666906655be9f8..758d2ddddde90f523d3e1139ca1bafd04b8f1850 100644 --- a/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp +++ b/Userland/Libraries/LibWasm/AbstractMachine/Interpreter.cpp @@ -900,6 +900,11 @@ void BytecodeInterpreter::interpret(Configuration& configuration, InstructionPoi case Instructions::table_grow.value(): case Instructions::table_size.value(): case Instructions::table_fill.value(): + case Instructions::i32_extend8_s.value(): + case Instructions::i32_extend16_s.value(): + case Instructions::i64_extend8_s.value(): + case Instructions::i64_extend16_s.value(): + case Instructions::i64_extend32_s.value(): default: unimplemented:; dbgln("Instruction '{}' not implemented", instruction_name(instruction.opcode())); diff --git a/Userland/Libraries/LibWasm/Opcode.h b/Userland/Libraries/LibWasm/Opcode.h index 97d6ae6184b54f9cb4a98eacc0523073ef0376ac..b2b6ec3a2a1ba8bed58031f67fb10f2974a2a411 100644 --- a/Userland/Libraries/LibWasm/Opcode.h +++ b/Userland/Libraries/LibWasm/Opcode.h @@ -187,6 +187,11 @@ static constexpr OpCode unreachable = 0x00, i64_reinterpret_f64 = 0xbd, f32_reinterpret_i32 = 0xbe, f64_reinterpret_i64 = 0xbf, + i32_extend8_s = 0xc0, + i32_extend16_s = 0xc1, + i64_extend8_s = 0xc2, + i64_extend16_s = 0xc3, + i64_extend32_s = 0xc4, ref_null = 0xd0, ref_is_null = 0xd1, ref_func = 0xd2; diff --git a/Userland/Libraries/LibWasm/Parser/Parser.cpp b/Userland/Libraries/LibWasm/Parser/Parser.cpp index 43c9a9826390512add07cb14ef2d614c7edcd0fc..797e9367dcf039f2458f5c0def83f8d8302f6b7f 100644 --- a/Userland/Libraries/LibWasm/Parser/Parser.cpp +++ b/Userland/Libraries/LibWasm/Parser/Parser.cpp @@ -631,6 +631,11 @@ ParseResult> Instruction::parse(InputStream& stream, Instruc case Instructions::i64_reinterpret_f64.value(): case Instructions::f32_reinterpret_i32.value(): case Instructions::f64_reinterpret_i64.value(): + case Instructions::i32_extend8_s.value(): + case Instructions::i32_extend16_s.value(): + case Instructions::i64_extend8_s.value(): + case Instructions::i64_extend16_s.value(): + case Instructions::i64_extend32_s.value(): return Vector { Instruction { opcode } }; case 0xfc: { // These are multibyte instructions. diff --git a/Userland/Libraries/LibWasm/Printer/Printer.cpp b/Userland/Libraries/LibWasm/Printer/Printer.cpp index 0fb8ff44121d93bd3c9856dd942bee4460f687a7..e720d61fbd59787603784117d1a50f39264694b5 100644 --- a/Userland/Libraries/LibWasm/Printer/Printer.cpp +++ b/Userland/Libraries/LibWasm/Printer/Printer.cpp @@ -798,6 +798,11 @@ HashMap Wasm::Names::instruction_names { { Instructions::i64_reinterpret_f64, "i64.reinterpret.f64" }, { Instructions::f32_reinterpret_i32, "f32.reinterpret.i32" }, { Instructions::f64_reinterpret_i64, "f64.reinterpret.i64" }, + { Instructions::i32_extend8_s, "i32.extend8_s" }, + { Instructions::i32_extend16_s, "i32.extend16_s" }, + { Instructions::i64_extend8_s, "i64.extend8_s" }, + { Instructions::i64_extend16_s, "i64.extend16_s" }, + { Instructions::i64_extend32_s, "i64.extend32_s" }, { Instructions::ref_null, "ref.null" }, { Instructions::ref_is_null, "ref.is.null" }, { Instructions::ref_func, "ref.func" },