summaryrefslogtreecommitdiff
path: root/bin/wasm.js
diff options
context:
space:
mode:
Diffstat (limited to 'bin/wasm.js')
-rw-r--r--bin/wasm.js206
1 files changed, 0 insertions, 206 deletions
diff --git a/bin/wasm.js b/bin/wasm.js
index 967343ffa..29e9f53a2 100644
--- a/bin/wasm.js
+++ b/bin/wasm.js
@@ -83122,209 +83122,3 @@ run();
return Module;
};
-/*
- * Copyright 2015 WebAssembly Community Group participants
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-function integrateWasmJS(Module) {
- // wasm.js has several methods for creating the compiled code module here:
- // * 'wasm-s-parser': load s-expression code from a .wast and create wasm
- // * 'asm2wasm': load asm.js code and translate to wasm
- // * 'just-asm': no wasm, just load the asm.js code and use that (good for testing)
- // The method can be set at compile time (BINARYEN_METHOD), or runtime by setting Module['wasmJSMethod'].
- var method = Module['wasmJSMethod'] || 'wasm-s-parser';
- assert(method == 'asm2wasm' || method == 'wasm-s-parser' || method == 'just-asm');
-
- if (method == 'just-asm') {
- eval(Module['read'](Module['asmjsCodeFile']));
- return;
- }
-
- var asm2wasmImports = { // special asm2wasm imports
- "f64-rem": function(x, y) {
- return x % y;
- },
- "f64-to-int": function(x) {
- return x | 0;
- },
- "debugger": function() {
- debugger;
- },
- };
-
- function flatten(obj) {
- var ret = {};
- for (var x in obj) {
- for (var y in obj[x]) {
- if (ret[y]) Module['printErr']('warning: flatten dupe: ' + y);
- if (typeof obj[x][y] === 'function') {
- ret[y] = obj[x][y];
- }
- }
- }
- return ret;
- }
-
- function mergeMemory(newBuffer) {
- // The wasm instance creates its memory. But static init code might have written to
- // buffer already, including the mem init file, and we must copy it over in a proper merge.
- // TODO: support memory segments in the wasm module itself, but even so, we'd still
- // have other static init code. but then we could reuse STATIC_BASE..STATIC_BASE+STATIC_BUMP
- // TODO: avoid this copy, by avoiding such static init writes
- // TODO: in shorter term, just copy up to the last static init write
- var oldBuffer = Module['buffer'];
- assert(newBuffer.byteLength >= oldBuffer.byteLength, 'we might fail if we allocated more than TOTAL_MEMORY');
- var oldView = new Int8Array(oldBuffer);
- var newView = new Int8Array(newBuffer);
- newView.set(oldView);
- updateGlobalBuffer(newBuffer);
- updateGlobalBufferViews();
- Module['reallocBuffer'] = function(size) {
- var old = Module['buffer'];
- wasmJS['asmExports']['__growWasmMemory'](size); // tiny wasm method that just does grow_memory
- return Module['buffer'] !== old ? Module['buffer'] : null; // if it was reallocated, it changed
- };
- }
-
- // wasm lacks globals, so asm2wasm maps them into locations in memory. that information cannot
- // be present in the wasm output of asm2wasm, so we store it in a side file. If we load asm2wasm
- // output, either generated ahead of time or on the client, we need to apply those mapped
- // globals after loading the module.
- function applyMappedGlobals() {
- var mappedGlobals = JSON.parse(Module['read'](Module['wasmCodeFile'] + '.mappedGlobals'));
- for (var name in mappedGlobals) {
- var global = mappedGlobals[name];
- if (!global.import) continue; // non-imports are initialized to zero in the typed array anyhow, so nothing to do here
- var value = wasmJS['lookupImport'](global.module, global.base);
- var address = global.address;
- switch (global.type) {
- case WasmTypes.i32: Module['HEAP32'][address >> 2] = value; break;
- case WasmTypes.f32: Module['HEAPF32'][address >> 2] = value; break;
- case WasmTypes.f64: Module['HEAPF64'][address >> 3] = value; break;
- default: abort();
- }
- }
- }
-
- if (typeof WASM === 'object' || typeof wasmEval === 'function') {
- // Provide an "asm.js function" for the application, called to "link" the asm.js module. We instantiate
- // the wasm module at that time, and it receives imports and provides exports and so forth, the app
- // doesn't need to care that it is wasm and not asm.
- Module['asm'] = function(global, env, providedBuffer) {
- // Load the wasm module
- var binary = Module['readBinary'](Module['wasmCodeFile']);
- // Create an instance of the module using native support in the JS engine.
- var importObj = {
- "global.Math": global.Math,
- "env": env,
- "asm2wasm": asm2wasmImports
- };
- var instance;
- if (typeof WASM === 'object') {
- instance = WASM.instantiateModule(binary, flatten(importObj));
- } else if (typeof wasmEval === 'function') {
- instance = wasmEval(binary.buffer, importObj);
- } else {
- throw 'how to wasm?';
- }
- mergeMemory(instance.memory);
-
- applyMappedGlobals();
-
- return instance;
- };
-
- return;
- }
-
- var WasmTypes = {
- none: 0,
- i32: 1,
- i64: 2,
- f32: 3,
- f64: 4
- };
-
- // Use wasm.js to polyfill and execute code in a wasm interpreter.
- var wasmJS = WasmJS({});
-
- // XXX don't be confused. Module here is in the outside program. wasmJS is the inner wasm-js.cpp.
- wasmJS['outside'] = Module; // Inside wasm-js.cpp, Module['outside'] reaches the outside module.
-
- // Information for the instance of the module.
- var info = wasmJS['info'] = {
- global: null,
- env: null,
- asm2wasm: asm2wasmImports,
- parent: Module // Module inside wasm-js.cpp refers to wasm-js.cpp; this allows access to the outside program.
- };
-
- wasmJS['lookupImport'] = function(mod, base) {
- var lookup = info;
- if (mod.indexOf('.') < 0) {
- lookup = (lookup || {})[mod];
- } else {
- var parts = mod.split('.');
- lookup = (lookup || {})[parts[0]];
- lookup = (lookup || {})[parts[1]];
- }
- lookup = (lookup || {})[base];
- if (lookup === undefined) {
- abort('bad lookupImport to (' + mod + ').' + base);
- }
- return lookup;
- }
-
- // The asm.js function, called to "link" the asm.js module. At that time, we are provided imports
- // and respond with exports, and so forth.
- Module['asm'] = function(global, env, providedBuffer) {
- assert(providedBuffer === Module['buffer']); // we should not even need to pass it as a 3rd arg for wasm, but that's the asm.js way.
-
- info.global = global;
- info.env = env;
-
- Module['reallocBuffer'] = function(size) {
- var old = Module['buffer'];
- wasmJS['asmExports']['__growWasmMemory'](size); // tiny wasm method that just does grow_memory
- return Module['buffer'] !== old ? Module['buffer'] : null; // if it was reallocated, it changed
- };
-
- // Prepare to generate wasm, using either asm2wasm or wasm-s-parser
- var code = Module['read'](method == 'asm2wasm' ? Module['asmjsCodeFile'] : Module['wasmCodeFile']);
- var temp = wasmJS['_malloc'](code.length + 1);
- wasmJS['writeAsciiToMemory'](code, temp);
- if (method == 'asm2wasm') {
- wasmJS['_load_asm2wasm'](temp);
- } else {
- wasmJS['_load_s_expr2wasm'](temp);
- }
- wasmJS['_free'](temp);
-
- wasmJS['providedTotalMemory'] = Module['buffer'].byteLength;
-
- wasmJS['_instantiate'](temp);
-
- if (Module['newBuffer']) {
- mergeMemory(Module['newBuffer']);
- Module['newBuffer'] = null;
- }
-
- if (method == 'wasm-s-parser') {
- applyMappedGlobals();
- }
-
- return wasmJS['asmExports'];
- };
-}