summaryrefslogtreecommitdiff
path: root/src/wasm-js.cpp
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2016-05-18 20:28:43 -0700
committerAlon Zakai <alonzakai@gmail.com>2016-05-18 23:11:07 -0700
commit50c94e3e9fb6cdf043c7841d73299ee8be5d2cbd (patch)
treee95b728bfad8651cfb89b4a8d3e2f292e440011c /src/wasm-js.cpp
parentd8adcc182d69974096063ad57b50e8fec3fcccf8 (diff)
downloadbinaryen-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.cpp10
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_;