summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/tools/wasm2js.cpp2
-rw-r--r--src/wasm2js.h10
2 files changed, 10 insertions, 2 deletions
diff --git a/src/tools/wasm2js.cpp b/src/tools/wasm2js.cpp
index 823ab7f96..7ceb63ffc 100644
--- a/src/tools/wasm2js.cpp
+++ b/src/tools/wasm2js.cpp
@@ -603,7 +603,7 @@ void AssertionEmitter::emit() {
}
function i64Equal(actual_lo, actual_hi, expected_lo, expected_hi) {
- return actual_lo == (expected_lo | 0) && actual_hi == (expected_hi | 0);
+ return (actual_lo | 0) == (expected_lo | 0) && (actual_hi | 0) == (expected_hi | 0);
}
)";
diff --git a/src/wasm2js.h b/src/wasm2js.h
index f15e8f9b7..731bf0a8c 100644
--- a/src/wasm2js.h
+++ b/src/wasm2js.h
@@ -124,7 +124,15 @@ public:
bool emscripten = false;
};
- Wasm2JSBuilder(Flags f, PassOptions options) : flags(f), options(options) {}
+ Wasm2JSBuilder(Flags f, PassOptions options_) : flags(f), options(options_) {
+ // We don't try to model wasm's trapping precisely - if we did, each load
+ // and store would need to do a check. Given that, we can just ignore
+ // implicit traps like those when optimizing. (When not optimizing, it's
+ // nice to see codegen that matches wasm more precisely.)
+ if (options.optimizeLevel > 0) {
+ options.ignoreImplicitTraps = true;
+ }
+ }
Ref processWasm(Module* wasm, Name funcName = ASM_FUNC);
Ref processFunction(Module* wasm, Function* func, bool standalone = false);