summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Gravelle <jgravelle@google.com>2017-11-15 16:09:08 -0800
committerGitHub <noreply@github.com>2017-11-15 16:09:08 -0800
commit27474b7482ad2673ef3c9aca09aa443769e7447f (patch)
tree3dd1fde96ccc7b7101012b9d6bc9cb73e4c9bac3
parentdc0cd445c08ede80fa2b1747cffcd2254c97a0f6 (diff)
downloadbinaryen-27474b7482ad2673ef3c9aca09aa443769e7447f.tar.gz
binaryen-27474b7482ad2673ef3c9aca09aa443769e7447f.tar.bz2
binaryen-27474b7482ad2673ef3c9aca09aa443769e7447f.zip
Decouple wasm-linker from Emscripten glue (#1293)
-rw-r--r--src/asm2wasm.h3
-rw-r--r--src/tools/s2wasm.cpp24
-rw-r--r--src/wasm-emscripten.cpp170
-rw-r--r--src/wasm-emscripten.h46
-rw-r--r--src/wasm-linker.cpp28
-rw-r--r--src/wasm-linker.h38
-rw-r--r--test/dot_s/alias.wast16
-rw-r--r--test/dot_s/asm_const.wast2
-rw-r--r--test/dot_s/basics.wast14
-rw-r--r--test/dot_s/bcp-1.wast18
-rw-r--r--test/dot_s/debug.wast2
-rw-r--r--test/dot_s/dso_handle.wast2
-rw-r--r--test/dot_s/dyncall.wast18
-rw-r--r--test/dot_s/exit.wast2
-rw-r--r--test/dot_s/export_malloc_free.wast6
-rw-r--r--test/dot_s/fix_em_ehsjlj_names.wast14
-rw-r--r--test/dot_s/function-data-sections.wast6
-rw-r--r--test/dot_s/globals.wast6
-rw-r--r--test/dot_s/indidx.wast14
-rw-r--r--test/dot_s/indirect-import.wast78
-rw-r--r--test/dot_s/initializers.wast6
-rw-r--r--test/dot_s/local_align.wast2
-rw-r--r--test/dot_s/macClangMetaData.wast2
-rw-r--r--test/dot_s/memops.wast2
-rw-r--r--test/dot_s/minimal.wast2
-rw-r--r--test/dot_s/relocation.wast2
-rw-r--r--test/dot_s/return.wast4
-rw-r--r--test/dot_s/start_main0.wast14
-rw-r--r--test/dot_s/start_main2.wast28
-rw-r--r--test/dot_s/symbolic-offset.wast2
-rw-r--r--test/dot_s/text_before_type.wast2
-rw-r--r--test/dot_s/traps.clamp.wast2
-rw-r--r--test/dot_s/traps.js.wast2
-rw-r--r--test/dot_s/traps.wast2
-rw-r--r--test/dot_s/visibilities.wast6
-rw-r--r--test/llvm_autogenerated/byval.wast6
-rw-r--r--test/llvm_autogenerated/call.wast6
-rw-r--r--test/llvm_autogenerated/cfg-stackify.wast6
-rw-r--r--test/llvm_autogenerated/comparisons_f32.wast6
-rw-r--r--test/llvm_autogenerated/comparisons_f64.wast6
-rw-r--r--test/llvm_autogenerated/comparisons_i32.wast6
-rw-r--r--test/llvm_autogenerated/comparisons_i64.wast6
-rw-r--r--test/llvm_autogenerated/conv.wast6
-rw-r--r--test/llvm_autogenerated/copysign-casts.wast4
-rw-r--r--test/llvm_autogenerated/cpus.wast2
-rw-r--r--test/llvm_autogenerated/dead-vreg.wast2
-rw-r--r--test/llvm_autogenerated/divrem-constant.wast6
-rw-r--r--test/llvm_autogenerated/f32.wast6
-rw-r--r--test/llvm_autogenerated/f64.wast6
-rw-r--r--test/llvm_autogenerated/fast-isel-noreg.wast6
-rw-r--r--test/llvm_autogenerated/fast-isel.wast6
-rw-r--r--test/llvm_autogenerated/frem.wast4
-rw-r--r--test/llvm_autogenerated/func.wast6
-rw-r--r--test/llvm_autogenerated/global.wast4
-rw-r--r--test/llvm_autogenerated/globl.wast2
-rw-r--r--test/llvm_autogenerated/i128.wast6
-rw-r--r--test/llvm_autogenerated/i32-load-store-alignment.wast6
-rw-r--r--test/llvm_autogenerated/i32.wast6
-rw-r--r--test/llvm_autogenerated/i64-load-store-alignment.wast6
-rw-r--r--test/llvm_autogenerated/i64.wast6
-rw-r--r--test/llvm_autogenerated/immediates.wast6
-rw-r--r--test/llvm_autogenerated/indirect-import.wast76
-rw-r--r--test/llvm_autogenerated/irreducible-cfg.wast4
-rw-r--r--test/llvm_autogenerated/legalize.wast6
-rw-r--r--test/llvm_autogenerated/load-ext.wast6
-rw-r--r--test/llvm_autogenerated/load-store-i1.wast6
-rw-r--r--test/llvm_autogenerated/load.wast6
-rw-r--r--test/llvm_autogenerated/lower-em-ehsjlj-options.wast24
-rw-r--r--test/llvm_autogenerated/mem-intrinsics.wast6
-rw-r--r--test/llvm_autogenerated/memory-addr32.wast4
-rw-r--r--test/llvm_autogenerated/negative-base-reg.wast2
-rw-r--r--test/llvm_autogenerated/offset.wast6
-rw-r--r--test/llvm_autogenerated/phi.wast4
-rw-r--r--test/llvm_autogenerated/reg-stackify.wast6
-rw-r--r--test/llvm_autogenerated/return-int32.wast4
-rw-r--r--test/llvm_autogenerated/return-void.wast4
-rw-r--r--test/llvm_autogenerated/select.wast6
-rw-r--r--test/llvm_autogenerated/signext-zeroext.wast6
-rw-r--r--test/llvm_autogenerated/store-trunc.wast6
-rw-r--r--test/llvm_autogenerated/store.wast6
-rw-r--r--test/llvm_autogenerated/switch.wast4
-rw-r--r--test/llvm_autogenerated/unreachable.wast6
-rw-r--r--test/llvm_autogenerated/unused-argument.wast6
-rw-r--r--test/llvm_autogenerated/userstack.wast6
-rw-r--r--test/llvm_autogenerated/varargs.wast6
85 files changed, 485 insertions, 454 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h
index 71c7447e0..6a3e15b29 100644
--- a/src/asm2wasm.h
+++ b/src/asm2wasm.h
@@ -1331,7 +1331,8 @@ void Asm2WasmBuilder::processAsm(Ref ast) {
// apply memory growth, if relevant
if (preprocessor.memoryGrowth) {
- emscripten::generateMemoryGrowthFunction(wasm);
+ EmscriptenGlueGenerator generator(wasm);
+ generator.generateMemoryGrowthFunction();
wasm.memory.max = Memory::kMaxSize;
}
diff --git a/src/tools/s2wasm.cpp b/src/tools/s2wasm.cpp
index 96d9ae5ce..6e7b2c05e 100644
--- a/src/tools/s2wasm.cpp
+++ b/src/tools/s2wasm.cpp
@@ -175,21 +175,21 @@ int main(int argc, const char *argv[]) {
linker.linkArchive(lib);
}
- if (generateEmscriptenGlue) {
- emscripten::generateRuntimeFunctions(linker.getOutput());
- }
-
linker.layout();
- std::stringstream meta;
+ std::string metadata;
if (generateEmscriptenGlue) {
- if (options.debug) std::cerr << "Emscripten gluing..." << std::endl;
- if (allowMemoryGrowth) {
- emscripten::generateMemoryGrowthFunction(linker.getOutput().wasm);
+ Module& wasm = linker.getOutput().wasm;
+ if (options.debug) {
+ std::cerr << "Emscripten gluing..." << std::endl;
+ WasmPrinter::printModule(&wasm, std::cerr);
}
-
- // dyncall thunks
- linker.emscriptenGlue(meta);
+ metadata = emscriptenGlue(
+ wasm,
+ allowMemoryGrowth,
+ linker.getStackPointerAddress(),
+ linker.getStaticBump(),
+ linker.getOutput().getInitializerFunctions());
}
if (options.extra["validate"] != "none") {
@@ -205,7 +205,7 @@ int main(int argc, const char *argv[]) {
if (options.debug) std::cerr << "Printing..." << std::endl;
Output output(options.extra["output"], Flags::Text, options.debug ? Flags::Debug : Flags::Release);
WasmPrinter::printModule(&linker.getOutput().wasm, output.getStream());
- output << meta.str();
+ output << metadata;
if (options.debug) std::cerr << "Done." << std::endl;
return 0;
diff --git a/src/wasm-emscripten.cpp b/src/wasm-emscripten.cpp
index 9c617a31e..14f93cff3 100644
--- a/src/wasm-emscripten.cpp
+++ b/src/wasm-emscripten.cpp
@@ -16,6 +16,8 @@
#include "wasm-emscripten.h"
+#include <sstream>
+
#include "asm_v_wasm.h"
#include "asmjs/shared-constants.h"
#include "shared-constants.h"
@@ -26,11 +28,9 @@
namespace wasm {
-namespace emscripten {
-
cashew::IString EMSCRIPTEN_ASM_CONST("emscripten_asm_const");
-static constexpr const char* stackPointer = "__stack_pointer";
+static constexpr const char* dummyFunction = "__wasm_nullptr";
void addExportedFunction(Module& wasm, Function* function) {
wasm.addFunction(function);
@@ -40,82 +40,49 @@ void addExportedFunction(Module& wasm, Function* function) {
wasm.addExport(export_);
}
-void generateMemoryGrowthFunction(Module& wasm) {
- Builder builder(wasm);
- Name name(GROW_WASM_MEMORY);
- std::vector<NameType> params { { NEW_SIZE, i32 } };
- Function* growFunction = builder.makeFunction(
- name, std::move(params), i32, {}
- );
- growFunction->body = builder.makeHost(
- GrowMemory,
- Name(),
- { builder.makeGetLocal(0, i32) }
- );
-
- addExportedFunction(wasm, growFunction);
-}
-
-void addStackPointerRelocation(LinkerObject& linker, uint32_t* data) {
- linker.addRelocation(new LinkerObject::Relocation(
- LinkerObject::Relocation::kData,
- data,
- Name(stackPointer),
- 0
- ));
-}
-
-Load* generateLoadStackPointer(Builder& builder, LinkerObject& linker) {
+Load* EmscriptenGlueGenerator::generateLoadStackPointer() {
Load* load = builder.makeLoad(
/* bytes =*/ 4,
/* signed =*/ false,
- /* offset =*/ 0,
+ /* offset =*/ stackPointerOffset,
/* align =*/ 4,
/* ptr =*/ builder.makeConst(Literal(0)),
/* type =*/ i32
);
- addStackPointerRelocation(linker, &load->offset.addr);
return load;
}
-Store* generateStoreStackPointer(Builder& builder,
- LinkerObject& linker,
- Expression* value) {
+Store* EmscriptenGlueGenerator::generateStoreStackPointer(Expression* value) {
Store* store = builder.makeStore(
/* bytes =*/ 4,
- /* offset =*/ 0,
+ /* offset =*/ stackPointerOffset,
/* align =*/ 4,
/* ptr =*/ builder.makeConst(Literal(0)),
/* value =*/ value,
/* type =*/ i32
);
- addStackPointerRelocation(linker, &store->offset.addr);
return store;
}
-void generateStackSaveFunction(LinkerObject& linker) {
- Module& wasm = linker.wasm;
- Builder builder(wasm);
+void EmscriptenGlueGenerator::generateStackSaveFunction() {
Name name("stackSave");
std::vector<NameType> params { };
Function* function = builder.makeFunction(
name, std::move(params), i32, {}
);
- function->body = generateLoadStackPointer(builder, linker);
+ function->body = generateLoadStackPointer();
addExportedFunction(wasm, function);
}
-void generateStackAllocFunction(LinkerObject& linker) {
- Module& wasm = linker.wasm;
- Builder builder(wasm);
+void EmscriptenGlueGenerator::generateStackAllocFunction() {
Name name("stackAlloc");
std::vector<NameType> params { { "0", i32 } };
Function* function = builder.makeFunction(
name, std::move(params), i32, { { "1", i32 } }
);
- Load* loadStack = generateLoadStackPointer(builder, linker);
+ Load* loadStack = generateLoadStackPointer();
SetLocal* setStackLocal = builder.makeSetLocal(1, loadStack);
GetLocal* getStackLocal = builder.makeGetLocal(1, i32);
GetLocal* getSizeArg = builder.makeGetLocal(0, i32);
@@ -124,7 +91,7 @@ void generateStackAllocFunction(LinkerObject& linker) {
const static uint32_t bitMask = bitAlignment - 1;
Const* subConst = builder.makeConst(Literal(~bitMask));
Binary* maskedSub = builder.makeBinary(AndInt32, sub, subConst);
- Store* storeStack = generateStoreStackPointer(builder, linker, maskedSub);
+ Store* storeStack = generateStoreStackPointer(maskedSub);
Block* block = builder.makeBlock();
block->list.push_back(setStackLocal);
@@ -137,26 +104,39 @@ void generateStackAllocFunction(LinkerObject& linker) {
addExportedFunction(wasm, function);
}
-void generateStackRestoreFunction(LinkerObject& linker) {
- Module& wasm = linker.wasm;
- Builder builder(wasm);
+void EmscriptenGlueGenerator::generateStackRestoreFunction() {
Name name("stackRestore");
std::vector<NameType> params { { "0", i32 } };
Function* function = builder.makeFunction(
name, std::move(params), none, {}
);
GetLocal* getArg = builder.makeGetLocal(0, i32);
- Store* store = generateStoreStackPointer(builder, linker, getArg);
+ Store* store = generateStoreStackPointer(getArg);
function->body = store;
addExportedFunction(wasm, function);
}
-void generateRuntimeFunctions(LinkerObject& linker) {
- generateStackSaveFunction(linker);
- generateStackAllocFunction(linker);
- generateStackRestoreFunction(linker);
+void EmscriptenGlueGenerator::generateRuntimeFunctions() {
+ generateStackSaveFunction();
+ generateStackAllocFunction();
+ generateStackRestoreFunction();
+}
+
+void EmscriptenGlueGenerator::generateMemoryGrowthFunction() {
+ Name name(GROW_WASM_MEMORY);
+ std::vector<NameType> params { { NEW_SIZE, i32 } };
+ Function* growFunction = builder.makeFunction(
+ name, std::move(params), i32, {}
+ );
+ growFunction->body = builder.makeHost(
+ GrowMemory,
+ Name(),
+ { builder.makeGetLocal(0, i32) }
+ );
+
+ addExportedFunction(wasm, growFunction);
}
static bool hasI64ResultOrParam(FunctionType* ft) {
@@ -179,13 +159,19 @@ void removeImportsWithSubstring(Module& module, Name name) {
}
}
-std::vector<Function*> makeDynCallThunks(Module& wasm, std::vector<Name> const& tableSegmentData) {
+void EmscriptenGlueGenerator::generateDynCallThunks() {
removeImportsWithSubstring(wasm, EMSCRIPTEN_ASM_CONST); // we create _sig versions
- std::vector<Function*> generatedFunctions;
std::unordered_set<std::string> sigs;
Builder builder(wasm);
+ std::vector<Name> tableSegmentData;
+ if (wasm.table.segments.size() > 0) {
+ tableSegmentData = wasm.table.segments[0].data;
+ }
for (const auto& indirectFunc : tableSegmentData) {
+ if (indirectFunc == dummyFunction) {
+ continue;
+ }
std::string sig(getSig(wasm.getFunction(indirectFunc)));
auto* funcType = ensureFunctionType(sig, &wasm);
if (hasI64ResultOrParam(funcType)) continue; // Can't export i64s on the web.
@@ -202,10 +188,10 @@ std::vector<Function*> makeDynCallThunks(Module& wasm, std::vector<Name> const&
}
Expression* call = builder.makeCallIndirect(funcType, fptr, args);
f->body = call;
+
wasm.addFunction(f);
- generatedFunctions.push_back(f);
+ exportFunction(wasm, f->name, true);
}
- return generatedFunctions;
}
struct AsmConstWalker : public PostWalker<AsmConstWalker> {
@@ -216,8 +202,13 @@ struct AsmConstWalker : public PostWalker<AsmConstWalker> {
std::map<std::string, Address> ids;
std::set<std::string> allSigs;
- AsmConstWalker(Module& _wasm, std::unordered_map<Address, Address> _segmentsByAddress) :
- wasm(_wasm), segmentsByAddress(_segmentsByAddress) { }
+ AsmConstWalker(Module& _wasm) : wasm(_wasm) {
+ for (unsigned i = 0; i < wasm.memory.segments.size(); ++i) {
+ Const* addrConst = wasm.memory.segments[i].offset->cast<Const>();
+ auto address = addrConst->value.geti32();
+ segmentsByAddress[address] = Address(i);
+ }
+ }
void visitCallImport(CallImport* curr);
@@ -329,43 +320,62 @@ void printSet(std::ostream& o, C& c) {
o << "]";
}
-void generateEmscriptenMetadata(std::ostream& o,
- Module& wasm,
- std::unordered_map<Address, Address> segmentsByAddress,
- Address staticBump,
- std::vector<Name> const& initializerFunctions) {
- o << ";; METADATA: { ";
+std::string EmscriptenGlueGenerator::generateEmscriptenMetadata(
+ Address staticBump,
+ std::vector<Name> const& initializerFunctions) {
+ std::stringstream meta;
+ meta << ";; METADATA: { ";
+
// find asmConst calls, and emit their metadata
- AsmConstWalker walker(wasm, segmentsByAddress);
+ AsmConstWalker walker(wasm);
walker.walkModule(&wasm);
+
// print
- o << "\"asmConsts\": {";
+ meta << "\"asmConsts\": {";
bool first = true;
for (auto& pair : walker.sigsForCode) {
auto& code = pair.first;
auto& sigs = pair.second;
if (first) first = false;
- else o << ",";
- o << '"' << walker.ids[code] << "\": [\"" << code << "\", ";
- printSet(o, sigs);
- o << "]";
+ else meta << ",";
+ meta << '"' << walker.ids[code] << "\": [\"" << code << "\", ";
+ printSet(meta, sigs);
+ meta << "]";
}
- o << "}";
- o << ",";
- o << "\"staticBump\": " << staticBump << ", ";
+ meta << "}";
+ meta << ",";
+ meta << "\"staticBump\": " << staticBump << ", ";
- o << "\"initializers\": [";
+ meta << "\"initializers\": [";
first = true;
for (const auto& func : initializerFunctions) {
if (first) first = false;
- else o << ", ";
- o << "\"" << func.c_str() << "\"";
+ else meta << ", ";
+ meta << "\"" << func.c_str() << "\"";
}
- o << "]";
+ meta << "]";
+
+ meta << " }\n";
- o << " }\n";
+ return meta.str();
}
-} // namespace emscripten
+std::string emscriptenGlue(
+ Module& wasm,
+ bool allowMemoryGrowth,
+ Address stackPointer,
+ Address staticBump,
+ std::vector<Name> const& initializerFunctions) {
+ EmscriptenGlueGenerator generator(wasm, stackPointer);
+ generator.generateRuntimeFunctions();
+
+ if (allowMemoryGrowth) {
+ generator.generateMemoryGrowthFunction();
+ }
+
+ generator.generateDynCallThunks();
+
+ return generator.generateEmscriptenMetadata(staticBump, initializerFunctions);
+}
} // namespace wasm
diff --git a/src/wasm-emscripten.h b/src/wasm-emscripten.h
index 7400a8b0f..90a7d9a86 100644
--- a/src/wasm-emscripten.h
+++ b/src/wasm-emscripten.h
@@ -18,27 +18,47 @@
#define wasm_wasm_emscripten_h
#include "wasm.h"
+#include "wasm-builder.h"
namespace wasm {
-class LinkerObject;
+// Class which modifies a wasm module for use with emscripten. Generates
+// runtime functions and emits metadata.
+class EmscriptenGlueGenerator {
+public:
+ EmscriptenGlueGenerator(Module& wasm, Address stackPointerOffset = Address(0))
+ : wasm(wasm),
+ builder(wasm),
+ stackPointerOffset(stackPointerOffset) { }
-namespace emscripten {
+ void generateRuntimeFunctions();
+ void generateMemoryGrowthFunction();
-void generateRuntimeFunctions(LinkerObject& linker);
-void generateMemoryGrowthFunction(Module&);
+ // Create thunks for use with emscripten Runtime.dynCall. Creates one for each
+ // signature in the indirect function table.
+ void generateDynCallThunks();
-// Create thunks for use with emscripten Runtime.dynCall. Creates one for each
-// signature in the indirect function table.
-std::vector<Function*> makeDynCallThunks(Module& wasm, std::vector<Name> const& tableSegmentData);
+ std::string generateEmscriptenMetadata(
+ Address staticBump, std::vector<Name> const& initializerFunctions);
-void generateEmscriptenMetadata(std::ostream& o,
- Module& wasm,
- std::unordered_map<Address, Address> segmentsByAddress,
- Address staticBump,
- std::vector<Name> const& initializerFunctions);
+private:
+ Module& wasm;
+ Builder builder;
+ Address stackPointerOffset;
-} // namespace emscripten
+ Load* generateLoadStackPointer();
+ Store* generateStoreStackPointer(Expression* value);
+ void generateStackSaveFunction();
+ void generateStackAllocFunction();
+ void generateStackRestoreFunction();
+};
+
+std::string emscriptenGlue(
+ Module& wasm,
+ bool allowMemoryGrowth,
+ Address stackPointer,
+ Address staticBump,
+ std::vector<Name> const& initializerFunctions);
} // namespace wasm
diff --git a/src/wasm-linker.cpp b/src/wasm-linker.cpp
index b2f337d5a..dacc3cf51 100644
--- a/src/wasm-linker.cpp
+++ b/src/wasm-linker.cpp
@@ -148,8 +148,8 @@ void Linker::layout() {
}
// XXX For now, export all functions marked .globl.
- for (Name name : out.globls) exportFunction(name, false);
- for (Name name : out.initializerFunctions) exportFunction(name, true);
+ for (Name name : out.globls) exportFunction(out.wasm, name, false);
+ for (Name name : out.initializerFunctions) exportFunction(out.wasm, name, true);
// Pad the indirect function table with a dummy function
makeDummyFunction();
@@ -212,6 +212,8 @@ void Linker::layout() {
}
}
}
+ out.relocations.clear();
+
if (!!startFunction) {
if (out.symbolInfo.implementedFunctions.count(startFunction) == 0) {
Fatal() << "Unknown start function: `" << startFunction << "`\n";
@@ -263,7 +265,7 @@ void Linker::layout() {
// argument from emcc.py and export all of them.
for (auto function : {"malloc", "free", "realloc", "memalign"}) {
if (out.symbolInfo.implementedFunctions.count(function)) {
- exportFunction(function, true);
+ exportFunction(out.wasm, function, true);
}
}
@@ -331,20 +333,8 @@ bool Linker::linkArchive(Archive& archive) {
return true;
}
-void Linker::emscriptenGlue(std::ostream& o) {
- if (debug) {
- WasmPrinter::printModule(&out.wasm, std::cerr);
- }
-
- auto functionsToThunk = getTableData();
- auto removeIt = std::remove(functionsToThunk.begin(), functionsToThunk.end(), dummyFunction);
- functionsToThunk.erase(removeIt, functionsToThunk.end());
- for (auto f : emscripten::makeDynCallThunks(out.wasm, functionsToThunk)) {
- exportFunction(f->name, true);
- }
-
- auto staticBump = nextStatic - globalBase;
- emscripten::generateEmscriptenMetadata(o, out.wasm, segmentsByAddress, staticBump, out.initializerFunctions);
+Address Linker::getStaticBump() const {
+ return nextStatic - globalBase;
}
void Linker::ensureTableSegment() {
@@ -415,3 +405,7 @@ Function* Linker::getImportThunk(Name name, const FunctionType* funcType) {
out.wasm.addFunction(f);
return f;
}
+
+Address Linker::getStackPointerAddress() const {
+ return Address(staticAddresses.at(stackPointer));
+}
diff --git a/src/wasm-linker.h b/src/wasm-linker.h
index 2129f4fd3..89f1cb718 100644
--- a/src/wasm-linker.h
+++ b/src/wasm-linker.h
@@ -33,6 +33,18 @@ namespace wasm {
class S2WasmBuilder;
+inline void exportFunction(Module& wasm, Name name, bool must_export) {
+ if (!wasm.getFunctionOrNull(name)) {
+ assert(!must_export);
+ return;
+ }
+ if (wasm.getExportOrNull(name)) return; // Already exported
+ auto exp = new Export;
+ exp->name = exp->value = name;
+ exp->kind = ExternalKind::Function;
+ wasm.addExport(exp);
+}
+
// An "object file" for linking. Contains a wasm module, plus the associated
// information needed for linking/layout.
class LinkerObject {
@@ -156,6 +168,10 @@ class LinkerObject {
return wasm.functions.empty();
}
+ std::vector<Name> const& getInitializerFunctions() const {
+ return initializerFunctions;
+ }
+
friend class Linker;
Module wasm;
@@ -246,10 +262,6 @@ class Linker {
// function table.
void layout();
- // Support for emscripten integration: generates dyncall thunks, emits
- // metadata for asmConsts, staticBump and initializer functions.
- void emscriptenGlue(std::ostream& o);
-
// Add an object to the link by constructing it in-place with a builder.
// Returns false if an error occurred.
bool linkObject(S2WasmBuilder& builder);
@@ -259,6 +271,12 @@ class Linker {
// Returns false if an error occurred.
bool linkArchive(Archive& archive);
+ // Returns the address of the stack pointer.
+ Address getStackPointerAddress() const;
+
+ // Returns the total size of all static allocations.
+ Address getStaticBump() const;
+
private:
// Allocate a static variable and return its address in linear memory
Address allocateStatic(Address allocSize, Address alignment, Name name) {
@@ -294,18 +312,6 @@ class Linker {
return (size + Memory::kPageSize - 1) & Memory::kPageMask;
}
- void exportFunction(Name name, bool must_export) {
- if (!out.wasm.getFunctionOrNull(name)) {
- assert(!must_export);
- return;
- }
- if (out.wasm.getExportOrNull(name)) return; // Already exported
- auto exp = new Export;
- exp->name = exp->value = name;
- exp->kind = ExternalKind::Function;
- out.wasm.addExport(exp);
- }
-
Function* getImportThunk(Name name, const FunctionType* t);
// The output module (linked executable)
diff --git a/test/dot_s/alias.wast b/test/dot_s/alias.wast
index 4fa629157..acb13f8f0 100644
--- a/test/dot_s/alias.wast
+++ b/test/dot_s/alias.wast
@@ -4,11 +4,11 @@
(table 2 2 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $__exit)
(data (i32.const 16) "\d2\04\00\00\00\00\00\00)\t\00\00")
+ (export "__exit" (func $__exit))
+ (export "__needs_exit" (func $__needs_exit))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "__exit" (func $__exit))
- (export "__needs_exit" (func $__needs_exit))
(export "dynCall_v" (func $dynCall_v))
(func $__exit (; 0 ;) (type $FUNCSIG$v)
(drop
@@ -28,12 +28,15 @@
(i32.const 1)
)
)
- (func $stackSave (; 2 ;) (result i32)
+ (func $__wasm_nullptr (; 2 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 3 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 3 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 4 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -52,15 +55,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 4 ;) (param $0 i32)
+ (func $stackRestore (; 5 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 5 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_v (; 6 ;) (param $fptr i32)
(call_indirect (type $FUNCSIG$v)
(get_local $fptr)
diff --git a/test/dot_s/asm_const.wast b/test/dot_s/asm_const.wast
index 4484fe3d2..0974c817e 100644
--- a/test/dot_s/asm_const.wast
+++ b/test/dot_s/asm_const.wast
@@ -4,10 +4,10 @@
(import "env" "emscripten_asm_const_v" (func $emscripten_asm_const_v (param i32)))
(table 0 anyfunc)
(data (i32.const 16) "{ Module.print(\"hello, world!\"); }\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 1 ;) (result i32)
(call $emscripten_asm_const_v
(i32.const 0)
diff --git a/test/dot_s/basics.wast b/test/dot_s/basics.wast
index 9215507f7..57b3b9899 100644
--- a/test/dot_s/basics.wast
+++ b/test/dot_s/basics.wast
@@ -9,10 +9,10 @@
(data (i32.const 16) "hello, world!\n\00")
(data (i32.const 32) "vcq")
(data (i32.const 48) "\16\00\00\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(export "dynCall_iii" (func $dynCall_iii))
(func $main (; 1 ;) (type $FUNCSIG$iii) (param $0 i32) (param $1 i32) (result i32)
(call $puts
@@ -97,12 +97,15 @@
)
(get_local $0)
)
- (func $stackSave (; 2 ;) (result i32)
+ (func $__wasm_nullptr (; 2 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 3 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 3 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 4 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -121,15 +124,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 4 ;) (param $0 i32)
+ (func $stackRestore (; 5 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 5 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_iii (; 6 ;) (param $fptr i32) (param $0 i32) (param $1 i32) (result i32)
(call_indirect (type $FUNCSIG$iii)
(get_local $0)
diff --git a/test/dot_s/bcp-1.wast b/test/dot_s/bcp-1.wast
index 79072396c..c75687537 100644
--- a/test/dot_s/bcp-1.wast
+++ b/test/dot_s/bcp-1.wast
@@ -15,9 +15,6 @@
(data (i32.const 72) "\0f\00\00\00\10\00\00\00\11\00\00\00")
(data (i32.const 96) "hi\00")
(data (i32.const 100) "\00\00\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "bad0" (func $bad0))
(export "bad1" (func $bad1))
(export "bad2" (func $bad2))
@@ -36,6 +33,9 @@
(export "opt1" (func $opt1))
(export "opt2" (func $opt2))
(export "main" (func $main))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(export "dynCall_i" (func $dynCall_i))
(export "dynCall_ii" (func $dynCall_ii))
(func $bad0 (; 2 ;) (type $FUNCSIG$i) (result i32)
@@ -309,12 +309,15 @@
(call $abort)
(unreachable)
)
- (func $stackSave (; 20 ;) (result i32)
+ (func $__wasm_nullptr (; 20 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 21 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 21 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 22 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -333,15 +336,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 22 ;) (param $0 i32)
+ (func $stackRestore (; 23 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 23 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_i (; 24 ;) (param $fptr i32) (result i32)
(call_indirect (type $FUNCSIG$i)
(get_local $fptr)
diff --git a/test/dot_s/debug.wast b/test/dot_s/debug.wast
index 6177724ae..6a7d36eac 100644
--- a/test/dot_s/debug.wast
+++ b/test/dot_s/debug.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "fib" (func $fib))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "fib" (func $fib))
(func $fib (; 0 ;) (param $0 i32) (result i32)
(local $1 i32)
(local $2 i32)
diff --git a/test/dot_s/dso_handle.wast b/test/dot_s/dso_handle.wast
index 392add253..7dfb84db2 100644
--- a/test/dot_s/dso_handle.wast
+++ b/test/dot_s/dso_handle.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 0 ;) (result i32)
(return
(i32.const 8)
diff --git a/test/dot_s/dyncall.wast b/test/dot_s/dyncall.wast
index 27d1ddaf7..35ee92d9b 100644
--- a/test/dot_s/dyncall.wast
+++ b/test/dot_s/dyncall.wast
@@ -7,15 +7,15 @@
(import "env" "memory" (memory $0 1))
(table 6 6 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $i $i_f $vd $ffjjdi $vd2)
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "i" (func $i))
(export "i_f" (func $i_f))
(export "vd" (func $vd))
(export "ffjjdi" (func $ffjjdi))
(export "vd2" (func $vd2))
(export "main" (func $main))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(export "dynCall_i" (func $dynCall_i))
(export "dynCall_if" (func $dynCall_if))
(export "dynCall_vd" (func $dynCall_vd))
@@ -50,12 +50,15 @@
)
(i32.const 0)
)
- (func $stackSave (; 6 ;) (result i32)
+ (func $__wasm_nullptr (; 6 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 7 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 7 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 8 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -74,15 +77,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 8 ;) (param $0 i32)
+ (func $stackRestore (; 9 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 9 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_i (; 10 ;) (param $fptr i32) (result i32)
(call_indirect (type $FUNCSIG$i)
(get_local $fptr)
diff --git a/test/dot_s/exit.wast b/test/dot_s/exit.wast
index e161285c8..65fb224cc 100644
--- a/test/dot_s/exit.wast
+++ b/test/dot_s/exit.wast
@@ -3,10 +3,10 @@
(import "env" "exit" (func $exit (param i32)))
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 1 ;) (result i32)
(local $0 i32)
(call $exit
diff --git a/test/dot_s/export_malloc_free.wast b/test/dot_s/export_malloc_free.wast
index b645b9e8a..33dbcdfe7 100644
--- a/test/dot_s/export_malloc_free.wast
+++ b/test/dot_s/export_malloc_free.wast
@@ -1,14 +1,14 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "main" (func $main))
(export "malloc" (func $malloc))
(export "free" (func $free))
(export "realloc" (func $realloc))
(export "memalign" (func $memalign))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $main (; 0 ;) (result i32)
(i32.const 0)
)
diff --git a/test/dot_s/fix_em_ehsjlj_names.wast b/test/dot_s/fix_em_ehsjlj_names.wast
index a287983e8..28dc00867 100644
--- a/test/dot_s/fix_em_ehsjlj_names.wast
+++ b/test/dot_s/fix_em_ehsjlj_names.wast
@@ -15,10 +15,10 @@
(import "env" "memory" (memory $0 1))
(table 5 5 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $_Z5func1v $_Z5func2iii $_Z5func3fd $_Z5func4P8mystructS_)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(export "dynCall_v" (func $dynCall_v))
(export "dynCall_iiii" (func $dynCall_iiii))
(export "dynCall_ffd" (func $dynCall_ffd))
@@ -76,12 +76,15 @@
)
(i32.const 0)
)
- (func $stackSave (; 10 ;) (result i32)
+ (func $__wasm_nullptr (; 10 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 11 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 11 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 12 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -100,15 +103,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 12 ;) (param $0 i32)
+ (func $stackRestore (; 13 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 13 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_v (; 14 ;) (param $fptr i32)
(call_indirect (type $FUNCSIG$v)
(get_local $fptr)
diff --git a/test/dot_s/function-data-sections.wast b/test/dot_s/function-data-sections.wast
index aea8a9b85..205d815f4 100644
--- a/test/dot_s/function-data-sections.wast
+++ b/test/dot_s/function-data-sections.wast
@@ -4,12 +4,12 @@
(data (i32.const 12) "\00\00\00\00")
(data (i32.const 16) "\01\00\00\00")
(data (i32.const 20) "33\13@")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "foo" (func $foo))
(export "bar" (func $bar))
(export "qux" (func $qux))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $foo (; 0 ;)
(return)
)
diff --git a/test/dot_s/globals.wast b/test/dot_s/globals.wast
index a7d0ff50e..4e08e3375 100644
--- a/test/dot_s/globals.wast
+++ b/test/dot_s/globals.wast
@@ -5,13 +5,13 @@
(data (i32.const 12) "\11\00\00\00")
(data (i32.const 16) "\0c\00\00\00")
(data (i32.const 20) "\0e\00\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "globals" (func $globals))
(export "import_globals" (func $import_globals))
(export "globals_offset" (func $globals_offset))
(export "import_globals_offset" (func $import_globals_offset))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $globals (; 0 ;)
(i32.store offset=12
(i32.const 0)
diff --git a/test/dot_s/indidx.wast b/test/dot_s/indidx.wast
index 194868832..105b0faa0 100644
--- a/test/dot_s/indidx.wast
+++ b/test/dot_s/indidx.wast
@@ -6,10 +6,10 @@
(table 5 5 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $c $b $d $a)
(data (i32.const 16) "\04\00\00\00\02\00\00\00\01\00\00\00\03\00\00\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(export "dynCall_i" (func $dynCall_i))
(func $a (; 1 ;) (type $FUNCSIG$i) (result i32)
(i32.const 0)
@@ -51,12 +51,15 @@
(unreachable)
(unreachable)
)
- (func $stackSave (; 6 ;) (result i32)
+ (func $__wasm_nullptr (; 6 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $stackSave (; 7 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 7 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 8 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -75,15 +78,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 8 ;) (param $0 i32)
+ (func $stackRestore (; 9 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 9 ;) (type $FUNCSIG$v)
- (unreachable)
- )
(func $dynCall_i (; 10 ;) (param $fptr i32) (result i32)
(call_indirect (type $FUNCSIG$i)
(get_local $fptr)
diff --git a/test/dot_s/indirect-import.wast b/test/dot_s/indirect-import.wast
index 1b4c019ab..cd8a13ed6 100644
--- a/test/dot_s/indirect-import.wast
+++ b/test/dot_s/indirect-import.wast
@@ -13,11 +13,11 @@
(import "env" "extern_sret" (func $extern_sret (param i32)))
(table 7 7 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $__importThunk_extern_fd $__importThunk_extern_vj $__importThunk_extern_v $__importThunk_extern_ijidf $__importThunk_extern_struct $__importThunk_extern_sret)
+ (export "bar" (func $bar))
+ (export "baz" (func $baz))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "bar" (func $bar))
- (export "baz" (func $baz))
(export "dynCall_fd" (func $dynCall_fd))
(export "dynCall_v" (func $dynCall_v))
(export "dynCall_vi" (func $dynCall_vi))
@@ -88,53 +88,23 @@
(func $baz (; 7 ;) (result i32)
(i32.const 3)
)
- (func $stackSave (; 8 ;) (result i32)
- (i32.load offset=4
- (i32.const 0)
- )
- )
- (func $stackAlloc (; 9 ;) (param $0 i32) (result i32)
- (local $1 i32)
- (set_local $1
- (i32.load offset=4
- (i32.const 0)
- )
- )
- (i32.store offset=4
- (i32.const 0)
- (i32.and
- (i32.sub
- (get_local $1)
- (get_local $0)
- )
- (i32.const -16)
- )
- )
- (get_local $1)
- )
- (func $stackRestore (; 10 ;) (param $0 i32)
- (i32.store offset=4
- (i32.const 0)
- (get_local $0)
- )
- )
- (func $__wasm_nullptr (; 11 ;) (type $FUNCSIG$v)
+ (func $__wasm_nullptr (; 8 ;) (type $FUNCSIG$v)
(unreachable)
)
- (func $__importThunk_extern_fd (; 12 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32)
+ (func $__importThunk_extern_fd (; 9 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32)
(call $extern_fd
(get_local $0)
)
)
- (func $__importThunk_extern_vj (; 13 ;) (type $FUNCSIG$vj) (param $0 i64)
+ (func $__importThunk_extern_vj (; 10 ;) (type $FUNCSIG$vj) (param $0 i64)
(call $extern_vj
(get_local $0)
)
)
- (func $__importThunk_extern_v (; 14 ;) (type $FUNCSIG$v)
+ (func $__importThunk_extern_v (; 11 ;) (type $FUNCSIG$v)
(call $extern_v)
)
- (func $__importThunk_extern_ijidf (; 15 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32)
+ (func $__importThunk_extern_ijidf (; 12 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32)
(call $extern_ijidf
(get_local $0)
(get_local $1)
@@ -142,16 +112,46 @@
(get_local $3)
)
)
- (func $__importThunk_extern_struct (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $__importThunk_extern_struct (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
(call $extern_struct
(get_local $0)
)
)
- (func $__importThunk_extern_sret (; 17 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $__importThunk_extern_sret (; 14 ;) (type $FUNCSIG$vi) (param $0 i32)
(call $extern_sret
(get_local $0)
)
)
+ (func $stackSave (; 15 ;) (result i32)
+ (i32.load offset=4
+ (i32.const 0)
+ )
+ )
+ (func $stackAlloc (; 16 ;) (param $0 i32) (result i32)
+ (local $1 i32)
+ (set_local $1
+ (i32.load offset=4
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=4
+ (i32.const 0)
+ (i32.and
+ (i32.sub
+ (get_local $1)
+ (get_local $0)
+ )
+ (i32.const -16)
+ )
+ )
+ (get_local $1)
+ )
+ (func $stackRestore (; 17 ;) (param $0 i32)
+ (i32.store offset=4
+ (i32.const 0)
+ (get_local $0)
+ )
+ )
(func $dynCall_fd (; 18 ;) (param $fptr i32) (param $0 f64) (result f32)
(call_indirect (type $FUNCSIG$fd)
(get_local $0)
diff --git a/test/dot_s/initializers.wast b/test/dot_s/initializers.wast
index f50b5f5ec..e3e866cc3 100644
--- a/test/dot_s/initializers.wast
+++ b/test/dot_s/initializers.wast
@@ -1,12 +1,12 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "main" (func $main))
(export "f1" (func $f1))
(export "f2" (func $f2))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $main (; 0 ;) (result i32)
(return
(i32.const 5)
diff --git a/test/dot_s/local_align.wast b/test/dot_s/local_align.wast
index 41e5675e5..046b2b9f6 100644
--- a/test/dot_s/local_align.wast
+++ b/test/dot_s/local_align.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $foo (; 0 ;) (param $0 i32)
)
(func $main (; 1 ;) (result i32)
diff --git a/test/dot_s/macClangMetaData.wast b/test/dot_s/macClangMetaData.wast
index c24bf3f52..3dcde706c 100644
--- a/test/dot_s/macClangMetaData.wast
+++ b/test/dot_s/macClangMetaData.wast
@@ -4,10 +4,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 16) "Hello, World!\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 1 ;) (param $0 i32) (param $1 i32) (result i32)
(drop
(call $puts
diff --git a/test/dot_s/memops.wast b/test/dot_s/memops.wast
index 4d5cba4e7..acb70e511 100644
--- a/test/dot_s/memops.wast
+++ b/test/dot_s/memops.wast
@@ -4,10 +4,10 @@
(import "env" "emscripten_asm_const_v" (func $emscripten_asm_const_v (param i32)))
(table 0 anyfunc)
(data (i32.const 16) "{ Module.print(\"hello, world! \" + HEAP32[8>>2]); }\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $_Z6reporti (; 1 ;) (param $0 i32)
(i32.store
(i32.const 8)
diff --git a/test/dot_s/minimal.wast b/test/dot_s/minimal.wast
index bbc6971af..ae918b3e5 100644
--- a/test/dot_s/minimal.wast
+++ b/test/dot_s/minimal.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 0 ;) (result i32)
(return
(i32.const 5)
diff --git a/test/dot_s/relocation.wast b/test/dot_s/relocation.wast
index 4d7d4c4d6..c528efcae 100644
--- a/test/dot_s/relocation.wast
+++ b/test/dot_s/relocation.wast
@@ -3,10 +3,10 @@
(table 0 anyfunc)
(data (i32.const 12) "\10\00\00\00")
(data (i32.const 16) "\0c\00\00\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 0 ;) (result i32)
(local $0 i32)
(return
diff --git a/test/dot_s/return.wast b/test/dot_s/return.wast
index 35c373f94..8a527b01a 100644
--- a/test/dot_s/return.wast
+++ b/test/dot_s/return.wast
@@ -1,11 +1,11 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "return_i32" (func $return_i32))
+ (export "return_void" (func $return_void))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "return_i32" (func $return_i32))
- (export "return_void" (func $return_void))
(func $return_i32 (; 0 ;) (result i32)
(i32.const 5)
)
diff --git a/test/dot_s/start_main0.wast b/test/dot_s/start_main0.wast
index 1656e4345..79ab8b217 100644
--- a/test/dot_s/start_main0.wast
+++ b/test/dot_s/start_main0.wast
@@ -1,19 +1,22 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(start $_start)
(func $main (; 0 ;)
)
- (func $stackSave (; 1 ;) (result i32)
+ (func $_start (; 1 ;)
+ (call $main)
+ )
+ (func $stackSave (; 2 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 2 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 3 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -32,14 +35,11 @@
)
(get_local $1)
)
- (func $stackRestore (; 3 ;) (param $0 i32)
+ (func $stackRestore (; 4 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $_start (; 4 ;)
- (call $main)
- )
)
;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] }
diff --git a/test/dot_s/start_main2.wast b/test/dot_s/start_main2.wast
index ef6b2695e..cd67cdeda 100644
--- a/test/dot_s/start_main2.wast
+++ b/test/dot_s/start_main2.wast
@@ -1,22 +1,32 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(start $_start)
(func $main (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
(return
(get_local $0)
)
)
- (func $stackSave (; 1 ;) (result i32)
+ (func $_start (; 1 ;)
+ (local $0 i32)
+ (local $1 i32)
+ (drop
+ (call $main
+ (get_local $0)
+ (get_local $1)
+ )
+ )
+ )
+ (func $stackSave (; 2 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 2 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 3 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -35,21 +45,11 @@
)
(get_local $1)
)
- (func $stackRestore (; 3 ;) (param $0 i32)
+ (func $stackRestore (; 4 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $_start (; 4 ;)
- (local $0 i32)
- (local $1 i32)
- (drop
- (call $main
- (get_local $0)
- (get_local $1)
- )
- )
- )
)
;; METADATA: { "asmConsts": {},"staticBump": 12, "initializers": [] }
diff --git a/test/dot_s/symbolic-offset.wast b/test/dot_s/symbolic-offset.wast
index 7dfb753db..e9fe0eb0b 100644
--- a/test/dot_s/symbolic-offset.wast
+++ b/test/dot_s/symbolic-offset.wast
@@ -2,10 +2,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 12) "\01\00\00\00\00\00\00\00\00\00\00\00")
+ (export "f" (func $f))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "f" (func $f))
(func $f (; 0 ;) (param $0 i32) (param $1 i32)
(i32.store offset=16
(get_local $0)
diff --git a/test/dot_s/text_before_type.wast b/test/dot_s/text_before_type.wast
index 9971ea5b0..04d8ec806 100644
--- a/test/dot_s/text_before_type.wast
+++ b/test/dot_s/text_before_type.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 0 ;) (result i32)
(call $foo)
(i32.const 0)
diff --git a/test/dot_s/traps.clamp.wast b/test/dot_s/traps.clamp.wast
index 127fd53f8..7228741bb 100644
--- a/test/dot_s/traps.clamp.wast
+++ b/test/dot_s/traps.clamp.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "test_traps" (func $test_traps))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "test_traps" (func $test_traps))
(func $test_traps (; 0 ;) (param $0 f32) (param $1 f64) (result i32)
(call $i32u-div
(call $f32-to-int
diff --git a/test/dot_s/traps.js.wast b/test/dot_s/traps.js.wast
index 658301b32..2dd71d29a 100644
--- a/test/dot_s/traps.js.wast
+++ b/test/dot_s/traps.js.wast
@@ -3,10 +3,10 @@
(import "asm2wasm" "f64-to-int" (func $f64-to-int (param f64) (result i32)))
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "test_traps" (func $test_traps))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "test_traps" (func $test_traps))
(func $test_traps (; 1 ;) (param $0 f32) (param $1 f64) (result i32)
(call $i32u-div
(call $f64-to-int
diff --git a/test/dot_s/traps.wast b/test/dot_s/traps.wast
index fbc7d4400..e6371fdaf 100644
--- a/test/dot_s/traps.wast
+++ b/test/dot_s/traps.wast
@@ -1,10 +1,10 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
+ (export "test_traps" (func $test_traps))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "test_traps" (func $test_traps))
(func $test_traps (; 0 ;) (param $0 f32) (param $1 f64) (result i32)
(i32.div_u
(i32.trunc_s/f32
diff --git a/test/dot_s/visibilities.wast b/test/dot_s/visibilities.wast
index c81ef1ebe..58442bd37 100644
--- a/test/dot_s/visibilities.wast
+++ b/test/dot_s/visibilities.wast
@@ -1,12 +1,12 @@
(module
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "foo" (func $foo))
(export "bar" (func $bar))
(export "qux" (func $qux))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $foo (; 0 ;)
(return)
)
diff --git a/test/llvm_autogenerated/byval.wast b/test/llvm_autogenerated/byval.wast
index 5fd003502..d3eeceb1f 100644
--- a/test/llvm_autogenerated/byval.wast
+++ b/test/llvm_autogenerated/byval.wast
@@ -12,9 +12,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "byval_arg" (func $byval_arg))
(export "byval_arg_align8" (func $byval_arg_align8))
(export "byval_arg_double" (func $byval_arg_double))
@@ -22,6 +19,9 @@
(export "byval_empty_caller" (func $byval_empty_caller))
(export "byval_empty_callee" (func $byval_empty_callee))
(export "big_byval" (func $big_byval))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $byval_arg (; 8 ;) (param $0 i32)
(local $1 i32)
(i32.store offset=4
diff --git a/test/llvm_autogenerated/call.wast b/test/llvm_autogenerated/call.wast
index 11b6fc306..dc1d2a443 100644
--- a/test/llvm_autogenerated/call.wast
+++ b/test/llvm_autogenerated/call.wast
@@ -17,9 +17,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "call_i32_nullary" (func $call_i32_nullary))
(export "call_i64_nullary" (func $call_i64_nullary))
(export "call_float_nullary" (func $call_float_nullary))
@@ -34,6 +31,9 @@
(export "tail_call_void_nullary" (func $tail_call_void_nullary))
(export "fastcc_tail_call_void_nullary" (func $fastcc_tail_call_void_nullary))
(export "coldcc_tail_call_void_nullary" (func $coldcc_tail_call_void_nullary))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $call_i32_nullary (; 7 ;) (result i32)
(return
(call $i32_nullary)
diff --git a/test/llvm_autogenerated/cfg-stackify.wast b/test/llvm_autogenerated/cfg-stackify.wast
index 14885f4a5..b6b29e8ab 100644
--- a/test/llvm_autogenerated/cfg-stackify.wast
+++ b/test/llvm_autogenerated/cfg-stackify.wast
@@ -9,9 +9,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "test0" (func $test0))
(export "test1" (func $test1))
(export "test2" (func $test2))
@@ -37,6 +34,9 @@
(export "test13" (func $test13))
(export "test14" (func $test14))
(export "test15" (func $test15))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $test0 (; 5 ;) (param $0 i32)
(local $1 i32)
(set_local $1
diff --git a/test/llvm_autogenerated/comparisons_f32.wast b/test/llvm_autogenerated/comparisons_f32.wast
index 89d0acde4..a46694d64 100644
--- a/test/llvm_autogenerated/comparisons_f32.wast
+++ b/test/llvm_autogenerated/comparisons_f32.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "ord_f32" (func $ord_f32))
(export "uno_f32" (func $uno_f32))
(export "oeq_f32" (func $oeq_f32))
@@ -19,6 +16,9 @@
(export "ule_f32" (func $ule_f32))
(export "ugt_f32" (func $ugt_f32))
(export "uge_f32" (func $uge_f32))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $ord_f32 (; 0 ;) (param $0 f32) (param $1 f32) (result i32)
(return
(i32.and
diff --git a/test/llvm_autogenerated/comparisons_f64.wast b/test/llvm_autogenerated/comparisons_f64.wast
index e5b5f109f..cbc254f9c 100644
--- a/test/llvm_autogenerated/comparisons_f64.wast
+++ b/test/llvm_autogenerated/comparisons_f64.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "ord_f64" (func $ord_f64))
(export "uno_f64" (func $uno_f64))
(export "oeq_f64" (func $oeq_f64))
@@ -19,6 +16,9 @@
(export "ule_f64" (func $ule_f64))
(export "ugt_f64" (func $ugt_f64))
(export "uge_f64" (func $uge_f64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $ord_f64 (; 0 ;) (param $0 f64) (param $1 f64) (result i32)
(return
(i32.and
diff --git a/test/llvm_autogenerated/comparisons_i32.wast b/test/llvm_autogenerated/comparisons_i32.wast
index a9330f9a3..e55b7c98b 100644
--- a/test/llvm_autogenerated/comparisons_i32.wast
+++ b/test/llvm_autogenerated/comparisons_i32.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "eq_i32" (func $eq_i32))
(export "ne_i32" (func $ne_i32))
(export "slt_i32" (func $slt_i32))
@@ -15,6 +12,9 @@
(export "sge_i32" (func $sge_i32))
(export "ugt_i32" (func $ugt_i32))
(export "uge_i32" (func $uge_i32))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $eq_i32 (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
(return
(i32.eq
diff --git a/test/llvm_autogenerated/comparisons_i64.wast b/test/llvm_autogenerated/comparisons_i64.wast
index 3d4e7662e..c7764d82b 100644
--- a/test/llvm_autogenerated/comparisons_i64.wast
+++ b/test/llvm_autogenerated/comparisons_i64.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "eq_i64" (func $eq_i64))
(export "ne_i64" (func $ne_i64))
(export "slt_i64" (func $slt_i64))
@@ -15,6 +12,9 @@
(export "sge_i64" (func $sge_i64))
(export "ugt_i64" (func $ugt_i64))
(export "uge_i64" (func $uge_i64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $eq_i64 (; 0 ;) (param $0 i64) (param $1 i64) (result i32)
(return
(i64.eq
diff --git a/test/llvm_autogenerated/conv.wast b/test/llvm_autogenerated/conv.wast
index f280c5017..7a59f056d 100644
--- a/test/llvm_autogenerated/conv.wast
+++ b/test/llvm_autogenerated/conv.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "i32_wrap_i64" (func $i32_wrap_i64))
(export "i64_extend_s_i32" (func $i64_extend_s_i32))
(export "i64_extend_u_i32" (func $i64_extend_u_i32))
@@ -31,6 +28,9 @@
(export "bitcast_float_to_i32" (func $bitcast_float_to_i32))
(export "bitcast_i64_to_double" (func $bitcast_i64_to_double))
(export "bitcast_double_to_i64" (func $bitcast_double_to_i64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $i32_wrap_i64 (; 0 ;) (param $0 i64) (result i32)
(return
(i32.wrap/i64
diff --git a/test/llvm_autogenerated/copysign-casts.wast b/test/llvm_autogenerated/copysign-casts.wast
index 6eb398e2b..b1bcb7d9b 100644
--- a/test/llvm_autogenerated/copysign-casts.wast
+++ b/test/llvm_autogenerated/copysign-casts.wast
@@ -4,11 +4,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "fold_promote" (func $fold_promote))
+ (export "fold_demote" (func $fold_demote))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "fold_promote" (func $fold_promote))
- (export "fold_demote" (func $fold_demote))
(func $fold_promote (; 0 ;) (param $0 f64) (param $1 f32) (result f64)
(f64.copysign
(get_local $0)
diff --git a/test/llvm_autogenerated/cpus.wast b/test/llvm_autogenerated/cpus.wast
index 808a6e085..fb6b6bd94 100644
--- a/test/llvm_autogenerated/cpus.wast
+++ b/test/llvm_autogenerated/cpus.wast
@@ -2,10 +2,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "f" (func $f))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "f" (func $f))
(func $f (; 0 ;) (param $0 i32) (result i32)
(get_local $0)
)
diff --git a/test/llvm_autogenerated/dead-vreg.wast b/test/llvm_autogenerated/dead-vreg.wast
index a6ea58e02..312b87d3d 100644
--- a/test/llvm_autogenerated/dead-vreg.wast
+++ b/test/llvm_autogenerated/dead-vreg.wast
@@ -2,10 +2,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "foo" (func $foo))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "foo" (func $foo))
(func $foo (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32)
(local $3 i32)
(local $4 i32)
diff --git a/test/llvm_autogenerated/divrem-constant.wast b/test/llvm_autogenerated/divrem-constant.wast
index a1012fdda..957048e57 100644
--- a/test/llvm_autogenerated/divrem-constant.wast
+++ b/test/llvm_autogenerated/divrem-constant.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "test_udiv_2" (func $test_udiv_2))
(export "test_udiv_5" (func $test_udiv_5))
(export "test_sdiv_2" (func $test_sdiv_2))
@@ -13,6 +10,9 @@
(export "test_urem_5" (func $test_urem_5))
(export "test_srem_2" (func $test_srem_2))
(export "test_srem_5" (func $test_srem_5))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $test_udiv_2 (; 0 ;) (param $0 i32) (result i32)
(i32.shr_u
(get_local $0)
diff --git a/test/llvm_autogenerated/f32.wast b/test/llvm_autogenerated/f32.wast
index e01196c49..1904cb357 100644
--- a/test/llvm_autogenerated/f32.wast
+++ b/test/llvm_autogenerated/f32.wast
@@ -4,9 +4,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "fadd32" (func $fadd32))
(export "fsub32" (func $fsub32))
(export "fmul32" (func $fmul32))
@@ -23,6 +20,9 @@
(export "fmin32" (func $fmin32))
(export "fmax32" (func $fmax32))
(export "fma32" (func $fma32))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $fadd32 (; 1 ;) (param $0 f32) (param $1 f32) (result f32)
(return
(f32.add
diff --git a/test/llvm_autogenerated/f64.wast b/test/llvm_autogenerated/f64.wast
index 00c5054da..50ad8aa54 100644
--- a/test/llvm_autogenerated/f64.wast
+++ b/test/llvm_autogenerated/f64.wast
@@ -4,9 +4,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "fadd64" (func $fadd64))
(export "fsub64" (func $fsub64))
(export "fmul64" (func $fmul64))
@@ -23,6 +20,9 @@
(export "fmin64" (func $fmin64))
(export "fmax64" (func $fmax64))
(export "fma64" (func $fma64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $fadd64 (; 1 ;) (param $0 f64) (param $1 f64) (result f64)
(return
(f64.add
diff --git a/test/llvm_autogenerated/fast-isel-noreg.wast b/test/llvm_autogenerated/fast-isel-noreg.wast
index 8f36c718a..2814ca576 100644
--- a/test/llvm_autogenerated/fast-isel-noreg.wast
+++ b/test/llvm_autogenerated/fast-isel-noreg.wast
@@ -2,12 +2,12 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "a" (func $a))
(export "b" (func $b))
(export "c" (func $c))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $a (; 0 ;) (result i32)
(return
(i32.const 0)
diff --git a/test/llvm_autogenerated/fast-isel.wast b/test/llvm_autogenerated/fast-isel.wast
index a7d4b6b4c..efe4e1ffc 100644
--- a/test/llvm_autogenerated/fast-isel.wast
+++ b/test/llvm_autogenerated/fast-isel.wast
@@ -2,15 +2,15 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "immediate_f32" (func $immediate_f32))
(export "immediate_f64" (func $immediate_f64))
(export "bitcast_i32_f32" (func $bitcast_i32_f32))
(export "bitcast_f32_i32" (func $bitcast_f32_i32))
(export "bitcast_i64_f64" (func $bitcast_i64_f64))
(export "bitcast_f64_i64" (func $bitcast_f64_i64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $immediate_f32 (; 0 ;) (result f32)
(f32.const 2.5)
)
diff --git a/test/llvm_autogenerated/frem.wast b/test/llvm_autogenerated/frem.wast
index 241b3c47d..75c89b620 100644
--- a/test/llvm_autogenerated/frem.wast
+++ b/test/llvm_autogenerated/frem.wast
@@ -6,11 +6,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "frem32" (func $frem32))
+ (export "frem64" (func $frem64))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "frem32" (func $frem32))
- (export "frem64" (func $frem64))
(func $frem32 (; 2 ;) (param $0 f32) (param $1 f32) (result f32)
(return
(call $fmodf
diff --git a/test/llvm_autogenerated/func.wast b/test/llvm_autogenerated/func.wast
index 2856007f8..7fbad243a 100644
--- a/test/llvm_autogenerated/func.wast
+++ b/test/llvm_autogenerated/func.wast
@@ -2,15 +2,15 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "f0" (func $f0))
(export "f1" (func $f1))
(export "f2" (func $f2))
(export "f3" (func $f3))
(export "f4" (func $f4))
(export "f5" (func $f5))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $f0 (; 0 ;)
(return)
)
diff --git a/test/llvm_autogenerated/global.wast b/test/llvm_autogenerated/global.wast
index 50692de42..05de7a8ef 100644
--- a/test/llvm_autogenerated/global.wast
+++ b/test/llvm_autogenerated/global.wast
@@ -16,11 +16,11 @@
(data (i32.const 136) "\00\00\00\00\00\00\00@")
(data (i32.const 656) "\e0\00\00\00")
(data (i32.const 1192) "\a4\04\00\00")
+ (export "foo" (func $foo))
+ (export "call_memcpy" (func $call_memcpy))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "foo" (func $foo))
- (export "call_memcpy" (func $call_memcpy))
(func $foo (; 1 ;) (result i32)
(return
(i32.load offset=32
diff --git a/test/llvm_autogenerated/globl.wast b/test/llvm_autogenerated/globl.wast
index 5fdc9d94f..09fa247fc 100644
--- a/test/llvm_autogenerated/globl.wast
+++ b/test/llvm_autogenerated/globl.wast
@@ -2,10 +2,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "foo" (func $foo))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "foo" (func $foo))
(func $foo (; 0 ;)
)
(func $stackSave (; 1 ;) (result i32)
diff --git a/test/llvm_autogenerated/i128.wast b/test/llvm_autogenerated/i128.wast
index e9e337602..d22b3e8aa 100644
--- a/test/llvm_autogenerated/i128.wast
+++ b/test/llvm_autogenerated/i128.wast
@@ -12,9 +12,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "add128" (func $add128))
(export "sub128" (func $sub128))
(export "mul128" (func $mul128))
@@ -38,6 +35,9 @@
(export "masked_rotl" (func $masked_rotl))
(export "rotr" (func $rotr))
(export "masked_rotr" (func $masked_rotr))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $add128 (; 8 ;) (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64)
(local $5 i64)
(i64.store
diff --git a/test/llvm_autogenerated/i32-load-store-alignment.wast b/test/llvm_autogenerated/i32-load-store-alignment.wast
index 748cf43a3..a48617132 100644
--- a/test/llvm_autogenerated/i32-load-store-alignment.wast
+++ b/test/llvm_autogenerated/i32-load-store-alignment.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "ldi32_a1" (func $ldi32_a1))
(export "ldi32_a2" (func $ldi32_a2))
(export "ldi32_a4" (func $ldi32_a4))
@@ -25,6 +22,9 @@
(export "sti16_a1" (func $sti16_a1))
(export "sti16_a2" (func $sti16_a2))
(export "sti16_a4" (func $sti16_a4))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $ldi32_a1 (; 0 ;) (param $0 i32) (result i32)
(return
(i32.load align=1
diff --git a/test/llvm_autogenerated/i32.wast b/test/llvm_autogenerated/i32.wast
index 5041195f5..63dc81ada 100644
--- a/test/llvm_autogenerated/i32.wast
+++ b/test/llvm_autogenerated/i32.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "add32" (func $add32))
(export "sub32" (func $sub32))
(export "mul32" (func $mul32))
@@ -28,6 +25,9 @@
(export "masked_rotl" (func $masked_rotl))
(export "rotr" (func $rotr))
(export "masked_rotr" (func $masked_rotr))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $add32 (; 0 ;) (param $0 i32) (param $1 i32) (result i32)
(return
(i32.add
diff --git a/test/llvm_autogenerated/i64-load-store-alignment.wast b/test/llvm_autogenerated/i64-load-store-alignment.wast
index 1c3a431a3..d7041e5a8 100644
--- a/test/llvm_autogenerated/i64-load-store-alignment.wast
+++ b/test/llvm_autogenerated/i64-load-store-alignment.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "ldi64_a1" (func $ldi64_a1))
(export "ldi64_a2" (func $ldi64_a2))
(export "ldi64_a4" (func $ldi64_a4))
@@ -35,6 +32,9 @@
(export "sti32_a2" (func $sti32_a2))
(export "sti32_a4" (func $sti32_a4))
(export "sti32_a8" (func $sti32_a8))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $ldi64_a1 (; 0 ;) (param $0 i32) (result i64)
(return
(i64.load align=1
diff --git a/test/llvm_autogenerated/i64.wast b/test/llvm_autogenerated/i64.wast
index 7447964c6..ae05aab15 100644
--- a/test/llvm_autogenerated/i64.wast
+++ b/test/llvm_autogenerated/i64.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "add64" (func $add64))
(export "sub64" (func $sub64))
(export "mul64" (func $mul64))
@@ -28,6 +25,9 @@
(export "masked_rotl" (func $masked_rotl))
(export "rotr" (func $rotr))
(export "masked_rotr" (func $masked_rotr))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $add64 (; 0 ;) (param $0 i64) (param $1 i64) (result i64)
(return
(i64.add
diff --git a/test/llvm_autogenerated/immediates.wast b/test/llvm_autogenerated/immediates.wast
index 5d1d8abde..285ac387d 100644
--- a/test/llvm_autogenerated/immediates.wast
+++ b/test/llvm_autogenerated/immediates.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "zero_i32" (func $zero_i32))
(export "one_i32" (func $one_i32))
(export "max_i32" (func $max_i32))
@@ -33,6 +30,9 @@
(export "neginf_f64" (func $neginf_f64))
(export "custom_nan_f64" (func $custom_nan_f64))
(export "custom_nans_f64" (func $custom_nans_f64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $zero_i32 (; 0 ;) (result i32)
(return
(i32.const 0)
diff --git a/test/llvm_autogenerated/indirect-import.wast b/test/llvm_autogenerated/indirect-import.wast
index 909c229b6..cc05dad0b 100644
--- a/test/llvm_autogenerated/indirect-import.wast
+++ b/test/llvm_autogenerated/indirect-import.wast
@@ -15,10 +15,10 @@
(table 7 7 anyfunc)
(elem (i32.const 0) $__wasm_nullptr $__importThunk_extern_fd $__importThunk_extern_vj $__importThunk_extern_v $__importThunk_extern_ijidf $__importThunk_extern_struct $__importThunk_extern_sret)
(data (i32.const 4) "\10\04\00\00")
+ (export "bar" (func $bar))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "bar" (func $bar))
(export "dynCall_fd" (func $dynCall_fd))
(export "dynCall_v" (func $dynCall_v))
(export "dynCall_vi" (func $dynCall_vi))
@@ -88,53 +88,23 @@
(get_local $0)
)
)
- (func $stackSave (; 7 ;) (result i32)
- (i32.load offset=4
- (i32.const 0)
- )
- )
- (func $stackAlloc (; 8 ;) (param $0 i32) (result i32)
- (local $1 i32)
- (set_local $1
- (i32.load offset=4
- (i32.const 0)
- )
- )
- (i32.store offset=4
- (i32.const 0)
- (i32.and
- (i32.sub
- (get_local $1)
- (get_local $0)
- )
- (i32.const -16)
- )
- )
- (get_local $1)
- )
- (func $stackRestore (; 9 ;) (param $0 i32)
- (i32.store offset=4
- (i32.const 0)
- (get_local $0)
- )
- )
- (func $__wasm_nullptr (; 10 ;) (type $FUNCSIG$v)
+ (func $__wasm_nullptr (; 7 ;) (type $FUNCSIG$v)
(unreachable)
)
- (func $__importThunk_extern_fd (; 11 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32)
+ (func $__importThunk_extern_fd (; 8 ;) (type $FUNCSIG$fd) (param $0 f64) (result f32)
(call $extern_fd
(get_local $0)
)
)
- (func $__importThunk_extern_vj (; 12 ;) (type $FUNCSIG$vj) (param $0 i64)
+ (func $__importThunk_extern_vj (; 9 ;) (type $FUNCSIG$vj) (param $0 i64)
(call $extern_vj
(get_local $0)
)
)
- (func $__importThunk_extern_v (; 13 ;) (type $FUNCSIG$v)
+ (func $__importThunk_extern_v (; 10 ;) (type $FUNCSIG$v)
(call $extern_v)
)
- (func $__importThunk_extern_ijidf (; 14 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32)
+ (func $__importThunk_extern_ijidf (; 11 ;) (type $FUNCSIG$ijidf) (param $0 i64) (param $1 i32) (param $2 f64) (param $3 f32) (result i32)
(call $extern_ijidf
(get_local $0)
(get_local $1)
@@ -142,16 +112,46 @@
(get_local $3)
)
)
- (func $__importThunk_extern_struct (; 15 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $__importThunk_extern_struct (; 12 ;) (type $FUNCSIG$vi) (param $0 i32)
(call $extern_struct
(get_local $0)
)
)
- (func $__importThunk_extern_sret (; 16 ;) (type $FUNCSIG$vi) (param $0 i32)
+ (func $__importThunk_extern_sret (; 13 ;) (type $FUNCSIG$vi) (param $0 i32)
(call $extern_sret
(get_local $0)
)
)
+ (func $stackSave (; 14 ;) (result i32)
+ (i32.load offset=4
+ (i32.const 0)
+ )
+ )
+ (func $stackAlloc (; 15 ;) (param $0 i32) (result i32)
+ (local $1 i32)
+ (set_local $1
+ (i32.load offset=4
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=4
+ (i32.const 0)
+ (i32.and
+ (i32.sub
+ (get_local $1)
+ (get_local $0)
+ )
+ (i32.const -16)
+ )
+ )
+ (get_local $1)
+ )
+ (func $stackRestore (; 16 ;) (param $0 i32)
+ (i32.store offset=4
+ (i32.const 0)
+ (get_local $0)
+ )
+ )
(func $dynCall_fd (; 17 ;) (param $fptr i32) (param $0 f64) (result f32)
(call_indirect (type $FUNCSIG$fd)
(get_local $0)
diff --git a/test/llvm_autogenerated/irreducible-cfg.wast b/test/llvm_autogenerated/irreducible-cfg.wast
index e05ffaa33..0e9c7a3f2 100644
--- a/test/llvm_autogenerated/irreducible-cfg.wast
+++ b/test/llvm_autogenerated/irreducible-cfg.wast
@@ -2,11 +2,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "test0" (func $test0))
+ (export "test1" (func $test1))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "test0" (func $test0))
- (export "test1" (func $test1))
(func $test0 (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
(local $4 f64)
(local $5 i32)
diff --git a/test/llvm_autogenerated/legalize.wast b/test/llvm_autogenerated/legalize.wast
index baef6f3b0..bc4b31728 100644
--- a/test/llvm_autogenerated/legalize.wast
+++ b/test/llvm_autogenerated/legalize.wast
@@ -5,15 +5,15 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "shl_i3" (func $shl_i3))
(export "shl_i53" (func $shl_i53))
(export "sext_in_reg_i32_i64" (func $sext_in_reg_i32_i64))
(export "fpext_f32_f64" (func $fpext_f32_f64))
(export "fpconv_f64_f32" (func $fpconv_f64_f32))
(export "bigshift" (func $bigshift))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $shl_i3 (; 2 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(return
(i32.shl
diff --git a/test/llvm_autogenerated/load-ext.wast b/test/llvm_autogenerated/load-ext.wast
index 326af4280..f40690f7a 100644
--- a/test/llvm_autogenerated/load-ext.wast
+++ b/test/llvm_autogenerated/load-ext.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "sext_i8_i32" (func $sext_i8_i32))
(export "zext_i8_i32" (func $zext_i8_i32))
(export "sext_i16_i32" (func $sext_i16_i32))
@@ -15,6 +12,9 @@
(export "zext_i16_i64" (func $zext_i16_i64))
(export "sext_i32_i64" (func $sext_i32_i64))
(export "zext_i32_i64" (func $zext_i32_i64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $sext_i8_i32 (; 0 ;) (param $0 i32) (result i32)
(return
(i32.load8_s
diff --git a/test/llvm_autogenerated/load-store-i1.wast b/test/llvm_autogenerated/load-store-i1.wast
index 0cdd16c43..c7b671300 100644
--- a/test/llvm_autogenerated/load-store-i1.wast
+++ b/test/llvm_autogenerated/load-store-i1.wast
@@ -2,15 +2,15 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "load_u_i1_i32" (func $load_u_i1_i32))
(export "load_s_i1_i32" (func $load_s_i1_i32))
(export "load_u_i1_i64" (func $load_u_i1_i64))
(export "load_s_i1_i64" (func $load_s_i1_i64))
(export "store_i32_i1" (func $store_i32_i1))
(export "store_i64_i1" (func $store_i64_i1))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $load_u_i1_i32 (; 0 ;) (param $0 i32) (result i32)
(return
(i32.load8_u
diff --git a/test/llvm_autogenerated/load.wast b/test/llvm_autogenerated/load.wast
index 8dadeae3c..173ca3a37 100644
--- a/test/llvm_autogenerated/load.wast
+++ b/test/llvm_autogenerated/load.wast
@@ -2,13 +2,13 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "ldi32" (func $ldi32))
(export "ldi64" (func $ldi64))
(export "ldf32" (func $ldf32))
(export "ldf64" (func $ldf64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $ldi32 (; 0 ;) (param $0 i32) (result i32)
(return
(i32.load
diff --git a/test/llvm_autogenerated/lower-em-ehsjlj-options.wast b/test/llvm_autogenerated/lower-em-ehsjlj-options.wast
index 6fc2a9b56..001cbc427 100644
--- a/test/llvm_autogenerated/lower-em-ehsjlj-options.wast
+++ b/test/llvm_autogenerated/lower-em-ehsjlj-options.wast
@@ -18,13 +18,13 @@
(data (i32.const 12) "\00\00\00\00")
(data (i32.const 16) "\00\00\00\00")
(data (i32.const 20) "\00\00\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "exception" (func $exception))
(export "setjmp_longjmp" (func $setjmp_longjmp))
(export "setThrew" (func $setThrew))
(export "setTempRet0" (func $setTempRet0))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(export "dynCall_v" (func $dynCall_v))
(func $exception (; 7 ;)
(local $0 i32)
@@ -108,12 +108,18 @@
(get_local $0)
)
)
- (func $stackSave (; 11 ;) (result i32)
+ (func $__wasm_nullptr (; 11 ;) (type $FUNCSIG$v)
+ (unreachable)
+ )
+ (func $__importThunk_foo (; 12 ;) (type $FUNCSIG$v)
+ (call $foo)
+ )
+ (func $stackSave (; 13 ;) (result i32)
(i32.load offset=4
(i32.const 0)
)
)
- (func $stackAlloc (; 12 ;) (param $0 i32) (result i32)
+ (func $stackAlloc (; 14 ;) (param $0 i32) (result i32)
(local $1 i32)
(set_local $1
(i32.load offset=4
@@ -132,18 +138,12 @@
)
(get_local $1)
)
- (func $stackRestore (; 13 ;) (param $0 i32)
+ (func $stackRestore (; 15 ;) (param $0 i32)
(i32.store offset=4
(i32.const 0)
(get_local $0)
)
)
- (func $__wasm_nullptr (; 14 ;) (type $FUNCSIG$v)
- (unreachable)
- )
- (func $__importThunk_foo (; 15 ;) (type $FUNCSIG$v)
- (call $foo)
- )
(func $dynCall_v (; 16 ;) (param $fptr i32)
(call_indirect (type $FUNCSIG$v)
(get_local $fptr)
diff --git a/test/llvm_autogenerated/mem-intrinsics.wast b/test/llvm_autogenerated/mem-intrinsics.wast
index 9bd187713..65ab6a7b9 100644
--- a/test/llvm_autogenerated/mem-intrinsics.wast
+++ b/test/llvm_autogenerated/mem-intrinsics.wast
@@ -10,9 +10,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "copy_yes" (func $copy_yes))
(export "copy_no" (func $copy_no))
(export "move_yes" (func $move_yes))
@@ -22,6 +19,9 @@
(export "frame_index" (func $frame_index))
(export "drop_result" (func $drop_result))
(export "tail_dup_to_reuse_result" (func $tail_dup_to_reuse_result))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $copy_yes (; 5 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(return
(call $memcpy
diff --git a/test/llvm_autogenerated/memory-addr32.wast b/test/llvm_autogenerated/memory-addr32.wast
index b5559c2bf..180551efa 100644
--- a/test/llvm_autogenerated/memory-addr32.wast
+++ b/test/llvm_autogenerated/memory-addr32.wast
@@ -2,11 +2,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "current_memory" (func $current_memory))
+ (export "grow_memory" (func $grow_memory))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "current_memory" (func $current_memory))
- (export "grow_memory" (func $grow_memory))
(func $current_memory (; 0 ;) (result i32)
(return
(current_memory)
diff --git a/test/llvm_autogenerated/negative-base-reg.wast b/test/llvm_autogenerated/negative-base-reg.wast
index cc6c2b855..bcac0cc1e 100644
--- a/test/llvm_autogenerated/negative-base-reg.wast
+++ b/test/llvm_autogenerated/negative-base-reg.wast
@@ -2,10 +2,10 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\90\04\00\00")
+ (export "main" (func $main))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "main" (func $main))
(func $main (; 0 ;) (result i32)
(local $0 i32)
(set_local $0
diff --git a/test/llvm_autogenerated/offset.wast b/test/llvm_autogenerated/offset.wast
index 53180f8e8..00fa47e43 100644
--- a/test/llvm_autogenerated/offset.wast
+++ b/test/llvm_autogenerated/offset.wast
@@ -3,9 +3,6 @@
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
(data (i32.const 12) "\00\00\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "load_i32_with_folded_offset" (func $load_i32_with_folded_offset))
(export "load_i32_with_folded_gep_offset" (func $load_i32_with_folded_gep_offset))
(export "load_i32_with_unfolded_gep_negative_offset" (func $load_i32_with_unfolded_gep_negative_offset))
@@ -41,6 +38,9 @@
(export "aggregate_load_store" (func $aggregate_load_store))
(export "aggregate_return" (func $aggregate_return))
(export "aggregate_return_without_merge" (func $aggregate_return_without_merge))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $load_i32_with_folded_offset (; 0 ;) (param $0 i32) (result i32)
(i32.load offset=24
(get_local $0)
diff --git a/test/llvm_autogenerated/phi.wast b/test/llvm_autogenerated/phi.wast
index 2cd3645b4..7ece876cf 100644
--- a/test/llvm_autogenerated/phi.wast
+++ b/test/llvm_autogenerated/phi.wast
@@ -2,11 +2,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "test0" (func $test0))
+ (export "test1" (func $test1))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "test0" (func $test0))
- (export "test1" (func $test1))
(func $test0 (; 0 ;) (param $0 i32) (result i32)
(block $label$0
(br_if $label$0
diff --git a/test/llvm_autogenerated/reg-stackify.wast b/test/llvm_autogenerated/reg-stackify.wast
index 6a490cc7f..7a06425c1 100644
--- a/test/llvm_autogenerated/reg-stackify.wast
+++ b/test/llvm_autogenerated/reg-stackify.wast
@@ -21,9 +21,6 @@
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
(data (i32.const 12) "\00\00\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "no0" (func $no0))
(export "no1" (func $no1))
(export "yes0" (func $yes0))
@@ -49,6 +46,9 @@
(export "stackify_indvar" (func $stackify_indvar))
(export "stackpointer_dependency" (func $stackpointer_dependency))
(export "call_indirect_stackify" (func $call_indirect_stackify))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $no0 (; 12 ;) (param $0 i32) (param $1 i32) (result i32)
(set_local $1
(i32.load
diff --git a/test/llvm_autogenerated/return-int32.wast b/test/llvm_autogenerated/return-int32.wast
index bb5ae4919..bca1fd03b 100644
--- a/test/llvm_autogenerated/return-int32.wast
+++ b/test/llvm_autogenerated/return-int32.wast
@@ -2,11 +2,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "return_i32" (func $return_i32))
+ (export "return_i32_twice" (func $return_i32_twice))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "return_i32" (func $return_i32))
- (export "return_i32_twice" (func $return_i32_twice))
(func $return_i32 (; 0 ;) (param $0 i32) (result i32)
(get_local $0)
)
diff --git a/test/llvm_autogenerated/return-void.wast b/test/llvm_autogenerated/return-void.wast
index 2c62acc79..98f45583e 100644
--- a/test/llvm_autogenerated/return-void.wast
+++ b/test/llvm_autogenerated/return-void.wast
@@ -2,11 +2,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "return_void" (func $return_void))
+ (export "return_void_twice" (func $return_void_twice))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "return_void" (func $return_void))
- (export "return_void_twice" (func $return_void_twice))
(func $return_void (; 0 ;)
)
(func $return_void_twice (; 1 ;) (param $0 i32)
diff --git a/test/llvm_autogenerated/select.wast b/test/llvm_autogenerated/select.wast
index 6d116c9d2..6af2dd312 100644
--- a/test/llvm_autogenerated/select.wast
+++ b/test/llvm_autogenerated/select.wast
@@ -2,9 +2,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "select_i32_bool" (func $select_i32_bool))
(export "select_i32_eq" (func $select_i32_eq))
(export "select_i32_ne" (func $select_i32_ne))
@@ -17,6 +14,9 @@
(export "select_f64_bool" (func $select_f64_bool))
(export "select_f64_eq" (func $select_f64_eq))
(export "select_f64_ne" (func $select_f64_ne))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $select_i32_bool (; 0 ;) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(return
(select
diff --git a/test/llvm_autogenerated/signext-zeroext.wast b/test/llvm_autogenerated/signext-zeroext.wast
index a99e7b870..a3a48cd6b 100644
--- a/test/llvm_autogenerated/signext-zeroext.wast
+++ b/test/llvm_autogenerated/signext-zeroext.wast
@@ -2,13 +2,13 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "z2s_func" (func $z2s_func))
(export "s2z_func" (func $s2z_func))
(export "z2s_call" (func $z2s_call))
(export "s2z_call" (func $s2z_call))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $z2s_func (; 0 ;) (param $0 i32) (result i32)
(return
(i32.shr_s
diff --git a/test/llvm_autogenerated/store-trunc.wast b/test/llvm_autogenerated/store-trunc.wast
index 0d5bd3149..61b82a41e 100644
--- a/test/llvm_autogenerated/store-trunc.wast
+++ b/test/llvm_autogenerated/store-trunc.wast
@@ -2,14 +2,14 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "trunc_i8_i32" (func $trunc_i8_i32))
(export "trunc_i16_i32" (func $trunc_i16_i32))
(export "trunc_i8_i64" (func $trunc_i8_i64))
(export "trunc_i16_i64" (func $trunc_i16_i64))
(export "trunc_i32_i64" (func $trunc_i32_i64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $trunc_i8_i32 (; 0 ;) (param $0 i32) (param $1 i32)
(i32.store8
(get_local $0)
diff --git a/test/llvm_autogenerated/store.wast b/test/llvm_autogenerated/store.wast
index d3d64189b..2de1adcb9 100644
--- a/test/llvm_autogenerated/store.wast
+++ b/test/llvm_autogenerated/store.wast
@@ -2,13 +2,13 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "sti32" (func $sti32))
(export "sti64" (func $sti64))
(export "stf32" (func $stf32))
(export "stf64" (func $stf64))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $sti32 (; 0 ;) (param $0 i32) (param $1 i32)
(i32.store
(get_local $0)
diff --git a/test/llvm_autogenerated/switch.wast b/test/llvm_autogenerated/switch.wast
index 5c3de8651..7ea6adf7e 100644
--- a/test/llvm_autogenerated/switch.wast
+++ b/test/llvm_autogenerated/switch.wast
@@ -9,11 +9,11 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
+ (export "bar32" (func $bar32))
+ (export "bar64" (func $bar64))
(export "stackSave" (func $stackSave))
(export "stackAlloc" (func $stackAlloc))
(export "stackRestore" (func $stackRestore))
- (export "bar32" (func $bar32))
- (export "bar64" (func $bar64))
(func $bar32 (; 6 ;) (param $0 i32)
(block $label$0
(br_if $label$0
diff --git a/test/llvm_autogenerated/unreachable.wast b/test/llvm_autogenerated/unreachable.wast
index bd5a2ffd1..fc44c2362 100644
--- a/test/llvm_autogenerated/unreachable.wast
+++ b/test/llvm_autogenerated/unreachable.wast
@@ -4,12 +4,12 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "f1" (func $f1))
(export "f2" (func $f2))
(export "f3" (func $f3))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $f1 (; 1 ;) (result i32)
(call $abort)
(unreachable)
diff --git a/test/llvm_autogenerated/unused-argument.wast b/test/llvm_autogenerated/unused-argument.wast
index 339b13549..d0382d354 100644
--- a/test/llvm_autogenerated/unused-argument.wast
+++ b/test/llvm_autogenerated/unused-argument.wast
@@ -4,12 +4,12 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "unused_first" (func $unused_first))
(export "unused_second" (func $unused_second))
(export "call_something" (func $call_something))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $unused_first (; 1 ;) (param $0 i32) (param $1 i32) (result i32)
(return
(get_local $1)
diff --git a/test/llvm_autogenerated/userstack.wast b/test/llvm_autogenerated/userstack.wast
index a8ff3b076..4fa702b0e 100644
--- a/test/llvm_autogenerated/userstack.wast
+++ b/test/llvm_autogenerated/userstack.wast
@@ -6,9 +6,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "alloca32" (func $alloca32))
(export "alloca3264" (func $alloca3264))
(export "allocarray" (func $allocarray))
@@ -23,6 +20,9 @@
(export "frameaddress_0" (func $frameaddress_0))
(export "frameaddress_1" (func $frameaddress_1))
(export "inline_asm" (func $inline_asm))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $alloca32 (; 3 ;)
(local $0 i32)
(i32.store offset=4
diff --git a/test/llvm_autogenerated/varargs.wast b/test/llvm_autogenerated/varargs.wast
index 428433b65..df3ac3e74 100644
--- a/test/llvm_autogenerated/varargs.wast
+++ b/test/llvm_autogenerated/varargs.wast
@@ -5,9 +5,6 @@
(import "env" "memory" (memory $0 1))
(table 0 anyfunc)
(data (i32.const 4) "\10\04\00\00")
- (export "stackSave" (func $stackSave))
- (export "stackAlloc" (func $stackAlloc))
- (export "stackRestore" (func $stackRestore))
(export "start" (func $start))
(export "end" (func $end))
(export "copy" (func $copy))
@@ -17,6 +14,9 @@
(export "caller_none" (func $caller_none))
(export "caller_some" (func $caller_some))
(export "startbb" (func $startbb))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
(func $start (; 1 ;) (param $0 i32) (param $1 i32)
(i32.store
(get_local $0)