diff options
61 files changed, 214 insertions, 128 deletions
diff --git a/src/ir/table-utils.h b/src/ir/table-utils.h new file mode 100644 index 000000000..4b3b7005c --- /dev/null +++ b/src/ir/table-utils.h @@ -0,0 +1,52 @@ +/* + * Copyright 2019 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. + */ + +#ifndef wasm_ir_table_h +#define wasm_ir_table_h + +#include "wasm.h" +#include "wasm-traversal.h" + +namespace wasm { + +struct FlatTable { + std::vector<Name> names; + bool valid; + + FlatTable(Table& table) { + valid = true; + for (auto& segment : table.segments) { + auto offset = segment.offset; + if (!offset->is<Const>()) { + // TODO: handle some non-constant segments + valid = false; + return; + } + Index start = offset->cast<Const>()->value.geti32(); + Index end = start + segment.data.size(); + if (end > names.size()) { + names.resize(end); + } + for (Index i = 0; i < segment.data.size(); i++) { + names[start + i] = segment.data[i]; + } + } + } +}; + +} // namespace wasm + +#endif // wasm_ir_table_h diff --git a/src/passes/Directize.cpp b/src/passes/Directize.cpp index 8d5cacdaf..3d8fcdfdd 100644 --- a/src/passes/Directize.cpp +++ b/src/passes/Directize.cpp @@ -27,37 +27,13 @@ #include "wasm-builder.h" #include "wasm-traversal.h" #include "asm_v_wasm.h" -#include <ir/utils.h> +#include "ir/table-utils.h" +#include "ir/utils.h" namespace wasm { namespace { -struct FlatTable { - std::vector<Name> names; - bool valid; - - FlatTable(Table& table) { - valid = true; - for (auto& segment : table.segments) { - auto offset = segment.offset; - if (!offset->is<Const>()) { - // TODO: handle some non-constant segments - valid = false; - return; - } - Index start = offset->cast<Const>()->value.geti32(); - Index end = start + segment.data.size(); - if (end > names.size()) { - names.resize(end); - } - for (Index i = 0; i < segment.data.size(); i++) { - names[start + i] = segment.data[i]; - } - } - } -}; - struct FunctionDirectizer : public WalkerPass<PostWalker<FunctionDirectizer>> { bool isFunctionParallel() override { return true; } diff --git a/src/wasm2js.h b/src/wasm2js.h index fab39267d..50968046f 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -38,6 +38,7 @@ #include "ir/load-utils.h" #include "ir/module-utils.h" #include "ir/names.h" +#include "ir/table-utils.h" #include "ir/utils.h" #include "passes/passes.h" #include "support/base64.h" @@ -267,7 +268,6 @@ private: std::unordered_map<const char*, IString> mangledNames[(int) NameScope::Max]; std::unordered_set<IString> allMangledNames; - // All our function tables have the same size TODO: optimize? size_t tableSize; bool almostASM = false; @@ -275,7 +275,7 @@ private: void addBasics(Ref ast); void addFunctionImport(Ref ast, Function* import); void addGlobalImport(Ref ast, Global* import); - void addTables(Ref ast, Module* wasm); + void addTable(Ref ast, Module* wasm); void addExports(Ref ast, Module* wasm); void addGlobal(Ref ast, Global* global); void setNeedsAlmostASM(const char *reason); @@ -387,7 +387,7 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { asmFunc[3]->push_back(ValueBuilder::makeName("// EMSCRIPTEN_END_FUNCS")); } - addTables(asmFunc[3], wasm); + addTable(asmFunc[3], wasm); // memory XXX addExports(asmFunc[3], wasm); return ret; @@ -499,38 +499,43 @@ void Wasm2JSBuilder::addGlobalImport(Ref ast, Global* import) { ); } -void Wasm2JSBuilder::addTables(Ref ast, Module* wasm) { - std::map<std::string, std::vector<IString>> tables; // asm.js tables, sig => contents of table - for (Table::Segment& seg : wasm->table.segments) { - for (size_t i = 0; i < seg.data.size(); i++) { - Name name = seg.data[i]; - auto func = wasm->getFunction(name); - std::string sig = getSig(func); - auto& table = tables[sig]; - if (table.size() == 0) { - // fill it with the first of its type seen. we have to fill with something; and for asm2wasm output, the first is the null anyhow - table.resize(tableSize); - for (size_t j = 0; j < tableSize; j++) { - table[j] = fromName(name, NameScope::Top); - } - } else { - table[i + constOffset(seg)] = fromName(name, NameScope::Top); - } - } - } - for (auto& pair : tables) { - auto& sig = pair.first; - auto& table = pair.second; - std::string stable = std::string("FUNCTION_TABLE_") + sig; - IString asmName = IString(stable.c_str(), false); - // add to asm module +void Wasm2JSBuilder::addTable(Ref ast, Module* wasm) { + // Emit a simple flat table as a JS array literal. Otherwise, + // emit assignments separately for each index. + FlatTable flat(wasm->table); + assert(flat.valid); // TODO: non-flat tables + if (!wasm->table.imported()) { Ref theVar = ValueBuilder::makeVar(); ast->push_back(theVar); Ref theArray = ValueBuilder::makeArray(); - ValueBuilder::appendToVar(theVar, asmName, theArray); - for (auto& name : table) { + ValueBuilder::appendToVar(theVar, FUNCTION_TABLE, theArray); + Name null("null"); + for (auto& name : flat.names) { + if (name.is()) { + name = fromName(name, NameScope::Top); + } else { + name = null; + } ValueBuilder::appendToArray(theArray, ValueBuilder::makeName(name)); } + } else { + // TODO: optimize for size + for (auto& segment : wasm->table.segments) { + auto offset = segment.offset; + Index start = offset->cast<Const>()->value.geti32(); + for (Index i = 0; i < segment.data.size(); i++) { + ast->push_back(ValueBuilder::makeStatement( + ValueBuilder::makeBinary( + ValueBuilder::makeSub( + ValueBuilder::makeName(FUNCTION_TABLE), + ValueBuilder::makeInt(start + i) + ), + SET, + ValueBuilder::makeName(fromName(segment.data[i], NameScope::Top)) + ) + )); + } + } } } @@ -1058,11 +1063,8 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul Ref visitCallIndirect(CallIndirect* curr) { // TODO: the codegen here is a pessimization of what the ideal codegen // looks like. Eventually if necessary this should be tightened up in the - // case that the argument expression don't have any side effects. + // case that the argument expression doesn't have any side effects. assert(isStatement(curr)); - std::string stable = std::string("FUNCTION_TABLE_") + - getSig(module->getFunctionType(curr->fullType)); - IString table = IString(stable.c_str(), false); Ref ret = ValueBuilder::makeBlock(); ScopedTemp idx(i32, parent, func); return makeStatementizedCall( @@ -1071,8 +1073,8 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul [&]() { flattenAppend(ret, visitAndAssign(curr->target, idx)); return ValueBuilder::makeCall(ValueBuilder::makeSub( - ValueBuilder::makeName(table), - ValueBuilder::makeBinary(idx.getAstName(), AND, ValueBuilder::makeInt(parent->getTableSize()-1)) + ValueBuilder::makeName(FUNCTION_TABLE), + idx.getAstName() )); }, result, @@ -2031,7 +2033,7 @@ void Wasm2JSGlue::emitPre() { } void Wasm2JSGlue::emitPreEmscripten() { - out << "function instantiate(asmLibraryArg, wasmMemory, wasmTable) {\n\n"; + out << "function instantiate(asmLibraryArg, wasmMemory, FUNCTION_TABLE) {\n\n"; } void Wasm2JSGlue::emitPreES6() { diff --git a/test/binaryen.js/emit_asmjs.js.txt b/test/binaryen.js/emit_asmjs.js.txt index e16bf2fca..04e863ec0 100644 --- a/test/binaryen.js/emit_asmjs.js.txt +++ b/test/binaryen.js/emit_asmjs.js.txt @@ -27,6 +27,7 @@ function asmFunc(global, env, buffer) { return $0 | 0; } + var FUNCTION_TABLE = []; return { main: main }; diff --git a/test/wasm2js.asserts.js b/test/wasm2js.asserts.js index 9d20ffe57..c51d3aadb 100644 --- a/test/wasm2js.asserts.js +++ b/test/wasm2js.asserts.js @@ -73,6 +73,7 @@ function asmFunc0(global, env, buffer) { return i64toi32_i32$HIGH_BITS | 0; } + var FUNCTION_TABLE = []; return { empty: $0, add: $1, diff --git a/test/wasm2js.traps.js b/test/wasm2js.traps.js index 1dbd01507..acb6c9441 100644 --- a/test/wasm2js.traps.js +++ b/test/wasm2js.traps.js @@ -73,6 +73,7 @@ function asmFunc0(global, env, buffer) { return i64toi32_i32$HIGH_BITS | 0; } + var FUNCTION_TABLE = []; return { empty: $0, add: $1, diff --git a/test/wasm2js/address.2asm.js b/test/wasm2js/address.2asm.js index f402c35f7..0bda4e0f4 100644 --- a/test/wasm2js/address.2asm.js +++ b/test/wasm2js/address.2asm.js @@ -47,6 +47,7 @@ function asmFunc(global, env, buffer) { HEAP32[(i + 4294967295 | 0) >> 2] | 0; } + var FUNCTION_TABLE = []; return { good: $0, bad: $1 diff --git a/test/wasm2js/base64.2asm.js b/test/wasm2js/base64.2asm.js index 9720c1ae9..3960d7ca6 100644 --- a/test/wasm2js/base64.2asm.js +++ b/test/wasm2js/base64.2asm.js @@ -22,6 +22,7 @@ function asmFunc(global, env, buffer) { var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; + var FUNCTION_TABLE = []; return { }; diff --git a/test/wasm2js/block.2asm.js b/test/wasm2js/block.2asm.js index b069ec6c9..f3c7f07ef 100644 --- a/test/wasm2js/block.2asm.js +++ b/test/wasm2js/block.2asm.js @@ -177,6 +177,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { empty: $1, singular: $2, diff --git a/test/wasm2js/br.2asm.js b/test/wasm2js/br.2asm.js index ba323f2d6..90c9194ea 100644 --- a/test/wasm2js/br.2asm.js +++ b/test/wasm2js/br.2asm.js @@ -601,7 +601,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$4 | 0; } - var FUNCTION_TABLE_iiii = [f]; + var FUNCTION_TABLE = [f]; return { type_i32: $1, type_i64: $2, @@ -750,6 +750,7 @@ function asmFunc(global, env, buffer) { } + var FUNCTION_TABLE = []; return { }; diff --git a/test/wasm2js/br_if.2asm.js b/test/wasm2js/br_if.2asm.js index 0e5e84a23..f70758d8c 100644 --- a/test/wasm2js/br_if.2asm.js +++ b/test/wasm2js/br_if.2asm.js @@ -234,6 +234,7 @@ function asmFunc(global, env, buffer) { return 1 + $2_1 | 0 | 0; } + var FUNCTION_TABLE = []; return { as_block_first: $1, as_block_mid: $2, diff --git a/test/wasm2js/br_table.2asm.js b/test/wasm2js/br_table.2asm.js index 135733e4b..755059a1c 100644 --- a/test/wasm2js/br_table.2asm.js +++ b/test/wasm2js/br_table.2asm.js @@ -50236,7 +50236,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$4 | 0; } - var FUNCTION_TABLE_iiii = [f]; + var FUNCTION_TABLE = [f]; return { type_i32: $1, type_i64: $2, diff --git a/test/wasm2js/br_table_temp.2asm.js b/test/wasm2js/br_table_temp.2asm.js index e5209e148..425c4e1d9 100644 --- a/test/wasm2js/br_table_temp.2asm.js +++ b/test/wasm2js/br_table_temp.2asm.js @@ -50232,7 +50232,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$4 | 0; } - var FUNCTION_TABLE_iiii = [f]; + var FUNCTION_TABLE = [f]; return { type_i32: $1, type_i64: $2, diff --git a/test/wasm2js/break-drop.2asm.js b/test/wasm2js/break-drop.2asm.js index 178d21a19..52c8da977 100644 --- a/test/wasm2js/break-drop.2asm.js +++ b/test/wasm2js/break-drop.2asm.js @@ -34,6 +34,7 @@ function asmFunc(global, env, buffer) { } + var FUNCTION_TABLE = []; return { br: $0, br_if: $1, diff --git a/test/wasm2js/call.2asm.js b/test/wasm2js/call.2asm.js index a36f59811..86f77a122 100644 --- a/test/wasm2js/call.2asm.js +++ b/test/wasm2js/call.2asm.js @@ -408,6 +408,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { type_i32: $12, type_i64: $13, diff --git a/test/wasm2js/call_indirect.2asm.js b/test/wasm2js/call_indirect.2asm.js index 9ee3d9480..c94d44c6a 100644 --- a/test/wasm2js/call_indirect.2asm.js +++ b/test/wasm2js/call_indirect.2asm.js @@ -119,14 +119,14 @@ function asmFunc(global, env, buffer) { function $16() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = 0; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 31]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; return wasm2js_i32$0 | 0; } function $17() { var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = 1; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 31]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -136,14 +136,14 @@ function asmFunc(global, env, buffer) { function $18() { var wasm2js_f32$0 = Math_fround(0), wasm2js_i32$0 = 0; wasm2js_i32$0 = 2; - wasm2js_f32$0 = Math_fround(FUNCTION_TABLE_f[wasm2js_i32$0 & 31]()); + wasm2js_f32$0 = Math_fround(FUNCTION_TABLE[wasm2js_i32$0]()); return Math_fround(wasm2js_f32$0); } function $19() { var wasm2js_f64$0 = 0.0, wasm2js_i32$0 = 0; wasm2js_i32$0 = 3; - wasm2js_f64$0 = +FUNCTION_TABLE_d[wasm2js_i32$0 & 31](); + wasm2js_f64$0 = +FUNCTION_TABLE[wasm2js_i32$0](); return +wasm2js_f64$0; } @@ -153,7 +153,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = 100; wasm2js_i32$3 = i64toi32_i32$0; wasm2js_i32$1 = 5; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -164,7 +164,7 @@ function asmFunc(global, env, buffer) { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; wasm2js_i32$2 = 32; wasm2js_i32$1 = 4; - wasm2js_i32$0 = FUNCTION_TABLE_ii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; return wasm2js_i32$0 | 0; } @@ -174,7 +174,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = 64; wasm2js_i32$3 = i64toi32_i32$0; wasm2js_i32$1 = 5; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -185,7 +185,7 @@ function asmFunc(global, env, buffer) { var wasm2js_f32$0 = Math_fround(0), wasm2js_i32$0 = 0, wasm2js_f32$1 = Math_fround(0); wasm2js_f32$1 = Math_fround(1.3200000524520874); wasm2js_i32$0 = 6; - wasm2js_f32$0 = Math_fround(FUNCTION_TABLE_ff[wasm2js_i32$0 & 31](Math_fround(wasm2js_f32$1))); + wasm2js_f32$0 = Math_fround(FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$1))); return Math_fround(wasm2js_f32$0); } @@ -193,7 +193,7 @@ function asmFunc(global, env, buffer) { var wasm2js_f64$0 = 0.0, wasm2js_i32$0 = 0, wasm2js_f64$1 = 0.0; wasm2js_f64$1 = 1.64; wasm2js_i32$0 = 7; - wasm2js_f64$0 = +FUNCTION_TABLE_dd[wasm2js_i32$0 & 31](+wasm2js_f64$1); + wasm2js_f64$0 = +FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$1); return +wasm2js_f64$0; } @@ -202,7 +202,7 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(32.099998474121094); wasm2js_i32$2 = 32; wasm2js_i32$1 = 8; - wasm2js_i32$0 = FUNCTION_TABLE_ifi[wasm2js_i32$1 & 31](Math_fround(wasm2js_f32$0), wasm2js_i32$2 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](Math_fround(wasm2js_f32$0), wasm2js_i32$2 | 0) | 0; return wasm2js_i32$0 | 0; } @@ -213,7 +213,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$3 = 64; wasm2js_i32$4 = i64toi32_i32$0; wasm2js_i32$1 = 9; - wasm2js_i32$0 = FUNCTION_TABLE_iiii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0) | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -225,7 +225,7 @@ function asmFunc(global, env, buffer) { wasm2js_f64$0 = 64.0; wasm2js_f32$1 = Math_fround(32.0); wasm2js_i32$0 = 10; - wasm2js_f32$0 = Math_fround(FUNCTION_TABLE_fdf[wasm2js_i32$0 & 31](+wasm2js_f64$0, Math_fround(wasm2js_f32$1))); + wasm2js_f32$0 = Math_fround(FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, Math_fround(wasm2js_f32$1))); return Math_fround(wasm2js_f32$0); } @@ -235,7 +235,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = 0; wasm2js_f64$1 = 64.1; wasm2js_i32$0 = 11; - wasm2js_f64$0 = +FUNCTION_TABLE_diid[wasm2js_i32$0 & 31](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1); + wasm2js_f64$0 = +FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1); return +wasm2js_f64$0; } @@ -248,7 +248,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = $1; wasm2js_i32$3 = i64toi32_i32$0; wasm2js_i32$1 = $0; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -262,7 +262,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = 9; wasm2js_i32$3 = i64toi32_i32$0; wasm2js_i32$1 = $0; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$0 = wasm2js_i32$0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -287,7 +287,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = i64toi32_i32$2 - i64toi32_i32$3 | 0; wasm2js_i32$3 = i64toi32_i32$5; wasm2js_i32$1 = 12; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$5 = wasm2js_i32$0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $6 = i64toi32_i32$5; @@ -329,7 +329,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$2 = i64toi32_i32$4; wasm2js_i32$3 = i64toi32_i32$5; wasm2js_i32$1 = 13; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; i64toi32_i32$5 = wasm2js_i32$0; i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $5 = i64toi32_i32$5; @@ -346,7 +346,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$3 = i64toi32_i32$0; wasm2js_i32$2 = i64toi32_i32$4; wasm2js_i32$1 = 13; - wasm2js_i32$0 = FUNCTION_TABLE_iii[wasm2js_i32$1 & 31](wasm2js_i32$3 | 0, wasm2js_i32$2 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$3 | 0, wasm2js_i32$2 | 0) | 0; i64toi32_i32$4 = wasm2js_i32$0; i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $8 = i64toi32_i32$4; @@ -373,7 +373,7 @@ function asmFunc(global, env, buffer) { if (($0 | 0) == (0 | 0)) $6 = 44; else { wasm2js_i32$2 = $0 - 1 | 0; wasm2js_i32$1 = 15; - wasm2js_i32$0 = FUNCTION_TABLE_ii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; $6 = wasm2js_i32$0; } return $6 | 0; @@ -385,7 +385,7 @@ function asmFunc(global, env, buffer) { if (($0 | 0) == (0 | 0)) $6 = 99; else { wasm2js_i32$2 = $0 - 1 | 0; wasm2js_i32$1 = 14; - wasm2js_i32$0 = FUNCTION_TABLE_ii[wasm2js_i32$1 & 31](wasm2js_i32$2 | 0) | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; $6 = wasm2js_i32$0; } return $6 | 0; @@ -394,19 +394,19 @@ function asmFunc(global, env, buffer) { function runaway() { var wasm2js_i32$0 = 0; wasm2js_i32$0 = 16; - FUNCTION_TABLE_v[wasm2js_i32$0 & 31](); + FUNCTION_TABLE[wasm2js_i32$0](); } function mutual_runaway1() { var wasm2js_i32$0 = 0; wasm2js_i32$0 = 18; - FUNCTION_TABLE_v[wasm2js_i32$0 & 31](); + FUNCTION_TABLE[wasm2js_i32$0](); } function mutual_runaway2() { var wasm2js_i32$0 = 0; wasm2js_i32$0 = 17; - FUNCTION_TABLE_v[wasm2js_i32$0 & 31](); + FUNCTION_TABLE[wasm2js_i32$0](); } function _ZN17compiler_builtins3int3mul3Mul3mul17h070e9a1c69faec5bE(var$0, var$0$hi, var$1, var$1$hi) { @@ -495,18 +495,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } - var FUNCTION_TABLE_d = [const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64, const_f64]; - var FUNCTION_TABLE_dd = [id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, over_f64_duplicate, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64, id_f64]; - var FUNCTION_TABLE_diid = [i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64, i64_f64]; - var FUNCTION_TABLE_f = [const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32, const_f32]; - var FUNCTION_TABLE_fdf = [f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32, f64_f32]; - var FUNCTION_TABLE_ff = [id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, over_f32_duplicate, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32, id_f32]; - var FUNCTION_TABLE_i = [const_i32, const_i64, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32, const_i32]; - var FUNCTION_TABLE_ifi = [f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32, f32_i32]; - var FUNCTION_TABLE_ii = [id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, even, odd, id_i32, id_i32, id_i32, over_i32_duplicate, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32, id_i32]; - var FUNCTION_TABLE_iii = [id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, fac, fib, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, over_i64_duplicate, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64, id_i64]; - var FUNCTION_TABLE_iiii = [i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64, i32_i64]; - var FUNCTION_TABLE_v = [runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, mutual_runaway1, mutual_runaway2, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway, runaway]; + var FUNCTION_TABLE = [const_i32, const_i64, const_f32, const_f64, id_i32, id_i64, id_f32, id_f64, f32_i32, i32_i64, f64_f32, i64_f64, fac, fib, even, odd, runaway, mutual_runaway1, mutual_runaway2, over_i32_duplicate, over_i64_duplicate, over_f32_duplicate, over_f64_duplicate]; return { type_i32: $16, type_i64: $17, diff --git a/test/wasm2js/comments.2asm.js b/test/wasm2js/comments.2asm.js index 243239f6c..6c025e88e 100644 --- a/test/wasm2js/comments.2asm.js +++ b/test/wasm2js/comments.2asm.js @@ -22,6 +22,7 @@ function asmFunc(global, env, buffer) { var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; + var FUNCTION_TABLE = []; return { }; @@ -53,6 +54,7 @@ function asmFunc(global, env, buffer) { var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; + var FUNCTION_TABLE = []; return { }; diff --git a/test/wasm2js/conversions-modified.2asm.js b/test/wasm2js/conversions-modified.2asm.js index 3d6044a01..c188bbc74 100644 --- a/test/wasm2js/conversions-modified.2asm.js +++ b/test/wasm2js/conversions-modified.2asm.js @@ -221,6 +221,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { i64_extend_s_i32: $0, i64_extend_u_i32: $1, diff --git a/test/wasm2js/empty_table.2asm.js b/test/wasm2js/empty_table.2asm.js index d515f48f4..5ef3aa88a 100644 --- a/test/wasm2js/empty_table.2asm.js +++ b/test/wasm2js/empty_table.2asm.js @@ -22,6 +22,7 @@ function asmFunc(global, env, buffer) { var nan = global.NaN; var infinity = global.Infinity; var i64toi32_i32$HIGH_BITS = 0; + var FUNCTION_TABLE = []; return { }; diff --git a/test/wasm2js/emscripten.2asm.js b/test/wasm2js/emscripten.2asm.js index 63e5a5923..31b87cd44 100644 --- a/test/wasm2js/emscripten.2asm.js +++ b/test/wasm2js/emscripten.2asm.js @@ -1,4 +1,4 @@ -function instantiate(asmLibraryArg, wasmMemory, wasmTable) { +function instantiate(asmLibraryArg, wasmMemory, FUNCTION_TABLE) { function asmFunc(global, env, buffer) { "use asm"; @@ -32,7 +32,7 @@ function asmFunc(global, env, buffer) { syscall$6(1 | 0, 2 | 0) | 0; syscall$54(3 | 0, 4 | 0) | 0; wasm2js_i32$0 = HEAP32[(0 + 1030 | 0) >> 2] | 0; - FUNCTION_TABLE_v[wasm2js_i32$0 & 3](); + FUNCTION_TABLE[wasm2js_i32$0](); } function other() { @@ -48,7 +48,8 @@ function asmFunc(global, env, buffer) { } // EMSCRIPTEN_END_FUNCS; - var FUNCTION_TABLE_v = [foo, foo, bar, foo]; + FUNCTION_TABLE[1] = foo; + FUNCTION_TABLE[2] = bar; return { main: main, other: other diff --git a/test/wasm2js/endianness.2asm.js b/test/wasm2js/endianness.2asm.js index 88619536f..19bd79751 100644 --- a/test/wasm2js/endianness.2asm.js +++ b/test/wasm2js/endianness.2asm.js @@ -290,6 +290,7 @@ function asmFunc(global, env, buffer) { return +(+HEAPF64[__tempMemory__ >> 3]); } + var FUNCTION_TABLE = []; return { i32_load16_s: $6, i32_load16_u: $7, diff --git a/test/wasm2js/f32.2asm.js b/test/wasm2js/f32.2asm.js index e8a12f19c..ff8f2d94a 100644 --- a/test/wasm2js/f32.2asm.js +++ b/test/wasm2js/f32.2asm.js @@ -119,6 +119,7 @@ function asmFunc(global, env, buffer) { return Math_fround((wasm2js_f32$0 = Math_fround(Math_ceil(var$0)), wasm2js_f32$1 = Math_fround(Math_floor(var$0)), wasm2js_i32$0 = var$0 < Math_fround(0.0), wasm2js_i32$0 ? wasm2js_f32$0 : wasm2js_f32$1)); } + var FUNCTION_TABLE = []; return { add: $0, sub: $1, diff --git a/test/wasm2js/f32_cmp.2asm.js b/test/wasm2js/f32_cmp.2asm.js index 87e9e2506..0349fa344 100644 --- a/test/wasm2js/f32_cmp.2asm.js +++ b/test/wasm2js/f32_cmp.2asm.js @@ -58,6 +58,7 @@ function asmFunc(global, env, buffer) { return x >= y | 0; } + var FUNCTION_TABLE = []; return { eq: $0, ne: $1, diff --git a/test/wasm2js/f64.2asm.js b/test/wasm2js/f64.2asm.js index 9ede1bfb5..ade8bab00 100644 --- a/test/wasm2js/f64.2asm.js +++ b/test/wasm2js/f64.2asm.js @@ -153,6 +153,7 @@ function asmFunc(global, env, buffer) { return +(wasm2js_f64$0 = Math_ceil(var$0), wasm2js_f64$1 = Math_floor(var$0), wasm2js_i32$0 = var$0 < 0.0, wasm2js_i32$0 ? wasm2js_f64$0 : wasm2js_f64$1); } + var FUNCTION_TABLE = []; return { add: $0, sub: $1, diff --git a/test/wasm2js/f64_cmp.2asm.js b/test/wasm2js/f64_cmp.2asm.js index 0bc1bcb71..f23103d4c 100644 --- a/test/wasm2js/f64_cmp.2asm.js +++ b/test/wasm2js/f64_cmp.2asm.js @@ -58,6 +58,7 @@ function asmFunc(global, env, buffer) { return x >= y | 0; } + var FUNCTION_TABLE = []; return { eq: $0, ne: $1, diff --git a/test/wasm2js/fac.2asm.js b/test/wasm2js/fac.2asm.js index f244548db..24a5f37e1 100644 --- a/test/wasm2js/fac.2asm.js +++ b/test/wasm2js/fac.2asm.js @@ -316,6 +316,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { fac_rec: $0, fac_rec_named: fac_rec_named, diff --git a/test/wasm2js/float-ops.2asm.js b/test/wasm2js/float-ops.2asm.js index 06bdd9b21..f6bd1a0d6 100644 --- a/test/wasm2js/float-ops.2asm.js +++ b/test/wasm2js/float-ops.2asm.js @@ -376,6 +376,7 @@ function asmFunc(global, env, buffer) { return (~~i64toi32_i32$0 >>> 0 | 0) == (0 | 0) & (i64toi32_i32$1 | 0) == (0 | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { f32_add: $1, f32_sub: $2, diff --git a/test/wasm2js/float_literals-modified.2asm.js b/test/wasm2js/float_literals-modified.2asm.js index c93840e9c..59bacf1c3 100644 --- a/test/wasm2js/float_literals-modified.2asm.js +++ b/test/wasm2js/float_literals-modified.2asm.js @@ -474,6 +474,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { f32_nan: $0, f32_positive_nan: $1, diff --git a/test/wasm2js/float_misc.2asm.js b/test/wasm2js/float_misc.2asm.js index 6eae19361..3de4561ed 100644 --- a/test/wasm2js/float_misc.2asm.js +++ b/test/wasm2js/float_misc.2asm.js @@ -250,6 +250,7 @@ function asmFunc(global, env, buffer) { return +(wasm2js_f64$0 = Math_ceil(var$0), wasm2js_f64$1 = Math_floor(var$0), wasm2js_i32$0 = var$0 < 0.0, wasm2js_i32$0 ? wasm2js_f64$0 : wasm2js_f64$1); } + var FUNCTION_TABLE = []; return { f32_add: $0, f32_sub: $1, diff --git a/test/wasm2js/forward.2asm.js b/test/wasm2js/forward.2asm.js index c7421abb8..2b1fbea06 100644 --- a/test/wasm2js/forward.2asm.js +++ b/test/wasm2js/forward.2asm.js @@ -36,6 +36,7 @@ function asmFunc(global, env, buffer) { return $6 | 0; } + var FUNCTION_TABLE = []; return { even: even, odd: odd diff --git a/test/wasm2js/func-ptr-offset.2asm.js b/test/wasm2js/func-ptr-offset.2asm.js index 3d75062a7..68d7755ea 100644 --- a/test/wasm2js/func-ptr-offset.2asm.js +++ b/test/wasm2js/func-ptr-offset.2asm.js @@ -38,11 +38,11 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = $0; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 3]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; return wasm2js_i32$0 | 0; } - var FUNCTION_TABLE_i = [t1, t1, t2, t3]; + var FUNCTION_TABLE = [null, t1, t2, t3]; return { call: $3 }; diff --git a/test/wasm2js/func.2asm.js b/test/wasm2js/func.2asm.js index 585c28552..75fd3581d 100644 --- a/test/wasm2js/func.2asm.js +++ b/test/wasm2js/func.2asm.js @@ -501,9 +501,9 @@ function asmFunc(global, env, buffer) { function $76() { var wasm2js_i32$0 = 0; wasm2js_i32$0 = 1; - FUNCTION_TABLE_v[wasm2js_i32$0 & 7](); + FUNCTION_TABLE[wasm2js_i32$0](); wasm2js_i32$0 = 4; - FUNCTION_TABLE_v[wasm2js_i32$0 & 7](); + FUNCTION_TABLE[wasm2js_i32$0](); } function $77() { @@ -523,7 +523,7 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(0.0); wasm2js_i32$7 = 0; wasm2js_i32$0 = 0; - FUNCTION_TABLE_vdiidiidiifi[wasm2js_i32$0 & 7](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); + FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); i64toi32_i32$2 = 0; i64toi32_i32$1 = 0; i64toi32_i32$0 = 0; @@ -539,7 +539,7 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(0.0); wasm2js_i32$1 = 0; wasm2js_i32$0 = 2; - FUNCTION_TABLE_vdiidiidiifi[wasm2js_i32$0 & 7](+wasm2js_f64$2, wasm2js_i32$7 | 0, wasm2js_i32$6 | 0, +wasm2js_f64$1, wasm2js_i32$5 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$0, wasm2js_i32$3 | 0, wasm2js_i32$2 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$1 | 0); + FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$2, wasm2js_i32$7 | 0, wasm2js_i32$6 | 0, +wasm2js_f64$1, wasm2js_i32$5 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$0, wasm2js_i32$3 | 0, wasm2js_i32$2 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$1 | 0); i64toi32_i32$0 = 0; i64toi32_i32$1 = 0; i64toi32_i32$2 = 0; @@ -555,13 +555,13 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(0.0); wasm2js_i32$7 = 0; wasm2js_i32$0 = 3; - FUNCTION_TABLE_vdiidiidiifi[wasm2js_i32$0 & 7](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); + FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); } function $78() { var wasm2js_i32$0 = 0; wasm2js_i32$0 = 1; - FUNCTION_TABLE_v[wasm2js_i32$0 & 7](); + FUNCTION_TABLE[wasm2js_i32$0](); } function $79() { @@ -578,11 +578,10 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(0.0); wasm2js_i32$7 = 0; wasm2js_i32$0 = 0; - FUNCTION_TABLE_vdiidiidiifi[wasm2js_i32$0 & 7](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); + FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0, +wasm2js_f64$2, wasm2js_i32$5 | 0, wasm2js_i32$6 | 0, Math_fround(wasm2js_f32$0), wasm2js_i32$7 | 0); } - var FUNCTION_TABLE_v = [empty_sig_2, empty_sig_2, empty_sig_2, empty_sig_2, empty_sig_1, empty_sig_2, empty_sig_2, empty_sig_2]; - var FUNCTION_TABLE_vdiidiidiifi = [complex_sig_3, complex_sig_3, complex_sig_1, complex_sig_3, complex_sig_3, complex_sig_3, complex_sig_3, complex_sig_3]; + var FUNCTION_TABLE = [complex_sig_3, empty_sig_2, complex_sig_1, complex_sig_3, empty_sig_1]; return { f: $2, g: h, diff --git a/test/wasm2js/func_ptrs.2asm.js b/test/wasm2js/func_ptrs.2asm.js index 53f330061..7836c4ca2 100644 --- a/test/wasm2js/func_ptrs.2asm.js +++ b/test/wasm2js/func_ptrs.2asm.js @@ -51,6 +51,7 @@ function asmFunc(global, env, buffer) { print($0 | 0); } + var FUNCTION_TABLE = []; return { one: $3, two: $4, @@ -113,7 +114,7 @@ function asmFunc(global, env, buffer) { i = i | 0; var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 7]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; return wasm2js_i32$0 | 0; } @@ -121,11 +122,11 @@ function asmFunc(global, env, buffer) { i = i | 0; var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 7]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; return wasm2js_i32$0 | 0; } - var FUNCTION_TABLE_i = [t1, t2, t3, u1, u2, t1, t3, t1]; + var FUNCTION_TABLE = [t1, t2, t3, u1, u2, t1, t3]; return { callt: $5, callu: $6 @@ -172,11 +173,11 @@ function asmFunc(global, env, buffer) { i = i | 0; var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE_i[wasm2js_i32$1 & 1]() | 0; + wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; return wasm2js_i32$0 | 0; } - var FUNCTION_TABLE_i = [t1, t2]; + var FUNCTION_TABLE = [t1, t2]; return { callt: $2 }; diff --git a/test/wasm2js/get-set-local.2asm.js b/test/wasm2js/get-set-local.2asm.js index 5f50972ba..ad466d8a0 100644 --- a/test/wasm2js/get-set-local.2asm.js +++ b/test/wasm2js/get-set-local.2asm.js @@ -39,6 +39,7 @@ function asmFunc(global, env, buffer) { return ($0 | 0) == (r | 0) & (i64toi32_i32$0 | 0) == (r$hi | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { check_extend_ui32: $1 }; diff --git a/test/wasm2js/get_local.2asm.js b/test/wasm2js/get_local.2asm.js index 2b8688bef..cfec0e802 100644 --- a/test/wasm2js/get_local.2asm.js +++ b/test/wasm2js/get_local.2asm.js @@ -102,6 +102,7 @@ function asmFunc(global, env, buffer) { return +($10 + (+$1_1 + ($2_1 + (+($3_1 >>> 0) + (+($4_1 | 0) + (+Math_fround(5.5) + ($21 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + 8.0)))))))); } + var FUNCTION_TABLE = []; return { type_local_i32: $0, type_local_i64: $1, diff --git a/test/wasm2js/grow-memory-tricky.2asm.js b/test/wasm2js/grow-memory-tricky.2asm.js index 62b615bdc..0e2754f9d 100644 --- a/test/wasm2js/grow-memory-tricky.2asm.js +++ b/test/wasm2js/grow-memory-tricky.2asm.js @@ -42,6 +42,7 @@ function asmFunc(global, env, buffer) { return __wasm_grow_memory(1 | 0) | 0; } + var FUNCTION_TABLE = []; function __wasm_grow_memory(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_current_memory() | 0; diff --git a/test/wasm2js/grow_memory.2asm.js b/test/wasm2js/grow_memory.2asm.js index ad8ff14b0..95fb080c4 100644 --- a/test/wasm2js/grow_memory.2asm.js +++ b/test/wasm2js/grow_memory.2asm.js @@ -31,6 +31,7 @@ function asmFunc(global, env, buffer) { return __wasm_current_memory() | 0; } + var FUNCTION_TABLE = []; function __wasm_grow_memory(pagesToAdd) { pagesToAdd = pagesToAdd | 0; var oldPages = __wasm_current_memory() | 0; diff --git a/test/wasm2js/hello_world.2asm.js b/test/wasm2js/hello_world.2asm.js index 403fdd4e2..59192ebfd 100644 --- a/test/wasm2js/hello_world.2asm.js +++ b/test/wasm2js/hello_world.2asm.js @@ -28,6 +28,7 @@ function asmFunc(global, env, buffer) { return x + y | 0 | 0; } + var FUNCTION_TABLE = []; return { add: add }; diff --git a/test/wasm2js/i32.2asm.js b/test/wasm2js/i32.2asm.js index adf917e9b..1f26c5ddb 100644 --- a/test/wasm2js/i32.2asm.js +++ b/test/wasm2js/i32.2asm.js @@ -232,6 +232,7 @@ function asmFunc(global, env, buffer) { return ((4294967295 << var$2 | 0) & var$0 | 0) >>> var$2 | 0 | (((4294967295 >>> var$1 | 0) & var$0 | 0) << var$1 | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { add: $0, sub: $1, diff --git a/test/wasm2js/i64-add-sub.2asm.js b/test/wasm2js/i64-add-sub.2asm.js index 521264318..1c2a4d58a 100644 --- a/test/wasm2js/i64-add-sub.2asm.js +++ b/test/wasm2js/i64-add-sub.2asm.js @@ -69,6 +69,7 @@ function asmFunc(global, env, buffer) { return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$5 | 0) == (i64toi32_i32$2 | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { check_add_i64: $1, check_sub_i64: $2 diff --git a/test/wasm2js/i64-ctz.2asm.js b/test/wasm2js/i64-ctz.2asm.js index bb217bc66..3ef91d90b 100644 --- a/test/wasm2js/i64-ctz.2asm.js +++ b/test/wasm2js/i64-ctz.2asm.js @@ -134,6 +134,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$5 | 0; } + var FUNCTION_TABLE = []; return { a: popcnt64, b: ctz64 diff --git a/test/wasm2js/i64-lowering.2asm.js b/test/wasm2js/i64-lowering.2asm.js index dbbbeb4a2..cb93e0af8 100644 --- a/test/wasm2js/i64-lowering.2asm.js +++ b/test/wasm2js/i64-lowering.2asm.js @@ -186,6 +186,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$0 >>> 0 < $1$hi >>> 0 | ((i64toi32_i32$0 | 0) == ($1$hi | 0) & $0 >>> 0 < $1_1 >>> 0 | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { eq_i64: $1, ne_i64: $2, diff --git a/test/wasm2js/i64-rotate.2asm.js b/test/wasm2js/i64-rotate.2asm.js index e2031cca0..4b33a5668 100644 --- a/test/wasm2js/i64-rotate.2asm.js +++ b/test/wasm2js/i64-rotate.2asm.js @@ -282,6 +282,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$5 | 0; } + var FUNCTION_TABLE = []; return { rotl: $1, rotr: $2 diff --git a/test/wasm2js/i64-select.2asm.js b/test/wasm2js/i64-select.2asm.js index e715515b0..1352cedfb 100644 --- a/test/wasm2js/i64-select.2asm.js +++ b/test/wasm2js/i64-select.2asm.js @@ -42,6 +42,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$3 | 0; } + var FUNCTION_TABLE = []; return { }; diff --git a/test/wasm2js/i64-shifts.2asm.js b/test/wasm2js/i64-shifts.2asm.js index 9c8d32f34..b08b9991a 100644 --- a/test/wasm2js/i64-shifts.2asm.js +++ b/test/wasm2js/i64-shifts.2asm.js @@ -88,6 +88,7 @@ function asmFunc(global, env, buffer) { return (i64toi32_i32$0 | 0) == (i64toi32_i32$3 | 0) & (i64toi32_i32$1 | 0) == ($2$hi | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { shl_i64: $1, shr_i64: $2 diff --git a/test/wasm2js/i64.2asm.js b/test/wasm2js/i64.2asm.js index 7f4bfbe09..c254713c8 100644 --- a/test/wasm2js/i64.2asm.js +++ b/test/wasm2js/i64.2asm.js @@ -1581,6 +1581,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { add: $0, sub: $1, diff --git a/test/wasm2js/int_exprs.2asm.js b/test/wasm2js/int_exprs.2asm.js index d9f08eaee..605482d1f 100644 --- a/test/wasm2js/int_exprs.2asm.js +++ b/test/wasm2js/int_exprs.2asm.js @@ -101,6 +101,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$4 >>> 0 < i64toi32_i32$0 >>> 0 | ((i64toi32_i32$4 | 0) == (i64toi32_i32$0 | 0) & i64toi32_i32$5 >>> 0 < i64toi32_i32$3 >>> 0 | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_cmp_s_offset: $0, i32_no_fold_cmp_u_offset: $1, @@ -150,6 +151,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { i64_no_fold_wrap_extend_s: $0 }; @@ -192,6 +194,7 @@ function asmFunc(global, env, buffer) { return x | 0; } + var FUNCTION_TABLE = []; return { i64_no_fold_wrap_extend_u: $0 }; @@ -298,6 +301,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$0 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_shl_shr_s: $0, i32_no_fold_shl_shr_u: $1, @@ -410,6 +414,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$0 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_shr_s_shl: $0, i32_no_fold_shr_u_shl: $1, @@ -1144,6 +1149,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_div_s_mul: $0, i32_no_fold_div_u_mul: $1, @@ -1878,6 +1884,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_mul_div_s: $0, i32_no_fold_mul_div_u: $1, @@ -2501,6 +2508,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_div_s_2: $0, i64_no_fold_div_s_2: $1 @@ -3103,6 +3111,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_no_fold_rem_s_2: $0, i64_no_fold_rem_s_2: $1 @@ -3739,6 +3748,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_div_s_3: $0, i32_div_u_3: $1, @@ -4379,6 +4389,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_div_s_3: $0, i32_div_u_3: $1, @@ -5019,6 +5030,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_div_s_5: $0, i32_div_u_5: $1, @@ -5659,6 +5671,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_div_s_7: $0, i32_div_u_7: $1, @@ -6282,6 +6295,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_rem_s_3: $0, i32_rem_u_3: $1, @@ -6905,6 +6919,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_rem_s_5: $0, i32_rem_u_5: $1, @@ -7528,6 +7543,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { i32_rem_s_7: $0, i32_rem_u_7: $1, diff --git a/test/wasm2js/int_literals.2asm.js b/test/wasm2js/int_literals.2asm.js index 7e30964f0..20e9d0c68 100644 --- a/test/wasm2js/int_literals.2asm.js +++ b/test/wasm2js/int_literals.2asm.js @@ -126,6 +126,7 @@ function asmFunc(global, env, buffer) { return 42 | 0; } + var FUNCTION_TABLE = []; return { i32_test: $0, i32_umax: $1, diff --git a/test/wasm2js/labels.2asm.js b/test/wasm2js/labels.2asm.js index a6bfe109a..495692961 100644 --- a/test/wasm2js/labels.2asm.js +++ b/test/wasm2js/labels.2asm.js @@ -318,6 +318,7 @@ function asmFunc(global, env, buffer) { return $1_2 + $2_2 | 0 | 0; } + var FUNCTION_TABLE = []; return { block: $0, loop1: $1, diff --git a/test/wasm2js/left-to-right.2asm.js b/test/wasm2js/left-to-right.2asm.js index 4d3f16859..933fce892 100644 --- a/test/wasm2js/left-to-right.2asm.js +++ b/test/wasm2js/left-to-right.2asm.js @@ -488,7 +488,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$1 = i32_left() | 0; wasm2js_i32$2 = i32_right() | 0; wasm2js_i32$0 = i32_callee() | 0; - FUNCTION_TABLE_iii[wasm2js_i32$0 & 7](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0; + FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0; return get() | 0 | 0; } @@ -1033,7 +1033,7 @@ function asmFunc(global, env, buffer) { wasm2js_i32$3 = $1; wasm2js_i32$4 = i64toi32_i32$1; wasm2js_i32$0 = i64_callee() | 0; - FUNCTION_TABLE_iiiii[wasm2js_i32$0 & 7](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0) | 0; + FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0) | 0; return get() | 0 | 0; } @@ -1153,7 +1153,7 @@ function asmFunc(global, env, buffer) { wasm2js_f32$0 = Math_fround(f32_left()); wasm2js_f32$1 = Math_fround(f32_right()); wasm2js_i32$0 = f32_callee() | 0; - FUNCTION_TABLE_iff[wasm2js_i32$0 & 7](Math_fround(wasm2js_f32$0), Math_fround(wasm2js_f32$1)) | 0; + FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0), Math_fround(wasm2js_f32$1)) | 0; return get() | 0 | 0; } @@ -1297,7 +1297,7 @@ function asmFunc(global, env, buffer) { wasm2js_f64$0 = +f64_left(); wasm2js_f64$1 = +f64_right(); wasm2js_i32$0 = f64_callee() | 0; - FUNCTION_TABLE_idd[wasm2js_i32$0 & 7](+wasm2js_f64$0, +wasm2js_f64$1) | 0; + FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, +wasm2js_f64$1) | 0; return get() | 0 | 0; } @@ -2120,10 +2120,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } - var FUNCTION_TABLE_idd = [f64_t0, f64_t0, f64_t0, f64_t0, f64_t0, f64_t0, f64_t0, f64_t1]; - var FUNCTION_TABLE_iff = [f32_t0, f32_t0, f32_t0, f32_t0, f32_t0, f32_t1, f32_t0, f32_t0]; - var FUNCTION_TABLE_iii = [i32_t0, i32_t1, i32_t0, i32_t0, i32_t0, i32_t0, i32_t0, i32_t0]; - var FUNCTION_TABLE_iiiii = [i64_t0, i64_t0, i64_t0, i64_t1, i64_t0, i64_t0, i64_t0, i64_t0]; + var FUNCTION_TABLE = [i32_t0, i32_t1, i64_t0, i64_t1, f32_t0, f32_t1, f64_t0, f64_t1]; return { i32_add: $35, i32_sub: $36, diff --git a/test/wasm2js/loop.2asm.js b/test/wasm2js/loop.2asm.js index bf53d0318..9287c1326 100644 --- a/test/wasm2js/loop.2asm.js +++ b/test/wasm2js/loop.2asm.js @@ -566,6 +566,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { empty: $1, singular: $2, diff --git a/test/wasm2js/nested-selects.2asm.js b/test/wasm2js/nested-selects.2asm.js index c08be2b2b..6827a54df 100644 --- a/test/wasm2js/nested-selects.2asm.js +++ b/test/wasm2js/nested-selects.2asm.js @@ -32,6 +32,7 @@ function asmFunc(global, env, buffer) { return (wasm2js_i32$0 = 4294967295, wasm2js_i32$1 = (wasm2js_i32$3 = 1, wasm2js_i32$4 = 0, wasm2js_i32$5 = ($0 | 0) > (0 | 0), wasm2js_i32$5 ? wasm2js_i32$3 : wasm2js_i32$4), wasm2js_i32$2 = ($0 | 0) < (0 | 0), wasm2js_i32$2 ? wasm2js_i32$0 : wasm2js_i32$1) | 0; } + var FUNCTION_TABLE = []; return { sign: $1 }; diff --git a/test/wasm2js/reinterpret.2asm.js b/test/wasm2js/reinterpret.2asm.js index 47521bb91..87b034eb3 100644 --- a/test/wasm2js/reinterpret.2asm.js +++ b/test/wasm2js/reinterpret.2asm.js @@ -54,6 +54,7 @@ function asmFunc(global, env, buffer) { return (HEAP32[__tempMemory__ >> 2] | 0 | 0) == ($0 | 0) & (i64toi32_i32$0 | 0) == ($0$hi | 0) | 0 | 0; } + var FUNCTION_TABLE = []; return { i32_roundtrip: $1, i64_roundtrip: $2 diff --git a/test/wasm2js/select.2asm.js b/test/wasm2js/select.2asm.js index ec21d2002..faf17aac1 100644 --- a/test/wasm2js/select.2asm.js +++ b/test/wasm2js/select.2asm.js @@ -75,6 +75,7 @@ function asmFunc(global, env, buffer) { return abort() | 0; } + var FUNCTION_TABLE = []; return { select_i32: $0, select_i64: $1, diff --git a/test/wasm2js/set_local.2asm.js b/test/wasm2js/set_local.2asm.js index 6728bb35e..1f4bd619b 100644 --- a/test/wasm2js/set_local.2asm.js +++ b/test/wasm2js/set_local.2asm.js @@ -97,6 +97,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { type_local_i32: $0, type_local_i64: $1, diff --git a/test/wasm2js/stack-modified.2asm.js b/test/wasm2js/stack-modified.2asm.js index babd7bdda..0c93ffc3b 100644 --- a/test/wasm2js/stack-modified.2asm.js +++ b/test/wasm2js/stack-modified.2asm.js @@ -328,6 +328,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$1 | 0; } + var FUNCTION_TABLE = []; return { fac_expr: $0, fac_stack: $1, diff --git a/test/wasm2js/switch.2asm.js b/test/wasm2js/switch.2asm.js index 053736116..6fdd6725f 100644 --- a/test/wasm2js/switch.2asm.js +++ b/test/wasm2js/switch.2asm.js @@ -183,6 +183,7 @@ function asmFunc(global, env, buffer) { return 1 | 0; } + var FUNCTION_TABLE = []; return { stmt: $0, expr: $1, diff --git a/test/wasm2js/tee_local.2asm.js b/test/wasm2js/tee_local.2asm.js index f07a4ca7e..4ef04c043 100644 --- a/test/wasm2js/tee_local.2asm.js +++ b/test/wasm2js/tee_local.2asm.js @@ -132,6 +132,7 @@ function asmFunc(global, env, buffer) { return +($10_1 + (+Math_fround(2.0) + (3.3 + (+(4 >>> 0) + (+(5 | 0) + (+Math_fround(5.5) + ($21 + (+(i64toi32_i32$1 >>> 0) + 4294967296.0 * +(i64toi32_i32$0 >>> 0) + 8.0)))))))); } + var FUNCTION_TABLE = []; return { type_local_i32: $0, type_local_i64: $1, diff --git a/test/wasm2js/traps.2asm.js b/test/wasm2js/traps.2asm.js index 026f20abc..d95284e77 100644 --- a/test/wasm2js/traps.2asm.js +++ b/test/wasm2js/traps.2asm.js @@ -634,6 +634,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { no_dce_i32_div_s: $0, no_dce_i32_div_u: $1, @@ -1267,6 +1268,7 @@ function asmFunc(global, env, buffer) { return 32 | 0; } + var FUNCTION_TABLE = []; return { no_dce_i32_rem_s: $0, no_dce_i32_rem_u: $1, @@ -1381,6 +1383,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$2 | 0; } + var FUNCTION_TABLE = []; return { no_dce_i32_trunc_s_f32: $0, no_dce_i32_trunc_u_f32: $1, @@ -1452,6 +1455,7 @@ function asmFunc(global, env, buffer) { return +(+HEAPF64[i >> 3]); } + var FUNCTION_TABLE = []; return { no_dce_i32_load: $0, no_dce_i64_load: $1, diff --git a/test/wasm2js/unaligned.2asm.js b/test/wasm2js/unaligned.2asm.js index e30a43f05..5e7234bc8 100644 --- a/test/wasm2js/unaligned.2asm.js +++ b/test/wasm2js/unaligned.2asm.js @@ -96,6 +96,7 @@ function asmFunc(global, env, buffer) { (wasm2js_i32$2 = wasm2js_i32$0, wasm2js_i32$3 = wasm2js_i32$1), ((HEAP8[(wasm2js_i32$2 + 4 | 0) >> 0] = wasm2js_i32$3 & 255 | 0, HEAP8[(wasm2js_i32$2 + 5 | 0) >> 0] = (wasm2js_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 6 | 0) >> 0] = (wasm2js_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 7 | 0) >> 0] = (wasm2js_i32$3 >>> 24 | 0) & 255 | 0; } + var FUNCTION_TABLE = []; return { i32_load: $0, i64_load: $1, diff --git a/test/wasm2js/unary-ops.2asm.js b/test/wasm2js/unary-ops.2asm.js index 8c9114540..642958f14 100644 --- a/test/wasm2js/unary-ops.2asm.js +++ b/test/wasm2js/unary-ops.2asm.js @@ -241,6 +241,7 @@ function asmFunc(global, env, buffer) { return i64toi32_i32$5 | 0; } + var FUNCTION_TABLE = []; return { i32_popcnt: $1, check_popcnt_i64: $2, |