summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-12-07 15:38:27 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-12-07 15:38:27 -0800
commit4ef7b2ef49787bc22a73a13b24819a43d7d133d6 (patch)
treea945c8ef648e340ac474d00e729fb8359745566f
parentaa3adeff8a9052e82db4353cd7d77e4da64e9a9d (diff)
downloadbinaryen-4ef7b2ef49787bc22a73a13b24819a43d7d133d6.tar.gz
binaryen-4ef7b2ef49787bc22a73a13b24819a43d7d133d6.tar.bz2
binaryen-4ef7b2ef49787bc22a73a13b24819a43d7d133d6.zip
fix signed int-to-double
-rw-r--r--src/wasm2asm.h2
-rw-r--r--test/unit.2asm.js2
2 files changed, 2 insertions, 2 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h
index ba52b1878..c48834085 100644
--- a/src/wasm2asm.h
+++ b/src/wasm2asm.h
@@ -892,7 +892,7 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) {
case Sqrt: ret = ValueBuilder::makeCall(MATH_SQRT, value); break;
case TruncSFloat32: ret = ValueBuilder::makePrefix(B_NOT, ValueBuilder::makePrefix(B_NOT, value)); break;
case PromoteFloat32:
- case ConvertSInt32: ret = ValueBuilder::makePrefix(PLUS, value); break;
+ case ConvertSInt32: ret = ValueBuilder::makePrefix(PLUS, ValueBuilder::makeBinary(value, OR, ValueBuilder::makeNum(0))); break;
case ConvertUInt32: ret = ValueBuilder::makePrefix(PLUS, ValueBuilder::makeBinary(value, TRSHIFT, ValueBuilder::makeNum(0))); break;
case DemoteFloat64: ret = value; break;
default: std::cerr << curr << '\n'; abort();
diff --git a/test/unit.2asm.js b/test/unit.2asm.js
index 9df831571..def524246 100644
--- a/test/unit.2asm.js
+++ b/test/unit.2asm.js
@@ -72,7 +72,7 @@ function asmFunc(global, env, buffer) {
function conversions() {
var i = 0, d = 0.0;
i = f64_to_int(+d) | 0;
- d = +i;
+ d = +(i | 0);
d = +((i >>> 0 | 0) >>> 0);
}