summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/shared-constants.h1
-rw-r--r--src/wasm2asm.h2
2 files changed, 2 insertions, 1 deletions
diff --git a/src/shared-constants.h b/src/shared-constants.h
index b052f54df..a67475303 100644
--- a/src/shared-constants.h
+++ b/src/shared-constants.h
@@ -56,6 +56,7 @@ cashew::IString GLOBAL("global"),
BUFFER("buffer"),
ENV("env"),
FAKE_RETURN("fake_return_waka123"),
+ MATH_IMUL("Math_imul"),
MATH_CLZ32("Math_clz32"),
MATH_CTZ32("Math_ctz32"),
MATH_POPCNT32("Math_popcnt32"),
diff --git a/src/wasm2asm.h b/src/wasm2asm.h
index 4fab55f86..0dec0722c 100644
--- a/src/wasm2asm.h
+++ b/src/wasm2asm.h
@@ -850,7 +850,7 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) {
switch (curr->op) {
case Add: ret = ValueBuilder::makeBinary(left, PLUS, right); break;
case Sub: ret = ValueBuilder::makeBinary(left, MINUS, right); break;
- case Mul: ret = ValueBuilder::makeBinary(left, MUL, right); break;
+ case Mul: return ValueBuilder::makeCall(MATH_IMUL, left, right); // TODO: when one operand is a small int, emit a multiply
case DivS: ret = ValueBuilder::makeBinary(left, DIV, right); break;
case DivU: ret = ValueBuilder::makeBinary(left, DIV, right); break;
case RemS: ret = ValueBuilder::makeBinary(left, MOD, right); break;