From 5a040582f54d9c6f0a0eda6678efd66c8c577b23 Mon Sep 17 00:00:00 2001 From: Ashley Nelson Date: Sat, 1 Feb 2025 00:36:44 +0000 Subject: [PATCH 1/4] subi32 --- src/interpreter/interpreter.cpp | 3 +++ test/gtest/interpreter.cpp | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/interpreter/interpreter.cpp b/src/interpreter/interpreter.cpp index d60030b69ba..42a83f73786 100644 --- a/src/interpreter/interpreter.cpp +++ b/src/interpreter/interpreter.cpp @@ -94,6 +94,9 @@ struct ExpressionInterpreter : OverriddenVisitor { if (curr->op == AddInt32) { push(lhs.add(rhs)); return {}; + } else if (curr->op == SubInt32) { + push(lhs.sub(rhs)); + return {}; } WASM_UNREACHABLE("TODO"); } diff --git a/test/gtest/interpreter.cpp b/test/gtest/interpreter.cpp index 1e6f6cdd139..b78d82790b4 100644 --- a/test/gtest/interpreter.cpp +++ b/test/gtest/interpreter.cpp @@ -25,7 +25,7 @@ using namespace wasm; -TEST(InterpreterTest, Add) { +TEST(InterpreterTest, Addi32) { Module wasm; IRBuilder builder(wasm); @@ -41,3 +41,20 @@ TEST(InterpreterTest, Add) { EXPECT_EQ(results, expected); } + +TEST(InterpreterTest, Subi32) { + 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(SubInt32).getErr()); + + auto expr = builder.build(); + ASSERT_FALSE(expr.getErr()); + + auto results = Interpreter{}.run(*expr); + std::vector expected{Literal(uint32_t(-1))}; + + EXPECT_EQ(results, expected); +} From a761890c06f7c4963943665bfa90d80b72c8a47c Mon Sep 17 00:00:00 2001 From: Ashley Nelson Date: Sat, 1 Feb 2025 00:43:45 +0000 Subject: [PATCH 2/4] cap --- test/gtest/interpreter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/gtest/interpreter.cpp b/test/gtest/interpreter.cpp index b78d82790b4..399d46912e9 100644 --- a/test/gtest/interpreter.cpp +++ b/test/gtest/interpreter.cpp @@ -25,7 +25,7 @@ using namespace wasm; -TEST(InterpreterTest, Addi32) { +TEST(InterpreterTest, AddI32) { Module wasm; IRBuilder builder(wasm); @@ -42,7 +42,7 @@ TEST(InterpreterTest, Addi32) { EXPECT_EQ(results, expected); } -TEST(InterpreterTest, Subi32) { +TEST(InterpreterTest, SubI32) { Module wasm; IRBuilder builder(wasm); From 381559404dc5c409c4a060843e27ff41f25c3e16 Mon Sep 17 00:00:00 2001 From: Ashley Nelson Date: Fri, 31 Jan 2025 17:12:50 -0800 Subject: [PATCH 3/4] [Interpreter] i32.mul (#7260) Building on top of #7227, i32.mul is implemented and tested. --- src/interpreter/interpreter.cpp | 3 +++ test/gtest/interpreter.cpp | 17 +++++++++++++++++ 2 files changed, 20 insertions(+) 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); +} From 512a082fb9865b5722831e8d7dcf51c53ffb4803 Mon Sep 17 00:00:00 2001 From: Ashley Nelson Date: Fri, 31 Jan 2025 17:16:26 -0800 Subject: [PATCH 4/4] Revert "[Interpreter] i32.mul" (#7261) Reverts WebAssembly/binaryen#7260 --- src/interpreter/interpreter.cpp | 3 --- test/gtest/interpreter.cpp | 17 ----------------- 2 files changed, 20 deletions(-) diff --git a/src/interpreter/interpreter.cpp b/src/interpreter/interpreter.cpp index 07f69509b3f..42a83f73786 100644 --- a/src/interpreter/interpreter.cpp +++ b/src/interpreter/interpreter.cpp @@ -97,9 +97,6 @@ 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 418d61530a7..399d46912e9 100644 --- a/test/gtest/interpreter.cpp +++ b/test/gtest/interpreter.cpp @@ -58,20 +58,3 @@ 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); -}