diff options
-rwxr-xr-x | scripts/test/wasm2js.py | 4 | ||||
-rw-r--r-- | src/wasm2js.h | 30 | ||||
-rw-r--r-- | test/wasm2js/address.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/atomic_fence.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/dynamicLibrary.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/dynamicLibrary.2asm.js.opt | 4 | ||||
-rw-r--r-- | test/wasm2js/emscripten-grow-no.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/emscripten-grow-no.2asm.js.opt | 4 | ||||
-rw-r--r-- | test/wasm2js/emscripten-grow-yes.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/emscripten-grow-yes.2asm.js.opt | 8 | ||||
-rw-r--r-- | test/wasm2js/emscripten.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/emscripten.2asm.js.opt | 4 | ||||
-rw-r--r-- | test/wasm2js/endianness.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/grow-memory-tricky.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/grow-memory-tricky.2asm.js.opt | 8 | ||||
-rw-r--r-- | test/wasm2js/grow_memory.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/left-to-right.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/traps.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/unaligned.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/unaligned.2asm.js.opt | 4 |
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, |