summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xscripts/test/wasm2js.py8
-rw-r--r--src/support/command-line.h4
-rw-r--r--src/tools/wasm2js.cpp14
-rw-r--r--test/wasm2js/atomic_fence.2asm.js61
-rw-r--r--test/wasm2js/atomic_fence.2asm.js.opt35
-rw-r--r--test/wasm2js/atomic_fence.wast6
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)
+ )
+)