summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-07 16:42:59 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-12-07 16:42:59 -0800
commit246bf84adcba84abc96cc6910ca4b5a0898d6c46 (patch)
tree18eabb38ce6f076d5c7303a81702623d9f149a0d /src
parent4f542922b1b42536be31f6c1987b976f39a921b7 (diff)
downloadbinaryen-246bf84adcba84abc96cc6910ca4b5a0898d6c46.tar.gz
binaryen-246bf84adcba84abc96cc6910ca4b5a0898d6c46.tar.bz2
binaryen-246bf84adcba84abc96cc6910ca4b5a0898d6c46.zip
fix sign-aware div/mod
Diffstat (limited to 'src')
-rw-r--r--src/wasm2asm.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h
index d0c79097f..1898da415 100644
--- a/src/wasm2asm.h
+++ b/src/wasm2asm.h
@@ -940,10 +940,10 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) {
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;
- case RemU: ret = ValueBuilder::makeBinary(left, MOD, right); break;
+ case DivS: ret = ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), DIV, makeSigning(right, ASM_SIGNED)); break;
+ case DivU: ret = ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), DIV, makeSigning(right, ASM_UNSIGNED)); break;
+ case RemS: ret = ValueBuilder::makeBinary(makeSigning(left, ASM_SIGNED), MOD, makeSigning(right, ASM_SIGNED)); break;
+ case RemU: ret = ValueBuilder::makeBinary(makeSigning(left, ASM_UNSIGNED), MOD, makeSigning(right, ASM_UNSIGNED)); break;
case And: ret = ValueBuilder::makeBinary(left, AND, right); break;
case Or: ret = ValueBuilder::makeBinary(left, OR, right); break;
case Xor: ret = ValueBuilder::makeBinary(left, XOR, right); break;