diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-05-18 20:28:43 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-05-18 23:11:07 -0700 |
commit | 50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd (patch) | |
tree | e95b728bfad8651cfb89b4a8d3e2f292e440011c /src/wasm-js.cpp | |
parent | d8adcc182d69974096063ad57b50e8fec3fcccf8 (diff) | |
download | binaryen-50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd.tar.gz binaryen-50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd.tar.bz2 binaryen-50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd.zip |
store locals in a vector in the interpreter and update wasm.js. also fix address usage in wasm.js
Diffstat (limited to 'src/wasm-js.cpp')
-rw-r--r-- | src/wasm-js.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/wasm-js.cpp b/src/wasm-js.cpp index ea1883072..87059f9be 100644 --- a/src/wasm-js.cpp +++ b/src/wasm-js.cpp @@ -91,7 +91,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE load_asm2wasm(char *input) { auto& global = pair.second; if (!global.import) continue; // non-imports are initialized to zero in the typed array anyhow, so nothing to do here double value = EM_ASM_DOUBLE({ return Module['lookupImport'](Pointer_stringify($0), Pointer_stringify($1)) }, global.module.str, global.base.str); - unsigned address = global.address; + uint32_t address = global.address; switch (global.type) { case i32: EM_ASM_({ Module['info'].parent['HEAP32'][$0 >> 2] = $1 }, address, value); break; case f32: EM_ASM_({ Module['info'].parent['HEAPF32'][$0 >> 2] = $1 }, address, value); break; @@ -196,7 +196,7 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() { var source = Module['HEAP8'].subarray($1, $1 + $2); var target = new Int8Array(Module['outside']['newBuffer']); target.set(source, $0); - }, segment.offset, &segment.data[0], segment.data.size()); + }, (uint32_t)segment.offset, &segment.data[0], segment.data.size()); } } @@ -236,7 +236,8 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() { } } - Literal load(Load* load, Address addr) override { + Literal load(Load* load, Address address) override { + uint32_t addr = address; if (load->align < load->bytes || (addr & (load->bytes-1))) { int64_t out64; double ret = EM_ASM_DOUBLE({ @@ -325,7 +326,8 @@ extern "C" void EMSCRIPTEN_KEEPALIVE instantiate() { } } - void store(Store* store_, Address addr, Literal value) override { + void store(Store* store_, Address address, Literal value) override { + uint32_t addr = address; // support int64 stores if (value.type == WasmType::i64) { Store fake = *store_; |