Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions scripts/test/wasm2js.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@

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))
Expand Down
30 changes: 19 additions & 11 deletions src/wasm2js.h
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,7 @@ class Wasm2JSBuilder {
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;
Expand Down Expand Up @@ -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)));
Expand Down Expand Up @@ -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"));
Expand Down Expand Up @@ -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
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/address.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/atomic_fence.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -47,10 +51,6 @@ function asmFunc(global, env, buffer) {
return oldPages;
}

function __wasm_memory_size() {
return buffer.byteLength / 65536 | 0;
}

return {
"atomic_fence": $0
};
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/dynamicLibrary.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/dynamicLibrary.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/emscripten-grow-no.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/emscripten-grow-no.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/emscripten-grow-yes.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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": {
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/emscripten-grow-yes.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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": {
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/emscripten.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/emscripten.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/endianness.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/grow-memory-tricky.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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": {
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/grow-memory-tricky.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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": {
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/grow_memory.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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": {
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/left-to-right.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand Down
8 changes: 4 additions & 4 deletions test/wasm2js/traps.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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,
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/unaligned.2asm.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
4 changes: 4 additions & 0 deletions test/wasm2js/unaligned.2asm.js.opt
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down