diff --git a/src/interpreter/interpreter.cpp b/src/interpreter/interpreter.cpp index 42a83f73786..07f69509b3f 100644 --- a/src/interpreter/interpreter.cpp +++ b/src/interpreter/interpreter.cpp @@ -97,6 +97,9 @@ struct ExpressionInterpreter : OverriddenVisitor { } else if (curr->op == SubInt32) { push(lhs.sub(rhs)); return {}; + } else if (curr->op == MulInt32) { + push(lhs.mul(rhs)); + return {}; } WASM_UNREACHABLE("TODO"); } diff --git a/test/gtest/interpreter.cpp b/test/gtest/interpreter.cpp index 399d46912e9..418d61530a7 100644 --- a/test/gtest/interpreter.cpp +++ b/test/gtest/interpreter.cpp @@ -58,3 +58,20 @@ TEST(InterpreterTest, SubI32) { EXPECT_EQ(results, expected); } + +TEST(InterpreterTest, MulI32) { + Module wasm; + IRBuilder builder(wasm); + + ASSERT_FALSE(builder.makeConst(Literal(uint32_t(1))).getErr()); + ASSERT_FALSE(builder.makeConst(Literal(uint32_t(2))).getErr()); + ASSERT_FALSE(builder.makeBinary(MulInt32).getErr()); + + auto expr = builder.build(); + ASSERT_FALSE(expr.getErr()); + + auto results = Interpreter{}.run(*expr); + std::vector expected{Literal(uint32_t(2))}; + + EXPECT_EQ(results, expected); +}