summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/test/wasm2js.py4
-rw-r--r--src/wasm2js.h30
-rw-r--r--test/wasm2js/address.2asm.js8
-rw-r--r--test/wasm2js/atomic_fence.2asm.js8
-rw-r--r--test/wasm2js/dynamicLibrary.2asm.js4
-rw-r--r--test/wasm2js/dynamicLibrary.2asm.js.opt4
-rw-r--r--test/wasm2js/emscripten-grow-no.2asm.js4
-rw-r--r--test/wasm2js/emscripten-grow-no.2asm.js.opt4
-rw-r--r--test/wasm2js/emscripten-grow-yes.2asm.js8
-rw-r--r--test/wasm2js/emscripten-grow-yes.2asm.js.opt8
-rw-r--r--test/wasm2js/emscripten.2asm.js4
-rw-r--r--test/wasm2js/emscripten.2asm.js.opt4
-rw-r--r--test/wasm2js/endianness.2asm.js8
-rw-r--r--test/wasm2js/grow-memory-tricky.2asm.js8
-rw-r--r--test/wasm2js/grow-memory-tricky.2asm.js.opt8
-rw-r--r--test/wasm2js/grow_memory.2asm.js8
-rw-r--r--test/wasm2js/left-to-right.2asm.js8
-rw-r--r--test/wasm2js/traps.2asm.js8
-rw-r--r--test/wasm2js/unaligned.2asm.js4
-rw-r--r--test/wasm2js/unaligned.2asm.js.opt4
20 files changed, 93 insertions, 53 deletions
diff --git a/scripts/test/wasm2js.py b/scripts/test/wasm2js.py
index 3cb766bcd..24c14680d 100755
--- a/scripts/test/wasm2js.py
+++ b/scripts/test/wasm2js.py
@@ -18,11 +18,11 @@ import os
from .support import run_command, split_wast, write_wast
from .shared import (
- WASM2JS, MOZJS, NODEJS, fail_if_not_identical, options, tests,
+ WASM2JS, MOZJS, NODEJS, fail_if_not_identical, options,
fail_if_not_identical_to_file, with_pass_debug
)
-# tests with i64s, invokes, etc.
+tests = sorted(os.listdir(os.path.join(options.binaryen_test)))
spec_dir = os.path.join(options.binaryen_test, 'spec')
spec_tests = [os.path.join(spec_dir, t)
for t in sorted(os.listdir(spec_dir))
diff --git a/src/wasm2js.h b/src/wasm2js.h
index 95ba2e154..86af511fb 100644
--- a/src/wasm2js.h
+++ b/src/wasm2js.h
@@ -255,6 +255,7 @@ private:
void addTable(Ref ast, Module* wasm);
void addExports(Ref ast, Module* wasm);
void addGlobal(Ref ast, Global* global);
+ void addMemoryFuncs(Ref ast, Module* wasm);
void addMemoryGrowthFuncs(Ref ast, Module* wasm);
Wasm2JSBuilder() = delete;
@@ -608,8 +609,8 @@ void Wasm2JSBuilder::addExports(Ref ast, Module* wasm) {
exports, fromName(export_->name, NameScope::Top), memory);
}
}
- if (wasm->memory.exists && wasm->memory.max > wasm->memory.initial) {
- addMemoryGrowthFuncs(ast, wasm);
+ if (wasm->memory.exists) {
+ addMemoryFuncs(ast, wasm);
}
ast->push_back(
ValueBuilder::makeStatement(ValueBuilder::makeReturn(exports)));
@@ -1900,6 +1901,22 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m,
return ExpressionProcessor(this, m, func, standaloneFunction).process();
}
+void Wasm2JSBuilder::addMemoryFuncs(Ref ast, Module* wasm) {
+ Ref memorySizeFunc = ValueBuilder::makeFunction(WASM_MEMORY_SIZE);
+ memorySizeFunc[3]->push_back(ValueBuilder::makeReturn(
+ makeAsmCoercion(ValueBuilder::makeBinary(
+ ValueBuilder::makeDot(ValueBuilder::makeName(BUFFER),
+ IString("byteLength")),
+ DIV,
+ ValueBuilder::makeInt(Memory::kPageSize)),
+ AsmType::ASM_INT)));
+ ast->push_back(memorySizeFunc);
+
+ if (wasm->memory.max > wasm->memory.initial) {
+ addMemoryGrowthFuncs(ast, wasm);
+ }
+}
+
void Wasm2JSBuilder::addMemoryGrowthFuncs(Ref ast, Module* wasm) {
Ref memoryGrowFunc = ValueBuilder::makeFunction(WASM_MEMORY_GROW);
ValueBuilder::appendArgumentToFunction(memoryGrowFunc, IString("pagesToAdd"));
@@ -2016,16 +2033,7 @@ void Wasm2JSBuilder::addMemoryGrowthFuncs(Ref ast, Module* wasm) {
memoryGrowFunc[3]->push_back(
ValueBuilder::makeReturn(ValueBuilder::makeName(IString("oldPages"))));
- Ref memorySizeFunc = ValueBuilder::makeFunction(WASM_MEMORY_SIZE);
- memorySizeFunc[3]->push_back(ValueBuilder::makeReturn(
- makeAsmCoercion(ValueBuilder::makeBinary(
- ValueBuilder::makeDot(ValueBuilder::makeName(BUFFER),
- IString("byteLength")),
- DIV,
- ValueBuilder::makeInt(Memory::kPageSize)),
- AsmType::ASM_INT)));
ast->push_back(memoryGrowFunc);
- ast->push_back(memorySizeFunc);
}
// Wasm2JSGlue emits the core of the module - the functions etc. that would
diff --git a/test/wasm2js/address.2asm.js b/test/wasm2js/address.2asm.js
index c811a1a2e..d0b9e4a2a 100644
--- a/test/wasm2js/address.2asm.js
+++ b/test/wasm2js/address.2asm.js
@@ -45,6 +45,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -67,10 +71,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"good": $0,
"bad": $1
diff --git a/test/wasm2js/atomic_fence.2asm.js b/test/wasm2js/atomic_fence.2asm.js
index 7089fd9b4..bf40601bc 100644
--- a/test/wasm2js/atomic_fence.2asm.js
+++ b/test/wasm2js/atomic_fence.2asm.js
@@ -25,6 +25,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -47,10 +51,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"atomic_fence": $0
};
diff --git a/test/wasm2js/dynamicLibrary.2asm.js b/test/wasm2js/dynamicLibrary.2asm.js
index 51a3aaba1..98332dead 100644
--- a/test/wasm2js/dynamicLibrary.2asm.js
+++ b/test/wasm2js/dynamicLibrary.2asm.js
@@ -40,6 +40,10 @@ function asmFunc(global, env, buffer) {
var FUNCTION_TABLE = [];
FUNCTION_TABLE[import$tableBase + 0] = foo;
FUNCTION_TABLE[import$tableBase + 1] = bar;
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"baz": baz
};
diff --git a/test/wasm2js/dynamicLibrary.2asm.js.opt b/test/wasm2js/dynamicLibrary.2asm.js.opt
index 862c1992a..61669987f 100644
--- a/test/wasm2js/dynamicLibrary.2asm.js.opt
+++ b/test/wasm2js/dynamicLibrary.2asm.js.opt
@@ -32,6 +32,10 @@ function asmFunc(global, env, buffer) {
var FUNCTION_TABLE = [];
FUNCTION_TABLE[import$tableBase + 0] = foo;
FUNCTION_TABLE[import$tableBase + 1] = foo;
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"baz": foo
};
diff --git a/test/wasm2js/emscripten-grow-no.2asm.js b/test/wasm2js/emscripten-grow-no.2asm.js
index 895a54fc2..92a99dfb7 100644
--- a/test/wasm2js/emscripten-grow-no.2asm.js
+++ b/test/wasm2js/emscripten-grow-no.2asm.js
@@ -25,6 +25,10 @@ function asmFunc(global, env, buffer) {
// EMSCRIPTEN_START_FUNCS;
// EMSCRIPTEN_END_FUNCS;
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/emscripten-grow-no.2asm.js.opt b/test/wasm2js/emscripten-grow-no.2asm.js.opt
index 895a54fc2..92a99dfb7 100644
--- a/test/wasm2js/emscripten-grow-no.2asm.js.opt
+++ b/test/wasm2js/emscripten-grow-no.2asm.js.opt
@@ -25,6 +25,10 @@ function asmFunc(global, env, buffer) {
// EMSCRIPTEN_START_FUNCS;
// EMSCRIPTEN_END_FUNCS;
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js b/test/wasm2js/emscripten-grow-yes.2asm.js
index 15363502e..0f29bccde 100644
--- a/test/wasm2js/emscripten-grow-yes.2asm.js
+++ b/test/wasm2js/emscripten-grow-yes.2asm.js
@@ -25,6 +25,10 @@ function asmFunc(global, env, buffer) {
// EMSCRIPTEN_START_FUNCS;
// EMSCRIPTEN_END_FUNCS;
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -48,10 +52,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js.opt b/test/wasm2js/emscripten-grow-yes.2asm.js.opt
index 15363502e..0f29bccde 100644
--- a/test/wasm2js/emscripten-grow-yes.2asm.js.opt
+++ b/test/wasm2js/emscripten-grow-yes.2asm.js.opt
@@ -25,6 +25,10 @@ function asmFunc(global, env, buffer) {
// EMSCRIPTEN_START_FUNCS;
// EMSCRIPTEN_END_FUNCS;
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -48,10 +52,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/emscripten.2asm.js b/test/wasm2js/emscripten.2asm.js
index a32f3edd6..fd9cbc607 100644
--- a/test/wasm2js/emscripten.2asm.js
+++ b/test/wasm2js/emscripten.2asm.js
@@ -187,6 +187,10 @@ function asmFunc(global, env, buffer) {
FUNCTION_TABLE[1] = foo;
FUNCTION_TABLE[2] = bar;
FUNCTION_TABLE[3] = tabled;
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"main": main,
"other": other,
diff --git a/test/wasm2js/emscripten.2asm.js.opt b/test/wasm2js/emscripten.2asm.js.opt
index 2aa92c316..5dcef5bce 100644
--- a/test/wasm2js/emscripten.2asm.js.opt
+++ b/test/wasm2js/emscripten.2asm.js.opt
@@ -168,6 +168,10 @@ function asmFunc(global, env, buffer) {
FUNCTION_TABLE[1] = foo;
FUNCTION_TABLE[2] = bar;
FUNCTION_TABLE[3] = internal;
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"main": main,
"other": other,
diff --git a/test/wasm2js/endianness.2asm.js b/test/wasm2js/endianness.2asm.js
index 418d41b77..866d70005 100644
--- a/test/wasm2js/endianness.2asm.js
+++ b/test/wasm2js/endianness.2asm.js
@@ -650,6 +650,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -672,10 +676,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"i32_load16_s": $6,
"i32_load16_u": $7,
diff --git a/test/wasm2js/grow-memory-tricky.2asm.js b/test/wasm2js/grow-memory-tricky.2asm.js
index 55b51c181..3cf1bb4be 100644
--- a/test/wasm2js/grow-memory-tricky.2asm.js
+++ b/test/wasm2js/grow-memory-tricky.2asm.js
@@ -37,6 +37,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -59,10 +63,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/grow-memory-tricky.2asm.js.opt b/test/wasm2js/grow-memory-tricky.2asm.js.opt
index 46b7bea25..a2377b4c5 100644
--- a/test/wasm2js/grow-memory-tricky.2asm.js.opt
+++ b/test/wasm2js/grow-memory-tricky.2asm.js.opt
@@ -27,6 +27,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -49,10 +53,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/grow_memory.2asm.js b/test/wasm2js/grow_memory.2asm.js
index b9bead794..675ee76e2 100644
--- a/test/wasm2js/grow_memory.2asm.js
+++ b/test/wasm2js/grow_memory.2asm.js
@@ -30,6 +30,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -52,10 +56,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"memory": Object.create(Object.prototype, {
"grow": {
diff --git a/test/wasm2js/left-to-right.2asm.js b/test/wasm2js/left-to-right.2asm.js
index e8893ae52..2e474002b 100644
--- a/test/wasm2js/left-to-right.2asm.js
+++ b/test/wasm2js/left-to-right.2asm.js
@@ -2090,6 +2090,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [i32_t0, i32_t1, i64_t0, i64_t1, f32_t0, f32_t1, f64_t0, f64_t1];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -2112,10 +2116,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"i32_add": $35,
"i32_sub": $36,
diff --git a/test/wasm2js/traps.2asm.js b/test/wasm2js/traps.2asm.js
index e9e5a0658..5ca7284d7 100644
--- a/test/wasm2js/traps.2asm.js
+++ b/test/wasm2js/traps.2asm.js
@@ -1969,6 +1969,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
function __wasm_memory_grow(pagesToAdd) {
pagesToAdd = pagesToAdd | 0;
var oldPages = __wasm_memory_size() | 0;
@@ -1991,10 +1995,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}
- function __wasm_memory_size() {
- return buffer.byteLength / 65536 | 0;
- }
-
return {
"no_dce_i32_load": $0,
"no_dce_i64_load": legalstub$1,
diff --git a/test/wasm2js/unaligned.2asm.js b/test/wasm2js/unaligned.2asm.js
index ed595d2c7..be3163d17 100644
--- a/test/wasm2js/unaligned.2asm.js
+++ b/test/wasm2js/unaligned.2asm.js
@@ -158,6 +158,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"i32_load": $0,
"i64_load": legalstub$1,
diff --git a/test/wasm2js/unaligned.2asm.js.opt b/test/wasm2js/unaligned.2asm.js.opt
index ca59ff5ff..b8df22fe5 100644
--- a/test/wasm2js/unaligned.2asm.js.opt
+++ b/test/wasm2js/unaligned.2asm.js.opt
@@ -111,6 +111,10 @@ function asmFunc(global, env, buffer) {
}
var FUNCTION_TABLE = [];
+ function __wasm_memory_size() {
+ return buffer.byteLength / 65536 | 0;
+ }
+
return {
"i32_load": $0,
"i64_load": legalstub$1,