| /** |
| * @license |
| * Copyright 2017 The Emscripten Authors |
| * SPDX-License-Identifier: MIT |
| */ |
| |
| // {{PREAMBLE_ADDITIONS}} |
| |
| var STACK_ALIGN = {{{ STACK_ALIGN }}}; |
| |
| {{{ alignMemory }}} |
| |
| {{{ getNativeTypeSize }}} |
| |
| function warnOnce(text) { |
| if (!warnOnce.shown) warnOnce.shown = {}; |
| if (!warnOnce.shown[text]) { |
| warnOnce.shown[text] = 1; |
| err(text); |
| } |
| } |
| |
| #if RELOCATABLE |
| // fetchBinary fetches binaray data @ url. (async) |
| function fetchBinary(url) { |
| return fetch(url, { credentials: 'same-origin' }).then(function(response) { |
| if (!response['ok']) { |
| throw "failed to load binary file at '" + url + "'"; |
| } |
| return response['arrayBuffer'](); |
| }).then(function(buffer) { |
| return new Uint8Array(buffer); |
| }); |
| } |
| |
| function asmjsMangle(x) { |
| var unmangledSymbols = {{{ buildStringArray(WASM_FUNCTIONS_THAT_ARE_NOT_NAME_MANGLED) }}}; |
| return x.indexOf('dynCall_') == 0 || unmangledSymbols.indexOf(x) != -1 ? x : '_' + x; |
| } |
| |
| // Applies relocations to exported things. |
| function relocateExports(exports, memoryBase, tableBase, moduleLocal) { |
| var relocated = {}; |
| |
| for (var e in exports) { |
| var value = exports[e]; |
| if (typeof value === 'object') { |
| // a breaking change in the wasm spec, globals are now objects |
| // https://github.com/WebAssembly/mutable-global/issues/1 |
| value = value.value; |
| } |
| if (typeof value === 'number') { |
| // relocate it - modules export the absolute value, they can't relocate before they export |
| #if EMULATE_FUNCTION_POINTER_CASTS |
| // it may be a function pointer |
| if (e.substr(0, 3) == 'fp$' && typeof exports[e.substr(3)] === 'function') { |
| value += tableBase; |
| } else { |
| #endif |
| value += memoryBase; |
| #if EMULATE_FUNCTION_POINTER_CASTS |
| } |
| #endif |
| } |
| relocated[e] = value; |
| if (moduleLocal) { |
| moduleLocal['_' + e] = value; |
| } |
| } |
| return relocated; |
| } |
| |
| #endif // RELOCATABLE |
| |
| #include "runtime_functions.js" |
| |
| #include "runtime_debug.js" |
| |
| function makeBigInt(low, high, unsigned) { |
| return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); |
| } |
| |
| var tempRet0 = 0; |
| |
| var setTempRet0 = function(value) { |
| tempRet0 = value; |
| }; |
| |
| var getTempRet0 = function() { |
| return tempRet0; |
| }; |
| |
| #if RETAIN_COMPILER_SETTINGS |
| var compilerSettings = {{{ JSON.stringify(makeRetainedCompilerSettings()) }}} ; |
| |
| function getCompilerSetting(name) { |
| if (!(name in compilerSettings)) return 'invalid compiler setting: ' + name; |
| return compilerSettings[name]; |
| } |
| #else // RETAIN_COMPILER_SETTINGS |
| #if ASSERTIONS |
| function getCompilerSetting(name) { |
| throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; |
| } |
| #endif // ASSERTIONS |
| #endif // RETAIN_COMPILER_SETTINGS |
| |
| // The address globals begin at. Very low in memory, for code size and optimization opportunities. |
| // Above 0 is static memory, starting with globals. |
| // Then the stack. |
| // Then 'dynamic' memory for sbrk. |
| var GLOBAL_BASE = {{{ GLOBAL_BASE }}}; |
| |
| #if RELOCATABLE |
| GLOBAL_BASE = alignMemory(GLOBAL_BASE, {{{ MAX_GLOBAL_ALIGN || 1 }}}); |
| #endif |
| |
| #if USE_PTHREADS |
| // JS library code refers to Atomics in the manner used from asm.js, provide |
| // the same API here. |
| var Atomics_load = Atomics.load; |
| var Atomics_store = Atomics.store; |
| var Atomics_compareExchange = Atomics.compareExchange; |
| #endif |