diff options
-rwxr-xr-x | scripts/test/wasm2js.py | 8 | ||||
-rw-r--r-- | src/support/command-line.h | 4 | ||||
-rw-r--r-- | src/tools/wasm2js.cpp | 14 | ||||
-rw-r--r-- | test/wasm2js/atomic_fence.2asm.js | 61 | ||||
-rw-r--r-- | test/wasm2js/atomic_fence.2asm.js.opt | 35 | ||||
-rw-r--r-- | test/wasm2js/atomic_fence.wast | 6 |
6 files changed, 113 insertions, 15 deletions
diff --git a/scripts/test/wasm2js.py b/scripts/test/wasm2js.py index 2395778bd..3cb766bcd 100755 --- a/scripts/test/wasm2js.py +++ b/scripts/test/wasm2js.py @@ -61,7 +61,7 @@ def test_wasm2js_output(): for module, asserts in split_wast(t): write_wast('split.wast', module, asserts) - cmd = WASM2JS + ['split.wast'] + cmd = WASM2JS + ['split.wast', '-all'] if opt: cmd += ['-O'] if 'emscripten' in wasm: @@ -110,7 +110,7 @@ def test_asserts_output(): traps_expected_file = os.path.join(options.binaryen_test, traps) wasm = os.path.join(wasm2js_dir, wasm) - cmd = WASM2JS + [wasm, '--allow-asserts'] + cmd = WASM2JS + [wasm, '--allow-asserts', '-all'] out = run_command(cmd) fail_if_not_identical_to_file(out, asserts_expected_file) @@ -157,7 +157,7 @@ def update_wasm2js_tests(): for module, asserts in split_wast(t): write_wast('split.wast', module, asserts) - cmd = WASM2JS + ['split.wast'] + cmd = WASM2JS + ['split.wast', '-all'] if opt: cmd += ['-O'] if 'emscripten' in wasm: @@ -176,7 +176,7 @@ def update_wasm2js_tests(): asserts_expected_file = os.path.join(options.binaryen_test, asserts) traps_expected_file = os.path.join(options.binaryen_test, traps) - cmd = WASM2JS + [os.path.join(wasm2js_dir, wasm), '--allow-asserts'] + cmd = WASM2JS + [os.path.join(wasm2js_dir, wasm), '--allow-asserts', '-all'] out = run_command(cmd) with open(asserts_expected_file, 'w') as o: o.write(out) diff --git a/src/support/command-line.h b/src/support/command-line.h index 82193244e..53bdbff28 100644 --- a/src/support/command-line.h +++ b/src/support/command-line.h @@ -52,10 +52,6 @@ public: void parse(int argc, const char* argv[]); private: - Options() = delete; - Options(const Options&) = delete; - Options& operator=(const Options&) = delete; - struct Option { std::string longName; std::string shortName; diff --git a/src/tools/wasm2js.cpp b/src/tools/wasm2js.cpp index ebed16226..0eed845c1 100644 --- a/src/tools/wasm2js.cpp +++ b/src/tools/wasm2js.cpp @@ -517,7 +517,7 @@ public: SExpressionWasmBuilder& sexpBuilder, Output& out, Wasm2JSBuilder::Flags flags, - PassOptions options) + const ToolOptions& options) : root(root), sexpBuilder(sexpBuilder), out(out), flags(flags), options(options) {} @@ -528,7 +528,7 @@ private: SExpressionWasmBuilder& sexpBuilder; Output& out; Wasm2JSBuilder::Flags flags; - PassOptions options; + ToolOptions options; Module tempAllocationModule; Ref emitAssertReturnFunc(Builder& wasmBuilder, @@ -547,7 +547,7 @@ private: void fixCalls(Ref asmjs, Name asmModule); Ref processFunction(Function* func) { - Wasm2JSBuilder sub(flags, options); + Wasm2JSBuilder sub(flags, options.passOptions); return sub.processStandaloneFunction(&tempAllocationModule, func); } @@ -771,8 +771,9 @@ void AssertionEmitter::emit() { Name funcName(funcNameS.str().c_str()); asmModule = Name(moduleNameS.str().c_str()); Module wasm; + options.applyFeatures(wasm); SExpressionWasmBuilder builder(wasm, e); - emitWasm(wasm, out, flags, options, funcName); + emitWasm(wasm, out, flags, options.passOptions, funcName); continue; } if (!isAssertHandled(e)) { @@ -859,6 +860,7 @@ int main(int argc, const char* argv[]) { Element* root = nullptr; Module wasm; + options.applyFeatures(wasm); Ref js; std::unique_ptr<SExpressionParser> sexprParser; std::unique_ptr<SExpressionWasmBuilder> sexprBuilder; @@ -882,7 +884,6 @@ int main(int argc, const char* argv[]) { ModuleReader reader; reader.setDebug(options.debug); reader.read(input, wasm, ""); - options.applyFeatures(wasm); } else { auto input(read_file<std::vector<char>>(options.extra["infile"], Flags::Text, @@ -921,8 +922,7 @@ int main(int argc, const char* argv[]) { Flags::Text, options.debug ? Flags::Debug : Flags::Release); if (!binaryInput && options.extra["asserts"] == "1") { - AssertionEmitter(*root, *sexprBuilder, output, flags, options.passOptions) - .emit(); + AssertionEmitter(*root, *sexprBuilder, output, flags, options).emit(); } else { emitWasm(wasm, output, flags, options.passOptions, "asmFunc"); } diff --git a/test/wasm2js/atomic_fence.2asm.js b/test/wasm2js/atomic_fence.2asm.js new file mode 100644 index 000000000..7089fd9b4 --- /dev/null +++ b/test/wasm2js/atomic_fence.2asm.js @@ -0,0 +1,61 @@ + +function asmFunc(global, env, buffer) { + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + var Math_min = global.Math.min; + var Math_max = global.Math.max; + var Math_floor = global.Math.floor; + var Math_ceil = global.Math.ceil; + var Math_sqrt = global.Math.sqrt; + var abort = env.abort; + var nan = global.NaN; + var infinity = global.Infinity; + function $0() { + + } + + var FUNCTION_TABLE = []; + function __wasm_memory_grow(pagesToAdd) { + pagesToAdd = pagesToAdd | 0; + var oldPages = __wasm_memory_size() | 0; + var newPages = oldPages + pagesToAdd | 0; + if ((oldPages < newPages) && (newPages < 65536)) { + var newBuffer = new ArrayBuffer(Math_imul(newPages, 65536)); + var newHEAP8 = new global.Int8Array(newBuffer); + newHEAP8.set(HEAP8); + HEAP8 = newHEAP8; + HEAP8 = new global.Int8Array(newBuffer); + HEAP16 = new global.Int16Array(newBuffer); + HEAP32 = new global.Int32Array(newBuffer); + HEAPU8 = new global.Uint8Array(newBuffer); + HEAPU16 = new global.Uint16Array(newBuffer); + HEAPU32 = new global.Uint32Array(newBuffer); + HEAPF32 = new global.Float32Array(newBuffer); + HEAPF64 = new global.Float64Array(newBuffer); + buffer = newBuffer; + } + return oldPages; + } + + function __wasm_memory_size() { + return buffer.byteLength / 65536 | 0; + } + + return { + "atomic_fence": $0 + }; +} + +var memasmFunc = new ArrayBuffer(1507328); +var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc); +export var atomic_fence = retasmFunc.atomic_fence; diff --git a/test/wasm2js/atomic_fence.2asm.js.opt b/test/wasm2js/atomic_fence.2asm.js.opt new file mode 100644 index 000000000..50fe46d11 --- /dev/null +++ b/test/wasm2js/atomic_fence.2asm.js.opt @@ -0,0 +1,35 @@ + +function asmFunc(global, env, buffer) { + var HEAP8 = new global.Int8Array(buffer); + var HEAP16 = new global.Int16Array(buffer); + var HEAP32 = new global.Int32Array(buffer); + var HEAPU8 = new global.Uint8Array(buffer); + var HEAPU16 = new global.Uint16Array(buffer); + var HEAPU32 = new global.Uint32Array(buffer); + var HEAPF32 = new global.Float32Array(buffer); + var HEAPF64 = new global.Float64Array(buffer); + var Math_imul = global.Math.imul; + var Math_fround = global.Math.fround; + var Math_abs = global.Math.abs; + var Math_clz32 = global.Math.clz32; + var Math_min = global.Math.min; + var Math_max = global.Math.max; + var Math_floor = global.Math.floor; + var Math_ceil = global.Math.ceil; + var Math_sqrt = global.Math.sqrt; + var abort = env.abort; + var nan = global.NaN; + var infinity = global.Infinity; + function $0() { + + } + + var FUNCTION_TABLE = []; + return { + "atomic_fence": $0 + }; +} + +var memasmFunc = new ArrayBuffer(65536); +var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc); +export var atomic_fence = retasmFunc.atomic_fence; diff --git a/test/wasm2js/atomic_fence.wast b/test/wasm2js/atomic_fence.wast new file mode 100644 index 000000000..2e605b690 --- /dev/null +++ b/test/wasm2js/atomic_fence.wast @@ -0,0 +1,6 @@ +(module + (memory $0 (shared 23 256)) + (func (export "atomic-fence") + (atomic.fence) + ) +) |