summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-02-19 16:42:47 -0800
committerAlon Zakai <alonzakai@gmail.com>2016-02-19 16:42:47 -0800
commitaf854dd0e98c0b3185ead411ffb9164cb9cb8796 (patch)
tree670d877f7d3e0864c2947cfd1beea4d4c1d0b17a /src
parent21bea4589aaf5d0de92cd6917ec284444ad6557a (diff)
downloadbinaryen-af854dd0e98c0b3185ead411ffb9164cb9cb8796.tar.gz
binaryen-af854dd0e98c0b3185ead411ffb9164cb9cb8796.tar.bz2
binaryen-af854dd0e98c0b3185ead411ffb9164cb9cb8796.zip
fix unaligned wasm.js load/store
Diffstat (limited to 'src')
-rw-r--r--src/wasm-js.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp
index 9d56b3c93..9c9096ad8 100644
--- a/src/wasm-js.cpp
+++ b/src/wasm-js.cpp
@@ -210,7 +210,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() {
var save0 = HEAP32[0];
var save1 = HEAP32[1];
for (var i = 0; i < bytes; i++) {
- HEAPU8[i] = HEAPU8[addr + i];
+ HEAPU8[i] = Module["info"].parent["HEAPU8"][addr + i];
}
var ret;
if (!isFloat) {
@@ -272,6 +272,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() {
if (value.type == WasmType::i64) {
Store fake = *store_;
fake.bytes = 4;
+ fake.type = i32;
uint64_t v = value.geti64();
store(&fake, addr, Literal(uint32_t(v)));
v >>= 32;
@@ -298,7 +299,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() {
else abort();
}
for (var i = 0; i < bytes; i++) {
- HEAPU8[addr + i] = HEAPU8[i];
+ Module["info"].parent["HEAPU8"][addr + i] = HEAPU8[i];
}
HEAP32[0] = save0; HEAP32[1] = save1;
}, addr, store_->bytes, isWasmTypeFloat(store_->type), isWasmTypeFloat(store_->type) ? value.getFloat() : (double)value.getInteger());