diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/shared-constants.h | 1 | ||||
-rw-r--r-- | src/wasm2asm.h | 2 |
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; |