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 | 148 |
1 files changed, 148 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 0000000000..6f62638202 --- /dev/null +++ b/js/src/jit-test/tests/wasm/full-cycle.js @@ -0,0 +1,148 @@ +wasmFullPass(`(module + (func $test (param i32) (param i32) (result i32) (i32.add (local.get 0) (local.get 1))) + (func $run (result i32) (call $test (i32.const 1) (i32.const ${Math.pow(2, 31) - 1}))) + (export "run" (func $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 + i32.add + ) + (func) (func) (func) +(export "run" (func 0)))`, 43); + +wasmFullPass(` +(module + (import "env" "a" (global $a i32)) + (import "env" "b" (func $b (param i32) (result i32))) + (func (export "run") (param $0 i32) (result i32) local.get 0 call $b) +)`, 43, { env: { a: 1337, b: x => x+1 } }, 42); + +// Global section. +wasmFullPass(`(module + (import "globals" "x" (global $imported i32)) + (global $mut_local (mut i32) (i32.const 0)) + (global $imm_local i32 (i32.const 37)) + (global $imm_local_2 i32 (global.get 0)) + (func $get (result i32) + i32.const 13 + global.set $mut_local + global.get $imported + global.get $mut_local + i32.add + global.get $imm_local + i32.add + global.get $imm_local_2 + i32.add + ) + (export "run" (func $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 0)) +)`, 0x050403, {"": {memory}}); + +// Tables. +wasmFullPass(`(module + (table (export "table") 3 funcref) + (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) + local.get 0 + call_indirect (type $t) + ) +)`, 3, {}, 0); + +let table = new WebAssembly.Table({ element: 'funcref', initial: 3, maximum: 3 }); + +wasmFullPass(`(module + (table (import "" "table") 3 4 funcref) + (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) + local.get 0 + call_indirect (type $t) + ) +)`, 3, {"":{table}}, 0); + +// Start function. +wasmFullPass(`(module + (global $g (mut i32) (i32.const 0)) + (func $start + global.get $g + i32.const 1 + i32.add + global.set $g + ) + (start $start) + (func (export "run") (result i32) + global.get $g + ) +)`, 1); + +// Branch table. +for (let [p, result] of [ + [0, 7], + [1, 6], + [2, 4], + [42, 4] +]) { + wasmFullPass(`(module + (func (export "run") (param $p i32) (result i32) (local $n i32) + i32.const 0 + local.set $n + block $c block $b block $a + local.get $p + br_table $a $b $c + end $a + local.get $n + i32.const 1 + i32.add + local.set $n + end $b + local.get $n + i32.const 2 + i32.add + local.set $n + end $c + local.get $n + i32.const 4 + i32.add + ) + )`, result, {}, p); +} |