diff options
-rw-r--r-- | src/tools/wasm2js.cpp | 3 | ||||
-rw-r--r-- | src/wasm2js.h | 490 | ||||
-rw-r--r-- | test/wasm2js.asserts.js | 4 | ||||
-rw-r--r-- | test/wasm2js.traps.js | 4 | ||||
-rw-r--r-- | test/wasm2js/call_indirect.2asm.js | 160 | ||||
-rw-r--r-- | test/wasm2js/emscripten.2asm.js | 3 | ||||
-rw-r--r-- | test/wasm2js/endianness.2asm.js | 52 | ||||
-rw-r--r-- | test/wasm2js/func-ptr-offset.2asm.js | 6 | ||||
-rw-r--r-- | test/wasm2js/func.2asm.js | 65 | ||||
-rw-r--r-- | test/wasm2js/func_ptrs.2asm.js | 18 | ||||
-rw-r--r-- | test/wasm2js/grow-memory-tricky.2asm.js | 8 | ||||
-rw-r--r-- | test/wasm2js/left-to-right.2asm.js | 168 | ||||
-rw-r--r-- | test/wasm2js/loop.2asm.js | 3 | ||||
-rw-r--r-- | test/wasm2js/select.2asm.js | 4 | ||||
-rw-r--r-- | test/wasm2js/unaligned.2asm.js | 32 | ||||
-rw-r--r-- | test/wasm2js/unreachable.2asm.js | 81 |
16 files changed, 274 insertions, 827 deletions
diff --git a/src/tools/wasm2js.cpp b/src/tools/wasm2js.cpp index 67a5d33b6..bc35ae4eb 100644 --- a/src/tools/wasm2js.cpp +++ b/src/tools/wasm2js.cpp @@ -57,6 +57,7 @@ private: SExpressionWasmBuilder& sexpBuilder; Output& out; Wasm2JSBuilder::Flags flags; + Module tempAllocationModule; Ref emitAssertReturnFunc(Builder& wasmBuilder, Element& e, @@ -75,7 +76,7 @@ private: Ref processFunction(Function* func) { Wasm2JSBuilder sub(flags); - return sub.processFunction(nullptr, func); + return sub.processStandaloneFunction(&tempAllocationModule, func); } void emitFunction(Ref func) { diff --git a/src/wasm2js.h b/src/wasm2js.h index 47d75e2c2..b2a35d5cb 100644 --- a/src/wasm2js.h +++ b/src/wasm2js.h @@ -35,6 +35,7 @@ #include "mixed_arena.h" #include "asm_v_wasm.h" #include "abi/js.h" +#include "ir/find_all.h" #include "ir/import-utils.h" #include "ir/load-utils.h" #include "ir/module-utils.h" @@ -69,6 +70,15 @@ void flattenAppend(Ref ast, Ref extra) { } } +// Appends extra to a chain of sequence elements +void sequenceAppend(Ref& ast, Ref extra) { + if (!ast.get()) { + ast = extra; + return; + } + ast = ValueBuilder::makeSeq(ast, extra); +} + // Used when taking a wasm name and generating a JS identifier. Each scope here // is used to ensure that all names have a unique name but the same wasm name // within a scope always resolves to the same symbol. @@ -99,42 +109,11 @@ static uint64_t constOffset(const T& segment) { // is tricky because wasm has statements == expressions, or in // other words, things like `break` and `if` can show up // in places where JS can't handle them, like inside an -// a loop's condition check. +// a loop's condition check. For that reason we use flat IR here. +// We do optimize it later, to allow some nesting, but we avoid +// non-JS-compatible nesting like block return values control +// flow in an if condition, etc. // -// We therefore need the ability to lower an expression into -// a block of statements, and we keep statementizing until we -// reach a context in which we can emit those statments. This -// requires that we create temp variables to store values -// that would otherwise flow directly into their targets if -// we were an expression (e.g. if a loop's condition check -// is a bunch of statements, we execute those statements, -// then use the computed value in the loop's condition; -// we might also be able to avoid an assign to a temp var -// at the end of those statements, and put just that -// value in the loop's condition). -// -// It is possible to do this in a single pass, if we just -// allocate temp vars freely. However, pathological cases -// can easily show bad behavior here, with many unnecessary -// temp vars. We could rely on optimization passes like -// Emscripten's eliminate/registerize pair, but we want -// wasm2js to be fairly fast to run, as it might run on -// the client. -// -// The approach taken here therefore performs 2 passes on -// each function. First, it finds which expression will need to -// be statementized. It also sees which labels can receive a break -// with a value. Given that information, in the second pass we can -// allocate // temp vars in an efficient manner, as we know when we -// need them and when their use is finished. They are allocated -// using an RAII class, so that they are automatically freed -// when the scope ends. This means that a node cannot allocate -// its own temp var; instead, the parent - which knows the -// child will return a value in a temp var - allocates it, -// and tells the child what temp var to emit to. The child -// can then pass forward that temp var to its children, -// optimizing away unnecessary forwarding. - class Wasm2JSBuilder { MixedArena allocator; @@ -150,12 +129,10 @@ public: Wasm2JSBuilder(Flags f) : flags(f) {} Ref processWasm(Module* wasm, Name funcName = ASM_FUNC); - Ref processFunction(Module* wasm, Function* func); - - // The first pass on an expression: scan it to see whether it will - // need to be statementized, and note spooky returns of values at - // a distance (aka break with a value). - void scanFunctionBody(Expression* curr); + Ref processFunction(Module* wasm, Function* func, bool standalone=false); + Ref processStandaloneFunction(Module* wasm, Function* func) { + return processFunction(wasm, func, true); + } // The second pass on an expression: process it fully, generating // JS @@ -245,14 +222,6 @@ public: return ret; } - void setStatement(Expression* curr) { - willBeStatement.insert(curr); - } - - bool isStatement(Expression* curr) { - return curr && willBeStatement.find(curr) != willBeStatement.end(); - } - size_t getTableSize() { return tableSize; } @@ -265,9 +234,6 @@ private: // Which are currently free to use std::vector<std::vector<IString>> frees; // type => list of free names - // Expressions that will be a statement. - std::set<Expression*> willBeStatement; - // Mangled names cache by interned names. // Utilizes the usually reused underlying cstring's pointer as the key. std::unordered_map<const char*, IString> mangledNames[(int) NameScope::Max]; @@ -395,7 +361,7 @@ Ref Wasm2JSBuilder::processWasm(Module* wasm, Name funcName) { std::move(params), i32, std::move(vars), - builder.makeGetGlobal(INT64_TO_32_HIGH_BITS, i32) + builder.makeReturn(builder.makeGetGlobal(INT64_TO_32_HIGH_BITS, i32)) ))); auto e = new Export(); e->name = WASM_FETCH_HIGH_BITS; @@ -655,23 +621,21 @@ void Wasm2JSBuilder::addGlobal(Ref ast, Global* global) { } } -static bool expressionEndsInReturn(Expression *e) { - if (e->is<Return>()) { - return true; - } - if (!e->is<Block>()) { - return false; +Ref Wasm2JSBuilder::processFunction(Module* m, Function* func, bool standaloneFunction) { + if (standaloneFunction) { + // We are only printing a function, not a whole module. Prepare it for + // translation now (if there were a module, we'd have done this for all + // functions in parallel, earlier). + PassRunner runner(m); + // We only run a subset of all passes here. TODO: create a full valid module + // for each assertion body. + runner.add("flatten"); + runner.add("simplify-locals-notee-nostructure"); + runner.add("reorder-locals"); + runner.add("vacuum"); + runner.runOnFunction(func); } - ExpressionList* stats = &static_cast<Block*>(e)->list; - return expressionEndsInReturn((*stats)[stats->size()-1]); -} -Ref Wasm2JSBuilder::processFunction(Module* m, Function* func) { - if (flags.debug) { - static int fns = 0; - std::cerr << "processFunction " << (fns++) << " " << func->name - << std::endl; - } // We will be symbolically referring to all variables in the function, so make // sure that everything has a name and it's unique. Names::ensureNames(func); @@ -701,35 +665,7 @@ Ref Wasm2JSBuilder::processFunction(Module* m, Function* func) { size_t theVarIndex = ret[3]->size(); ret[3]->push_back(theVar); // body - auto appendFinalReturn = [&] (Ref retVal) { - flattenAppend( - ret, - ValueBuilder::makeReturn( - makeAsmCoercion(retVal, wasmToAsmType(func->result)) - ) - ); - }; - scanFunctionBody(func->body); - bool endsInReturn = expressionEndsInReturn(func->body); - if (endsInReturn) { - // return already taken care of - flattenAppend(ret, processFunctionBody(m, func, NO_RESULT)); - } else if (isStatement(func->body)) { - // store result in variable then return it - IString result = - func->result != none ? getTemp(func->result, func) : NO_RESULT; - flattenAppend(ret, processFunctionBody(m, func, result)); - if (func->result != none) { - appendFinalReturn(ValueBuilder::makeName(result)); - freeTemp(func->result, result); - } - } else if (func->result != none) { - // whole thing is an expression, just return body - appendFinalReturn(processFunctionBody(m, func, EXPRESSION_RESULT)); - } else { - // func has no return - flattenAppend(ret, processFunctionBody(m, func, NO_RESULT)); - } + flattenAppend(ret, processFunctionBody(m, func, NO_RESULT)); // vars, including new temp vars for (Index i = func->getVarIndexBase(); i < func->getNumLocals(); i++) { ValueBuilder::appendToVar( @@ -745,95 +681,13 @@ Ref Wasm2JSBuilder::processFunction(Module* m, Function* func) { assert(frees[i32].size() == temps[i32]); // all temp vars should be free at the end assert(frees[f32].size() == temps[f32]); // all temp vars should be free at the end assert(frees[f64].size() == temps[f64]); // all temp vars should be free at the end - // cleanups - willBeStatement.clear(); return ret; } -void Wasm2JSBuilder::scanFunctionBody(Expression* curr) { - struct ExpressionScanner : public PostWalker<ExpressionScanner> { - Wasm2JSBuilder* parent; - - ExpressionScanner(Wasm2JSBuilder* parent) : parent(parent) {} - - // Visitors - - void visitBlock(Block* curr) { - parent->setStatement(curr); - } - void visitIf(If* curr) { - parent->setStatement(curr); - } - void visitLoop(Loop* curr) { - parent->setStatement(curr); - } - void visitBreak(Break* curr) { - parent->setStatement(curr); - } - void visitSwitch(Switch* curr) { - parent->setStatement(curr); - } - void visitCall(Call* curr) { - for (auto item : curr->operands) { - if (parent->isStatement(item)) { - parent->setStatement(curr); - break; - } - } - } - void visitCallIndirect(CallIndirect* curr) { - // TODO: this is a pessimization that probably wants to get tweaked in - // the future. If none of the arguments have any side effects then we - // should be able to safely have tighter codegen. - parent->setStatement(curr); - } - void visitSetLocal(SetLocal* curr) { - if (parent->isStatement(curr->value)) { - parent->setStatement(curr); - } - } - void visitLoad(Load* curr) { - if (parent->isStatement(curr->ptr)) { - parent->setStatement(curr); - } - } - void visitStore(Store* curr) { - parent->setStatement(curr); - } - void visitUnary(Unary* curr) { - if (parent->isStatement(curr->value)) { - parent->setStatement(curr); - } - } - void visitBinary(Binary* curr) { - if (parent->isStatement(curr->left) || parent->isStatement(curr->right)) { - parent->setStatement(curr); - } - } - void visitSelect(Select* curr) { - if (parent->isStatement(curr->ifTrue) || parent->isStatement(curr->ifFalse) || parent->isStatement(curr->condition)) { - parent->setStatement(curr); - } - } - void visitReturn(Return* curr) { - parent->setStatement(curr); - } - void visitHost(Host* curr) { - for (auto item : curr->operands) { - if (parent->isStatement(item)) { - parent->setStatement(curr); - break; - } - } - } - }; - ExpressionScanner(this).walk(curr); -} - Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString result) { struct ExpressionProcessor : public Visitor<ExpressionProcessor, Ref> { Wasm2JSBuilder* parent; - IString result; + IString result; // TODO: remove Function* func; Module* module; MixedArena allocator; @@ -844,7 +698,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul struct ScopedTemp { Wasm2JSBuilder* parent; Type type; - IString temp; + IString temp; // TODO: switch to indexes; avoid names bool needFree; // @param possible if provided, this is a variable we can use as our temp. it has already been // allocated in a higher scope, and we can just assign to it as our result is @@ -886,22 +740,11 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul return visit(curr, temp.temp); } - // this result is for an asm expression slot, but it might be a statement - Ref visitForExpression(Expression* curr, Type type, IString& tempName) { - if (isStatement(curr)) { - ScopedTemp temp(type, parent, func); - tempName = temp.temp; - return visit(curr, temp); - } else { - return visit(curr, EXPRESSION_RESULT); - } - } - Ref visitAndAssign(Expression* curr, IString result) { Ref ret = visit(curr, result); // if it's not already a statement, then it's an expression, and we need to assign it // (if it is a statement, it already assigns to the result var) - if (!isStatement(curr) && result != NO_RESULT) { + if (result != NO_RESULT) { ret = ValueBuilder::makeStatement( ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, ret)); } @@ -912,10 +755,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul return visitAndAssign(curr, temp.getName()); } - bool isStatement(Expression* curr) { - return parent->isStatement(curr); - } - // Expressions with control flow turn into a block, which we must // then handle, even if we are an expression. bool isBlock(Ref ast) { @@ -961,7 +800,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul Ref visitIf(If* curr) { IString temp; - Ref condition = visitForExpression(curr->condition, i32, temp); + Ref condition = visit(curr->condition, EXPRESSION_RESULT); Ref ifTrue = ValueBuilder::makeStatement(visitAndAssign(curr->ifTrue, result)); Ref ifFalse; if (curr->ifFalse) { @@ -1017,14 +856,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul Ref visitSwitch(Switch* curr) { assert(!curr->value); Ref ret = ValueBuilder::makeBlock(); - Ref condition; - if (isStatement(curr->condition)) { - ScopedTemp temp(i32, parent, func); - flattenAppend(ret[2], visit(curr->condition, temp)); - condition = temp.getAstName(); - } else { - condition = visit(curr->condition, EXPRESSION_RESULT); - } + Ref condition = visit(curr->condition, EXPRESSION_RESULT); Ref theSwitch = ValueBuilder::makeSwitch(makeAsmCoercion(condition, ASM_INT)); ret[1]->push_back(theSwitch); @@ -1037,102 +869,52 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul return ret; } - Ref makeStatementizedCall(ExpressionList& operands, - Ref ret, - std::function<Ref()> genTheCall, - IString result, - Type type) { + Ref visitCall(Call* curr) { + Ref theCall = ValueBuilder::makeCall(fromName(curr->target, NameScope::Top)); + for (auto operand : curr->operands) { + theCall[2]->push_back( + makeAsmCoercion(visit(operand, EXPRESSION_RESULT), + wasmToAsmType(operand->type))); + } + return makeAsmCoercion(theCall, wasmToAsmType(curr->type)); + } + + 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 doesn't have any side effects. + Ref ret; + ScopedTemp idx(i32, parent, func); std::vector<ScopedTemp*> temps; // TODO: utility class, with destructor? - for (auto& operand : operands) { + for (auto& operand : curr->operands) { temps.push_back(new ScopedTemp(operand->type, parent, func)); IString temp = temps.back()->temp; - flattenAppend(ret, visitAndAssign(operand, temp)); + sequenceAppend(ret, visitAndAssign(operand, temp)); } - Ref theCall = genTheCall(); + sequenceAppend(ret, visitAndAssign(curr->target, idx)); + Ref theCall = ValueBuilder::makeCall(ValueBuilder::makeSub( + ValueBuilder::makeName(FUNCTION_TABLE), + idx.getAstName() + )); for (size_t i = 0; i < temps.size(); i++) { IString temp = temps[i]->temp; - auto &operand = operands[i]; + auto &operand = curr->operands[i]; theCall[2]->push_back(makeAsmCoercion(ValueBuilder::makeName(temp), wasmToAsmType(operand->type))); } - theCall = makeAsmCoercion(theCall, wasmToAsmType(type)); - if (result != NO_RESULT) { - theCall = ValueBuilder::makeStatement( - ValueBuilder::makeBinary( - ValueBuilder::makeName(result), SET, theCall)); - } - flattenAppend(ret, theCall); + theCall = makeAsmCoercion(theCall, wasmToAsmType(curr->type)); + sequenceAppend(ret, theCall); for (auto temp : temps) { delete temp; } return ret; } - Ref visitGenericCall(Expression* curr, Name target, - ExpressionList& operands) { - Ref theCall = ValueBuilder::makeCall(fromName(target, NameScope::Top)); - if (!isStatement(curr)) { - // none of our operands is a statement; go right ahead and create a - // simple expression - for (auto operand : operands) { - theCall[2]->push_back( - makeAsmCoercion(visit(operand, EXPRESSION_RESULT), - wasmToAsmType(operand->type))); - } - return makeAsmCoercion(theCall, wasmToAsmType(curr->type)); - } - // we must statementize them all - return makeStatementizedCall(operands, ValueBuilder::makeBlock(), - [&]() { return theCall; }, - result, curr->type); - } - - Ref visitCall(Call* curr) { - return visitGenericCall(curr, curr->target, curr->operands); - } - - 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 doesn't have any side effects. - assert(isStatement(curr)); - Ref ret = ValueBuilder::makeBlock(); - ScopedTemp idx(i32, parent, func); - return makeStatementizedCall( - curr->operands, - ret, - [&]() { - flattenAppend(ret, visitAndAssign(curr->target, idx)); - return ValueBuilder::makeCall(ValueBuilder::makeSub( - ValueBuilder::makeName(FUNCTION_TABLE), - idx.getAstName() - )); - }, - result, - curr->type - ); - } - + // TODO: remove Ref makeSetVar(Expression* curr, Expression* value, Name name, NameScope scope) { - if (!isStatement(curr)) { - return ValueBuilder::makeBinary( - ValueBuilder::makeName(fromName(name, scope)), SET, - visit(value, EXPRESSION_RESULT) - ); - } - // if result was provided, our child can just assign there. - // Otherwise, allocate a temp for it to assign to. - ScopedTemp temp(value->type, parent, func, result); - Ref ret = blockify(visit(value, temp)); - // the output was assigned to result, so we can just assign it to our target - ret[1]->push_back( - ValueBuilder::makeStatement( - ValueBuilder::makeBinary( - ValueBuilder::makeName(fromName(name, scope)), SET, - temp.getAstName() - ) - ) + return ValueBuilder::makeBinary( + ValueBuilder::makeName(fromName(name, scope)), SET, + visit(value, EXPRESSION_RESULT) ); - return ret; } Ref visitGetLocal(GetLocal* curr) { @@ -1159,16 +941,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitLoad(Load* curr) { - if (isStatement(curr)) { - ScopedTemp temp(i32, parent, func); - GetLocal fakeLocal(allocator); - fakeLocal.index = func->getLocalIndex(temp.getName()); - Load fakeLoad = *curr; - fakeLoad.ptr = &fakeLocal; - Ref ret = blockify(visitAndAssign(curr->ptr, temp)); - flattenAppend(ret, visitAndAssign(&fakeLoad, result)); - return ret; - } if (curr->align != 0 && curr->align < curr->bytes) { // set the pointer to a local ScopedTemp temp(i32, parent, func); @@ -1248,23 +1020,41 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitStore(Store* curr) { - if (isStatement(curr)) { - ScopedTemp tempPtr(i32, parent, func); - ScopedTemp tempValue(curr->valueType, parent, func); - GetLocal fakeLocalPtr(allocator); - fakeLocalPtr.index = func->getLocalIndex(tempPtr.getName()); - fakeLocalPtr.type = curr->ptr->type; - GetLocal fakeLocalValue(allocator); - fakeLocalValue.index = func->getLocalIndex(tempValue.getName()); - fakeLocalValue.type = curr->value->type; - Store fakeStore = *curr; - fakeStore.ptr = &fakeLocalPtr; - fakeStore.value = &fakeLocalValue; - Ref ret = blockify(visitAndAssign(curr->ptr, tempPtr)); - flattenAppend(ret, visitAndAssign(curr->value, tempValue)); - flattenAppend(ret, visitAndAssign(&fakeStore, result)); - return ret; + if (module->memory.initial < module->memory.max && curr->type != unreachable) { + // In JS, if memory grows then it is dangerous to write + // HEAP[f()] = .. + // or + // HEAP[..] = f() + // since if the call swaps HEAP (in a growth operation) then + // we will not actually write to the new version (since the + // semantics of JS mean we already looked at HEAP and have + // decided where to assign to). + if (!FindAll<Call>(curr->ptr).list.empty() || + !FindAll<Call>(curr->value).list.empty() || + !FindAll<CallIndirect>(curr->ptr).list.empty() || + !FindAll<CallIndirect>(curr->value).list.empty() || + !FindAll<Host>(curr->ptr).list.empty() || + !FindAll<Host>(curr->value).list.empty()) { + Ref ret; + ScopedTemp ptr(i32, parent, func); + sequenceAppend(ret, visitAndAssign(curr->ptr, ptr)); + ScopedTemp value(curr->value->type, parent, func); + sequenceAppend(ret, visitAndAssign(curr->value, value)); + GetLocal getPtr; + getPtr.index = func->getLocalIndex(ptr.getName()); + getPtr.type = i32; + GetLocal getValue; + getValue.index = func->getLocalIndex(value.getName()); + getValue.type = curr->value->type; + Store fakeStore = *curr; + fakeStore.ptr = &getPtr; + fakeStore.value = &getValue; + sequenceAppend(ret, visitStore(&fakeStore)); + return ret; + } } + // FIXME if memory growth, store ptr cannot contain a function call + // also other stores to memory, check them, all makeSub's if (curr->align != 0 && curr->align < curr->bytes) { // set the pointer to a local ScopedTemp temp(i32, parent, func); @@ -1351,7 +1141,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitDrop(Drop* curr) { - assert(!isStatement(curr)); return visitAndAssign(curr->value, result); } @@ -1390,16 +1179,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitUnary(Unary* curr) { - if (isStatement(curr)) { - ScopedTemp temp(curr->value->type, parent, func); - GetLocal fakeLocal(allocator); - fakeLocal.index = func->getLocalIndex(temp.getName()); - Unary fakeUnary = *curr; - fakeUnary.value = &fakeLocal; - Ref ret = blockify(visitAndAssign(curr->value, temp)); - flattenAppend(ret, visitAndAssign(&fakeUnary, result)); - return ret; - } // normal unary switch (curr->type) { case i32: { @@ -1577,21 +1356,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitBinary(Binary* curr) { - if (isStatement(curr)) { - ScopedTemp tempLeft(curr->left->type, parent, func); - GetLocal fakeLocalLeft(allocator); - fakeLocalLeft.index = func->getLocalIndex(tempLeft.getName()); - ScopedTemp tempRight(curr->right->type, parent, func); - GetLocal fakeLocalRight(allocator); - fakeLocalRight.index = func->getLocalIndex(tempRight.getName()); - Binary fakeBinary = *curr; - fakeBinary.left = &fakeLocalLeft; - fakeBinary.right = &fakeLocalRight; - Ref ret = blockify(visitAndAssign(curr->left, tempLeft)); - flattenAppend(ret, visitAndAssign(curr->right, tempRight)); - flattenAppend(ret, visitAndAssign(&fakeBinary, result)); - return ret; - } // normal binary Ref left = visit(curr->left, EXPRESSION_RESULT); Ref right = visit(curr->right, EXPRESSION_RESULT); @@ -1753,26 +1517,6 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitSelect(Select* curr) { - if (isStatement(curr)) { - ScopedTemp tempIfTrue(curr->ifTrue->type, parent, func); - GetLocal fakeLocalIfTrue(allocator); - fakeLocalIfTrue.index = func->getLocalIndex(tempIfTrue.getName()); - ScopedTemp tempIfFalse(curr->ifFalse->type, parent, func); - GetLocal fakeLocalIfFalse(allocator); - fakeLocalIfFalse.index = func->getLocalIndex(tempIfFalse.getName()); - ScopedTemp tempCondition(i32, parent, func); - GetLocal fakeCondition(allocator); - fakeCondition.index = func->getLocalIndex(tempCondition.getName()); - Select fakeSelect = *curr; - fakeSelect.ifTrue = &fakeLocalIfTrue; - fakeSelect.ifFalse = &fakeLocalIfFalse; - fakeSelect.condition = &fakeCondition; - Ref ret = blockify(visitAndAssign(curr->ifTrue, tempIfTrue)); - flattenAppend(ret, visitAndAssign(curr->ifFalse, tempIfFalse)); - flattenAppend(ret, visitAndAssign(curr->condition, tempCondition)); - flattenAppend(ret, visitAndAssign(&fakeSelect, result)); - return ret; - } // normal select ScopedTemp tempIfTrue(curr->type, parent, func), tempIfFalse(curr->type, parent, func), @@ -1798,26 +1542,14 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } Ref visitReturn(Return* curr) { - if (curr->value == nullptr) { + if (!curr->value) { return ValueBuilder::makeReturn(Ref()); } - if (isStatement(curr->value)) { - ScopedTemp temp(curr->value->type, parent, func); - Ref ret = ValueBuilder::makeBlock(); - flattenAppend(ret, visitAndAssign(curr->value, temp)); - Ref coerced = makeAsmCoercion( - temp.getAstName(), - wasmToAsmType(curr->value->type) - ); - flattenAppend(ret, ValueBuilder::makeReturn(coerced)); - return ret; - } else { - Ref val = makeAsmCoercion( - visit(curr->value, NO_RESULT), - wasmToAsmType(curr->value->type) - ); - return ValueBuilder::makeReturn(val); - } + Ref val = makeAsmCoercion( + visit(curr->value, EXPRESSION_RESULT), + wasmToAsmType(curr->value->type) + ); + return ValueBuilder::makeReturn(val); } Ref visitHost(Host* curr) { @@ -1832,11 +1564,7 @@ Ref Wasm2JSBuilder::processFunctionBody(Module* m, Function* func, IString resul } else { return ValueBuilder::makeCall(ABORT_FUNC); } - if (isStatement(curr)) { - return ValueBuilder::makeBinary(ValueBuilder::makeName(result), SET, call); - } else { - return call; - } + return call; } Ref visitNop(Nop* curr) { diff --git a/test/wasm2js.asserts.js b/test/wasm2js.asserts.js index 3ab4b1d08..3f0fb6709 100644 --- a/test/wasm2js.asserts.js +++ b/test/wasm2js.asserts.js @@ -79,10 +79,8 @@ function asmFunc0(global, env, buffer) { const memasmFunc0 = new ArrayBuffer(65536); const retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0); function check1() { - var wasm2js_i32$0 = 0; retasmFunc0.empty(); - wasm2js_i32$0 = 1; - return wasm2js_i32$0 | 0; + return 1 | 0; } if (!check1()) throw 'assertion failed: ( assert_return ( call empty ) )'; diff --git a/test/wasm2js.traps.js b/test/wasm2js.traps.js index 65659966d..780acadfc 100644 --- a/test/wasm2js.traps.js +++ b/test/wasm2js.traps.js @@ -79,10 +79,8 @@ function asmFunc0(global, env, buffer) { const memasmFunc0 = new ArrayBuffer(65536); const retasmFunc0 = asmFunc0({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc0); function check1() { - var wasm2js_i32$0 = 0; retasmFunc0.empty(); - wasm2js_i32$0 = 1; - return wasm2js_i32$0 | 0; + return 1 | 0; } if (!check1()) throw 'assertion failed: ( assert_return ( call empty ) )'; diff --git a/test/wasm2js/call_indirect.2asm.js b/test/wasm2js/call_indirect.2asm.js index 070ae836a..ae5792dd1 100644 --- a/test/wasm2js/call_indirect.2asm.js +++ b/test/wasm2js/call_indirect.2asm.js @@ -119,139 +119,92 @@ 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[wasm2js_i32$1]() | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0; + return (wasm2js_i32$0 = 0, FUNCTION_TABLE[wasm2js_i32$0]() | 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[wasm2js_i32$1]() | 0; - i64toi32_i32$0 = wasm2js_i32$0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0; + i64toi32_i32$0 = (wasm2js_i32$0 = 1, FUNCTION_TABLE[wasm2js_i32$0]() | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $18() { - var wasm2js_f32$0 = Math_fround(0), wasm2js_i32$0 = 0; - wasm2js_i32$0 = 2; - wasm2js_f32$0 = Math_fround(FUNCTION_TABLE[wasm2js_i32$0]()); - return Math_fround(wasm2js_f32$0); + var wasm2js_i32$0 = 0; + return Math_fround((wasm2js_i32$0 = 2, Math_fround(FUNCTION_TABLE[wasm2js_i32$0]()))); } function $19() { - var wasm2js_f64$0 = 0.0, wasm2js_i32$0 = 0; - wasm2js_i32$0 = 3; - wasm2js_f64$0 = +FUNCTION_TABLE[wasm2js_i32$0](); - return +wasm2js_f64$0; + var wasm2js_i32$0 = 0; + return +(wasm2js_i32$0 = 3, +FUNCTION_TABLE[wasm2js_i32$0]()); } function $20() { - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = 0; - wasm2js_i32$2 = 100; - wasm2js_i32$3 = i64toi32_i32$0; - wasm2js_i32$1 = 5; - 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$0 = (((wasm2js_i32$1 = 100, wasm2js_i32$2 = i64toi32_i32$0), wasm2js_i32$0 = 5), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $21() { - 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[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + return ((wasm2js_i32$1 = 32, wasm2js_i32$0 = 4), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0) | 0) | 0; } function $22() { - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = 0; - wasm2js_i32$2 = 64; - wasm2js_i32$3 = i64toi32_i32$0; - wasm2js_i32$1 = 5; - 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$0 = (((wasm2js_i32$1 = 64, wasm2js_i32$2 = i64toi32_i32$0), wasm2js_i32$0 = 5), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $23() { - 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[wasm2js_i32$0](Math_fround(wasm2js_f32$1))); - return Math_fround(wasm2js_f32$0); + var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0); + return Math_fround(((wasm2js_f32$0 = Math_fround(1.3200000524520874), wasm2js_i32$0 = 6), Math_fround(FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0))))); } function $24() { - 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[wasm2js_i32$0](+wasm2js_f64$1); - return +wasm2js_f64$0; + var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0; + return +((wasm2js_f64$0 = 1.64, wasm2js_i32$0 = 7), +FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0)); } function $25() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_f32$0 = Math_fround(0), wasm2js_i32$2 = 0; - wasm2js_f32$0 = Math_fround(32.099998474121094); - wasm2js_i32$2 = 32; - wasm2js_i32$1 = 8; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](Math_fround(wasm2js_f32$0), wasm2js_i32$2 | 0) | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0), wasm2js_i32$1 = 0; + return (((wasm2js_f32$0 = Math_fround(32.099998474121094), wasm2js_i32$1 = 32), wasm2js_i32$0 = 8), FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0), wasm2js_i32$1 | 0) | 0) | 0; } function $26() { - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0, wasm2js_i32$4 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; i64toi32_i32$0 = 0; - wasm2js_i32$2 = 32; - wasm2js_i32$3 = 64; - wasm2js_i32$4 = i64toi32_i32$0; - wasm2js_i32$1 = 9; - 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$0 = ((((wasm2js_i32$1 = 32, wasm2js_i32$2 = 64), wasm2js_i32$3 = i64toi32_i32$0), wasm2js_i32$0 = 9), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; } function $27() { - var wasm2js_f32$0 = Math_fround(0), wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0, wasm2js_f32$1 = Math_fround(0); - wasm2js_f64$0 = 64.0; - wasm2js_f32$1 = Math_fround(32.0); - wasm2js_i32$0 = 10; - wasm2js_f32$0 = Math_fround(FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, Math_fround(wasm2js_f32$1))); - return Math_fround(wasm2js_f32$0); + var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0, wasm2js_f32$0 = Math_fround(0); + return Math_fround((((wasm2js_f64$0 = 64.0, wasm2js_f32$0 = Math_fround(32.0)), wasm2js_i32$0 = 10), Math_fround(FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, Math_fround(wasm2js_f32$0))))); } function $28() { - var wasm2js_f64$0 = 0.0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_f64$1 = 0.0; - wasm2js_i32$1 = 64; - wasm2js_i32$2 = 0; - wasm2js_f64$1 = 64.1; - wasm2js_i32$0 = 11; - wasm2js_f64$0 = +FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$1); - return +wasm2js_f64$0; + var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_f64$0 = 0.0; + return +((((wasm2js_i32$1 = 64, wasm2js_i32$2 = 0), wasm2js_f64$0 = 64.1), wasm2js_i32$0 = 11), +FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, +wasm2js_f64$0)); } function $29($0, $1, $1$hi) { $0 = $0 | 0; $1 = $1 | 0; $1$hi = $1$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = $1$hi; - wasm2js_i32$2 = $1; - wasm2js_i32$3 = i64toi32_i32$0; - wasm2js_i32$1 = $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$0 = (((wasm2js_i32$1 = $1, wasm2js_i32$2 = i64toi32_i32$0), wasm2js_i32$0 = $0), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; @@ -259,13 +212,9 @@ function asmFunc(global, env, buffer) { function $30($0) { $0 = $0 | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = 0; - wasm2js_i32$2 = 9; - wasm2js_i32$3 = i64toi32_i32$0; - wasm2js_i32$1 = $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$0 = (((wasm2js_i32$1 = 9, wasm2js_i32$2 = i64toi32_i32$0), wasm2js_i32$0 = $0), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; return i64toi32_i32$0 | 0; @@ -274,7 +223,7 @@ function asmFunc(global, env, buffer) { function fac($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; - var i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, $8 = 0, $8$hi = 0, i64toi32_i32$3 = 0, $6 = 0, $6$hi = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$5 = 0, i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, $8 = 0, $8$hi = 0, i64toi32_i32$3 = 0, $6 = 0, $6$hi = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = $0$hi; if (($0 | i64toi32_i32$0 | 0 | 0) == (0 | 0)) { { @@ -289,11 +238,7 @@ function asmFunc(global, env, buffer) { i64toi32_i32$3 = 1; i64toi32_i32$5 = (i64toi32_i32$2 >>> 0 < i64toi32_i32$3 >>> 0) + 0 | 0; i64toi32_i32$5 = i64toi32_i32$0 - i64toi32_i32$5 | 0; - 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[wasm2js_i32$1](wasm2js_i32$2 | 0, wasm2js_i32$3 | 0) | 0; - i64toi32_i32$5 = wasm2js_i32$0; + i64toi32_i32$5 = (((wasm2js_i32$1 = i64toi32_i32$2 - i64toi32_i32$3 | 0, wasm2js_i32$2 = i64toi32_i32$5), wasm2js_i32$0 = 12), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $6 = i64toi32_i32$5; $6$hi = i64toi32_i32$2; @@ -314,7 +259,7 @@ function asmFunc(global, env, buffer) { function fib($0, $0$hi) { $0 = $0 | 0; $0$hi = $0$hi | 0; - var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$6 = 0, $10 = 0, $10$hi = 0, $5 = 0, $5$hi = 0, $8 = 0, $8$hi = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$2 = 0, i64toi32_i32$3 = 0, i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, i64toi32_i32$5 = 0, i64toi32_i32$4 = 0, i64toi32_i32$6 = 0, $10 = 0, $10$hi = 0, $5 = 0, $5$hi = 0, $8 = 0, $8$hi = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; i64toi32_i32$0 = $0$hi; i64toi32_i32$2 = $0; i64toi32_i32$1 = 0; @@ -335,11 +280,7 @@ function asmFunc(global, env, buffer) { i64toi32_i32$6 = i64toi32_i32$3 >>> 0 < i64toi32_i32$1 >>> 0; i64toi32_i32$5 = i64toi32_i32$6 + i64toi32_i32$0 | 0; i64toi32_i32$5 = i64toi32_i32$2 - i64toi32_i32$5 | 0; - wasm2js_i32$2 = i64toi32_i32$4; - wasm2js_i32$3 = i64toi32_i32$5; - wasm2js_i32$1 = 13; - 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$5 = (((wasm2js_i32$1 = i64toi32_i32$4, wasm2js_i32$2 = i64toi32_i32$5), wasm2js_i32$0 = 13), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0); i64toi32_i32$3 = i64toi32_i32$HIGH_BITS; $5 = i64toi32_i32$5; $5$hi = i64toi32_i32$3; @@ -352,11 +293,7 @@ function asmFunc(global, env, buffer) { i64toi32_i32$6 = i64toi32_i32$2 >>> 0 < i64toi32_i32$1 >>> 0; i64toi32_i32$4 = i64toi32_i32$6 + i64toi32_i32$5 | 0; i64toi32_i32$4 = i64toi32_i32$3 - i64toi32_i32$4 | 0; - wasm2js_i32$3 = i64toi32_i32$0; - wasm2js_i32$2 = i64toi32_i32$4; - wasm2js_i32$1 = 13; - 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$4 = (((wasm2js_i32$2 = i64toi32_i32$0, wasm2js_i32$1 = i64toi32_i32$4), wasm2js_i32$0 = 13), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$2 | 0, wasm2js_i32$1 | 0) | 0); i64toi32_i32$2 = i64toi32_i32$HIGH_BITS; $8 = i64toi32_i32$4; $8$hi = i64toi32_i32$2; @@ -381,52 +318,39 @@ function asmFunc(global, env, buffer) { function even($0) { $0 = $0 | 0; - var $6 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; + var $6 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; if (($0 | 0) == (0 | 0)) { $6 = 44 } else { - { - wasm2js_i32$2 = $0 - 1 | 0; - wasm2js_i32$1 = 15; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; - $6 = wasm2js_i32$0; - } + $6 = ((wasm2js_i32$1 = $0 - 1 | 0, wasm2js_i32$0 = 15), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0) | 0) } return $6 | 0; } function odd($0) { $0 = $0 | 0; - var $6 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; + var $6 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; if (($0 | 0) == (0 | 0)) { $6 = 99 } else { - { - wasm2js_i32$2 = $0 - 1 | 0; - wasm2js_i32$1 = 14; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1](wasm2js_i32$2 | 0) | 0; - $6 = wasm2js_i32$0; - } + $6 = ((wasm2js_i32$1 = $0 - 1 | 0, wasm2js_i32$0 = 14), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0) | 0) } return $6 | 0; } function runaway() { var wasm2js_i32$0 = 0; - wasm2js_i32$0 = 16; - FUNCTION_TABLE[wasm2js_i32$0](); + wasm2js_i32$0 = 16, FUNCTION_TABLE[wasm2js_i32$0](); } function mutual_runaway1() { var wasm2js_i32$0 = 0; - wasm2js_i32$0 = 18; - FUNCTION_TABLE[wasm2js_i32$0](); + wasm2js_i32$0 = 18, FUNCTION_TABLE[wasm2js_i32$0](); } function mutual_runaway2() { var wasm2js_i32$0 = 0; - wasm2js_i32$0 = 17; - FUNCTION_TABLE[wasm2js_i32$0](); + wasm2js_i32$0 = 17, FUNCTION_TABLE[wasm2js_i32$0](); } function legalstub$17() { diff --git a/test/wasm2js/emscripten.2asm.js b/test/wasm2js/emscripten.2asm.js index b0509ebb6..a0639aad0 100644 --- a/test/wasm2js/emscripten.2asm.js +++ b/test/wasm2js/emscripten.2asm.js @@ -30,8 +30,7 @@ function asmFunc(global, env, buffer) { var wasm2js_i32$0 = 0; 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[wasm2js_i32$0](); + wasm2js_i32$0 = HEAP32[(0 + 1030 | 0) >> 2] | 0, FUNCTION_TABLE[wasm2js_i32$0](); } function other() { diff --git a/test/wasm2js/endianness.2asm.js b/test/wasm2js/endianness.2asm.js index 9696bc3dd..257d62eeb 100644 --- a/test/wasm2js/endianness.2asm.js +++ b/test/wasm2js/endianness.2asm.js @@ -57,13 +57,8 @@ function asmFunc(global, env, buffer) { function i16_store_little(address, value) { address = address | 0; value = value | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = address; - wasm2js_i32$1 = value; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; - wasm2js_i32$0 = address + 1 | 0; - wasm2js_i32$1 = value >>> 8 | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[address >> 0] = value; + HEAP8[(address + 1 | 0) >> 0] = value >>> 8 | 0; } function i32_store_little(address, value) { @@ -238,30 +233,22 @@ function asmFunc(global, env, buffer) { function $16(value) { value = value | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = value; - HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; + HEAP16[0 >> 1] = value; return i16_load_little(0 | 0) | 0 | 0; } function $17(value) { value = value | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = value; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + HEAP32[0 >> 2] = value; return i32_load_little(0 | 0) | 0 | 0; } function $18(value, value$hi) { value = value | 0; value$hi = value$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = value; - HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; + HEAP16[0 >> 1] = value; i64toi32_i32$0 = 0; i64toi32_i32$1 = i16_load_little(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; @@ -271,11 +258,9 @@ function asmFunc(global, env, buffer) { function $19(value, value$hi) { value = value | 0; value$hi = value$hi | 0; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; i64toi32_i32$0 = value$hi; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = value; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + HEAP32[0 >> 2] = value; i64toi32_i32$0 = 0; i64toi32_i32$1 = i32_load_little(0 | 0) | 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; @@ -285,15 +270,11 @@ function asmFunc(global, env, buffer) { function $20(value, value$hi) { value = value | 0; value$hi = value$hi | 0; - var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; i64toi32_i32$0 = value$hi; i64toi32_i32$1 = 0; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = value; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = i64toi32_i32$0; - (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; + HEAP32[i64toi32_i32$1 >> 2] = value; + (wasm2js_i32$0 = i64toi32_i32$1, wasm2js_i32$1 = i64toi32_i32$0), ((HEAP8[(wasm2js_i32$0 + 4 | 0) >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 5 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 6 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 7 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; i64toi32_i32$0 = i64_load_little(0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; i64toi32_i32$HIGH_BITS = i64toi32_i32$1; @@ -302,19 +283,14 @@ function asmFunc(global, env, buffer) { function $21(value) { value = Math_fround(value); - var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0); - wasm2js_i32$0 = 0; - wasm2js_f32$0 = value; - HEAPF32[wasm2js_i32$0 >> 2] = wasm2js_f32$0; + HEAPF32[0 >> 2] = value; return Math_fround((wasm2js_scratch_store_i32(0, i32_load_little(0 | 0) | 0), wasm2js_scratch_load_f32())); } function $22(value) { value = +value; - var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0; - wasm2js_i32$0 = 0; - wasm2js_f64$0 = value; - HEAPF64[wasm2js_i32$0 >> 3] = wasm2js_f64$0; + var i64toi32_i32$0 = 0, i64toi32_i32$1 = 0; + HEAPF64[0 >> 3] = value; i64toi32_i32$0 = i64_load_little(0 | 0) | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; wasm2js_scratch_store_i32(0 | 0, i64toi32_i32$0 | 0); diff --git a/test/wasm2js/func-ptr-offset.2asm.js b/test/wasm2js/func-ptr-offset.2asm.js index 3e1865dae..b90f12008 100644 --- a/test/wasm2js/func-ptr-offset.2asm.js +++ b/test/wasm2js/func-ptr-offset.2asm.js @@ -35,10 +35,8 @@ function asmFunc(global, env, buffer) { function $3($0) { $0 = $0 | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$1 = $0; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0; + return (wasm2js_i32$0 = $0, FUNCTION_TABLE[wasm2js_i32$0]() | 0) | 0; } var FUNCTION_TABLE = [null, t1, t2, t3]; diff --git a/test/wasm2js/func.2asm.js b/test/wasm2js/func.2asm.js index 81a4682bc..d40854bb6 100644 --- a/test/wasm2js/func.2asm.js +++ b/test/wasm2js/func.2asm.js @@ -396,10 +396,8 @@ function asmFunc(global, env, buffer) { function $76() { var wasm2js_i32$0 = 0; - wasm2js_i32$0 = 1; - FUNCTION_TABLE[wasm2js_i32$0](); - wasm2js_i32$0 = 4; - FUNCTION_TABLE[wasm2js_i32$0](); + wasm2js_i32$0 = 1, FUNCTION_TABLE[wasm2js_i32$0](); + wasm2js_i32$0 = 4, FUNCTION_TABLE[wasm2js_i32$0](); } function $77() { @@ -407,74 +405,25 @@ function asmFunc(global, env, buffer) { i64toi32_i32$0 = 0; i64toi32_i32$1 = 0; i64toi32_i32$2 = 0; - wasm2js_f64$0 = 0.0; - wasm2js_i32$1 = 0; - wasm2js_i32$2 = i64toi32_i32$0; - wasm2js_f64$1 = 0.0; - wasm2js_i32$3 = 0; - wasm2js_i32$4 = i64toi32_i32$1; - wasm2js_f64$2 = 0.0; - wasm2js_i32$5 = 0; - wasm2js_i32$6 = i64toi32_i32$2; - wasm2js_f32$0 = Math_fround(0.0); - wasm2js_i32$7 = 0; - wasm2js_i32$0 = 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); + (((((((((((wasm2js_f64$0 = 0.0, wasm2js_i32$1 = 0), wasm2js_i32$2 = i64toi32_i32$0), wasm2js_f64$1 = 0.0), wasm2js_i32$3 = 0), wasm2js_i32$4 = i64toi32_i32$1), wasm2js_f64$2 = 0.0), wasm2js_i32$5 = 0), wasm2js_i32$6 = i64toi32_i32$2), wasm2js_f32$0 = Math_fround(0.0)), wasm2js_i32$7 = 0), wasm2js_i32$0 = 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; - wasm2js_f64$2 = 0.0; - wasm2js_i32$7 = 0; - wasm2js_i32$6 = i64toi32_i32$2; - wasm2js_f64$1 = 0.0; - wasm2js_i32$5 = 0; - wasm2js_i32$4 = i64toi32_i32$1; - wasm2js_f64$0 = 0.0; - wasm2js_i32$3 = 0; - wasm2js_i32$2 = i64toi32_i32$0; - wasm2js_f32$0 = Math_fround(0.0); - wasm2js_i32$1 = 0; - wasm2js_i32$0 = 2; - 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); + (((((((((((wasm2js_f64$2 = 0.0, wasm2js_i32$7 = 0), wasm2js_i32$6 = i64toi32_i32$2), wasm2js_f64$1 = 0.0), wasm2js_i32$5 = 0), wasm2js_i32$4 = i64toi32_i32$1), wasm2js_f64$0 = 0.0), wasm2js_i32$3 = 0), wasm2js_i32$2 = i64toi32_i32$0), wasm2js_f32$0 = Math_fround(0.0)), wasm2js_i32$1 = 0), wasm2js_i32$0 = 2), 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; - wasm2js_f64$0 = 0.0; - wasm2js_i32$1 = 0; - wasm2js_i32$2 = i64toi32_i32$0; - wasm2js_f64$1 = 0.0; - wasm2js_i32$3 = 0; - wasm2js_i32$4 = i64toi32_i32$1; - wasm2js_f64$2 = 0.0; - wasm2js_i32$5 = 0; - wasm2js_i32$6 = i64toi32_i32$2; - wasm2js_f32$0 = Math_fround(0.0); - wasm2js_i32$7 = 0; - wasm2js_i32$0 = 3; - 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); + (((((((((((wasm2js_f64$0 = 0.0, wasm2js_i32$1 = 0), wasm2js_i32$2 = i64toi32_i32$0), wasm2js_f64$1 = 0.0), wasm2js_i32$3 = 0), wasm2js_i32$4 = i64toi32_i32$1), wasm2js_f64$2 = 0.0), wasm2js_i32$5 = 0), wasm2js_i32$6 = i64toi32_i32$2), wasm2js_f32$0 = Math_fround(0.0)), wasm2js_i32$7 = 0), wasm2js_i32$0 = 3), 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[wasm2js_i32$0](); + wasm2js_i32$0 = 1, FUNCTION_TABLE[wasm2js_i32$0](); } function $79() { var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_f64$1 = 0.0, wasm2js_i32$3 = 0, wasm2js_i32$4 = 0, wasm2js_f64$2 = 0.0, wasm2js_i32$5 = 0, wasm2js_i32$6 = 0, wasm2js_f32$0 = Math_fround(0), wasm2js_i32$7 = 0; - wasm2js_f64$0 = 0.0; - wasm2js_i32$1 = 0; - wasm2js_i32$2 = 0; - wasm2js_f64$1 = 0.0; - wasm2js_i32$3 = 0; - wasm2js_i32$4 = 0; - wasm2js_f64$2 = 0.0; - wasm2js_i32$5 = 0; - wasm2js_i32$6 = 0; - wasm2js_f32$0 = Math_fround(0.0); - wasm2js_i32$7 = 0; - wasm2js_i32$0 = 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); + (((((((((((wasm2js_f64$0 = 0.0, wasm2js_i32$1 = 0), wasm2js_i32$2 = 0), wasm2js_f64$1 = 0.0), wasm2js_i32$3 = 0), wasm2js_i32$4 = 0), wasm2js_f64$2 = 0.0), wasm2js_i32$5 = 0), wasm2js_i32$6 = 0), wasm2js_f32$0 = Math_fround(0.0)), wasm2js_i32$7 = 0), wasm2js_i32$0 = 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 legalstub$24() { diff --git a/test/wasm2js/func_ptrs.2asm.js b/test/wasm2js/func_ptrs.2asm.js index 9798a0622..09515b006 100644 --- a/test/wasm2js/func_ptrs.2asm.js +++ b/test/wasm2js/func_ptrs.2asm.js @@ -102,18 +102,14 @@ function asmFunc(global, env, buffer) { function $5(i) { i = i | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0; + return (wasm2js_i32$0 = i, FUNCTION_TABLE[wasm2js_i32$0]() | 0) | 0; } function $6(i) { i = i | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0; + return (wasm2js_i32$0 = i, FUNCTION_TABLE[wasm2js_i32$0]() | 0) | 0; } var FUNCTION_TABLE = [t1, t2, t3, u1, u2, t1, t3]; @@ -160,10 +156,8 @@ function asmFunc(global, env, buffer) { function $2(i) { i = i | 0; - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$1 = i; - wasm2js_i32$0 = FUNCTION_TABLE[wasm2js_i32$1]() | 0; - return wasm2js_i32$0 | 0; + var wasm2js_i32$0 = 0; + return (wasm2js_i32$0 = i, FUNCTION_TABLE[wasm2js_i32$0]() | 0) | 0; } var FUNCTION_TABLE = [t1, t2]; diff --git a/test/wasm2js/grow-memory-tricky.2asm.js b/test/wasm2js/grow-memory-tricky.2asm.js index 1775db6d4..b3f2408c3 100644 --- a/test/wasm2js/grow-memory-tricky.2asm.js +++ b/test/wasm2js/grow-memory-tricky.2asm.js @@ -23,17 +23,13 @@ function asmFunc(global, env, buffer) { var infinity = global.Infinity; function $0() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = __wasm_grow_memory(1 | 0); - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + (wasm2js_i32$0 = 0, wasm2js_i32$1 = __wasm_grow_memory(1 | 0)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return HEAP32[0 >> 2] | 0 | 0; } function $1() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = grow() | 0; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + (wasm2js_i32$0 = 0, wasm2js_i32$1 = grow() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return HEAP32[0 >> 2] | 0 | 0; } diff --git a/test/wasm2js/left-to-right.2asm.js b/test/wasm2js/left-to-right.2asm.js index 2b669abf7..90e3813ab 100644 --- a/test/wasm2js/left-to-right.2asm.js +++ b/test/wasm2js/left-to-right.2asm.js @@ -113,26 +113,14 @@ function asmFunc(global, env, buffer) { } function reset() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 0; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + HEAP32[8 >> 2] = 0; } function bump() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; - wasm2js_i32$0 = 11; - wasm2js_i32$1 = HEAPU8[10 >> 0] | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; - wasm2js_i32$0 = 10; - wasm2js_i32$1 = HEAPU8[9 >> 0] | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; - wasm2js_i32$0 = 9; - wasm2js_i32$1 = HEAPU8[8 >> 0] | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 4294967293; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[11 >> 0] = HEAPU8[10 >> 0] | 0; + HEAP8[10 >> 0] = HEAPU8[9 >> 0] | 0; + HEAP8[9 >> 0] = HEAPU8[8 >> 0] | 0; + HEAP8[8 >> 0] = 4294967293; } function get() { @@ -140,150 +128,104 @@ function asmFunc(global, env, buffer) { } function i32_left() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 1; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 1; return 0 | 0; } function i32_right() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 2; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 2; return 1 | 0; } function i32_callee() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 4; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 4; return 0 | 0; } function i32_bool() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 5; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 5; return 0 | 0; } function i64_left() { - var i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + var i64toi32_i32$0 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 1; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 1; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 0 | 0; } function i64_right() { - var i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + var i64toi32_i32$0 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 2; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 2; i64toi32_i32$0 = 0; i64toi32_i32$HIGH_BITS = i64toi32_i32$0; return 1 | 0; } function i64_callee() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 4; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 4; return 2 | 0; } function i64_bool() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 5; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 5; return 0 | 0; } function f32_left() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 1; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 1; return Math_fround(Math_fround(0.0)); } function f32_right() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 2; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 2; return Math_fround(Math_fround(1.0)); } function f32_callee() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 4; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 4; return 4 | 0; } function f32_bool() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 5; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 5; return 0 | 0; } function f64_left() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 1; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 1; return +(0.0); } function f64_right() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 2; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 2; return +(1.0); } function f64_callee() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 4; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 4; return 6 | 0; } function f64_bool() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; bump(); - wasm2js_i32$0 = 8; - wasm2js_i32$1 = 5; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + HEAP8[8 >> 0] = 5; return 0 | 0; } @@ -450,27 +392,21 @@ function asmFunc(global, env, buffer) { function $58() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i32_right() | 0; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return get() | 0 | 0; } function $59() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i32_right() | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; return get() | 0 | 0; } function $60() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i32_right() | 0; - HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i32_right() | 0), HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; return get() | 0 | 0; } @@ -483,10 +419,7 @@ function asmFunc(global, env, buffer) { function $62() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0; reset(); - wasm2js_i32$1 = i32_left() | 0; - wasm2js_i32$2 = i32_right() | 0; - wasm2js_i32$0 = i32_callee() | 0; - FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0; + ((wasm2js_i32$1 = i32_left() | 0, wasm2js_i32$2 = i32_right() | 0), wasm2js_i32$0 = i32_callee() | 0), FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0) | 0; return get() | 0 | 0; } @@ -1015,46 +948,36 @@ function asmFunc(global, env, buffer) { } function $87() { - var i64toi32_i32$0 = 0, $0 = 0, i64toi32_i32$1 = 0, $1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$0 = 0, $0 = 0, i64toi32_i32$1 = 0, $1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); $0 = i32_left() | 0; i64toi32_i32$0 = i64_right() | 0; i64toi32_i32$1 = i64toi32_i32$HIGH_BITS; $1 = i64toi32_i32$0; i64toi32_i32$0 = $0; - wasm2js_i32$0 = i64toi32_i32$0; - wasm2js_i32$1 = $1; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; - wasm2js_i32$0 = i64toi32_i32$0; - wasm2js_i32$1 = i64toi32_i32$1; - (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; + HEAP32[i64toi32_i32$0 >> 2] = $1; + (wasm2js_i32$0 = i64toi32_i32$0, wasm2js_i32$1 = i64toi32_i32$1), ((HEAP8[(wasm2js_i32$0 + 4 | 0) >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 5 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 6 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 7 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; return get() | 0 | 0; } function $88() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i64_right() | 0; - HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1; return get() | 0 | 0; } function $89() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i64_right() | 0; - HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP16[wasm2js_i32$0 >> 1] = wasm2js_i32$1; return get() | 0 | 0; } function $90() { var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_i32$1 = i64_right() | 0; - HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_i32$1 = i64_right() | 0), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1; return get() | 0 | 0; } @@ -1088,12 +1011,7 @@ function asmFunc(global, env, buffer) { $1$hi = i64toi32_i32$0; i64toi32_i32$0 = $0$hi; i64toi32_i32$1 = $1$hi; - wasm2js_i32$1 = $0; - wasm2js_i32$2 = i64toi32_i32$0; - wasm2js_i32$3 = $1; - wasm2js_i32$4 = i64toi32_i32$1; - wasm2js_i32$0 = i64_callee() | 0; - FUNCTION_TABLE[wasm2js_i32$0](wasm2js_i32$1 | 0, wasm2js_i32$2 | 0, wasm2js_i32$3 | 0, wasm2js_i32$4 | 0) | 0; + ((((wasm2js_i32$1 = $0, wasm2js_i32$2 = i64toi32_i32$0), wasm2js_i32$3 = $1), wasm2js_i32$4 = i64toi32_i32$1), wasm2js_i32$0 = i64_callee() | 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; } @@ -1195,9 +1113,7 @@ function asmFunc(global, env, buffer) { function $107() { var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0); reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_f32$0 = Math_fround(f32_right()); - HEAPF32[wasm2js_i32$0 >> 2] = wasm2js_f32$0; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_f32$0 = Math_fround(f32_right())), HEAPF32[wasm2js_i32$0 >> 2] = wasm2js_f32$0; return get() | 0 | 0; } @@ -1210,10 +1126,7 @@ function asmFunc(global, env, buffer) { function $109() { var wasm2js_i32$0 = 0, wasm2js_f32$0 = Math_fround(0), wasm2js_f32$1 = Math_fround(0); reset(); - wasm2js_f32$0 = Math_fround(f32_left()); - wasm2js_f32$1 = Math_fround(f32_right()); - wasm2js_i32$0 = f32_callee() | 0; - FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0), Math_fround(wasm2js_f32$1)) | 0; + ((wasm2js_f32$0 = Math_fround(f32_left()), wasm2js_f32$1 = Math_fround(f32_right())), wasm2js_i32$0 = f32_callee() | 0), FUNCTION_TABLE[wasm2js_i32$0](Math_fround(wasm2js_f32$0), Math_fround(wasm2js_f32$1)) | 0; return get() | 0 | 0; } @@ -1329,9 +1242,7 @@ function asmFunc(global, env, buffer) { function $124() { var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0; reset(); - wasm2js_i32$0 = i32_left() | 0; - wasm2js_f64$0 = +f64_right(); - HEAPF64[wasm2js_i32$0 >> 3] = wasm2js_f64$0; + (wasm2js_i32$0 = i32_left() | 0, wasm2js_f64$0 = +f64_right()), HEAPF64[wasm2js_i32$0 >> 3] = wasm2js_f64$0; return get() | 0 | 0; } @@ -1344,10 +1255,7 @@ function asmFunc(global, env, buffer) { function $126() { var wasm2js_i32$0 = 0, wasm2js_f64$0 = 0.0, wasm2js_f64$1 = 0.0; reset(); - wasm2js_f64$0 = +f64_left(); - wasm2js_f64$1 = +f64_right(); - wasm2js_i32$0 = f64_callee() | 0; - FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, +wasm2js_f64$1) | 0; + ((wasm2js_f64$0 = +f64_left(), wasm2js_f64$1 = +f64_right()), wasm2js_i32$0 = f64_callee() | 0), FUNCTION_TABLE[wasm2js_i32$0](+wasm2js_f64$0, +wasm2js_f64$1) | 0; return get() | 0 | 0; } diff --git a/test/wasm2js/loop.2asm.js b/test/wasm2js/loop.2asm.js index eb891c8b4..0a540328f 100644 --- a/test/wasm2js/loop.2asm.js +++ b/test/wasm2js/loop.2asm.js @@ -349,7 +349,7 @@ function asmFunc(global, env, buffer) { } function $14() { - var $0 = 0, $1_1 = 0, $2_1 = 0, $3_1 = 0, $5_1 = 0, wasm2js_i32$0 = 0; + var $0 = 0, $1_1 = 0, $2_1 = 0, $3_1 = 0, $5_1 = 0; $0 = 0; $1_1 = $0; loop_in : do { @@ -359,7 +359,6 @@ function asmFunc(global, env, buffer) { } while (1); break loop_in; } while (1); - return wasm2js_i32$0 | 0; } function fx() { diff --git a/test/wasm2js/select.2asm.js b/test/wasm2js/select.2asm.js index fdc12ba92..264ebb071 100644 --- a/test/wasm2js/select.2asm.js +++ b/test/wasm2js/select.2asm.js @@ -68,13 +68,13 @@ function asmFunc(global, env, buffer) { function $4(cond) { cond = cond | 0; var $1_1 = 0; - return abort() | 0; + abort(); } function $5(cond) { cond = cond | 0; var $1_1 = 0; - return abort() | 0; + abort(); } function legalstub$1($0_1, $1_1, $2_1, $3_1, $4_1) { diff --git a/test/wasm2js/unaligned.2asm.js b/test/wasm2js/unaligned.2asm.js index e5da51632..fbcc8796e 100644 --- a/test/wasm2js/unaligned.2asm.js +++ b/test/wasm2js/unaligned.2asm.js @@ -83,41 +83,29 @@ function asmFunc(global, env, buffer) { } function $4() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = 0; - (wasm2js_i32$2 = wasm2js_i32$0, wasm2js_i32$3 = wasm2js_i32$1), ((HEAP8[wasm2js_i32$2 >> 0] = wasm2js_i32$3 & 255 | 0, HEAP8[(wasm2js_i32$2 + 1 | 0) >> 0] = (wasm2js_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 2 | 0) >> 0] = (wasm2js_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 3 | 0) >> 0] = (wasm2js_i32$3 >>> 24 | 0) & 255 | 0; + var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + (wasm2js_i32$0 = 0, wasm2js_i32$1 = 0), ((HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 1 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 2 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 3 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; } function $5() { - var i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; i64toi32_i32$1 = 0; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = 0; - (wasm2js_i32$2 = wasm2js_i32$0, wasm2js_i32$3 = wasm2js_i32$1), ((HEAP8[wasm2js_i32$2 >> 0] = wasm2js_i32$3 & 255 | 0, HEAP8[(wasm2js_i32$2 + 1 | 0) >> 0] = (wasm2js_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 2 | 0) >> 0] = (wasm2js_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 3 | 0) >> 0] = (wasm2js_i32$3 >>> 24 | 0) & 255 | 0; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = 0; - (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; + (wasm2js_i32$0 = i64toi32_i32$1, wasm2js_i32$1 = 0), ((HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 1 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 2 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 3 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; + (wasm2js_i32$0 = i64toi32_i32$1, wasm2js_i32$1 = 0), ((HEAP8[(wasm2js_i32$0 + 4 | 0) >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 5 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 6 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 7 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; } function $6() { - var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; - wasm2js_i32$0 = 0; - wasm2js_i32$1 = (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(0)); - (wasm2js_i32$2 = wasm2js_i32$0, wasm2js_i32$3 = wasm2js_i32$1), ((HEAP8[wasm2js_i32$2 >> 0] = wasm2js_i32$3 & 255 | 0, HEAP8[(wasm2js_i32$2 + 1 | 0) >> 0] = (wasm2js_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 2 | 0) >> 0] = (wasm2js_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 3 | 0) >> 0] = (wasm2js_i32$3 >>> 24 | 0) & 255 | 0; + var wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; + (wasm2js_i32$0 = 0, wasm2js_i32$1 = (wasm2js_scratch_store_f32(Math_fround(0.0)), wasm2js_scratch_load_i32(0))), ((HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 1 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 2 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 3 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; } function $7() { - var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0, wasm2js_i32$2 = 0, wasm2js_i32$3 = 0; + var i64toi32_i32$1 = 0, i64toi32_i32$0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0; wasm2js_scratch_store_f64(+(0.0)); i64toi32_i32$0 = wasm2js_scratch_load_i32(1 | 0) | 0; i64toi32_i32$1 = 0; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0; - (wasm2js_i32$2 = wasm2js_i32$0, wasm2js_i32$3 = wasm2js_i32$1), ((HEAP8[wasm2js_i32$2 >> 0] = wasm2js_i32$3 & 255 | 0, HEAP8[(wasm2js_i32$2 + 1 | 0) >> 0] = (wasm2js_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 2 | 0) >> 0] = (wasm2js_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$2 + 3 | 0) >> 0] = (wasm2js_i32$3 >>> 24 | 0) & 255 | 0; - wasm2js_i32$0 = i64toi32_i32$1; - wasm2js_i32$1 = i64toi32_i32$0; - (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; + (wasm2js_i32$0 = i64toi32_i32$1, wasm2js_i32$1 = wasm2js_scratch_load_i32(0 | 0) | 0), ((HEAP8[wasm2js_i32$0 >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 1 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 2 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 3 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; + (wasm2js_i32$0 = i64toi32_i32$1, wasm2js_i32$1 = i64toi32_i32$0), ((HEAP8[(wasm2js_i32$0 + 4 | 0) >> 0] = wasm2js_i32$1 & 255 | 0, HEAP8[(wasm2js_i32$0 + 5 | 0) >> 0] = (wasm2js_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 6 | 0) >> 0] = (wasm2js_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2js_i32$0 + 7 | 0) >> 0] = (wasm2js_i32$1 >>> 24 | 0) & 255 | 0; } function legalstub$1() { diff --git a/test/wasm2js/unreachable.2asm.js b/test/wasm2js/unreachable.2asm.js index 0f4aef7a6..2f5e007b7 100644 --- a/test/wasm2js/unreachable.2asm.js +++ b/test/wasm2js/unreachable.2asm.js @@ -35,31 +35,30 @@ function asmFunc(global, env, buffer) { } function $2() { - return abort() | 0; + abort(); } function $3() { - return abort() | 0; + abort(); } function $4() { - return +abort(); + abort(); } function $5() { - return +abort(); + abort(); } function $6() { var $0 = 0; - return abort() | 0; + abort(); } function $7() { - var $0 = 0, wasm2js_i32$0 = 0; + var $0 = 0; dummy(); - wasm2js_i32$0 = abort(); - return wasm2js_i32$0 | 0; + abort(); } function $8() { @@ -68,22 +67,19 @@ function asmFunc(global, env, buffer) { } function $9() { - var wasm2js_i32$0 = 0; dummy(); - wasm2js_i32$0 = abort(); - return wasm2js_i32$0 | 0; + abort(); } function $10() { var $0 = 0; - return abort() | 0; + abort(); } function $11() { - var $0 = 0, wasm2js_i32$0 = 0; + var $0 = 0; dummy(); - wasm2js_i32$0 = abort(); - return wasm2js_i32$0 | 0; + abort(); } function $12() { @@ -92,10 +88,8 @@ function asmFunc(global, env, buffer) { } function $13() { - var wasm2js_i32$0 = 0; dummy(); - wasm2js_i32$0 = abort(); - return wasm2js_i32$0 | 0; + abort(); } function $14() { @@ -109,22 +103,20 @@ function asmFunc(global, env, buffer) { } function $15() { - var $0 = 0, $2_1 = 0, wasm2js_i32$0 = 0; + var $0 = 0, $2_1 = 0; loop_in : do { abort(); break loop_in; } while (1); - return wasm2js_i32$0 | 0; } function $16() { - var $0 = 0, $2_1 = 0, wasm2js_i32$0 = 0; + var $0 = 0, $2_1 = 0; loop_in : do { dummy(); - wasm2js_i32$0 = abort(); + abort(); break loop_in; } while (1); - return wasm2js_i32$0 | 0; } function $17() { @@ -149,7 +141,7 @@ function asmFunc(global, env, buffer) { } function $19() { - return abort() | 0; + abort(); } function $20() { @@ -158,12 +150,12 @@ function asmFunc(global, env, buffer) { function $21() { var $0 = 0; - return abort() | 0; + abort(); } function $22() { var $0 = 0; - return abort() | 0; + abort(); } function $23() { @@ -172,21 +164,21 @@ function asmFunc(global, env, buffer) { function $24() { var $0 = 0; - return abort() | 0; + abort(); } function $25() { var $1 = 0; - return abort() | 0; + abort(); } function $26() { - return abort() | 0; + abort(); } function $27() { var $0 = 0; - return abort() | 0; + abort(); } function $28($0, $1) { @@ -217,20 +209,19 @@ function asmFunc(global, env, buffer) { $0 = $0 | 0; $1 = $1 | 0; var $2_1 = 0, $3_1 = 0; - return abort() | 0; + abort(); } function $31($0, $1) { $0 = $0 | 0; $1 = $1 | 0; - var $2_1 = 0, $3_1 = 0, wasm2js_i32$0 = 0; + var $2_1 = 0, $3_1 = 0; $2_1 = $0; - wasm2js_i32$0 = abort(); - return wasm2js_i32$0 | 0; + abort(); } function $32() { - return abort() | 0; + abort(); } function $33() { @@ -266,11 +257,11 @@ function asmFunc(global, env, buffer) { } function $41() { - return Math_fround(abort()); + abort(); } function $42() { - return abort() | 0; + abort(); } function $43() { @@ -290,35 +281,35 @@ function asmFunc(global, env, buffer) { } function $47() { - return Math_fround(abort()); + abort(); } function $48() { - return abort() | 0; + abort(); } function $49() { - return abort() | 0; + abort(); } function $50() { - return abort() | 0; + abort(); } function $51() { - return abort() | 0; + abort(); } function $52() { - return abort() | 0; + abort(); } function $53() { - return abort() | 0; + abort(); } function $54() { - return abort() | 0; + abort(); } function legalstub$26() { |