diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tools/wasm2js.cpp | 2 | ||||
-rw-r--r-- | src/wasm2js.h | 10 |
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); |