diff options
Diffstat (limited to 'js/src/jit-test/tests/wasm/full-cycle.js')
-rw-r--r-- | js/src/jit-test/tests/wasm/full-cycle.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/full-cycle.js b/js/src/jit-test/tests/wasm/full-cycle.js new file mode 100644 index 000000000..1ea8a653e --- /dev/null +++ b/js/src/jit-test/tests/wasm/full-cycle.js @@ -0,0 +1,111 @@ +load(libdir + "wasm.js"); + +wasmFullPass(`(module + (func $test (result i32) (param i32) (param i32) (i32.add (get_local 0) (get_local 1))) + (func $run (result i32) (call $test (i32.const 1) (i32.const ${Math.pow(2, 31) - 1}))) + (export "run" $run) +)`, -Math.pow(2, 31)); + +wasmFullPass(`(module + (func (result i32) + i32.const 1 + i32.const 42 + i32.add + return + unreachable + i32.const 0 + call 3 + i32.const 42 + f32.add + ) + (func) (func) (func) +(export "run" 0))`, 43); + +// Global section. +wasmFullPass(`(module + (import $imported "globals" "x" (global i32)) + (global $mut_local (mut i32) (i32.const 0)) + (global $imm_local i32 (i32.const 37)) + (global $imm_local_2 i32 (get_global 0)) + (func $get (result i32) + i32.const 13 + set_global $mut_local + get_global $imported + get_global $mut_local + i32.add + get_global $imm_local + i32.add + get_global $imm_local_2 + i32.add + ) + (export "run" $get) +)`, 13 + 42 + 37 + 42, { globals: {x: 42} }); + +// Memory. +wasmFullPass(`(module + (memory (export "memory") 1 2) + (data (i32.const 0) "\\00\\01\\02" "\\03\\04\\05") + (data (i32.const 6) "\\06") + (func (export "run") (result i32) + i32.const 1 + i32.load offset=2 + ) +)`, 0x06050403); + +let memory = new WebAssembly.Memory({ initial: 1, maximum: 2 }); + +wasmFullPass(`(module + (memory (import "" "memory") 1 2) + (data (i32.const 0) "\\00\\01\\02\\03\\04\\05") + (func (export "run") (result i32) + i32.const 1 + i32.load offset=2 + ) + (export "mem" memory) +)`, 0x050403, {"": {memory}}); + +// Tables. +wasmFullPass(`(module + (table (export "table") 3 anyfunc) + (type $t (func (result i32))) + (func $foo (result i32) (i32.const 1)) + (func $bar (result i32) (i32.const 2)) + (func $baz (result i32) (i32.const 3)) + (elem (i32.const 0) $baz $bar) + (elem (i32.const 2) $foo) + (func (export "run") (param i32) (result i32) + get_local 0 + call_indirect $t + ) +)`, 3, {}, 0); + +let table = new WebAssembly.Table({ element: 'anyfunc', initial: 3, maximum: 3 }); + +wasmFullPass(`(module + (table (import "" "table") 3 4 anyfunc) + (type $t (func (result i32))) + (func $foo (result i32) (i32.const 1)) + (func $bar (result i32) (i32.const 2)) + (func $baz (result i32) (i32.const 3)) + (elem (i32.const 0) $baz $bar) + (elem (i32.const 2) $foo) + (func (export "run") (param i32) (result i32) + get_local 0 + call_indirect $t + ) +)`, 3, {"":{table}}, 0); + +// Start function. +wasmFullPass(`(module + (global $g (mut i32) (i32.const 0)) + (func $start + get_global $g + i32.const 1 + i32.add + set_global $g + ) + (start $start) + (func (export "run") (result i32) + get_global $g + ) +)`, 1); |