summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDan Gohman <sunfish@mozilla.com>2016-04-27 13:29:08 -0700
committerDan Gohman <sunfish@mozilla.com>2016-04-27 13:29:08 -0700
commit65dd0079b21cc72a3e2e6f5bc2f43ab0e2d3abfd (patch)
tree52fbb3e8c28a94d03d79aef140bc65e76814b3df /src
parentd63486d0ef085f905dafdb14a76cfb2ca1fb452e (diff)
downloadbinaryen-65dd0079b21cc72a3e2e6f5bc2f43ab0e2d3abfd.tar.gz
binaryen-65dd0079b21cc72a3e2e6f5bc2f43ab0e2d3abfd.tar.bz2
binaryen-65dd0079b21cc72a3e2e6f5bc2f43ab0e2d3abfd.zip
Fix zero-extension in i64.load32_u.
Diffstat (limited to 'src')
-rw-r--r--src/wasm-js.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp
index 116c52667..47d3543f9 100644
--- a/src/wasm-js.cpp
+++ b/src/wasm-js.cpp
@@ -290,7 +290,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() {
}
// nicely aligned
if (!isWasmTypeFloat(load->type)) {
- int32_t ret;
+ int64_t ret;
if (load->bytes == 1) {
if (load->signed_) {
ret = EM_ASM_INT({ return Module['info'].parent['HEAP8'][$0] }, addr);
@@ -307,14 +307,14 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() {
if (load->signed_) {
ret = EM_ASM_INT({ return Module['info'].parent['HEAP32'][$0 >> 2] }, addr);
} else {
- ret = EM_ASM_INT({ return Module['info'].parent['HEAPU32'][$0 >> 2] }, addr);
+ ret = uint32_t(EM_ASM_INT({ return Module['info'].parent['HEAPU32'][$0 >> 2] }, addr));
}
} else if (load->bytes == 8) {
uint32_t low = EM_ASM_INT({ return Module['info'].parent['HEAP32'][$0 >> 2] }, addr);
uint32_t high = EM_ASM_INT({ return Module['info'].parent['HEAP32'][$0 >> 2] }, addr + 4);
- return Literal(int64_t(low) | (int64_t(high) << 32));
+ ret = uint64_t(low) | (uint64_t(high) << 32);
} else abort();
- return load->type == i32 ? Literal(ret) : Literal(int64_t(ret));
+ return load->type == i32 ? Literal(int32_t(ret)) : Literal(ret);
} else {
if (load->bytes == 4) {
return Literal((float)EM_ASM_DOUBLE({ return Module['info'].parent['HEAPF32'][$0 >> 2] }, addr));