summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js')
-rw-r--r--js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js123
1 files changed, 123 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js b/js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js
new file mode 100644
index 0000000000..2d953e04a9
--- /dev/null
+++ b/js/src/jit-test/tests/wasm/trap-exit-stack-alignment.js
@@ -0,0 +1,123 @@
+// Function with high register pressure to force spills without function calls
+// even on ARM64, and with a trap exit.
+let func = wasmEvalText(`(module
+ (func
+ (param i32)
+ (result i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local i32)
+ (local.set 2 (i32.add (local.get 0 i32.const 4)))
+ (local.set 3 (i32.add (local.get 0 i32.const 5)))
+ (local.set 4 (i32.add (local.get 0 i32.const 6)))
+ (local.set 5 (i32.add (local.get 0 i32.const 7)))
+ (local.set 6 (i32.add (local.get 0 i32.const 8)))
+ (local.set 7 (i32.add (local.get 0 i32.const 9)))
+ (local.set 8 (i32.add (local.get 0 i32.const 10)))
+ (local.set 9 (i32.add (local.get 0 i32.const 11)))
+ (local.set 10 (i32.add (local.get 0 i32.const 12)))
+ (local.set 11 (i32.add (local.get 0 i32.const 13)))
+ (local.set 12 (i32.add (local.get 0 i32.const 14)))
+ (local.set 13 (i32.add (local.get 0 i32.const 15)))
+ (local.set 14 (i32.add (local.get 0 i32.const 16)))
+ (local.set 15 (i32.add (local.get 0 i32.const 17)))
+ (local.set 16 (i32.add (local.get 0 i32.const 18)))
+ (local.set 17 (i32.add (local.get 0 i32.const 19)))
+ (local.set 18 (i32.add (local.get 0 i32.const 20)))
+ (local.set 19 (i32.add (local.get 0 i32.const 21)))
+ (local.set 20 (i32.add (local.get 0 i32.const 22)))
+ (local.set 21 (i32.add (local.get 0 i32.const 23)))
+ (local.set 22 (i32.add (local.get 0 i32.const 24)))
+ (local.set 23 (i32.add (local.get 0 i32.const 25)))
+ (local.set 24 (i32.add (local.get 0 i32.const 26)))
+ (local.set 25 (i32.add (local.get 0 i32.const 27)))
+ (local.set 26 (i32.add (local.get 0 i32.const 28)))
+ (local.set 7 (i32.div_s (local.get 0) (local.get 0)))
+ local.get 0
+ local.get 1
+ local.get 2
+ local.get 3
+ local.get 4
+ local.get 5
+ local.get 6
+ local.get 7
+ local.get 8
+ local.get 9
+ local.get 10
+ local.get 11
+ local.get 12
+ local.get 13
+ local.get 14
+ local.get 15
+ local.get 16
+ local.get 17
+ local.get 18
+ local.get 19
+ local.get 20
+ local.get 21
+ local.get 22
+ local.get 23
+ local.get 24
+ local.get 25
+ local.get 26
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ i32.add
+ )
+ (export "" (func 0))
+)`).exports[""];
+assertEq(func(1), 417);
+assertEq(func(2), 442);
+let ex;
+try {
+ func(0);
+} catch (e) {
+ ex = e;
+}
+assertEq(ex instanceof WebAssembly.RuntimeError, true);