From 4afbb0229b1c9a816f076d2de1a93bed9d6b9ef5 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Wed, 4 Nov 2020 23:11:43 -0800 Subject: [PATCH 1/2] wasm2js: Support for exported memory The asmFunc now sets the extern `bufferView` variable as well as its own internal views. --- src/wasm2js.h | 84 +++++++++++--------- test/wasm2js/atomic_fence.2asm.js | 13 ++- test/wasm2js/atomics_32.2asm.js | 13 ++- test/wasm2js/atomics_32.2asm.js.opt | 13 ++- test/wasm2js/bulk-memory.2asm.js | 56 ++++++------- test/wasm2js/bulk-memory.2asm.js.opt | 54 ++++++------- test/wasm2js/deterministic.2asm.js | 3 +- test/wasm2js/deterministic.2asm.js.opt | 3 +- test/wasm2js/dynamicLibrary.2asm.js | 9 ++- test/wasm2js/dynamicLibrary.2asm.js.opt | 9 ++- test/wasm2js/emscripten-grow-no.2asm.js | 9 ++- test/wasm2js/emscripten-grow-no.2asm.js.opt | 9 ++- test/wasm2js/emscripten-grow-yes.2asm.js | 13 +-- test/wasm2js/emscripten-grow-yes.2asm.js.opt | 13 +-- test/wasm2js/emscripten.2asm.js | 12 +-- test/wasm2js/emscripten.2asm.js.opt | 12 +-- test/wasm2js/endianness.2asm.js | 13 ++- test/wasm2js/grow-memory-tricky.2asm.js | 13 ++- test/wasm2js/grow-memory-tricky.2asm.js.opt | 13 ++- test/wasm2js/grow_memory.2asm.js | 13 ++- test/wasm2js/left-to-right.2asm.js | 13 ++- test/wasm2js/minified-memory.2asm.js | 7 +- test/wasm2js/minified-memory.2asm.js.opt | 7 +- test/wasm2js/reinterpret_scratch.2asm.js | 11 ++- test/wasm2js/reinterpret_scratch.2asm.js.opt | 11 ++- test/wasm2js/start_func.2asm.js | 13 ++- test/wasm2js/start_func.2asm.js.opt | 13 ++- test/wasm2js/traps.2asm.js | 13 ++- test/wasm2js/unaligned.2asm.js | 11 ++- test/wasm2js/unaligned.2asm.js.opt | 11 ++- 30 files changed, 245 insertions(+), 242 deletions(-) diff --git a/src/wasm2js.h b/src/wasm2js.h index 8ab6ab5cf61..451e2ce2c7c 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -383,6 +383,7 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { ret[1]->push_back(asmFunc); ValueBuilder::appendArgumentToFunction(asmFunc, ENV); + // add memory import if (wasm->memory.exists) { if (wasm->memory.imported()) { // find memory and buffer in imports @@ -414,8 +415,15 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { ValueBuilder::makeName(WASM_MEMORY_GROW)))); } } else { - // find memory as third argument - ValueBuilder::appendArgumentToFunction(asmFunc, BUFFER); + Ref theVar = ValueBuilder::makeVar(); + asmFunc[3]->push_back(theVar); + ValueBuilder::appendToVar( + theVar, + BUFFER, + ValueBuilder::makeNew(ValueBuilder::makeCall( + ValueBuilder::makeName("ArrayBuffer"), + ValueBuilder::makeInt(Address::address32_t(wasm->memory.initial.addr * + Memory::kPageSize))))); } } @@ -428,6 +436,7 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { FUNCTION_TABLE, ValueBuilder::makeDot(ValueBuilder::makeName(ENV), wasm->table.base)); } + // create heaps, etc addBasics(asmFunc[3], wasm); ModuleUtils::iterImportedFunctions( @@ -503,6 +512,10 @@ void Wasm2JSBuilder::addBasics(Ref ast, Module* wasm) { addHeap(HEAPU32, UINT32ARRAY); addHeap(HEAPF32, FLOAT32ARRAY); addHeap(HEAPF64, FLOAT64ARRAY); + ast->push_back( + ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), + SET, + ValueBuilder::makeName(HEAPU8))); } // core asm.js imports auto addMath = [&](IString name, IString base) { @@ -2295,12 +2308,6 @@ void Wasm2JSBuilder::addMemoryGrowFunc(Ref ast, Module* wasm) { IString("set")), ValueBuilder::makeName(HEAP8))); - ValueBuilder::appendToBlock( - block, - ValueBuilder::makeBinary(ValueBuilder::makeName(HEAP8), - SET, - ValueBuilder::makeName(IString("newHEAP8")))); - auto setHeap = [&](IString name, IString view) { ValueBuilder::appendToBlock( block, @@ -2335,7 +2342,15 @@ void Wasm2JSBuilder::addMemoryGrowFunc(Ref ast, Module* wasm) { ValueBuilder::makeDot(ValueBuilder::makeName("memory"), ValueBuilder::makeName(BUFFER)), SET, - ValueBuilder::makeName(IString("newBuffer")))); + ValueBuilder::makeName(BUFFER))); + } + + if ((!wasm->memory.segments.empty()) || wasm->features.hasBulkMemory()) { + ValueBuilder::appendToBlock( + block, + ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), + SET, + ValueBuilder::makeName(HEAPU8))); } memoryGrowFunc[3]->push_back( @@ -2369,8 +2384,7 @@ class Wasm2JSGlue { void emitPostEmscripten(); void emitPostES6(); - void emitMemory(std::string buffer, - std::function accessGlobal); + void emitMemory(std::function accessGlobal); void emitSpecialSupport(); }; @@ -2406,7 +2420,7 @@ void Wasm2JSGlue::emitPre() { } void Wasm2JSGlue::emitPreEmscripten() { - out << "function instantiate(asmLibraryArg, wasmMemory) {\n"; + out << "function instantiate(asmLibraryArg) {\n"; } void Wasm2JSGlue::emitPreES6() { @@ -2445,6 +2459,18 @@ void Wasm2JSGlue::emitPreES6() { } void Wasm2JSGlue::emitPost() { + // Create a helper bufferView to access the buffer if we need one. We use it + // for creating memory segments if we have any (we may not if the segments are + // shipped in a side .mem file, for example), and also in bulk memory + // operations. + // This will get assigned during `asmFunc` (and potentially re-assigned + // during __wasm_memory_grow). + // TODO: We should probably just share a single HEAPU8 var. + if (wasm.memory.exists && + ((!wasm.memory.segments.empty()) || wasm.features.hasBulkMemory())) { + out << "var bufferView;\n"; + } + if (flags.emscripten) { emitPostEmscripten(); } else { @@ -2453,13 +2479,13 @@ void Wasm2JSGlue::emitPost() { } void Wasm2JSGlue::emitPostEmscripten() { - emitMemory("wasmMemory.buffer", [](std::string globalName) { + out << "var exports = asmFunc(asmLibraryArg);\n"; + + emitMemory([](std::string globalName) { return std::string("asmLibraryArg['") + asmangle(globalName) + "']"; }); - out << "return asmFunc(asmLibraryArg, wasmMemory.buffer)\n" - << "\n" - << "}"; + out << "return exports;\n}"; } void Wasm2JSGlue::emitPostES6() { @@ -2469,12 +2495,9 @@ void Wasm2JSGlue::emitPostES6() { // // Note that the translation here expects that the lower values of this memory // can be used for conversions, so make sure there's at least one page. - if (wasm.memory.exists) { + if (wasm.memory.exists && wasm.memory.imported()) { out << "var mem" << moduleName.str << " = new ArrayBuffer(" << wasm.memory.initial.addr * Memory::kPageSize << ");\n"; - - emitMemory(std::string("mem") + moduleName.str, - [](std::string globalName) { return globalName; }); } // Actually invoke the `asmFunc` generated function, passing in all global @@ -2510,10 +2533,10 @@ void Wasm2JSGlue::emitPostES6() { out << ",\n " << asmangle(import->base.str); }); - if (wasm.memory.exists && !wasm.memory.imported()) { - out << "\n },\n mem" << moduleName.str << "\n);\n"; - } else { - out << "\n });\n"; + out << "\n });\n"; + + if (wasm.memory.exists) { + emitMemory([](std::string globalName) { return globalName; }); } if (flags.allowAsserts) { @@ -2546,21 +2569,10 @@ void Wasm2JSGlue::emitPostES6() { } void Wasm2JSGlue::emitMemory( - std::string buffer, std::function accessGlobal) { - if (!wasm.memory.exists) { - return; - } - // Create a helper bufferView to access the buffer if we need one. We use it - // for creating memory segments if we have any (we may not if the segments are - // shipped in a side .mem file, for example), and also in bulk memory - // operations. - if (!wasm.memory.segments.empty() || wasm.features.hasBulkMemory()) { - out << "var bufferView = new Uint8Array(" << buffer << ");\n"; - } // If there are no memory segments, we don't need to emit any support code for // segment creation. - if (wasm.memory.segments.empty()) { + if ((!wasm.memory.exists) || wasm.memory.segments.empty()) { return; } diff --git a/test/wasm2js/atomic_fence.2asm.js b/test/wasm2js/atomic_fence.2asm.js index 4bde4a32ec2..9a0f221a999 100644 --- a/test/wasm2js/atomic_fence.2asm.js +++ b/test/wasm2js/atomic_fence.2asm.js @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(1507328); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -36,7 +38,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -46,6 +47,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -55,10 +57,7 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(1507328); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var atomic_fence = retasmFunc.atomic_fence; diff --git a/test/wasm2js/atomics_32.2asm.js b/test/wasm2js/atomics_32.2asm.js index 12cdbe8ff71..824d68ceb08 100644 --- a/test/wasm2js/atomics_32.2asm.js +++ b/test/wasm2js/atomics_32.2asm.js @@ -67,7 +67,8 @@ var memorySegments = {}; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(16777216); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -76,6 +77,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -128,8 +130,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(16777216); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -151,8 +154,4 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "aGVsbG8s"); memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29ybGQh"); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var test = retasmFunc.test; diff --git a/test/wasm2js/atomics_32.2asm.js.opt b/test/wasm2js/atomics_32.2asm.js.opt index 4a7a5d85f52..a48c22074c3 100644 --- a/test/wasm2js/atomics_32.2asm.js.opt +++ b/test/wasm2js/atomics_32.2asm.js.opt @@ -67,7 +67,8 @@ var memorySegments = {}; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(16777216); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -76,6 +77,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -124,8 +126,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(16777216); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -147,8 +150,4 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "aGVsbG8s"); memorySegments[1] = base64DecodeToExistingUint8Array(new Uint8Array(6), 0, "d29ybGQh"); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var test = retasmFunc.test; diff --git a/test/wasm2js/bulk-memory.2asm.js b/test/wasm2js/bulk-memory.2asm.js index 2b74314863c..e349b619791 100644 --- a/test/wasm2js/bulk-memory.2asm.js +++ b/test/wasm2js/bulk-memory.2asm.js @@ -33,7 +33,8 @@ var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } bufferView.fill(value, dest, dest + size); } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -42,6 +43,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -78,7 +80,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -88,6 +89,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -98,12 +100,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var fill = retasmFunc.fill; export var load8_u = retasmFunc.load8_u; @@ -118,7 +117,8 @@ export var load8_u = retasmFunc.load8_u; bufferView.copyWithin(dest, source, source + size); } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -127,6 +127,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -161,8 +162,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -183,10 +185,6 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 0, "qrvM3Q=="); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var copy = retasmFunc.copy; export var load8_u = retasmFunc.load8_u; @@ -203,7 +201,8 @@ export var load8_u = retasmFunc.load8_u; var memorySegments = {}; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -212,6 +211,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -248,7 +248,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -258,6 +257,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -268,8 +268,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -290,10 +291,6 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(4), 0, "qrvM3Q=="); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var init = retasmFunc.init; export var load8_u = retasmFunc.load8_u; @@ -315,7 +312,8 @@ export var load8_u = retasmFunc.load8_u; var memorySegments = {}; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -324,6 +322,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -364,7 +363,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -374,6 +372,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -386,8 +385,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -409,10 +409,6 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(0), 0, ""); base64DecodeToExistingUint8Array(bufferView, 0, ""); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var drop_passive = retasmFunc.drop_passive; export var init_passive = retasmFunc.init_passive; export var drop_active = retasmFunc.drop_active; diff --git a/test/wasm2js/bulk-memory.2asm.js.opt b/test/wasm2js/bulk-memory.2asm.js.opt index 77e682c41b8..9b9476f42a3 100644 --- a/test/wasm2js/bulk-memory.2asm.js.opt +++ b/test/wasm2js/bulk-memory.2asm.js.opt @@ -33,7 +33,8 @@ var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } bufferView.fill(value, dest, dest + size); } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -42,6 +43,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -78,7 +80,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -88,6 +89,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -98,12 +100,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var fill = retasmFunc.fill; export var load8_u = retasmFunc.load8_u; @@ -118,7 +117,8 @@ export var load8_u = retasmFunc.load8_u; bufferView.copyWithin(dest, source, source + size); } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -127,6 +127,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -161,8 +162,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -183,10 +185,6 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 0, "qrvM3Q=="); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var copy = retasmFunc.copy; export var load8_u = retasmFunc.load8_u; @@ -203,7 +201,8 @@ export var load8_u = retasmFunc.load8_u; var memorySegments = {}; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -212,6 +211,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -248,7 +248,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -258,6 +257,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -268,8 +268,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -290,14 +291,11 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } memorySegments[0] = base64DecodeToExistingUint8Array(new Uint8Array(4), 0, "qrvM3Q=="); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); export var init = retasmFunc.init; export var load8_u = retasmFunc.load8_u; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -306,6 +304,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -340,7 +339,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -350,6 +348,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -362,12 +361,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var drop_passive = retasmFunc.drop_passive; export var init_passive = retasmFunc.init_passive; export var drop_active = retasmFunc.drop_active; diff --git a/test/wasm2js/deterministic.2asm.js b/test/wasm2js/deterministic.2asm.js index b465f0d57e8..187e7fcf909 100644 --- a/test/wasm2js/deterministic.2asm.js +++ b/test/wasm2js/deterministic.2asm.js @@ -10,6 +10,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -39,8 +40,8 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); diff --git a/test/wasm2js/deterministic.2asm.js.opt b/test/wasm2js/deterministic.2asm.js.opt index be4f26cfef7..e2b9a75332f 100644 --- a/test/wasm2js/deterministic.2asm.js.opt +++ b/test/wasm2js/deterministic.2asm.js.opt @@ -10,6 +10,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -38,8 +39,8 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, memory: { buffer : memasmFunc } }); diff --git a/test/wasm2js/dynamicLibrary.2asm.js b/test/wasm2js/dynamicLibrary.2asm.js index b570fab367c..d8d38a52220 100644 --- a/test/wasm2js/dynamicLibrary.2asm.js +++ b/test/wasm2js/dynamicLibrary.2asm.js @@ -23,6 +23,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -62,8 +63,11 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(16777216); -var bufferView = new Uint8Array(memasmFunc); +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, + memory: { buffer : memasmFunc } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -84,7 +88,4 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, memoryBase, "ZHluYW1pYyBkYXRh"); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, - memory: { buffer : memasmFunc } - }); export var baz = retasmFunc.baz; diff --git a/test/wasm2js/dynamicLibrary.2asm.js.opt b/test/wasm2js/dynamicLibrary.2asm.js.opt index 4d7b4ac42b4..960881e39e3 100644 --- a/test/wasm2js/dynamicLibrary.2asm.js.opt +++ b/test/wasm2js/dynamicLibrary.2asm.js.opt @@ -23,6 +23,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -54,8 +55,11 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(16777216); -var bufferView = new Uint8Array(memasmFunc); +var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, + memory: { buffer : memasmFunc } + }); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -76,7 +80,4 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, memoryBase, "ZHluYW1pYyBkYXRh"); -var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, - memory: { buffer : memasmFunc } - }); export var baz = retasmFunc.baz; diff --git a/test/wasm2js/emscripten-grow-no.2asm.js b/test/wasm2js/emscripten-grow-no.2asm.js index 998527287bf..54d1d0b93bb 100644 --- a/test/wasm2js/emscripten-grow-no.2asm.js +++ b/test/wasm2js/emscripten-grow-no.2asm.js @@ -1,4 +1,4 @@ -function instantiate(asmLibraryArg, wasmMemory) { +function instantiate(asmLibraryArg) { function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; @@ -10,6 +10,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -45,7 +46,8 @@ function asmFunc(env) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -66,6 +68,5 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/emscripten-grow-no.2asm.js.opt b/test/wasm2js/emscripten-grow-no.2asm.js.opt index 998527287bf..54d1d0b93bb 100644 --- a/test/wasm2js/emscripten-grow-no.2asm.js.opt +++ b/test/wasm2js/emscripten-grow-no.2asm.js.opt @@ -1,4 +1,4 @@ -function instantiate(asmLibraryArg, wasmMemory) { +function instantiate(asmLibraryArg) { function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; @@ -10,6 +10,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -45,7 +46,8 @@ function asmFunc(env) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -66,6 +68,5 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js b/test/wasm2js/emscripten-grow-yes.2asm.js index 3cb5371b1fd..7e838c8f24b 100644 --- a/test/wasm2js/emscripten-grow-yes.2asm.js +++ b/test/wasm2js/emscripten-grow-yes.2asm.js @@ -1,4 +1,4 @@ -function instantiate(asmLibraryArg, wasmMemory) { +function instantiate(asmLibraryArg) { function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; @@ -11,6 +11,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -39,7 +40,6 @@ function asmFunc(env) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -49,7 +49,8 @@ function asmFunc(env) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; - memory.buffer = newBuffer; + memory.buffer = buffer; + bufferView = HEAPU8; } return oldPages; } @@ -69,7 +70,8 @@ function asmFunc(env) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -90,6 +92,5 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/emscripten-grow-yes.2asm.js.opt b/test/wasm2js/emscripten-grow-yes.2asm.js.opt index 3cb5371b1fd..7e838c8f24b 100644 --- a/test/wasm2js/emscripten-grow-yes.2asm.js.opt +++ b/test/wasm2js/emscripten-grow-yes.2asm.js.opt @@ -1,4 +1,4 @@ -function instantiate(asmLibraryArg, wasmMemory) { +function instantiate(asmLibraryArg) { function asmFunc(env) { var memory = env.memory; var buffer = memory.buffer; @@ -11,6 +11,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -39,7 +40,6 @@ function asmFunc(env) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -49,7 +49,8 @@ function asmFunc(env) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; - memory.buffer = newBuffer; + memory.buffer = buffer; + bufferView = HEAPU8; } return oldPages; } @@ -69,7 +70,8 @@ function asmFunc(env) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -90,6 +92,5 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i return uint8Array; } base64DecodeToExistingUint8Array(bufferView, 1600, "YWJj"); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/emscripten.2asm.js b/test/wasm2js/emscripten.2asm.js index 9d08b03a2f2..6ff10089af8 100644 --- a/test/wasm2js/emscripten.2asm.js +++ b/test/wasm2js/emscripten.2asm.js @@ -1,5 +1,6 @@ -function instantiate(asmLibraryArg, wasmMemory) { -function asmFunc(env, buffer) { +function instantiate(asmLibraryArg) { +function asmFunc(env) { + var buffer = new ArrayBuffer(16777216); var FUNCTION_TABLE = env.table; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); @@ -9,6 +10,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -202,7 +204,8 @@ function asmFunc(env, buffer) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -224,6 +227,5 @@ for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i } base64DecodeToExistingUint8Array(bufferView, 1024, "aGVsbG8sIHdvcmxkIQoAAJwMAAAtKyAgIDBYMHgAKG51bGwpAAAAAAAAAAAAAAAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAETCQsLAAAJBgsAAAsABhEAAAAREREAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAANAAAABA0AAAAACQ4AAAAAAA4AAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAADwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAASEhIAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAAAKAAAAAAoAAAAACQsAAAAAAAsAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAuAA=="); base64DecodeToExistingUint8Array(bufferView, 1600, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/emscripten.2asm.js.opt b/test/wasm2js/emscripten.2asm.js.opt index 0e438f81d05..3aa64d5d54b 100644 --- a/test/wasm2js/emscripten.2asm.js.opt +++ b/test/wasm2js/emscripten.2asm.js.opt @@ -1,5 +1,6 @@ -function instantiate(asmLibraryArg, wasmMemory) { -function asmFunc(env, buffer) { +function instantiate(asmLibraryArg) { +function asmFunc(env) { + var buffer = new ArrayBuffer(16777216); var FUNCTION_TABLE = env.table; var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); @@ -9,6 +10,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -183,7 +185,8 @@ function asmFunc(env, buffer) { }; } -var bufferView = new Uint8Array(wasmMemory.buffer); +var bufferView; +var exports = asmFunc(asmLibraryArg); for (var base64ReverseLookup = new Uint8Array(123/*'z'+1*/), i = 25; i >= 0; --i) { base64ReverseLookup[48+i] = 52+i; // '0-9' base64ReverseLookup[65+i] = i; // 'A-Z' @@ -217,6 +220,5 @@ base64DecodeToExistingUint8Array(bufferView, 1443, "Cw=="); base64DecodeToExistingUint8Array(bufferView, 1455, "CgAAAAAKAAAAAAkLAAAAAAALAAAL"); base64DecodeToExistingUint8Array(bufferView, 1501, "DA=="); base64DecodeToExistingUint8Array(bufferView, 1513, "DAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGLTBYKzBYIDBYLTB4KzB4IDB4AGluZgBJTkYAbmFuAE5BTgAu"); -return asmFunc(asmLibraryArg, wasmMemory.buffer) - +return exports; } \ No newline at end of file diff --git a/test/wasm2js/endianness.2asm.js b/test/wasm2js/endianness.2asm.js index d6c557a2282..e19a82b71a0 100644 --- a/test/wasm2js/endianness.2asm.js +++ b/test/wasm2js/endianness.2asm.js @@ -30,7 +30,8 @@ import { setTempRet0 } from 'env'; return f32ScratchView[2]; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -39,6 +40,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -661,7 +663,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -671,6 +672,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -696,13 +698,10 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 - }, - memasmFunc -); + }); export var i32_load16_s = retasmFunc.i32_load16_s; export var i32_load16_u = retasmFunc.i32_load16_u; export var i32_load = retasmFunc.i32_load; diff --git a/test/wasm2js/grow-memory-tricky.2asm.js b/test/wasm2js/grow-memory-tricky.2asm.js index 00dad8b1a3c..3b9d22dd1ea 100644 --- a/test/wasm2js/grow-memory-tricky.2asm.js +++ b/test/wasm2js/grow-memory-tricky.2asm.js @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -48,7 +50,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -58,6 +59,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -79,12 +81,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var memory = retasmFunc.memory; export var f1 = retasmFunc.f1; export var f2 = retasmFunc.f2; diff --git a/test/wasm2js/grow-memory-tricky.2asm.js.opt b/test/wasm2js/grow-memory-tricky.2asm.js.opt index 7f3afb29c75..6d90ff68f4b 100644 --- a/test/wasm2js/grow-memory-tricky.2asm.js.opt +++ b/test/wasm2js/grow-memory-tricky.2asm.js.opt @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -38,7 +40,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -48,6 +49,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -69,12 +71,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var memory = retasmFunc.memory; export var f1 = retasmFunc.f1; export var f2 = retasmFunc.f2; diff --git a/test/wasm2js/grow_memory.2asm.js b/test/wasm2js/grow_memory.2asm.js index fdad4181794..448563661ce 100644 --- a/test/wasm2js/grow_memory.2asm.js +++ b/test/wasm2js/grow_memory.2asm.js @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -41,7 +43,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -51,6 +52,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -72,12 +74,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var memory = retasmFunc.memory; export var grow = retasmFunc.grow; export var current = retasmFunc.current; diff --git a/test/wasm2js/left-to-right.2asm.js b/test/wasm2js/left-to-right.2asm.js index ee2ff63b146..244adc072d6 100644 --- a/test/wasm2js/left-to-right.2asm.js +++ b/test/wasm2js/left-to-right.2asm.js @@ -25,7 +25,8 @@ f32ScratchView[2] = value; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -34,6 +35,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -2050,7 +2052,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -2060,6 +2061,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -2163,12 +2165,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var i32_add = retasmFunc.i32_add; export var i32_sub = retasmFunc.i32_sub; export var i32_mul = retasmFunc.i32_mul; diff --git a/test/wasm2js/minified-memory.2asm.js b/test/wasm2js/minified-memory.2asm.js index 88edd06b740..22032857396 100644 --- a/test/wasm2js/minified-memory.2asm.js +++ b/test/wasm2js/minified-memory.2asm.js @@ -11,6 +11,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -39,7 +40,6 @@ function asmFunc(env) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -49,7 +49,8 @@ function asmFunc(env) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; - memory.buffer = newBuffer; + memory.buffer = buffer; + bufferView = HEAPU8; } return oldPages; } @@ -59,8 +60,8 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, a: { buffer : memasmFunc } }); diff --git a/test/wasm2js/minified-memory.2asm.js.opt b/test/wasm2js/minified-memory.2asm.js.opt index b5014324974..673e81f111c 100644 --- a/test/wasm2js/minified-memory.2asm.js.opt +++ b/test/wasm2js/minified-memory.2asm.js.opt @@ -11,6 +11,7 @@ function asmFunc(env) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -39,7 +40,6 @@ function asmFunc(env) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -49,7 +49,8 @@ function asmFunc(env) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; - memory.buffer = newBuffer; + memory.buffer = buffer; + bufferView = HEAPU8; } return oldPages; } @@ -59,8 +60,8 @@ function asmFunc(env) { }; } +var bufferView; var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, a: { buffer : memasmFunc } }); diff --git a/test/wasm2js/reinterpret_scratch.2asm.js b/test/wasm2js/reinterpret_scratch.2asm.js index 1083cba9806..7792647bae6 100644 --- a/test/wasm2js/reinterpret_scratch.2asm.js +++ b/test/wasm2js/reinterpret_scratch.2asm.js @@ -17,7 +17,8 @@ f32ScratchView[2] = value; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -26,6 +27,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -57,10 +59,7 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var foo = retasmFunc.foo; diff --git a/test/wasm2js/reinterpret_scratch.2asm.js.opt b/test/wasm2js/reinterpret_scratch.2asm.js.opt index 36f85c0d157..e7c73889865 100644 --- a/test/wasm2js/reinterpret_scratch.2asm.js.opt +++ b/test/wasm2js/reinterpret_scratch.2asm.js.opt @@ -13,7 +13,8 @@ f64ScratchView[0] = value; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -22,6 +23,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -52,10 +54,7 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var foo = retasmFunc.foo; diff --git a/test/wasm2js/start_func.2asm.js b/test/wasm2js/start_func.2asm.js index 13b60abdbd7..2014dc612b5 100644 --- a/test/wasm2js/start_func.2asm.js +++ b/test/wasm2js/start_func.2asm.js @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -37,7 +39,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -47,6 +48,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -56,9 +58,6 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); diff --git a/test/wasm2js/start_func.2asm.js.opt b/test/wasm2js/start_func.2asm.js.opt index 8b7b8e873fa..f0e4d1dd147 100644 --- a/test/wasm2js/start_func.2asm.js.opt +++ b/test/wasm2js/start_func.2asm.js.opt @@ -1,5 +1,6 @@ -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -8,6 +9,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -37,7 +39,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -47,6 +48,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -56,9 +58,6 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); diff --git a/test/wasm2js/traps.2asm.js b/test/wasm2js/traps.2asm.js index c2ba3bc6f47..24a8cca4b51 100644 --- a/test/wasm2js/traps.2asm.js +++ b/test/wasm2js/traps.2asm.js @@ -1577,7 +1577,8 @@ export var no_dce_i64_trunc_f32_u = retasmFunc.no_dce_i64_trunc_f32_u; export var no_dce_i64_trunc_f64_s = retasmFunc.no_dce_i64_trunc_f64_s; export var no_dce_i64_trunc_f64_u = retasmFunc.no_dce_i64_trunc_f64_u; -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -1586,6 +1587,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -1686,7 +1688,6 @@ function asmFunc(env, buffer) { var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); var newHEAP8 = new Int8Array(newBuffer); newHEAP8.set(HEAP8); - HEAP8 = newHEAP8; HEAP8 = new Int8Array(newBuffer); HEAP16 = new Int16Array(newBuffer); HEAP32 = new Int32Array(newBuffer); @@ -1696,6 +1697,7 @@ function asmFunc(env, buffer) { HEAPF32 = new Float32Array(newBuffer); HEAPF64 = new Float64Array(newBuffer); buffer = newBuffer; + bufferView = HEAPU8; } return oldPages; } @@ -1718,12 +1720,9 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); } - }, - memasmFunc -); + }); export var no_dce_i32_load = retasmFunc.no_dce_i32_load; export var no_dce_i32_load16_s = retasmFunc.no_dce_i32_load16_s; export var no_dce_i32_load16_u = retasmFunc.no_dce_i32_load16_u; diff --git a/test/wasm2js/unaligned.2asm.js b/test/wasm2js/unaligned.2asm.js index 9a9c6f7d899..94089bca646 100644 --- a/test/wasm2js/unaligned.2asm.js +++ b/test/wasm2js/unaligned.2asm.js @@ -30,7 +30,8 @@ import { setTempRet0 } from 'env'; f32ScratchView[2] = value; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -39,6 +40,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -173,13 +175,10 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 - }, - memasmFunc -); + }); export var i32_load = retasmFunc.i32_load; export var i64_load = retasmFunc.i64_load; export var f32_load = retasmFunc.f32_load; diff --git a/test/wasm2js/unaligned.2asm.js.opt b/test/wasm2js/unaligned.2asm.js.opt index e493eec6292..94575509b50 100644 --- a/test/wasm2js/unaligned.2asm.js.opt +++ b/test/wasm2js/unaligned.2asm.js.opt @@ -26,7 +26,8 @@ import { setTempRet0 } from 'env'; return f32ScratchView[2]; } -function asmFunc(env, buffer) { +function asmFunc(env) { + var buffer = new ArrayBuffer(65536); var HEAP8 = new Int8Array(buffer); var HEAP16 = new Int16Array(buffer); var HEAP32 = new Int32Array(buffer); @@ -35,6 +36,7 @@ function asmFunc(env, buffer) { var HEAPU32 = new Uint32Array(buffer); var HEAPF32 = new Float32Array(buffer); var HEAPF64 = new Float64Array(buffer); + bufferView = HEAPU8; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_abs = Math.abs; @@ -126,13 +128,10 @@ function asmFunc(env, buffer) { }; } -var memasmFunc = new ArrayBuffer(65536); -var bufferView = new Uint8Array(memasmFunc); +var bufferView; var retasmFunc = asmFunc( { abort: function() { throw new Error('abort'); }, setTempRet0 - }, - memasmFunc -); + }); export var i32_load = retasmFunc.i32_load; export var i64_load = retasmFunc.i64_load; export var f32_load = retasmFunc.f32_load; From a34937db81f0f8b9b28398ac2af78a7afd45cbfe Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Tue, 10 Nov 2020 10:27:16 -0800 Subject: [PATCH 2/2] feedback --- src/wasm2js.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/wasm2js.h b/src/wasm2js.h index 451e2ce2c7c..3de01d0b956 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -512,10 +512,12 @@ void Wasm2JSBuilder::addBasics(Ref ast, Module* wasm) { addHeap(HEAPU32, UINT32ARRAY); addHeap(HEAPF32, FLOAT32ARRAY); addHeap(HEAPF64, FLOAT64ARRAY); - ast->push_back( - ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), - SET, - ValueBuilder::makeName(HEAPU8))); + if ((!wasm->memory.segments.empty()) || wasm->features.hasBulkMemory()) { + ast->push_back( + ValueBuilder::makeBinary(ValueBuilder::makeName("bufferView"), + SET, + ValueBuilder::makeName(HEAPU8))); + } } // core asm.js imports auto addMath = [&](IString name, IString base) {