summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-07 16:39:09 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-12-07 16:39:09 -0800
commit4f542922b1b42536be31f6c1987b976f39a921b7 (patch)
treeb2c48888354820cd3af5b0a33f30233a63deb197
parent9cf484e68a8c200f997f001ce111c92bc3b970a7 (diff)
downloadbinaryen-4f542922b1b42536be31f6c1987b976f39a921b7.tar.gz
binaryen-4f542922b1b42536be31f6c1987b976f39a921b7.tar.bz2
binaryen-4f542922b1b42536be31f6c1987b976f39a921b7.zip
fix double mul
-rw-r--r--src/wasm2asm.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h
index 74d905252..d0c79097f 100644
--- a/src/wasm2asm.h
+++ b/src/wasm2asm.h
@@ -933,7 +933,13 @@ 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: return ValueBuilder::makeCall(MATH_IMUL, left, right); // TODO: when one operand is a small int, emit a multiply
+ case Mul: {
+ if (curr->type == i32) {
+ return ValueBuilder::makeCall(MATH_IMUL, left, right); // TODO: when one operand is a small int, emit a multiply
+ } else {
+ return ValueBuilder::makeBinary(left, MINUS, right); break;
+ }
+ }
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;