trap-exit-stack-alignment.js (3447B)
1 // Function with high register pressure to force spills without function calls 2 // even on ARM64, and with a trap exit. 3 let func = wasmEvalText(`(module 4 (func 5 (param i32) 6 (result i32) 7 (local i32) 8 (local i32) 9 (local i32) 10 (local i32) 11 (local i32) 12 (local i32) 13 (local i32) 14 (local i32) 15 (local i32) 16 (local i32) 17 (local i32) 18 (local i32) 19 (local i32) 20 (local i32) 21 (local i32) 22 (local i32) 23 (local i32) 24 (local i32) 25 (local i32) 26 (local i32) 27 (local i32) 28 (local i32) 29 (local i32) 30 (local i32) 31 (local i32) 32 (local i32) 33 (local.set 2 (i32.add (local.get 0 i32.const 4))) 34 (local.set 3 (i32.add (local.get 0 i32.const 5))) 35 (local.set 4 (i32.add (local.get 0 i32.const 6))) 36 (local.set 5 (i32.add (local.get 0 i32.const 7))) 37 (local.set 6 (i32.add (local.get 0 i32.const 8))) 38 (local.set 7 (i32.add (local.get 0 i32.const 9))) 39 (local.set 8 (i32.add (local.get 0 i32.const 10))) 40 (local.set 9 (i32.add (local.get 0 i32.const 11))) 41 (local.set 10 (i32.add (local.get 0 i32.const 12))) 42 (local.set 11 (i32.add (local.get 0 i32.const 13))) 43 (local.set 12 (i32.add (local.get 0 i32.const 14))) 44 (local.set 13 (i32.add (local.get 0 i32.const 15))) 45 (local.set 14 (i32.add (local.get 0 i32.const 16))) 46 (local.set 15 (i32.add (local.get 0 i32.const 17))) 47 (local.set 16 (i32.add (local.get 0 i32.const 18))) 48 (local.set 17 (i32.add (local.get 0 i32.const 19))) 49 (local.set 18 (i32.add (local.get 0 i32.const 20))) 50 (local.set 19 (i32.add (local.get 0 i32.const 21))) 51 (local.set 20 (i32.add (local.get 0 i32.const 22))) 52 (local.set 21 (i32.add (local.get 0 i32.const 23))) 53 (local.set 22 (i32.add (local.get 0 i32.const 24))) 54 (local.set 23 (i32.add (local.get 0 i32.const 25))) 55 (local.set 24 (i32.add (local.get 0 i32.const 26))) 56 (local.set 25 (i32.add (local.get 0 i32.const 27))) 57 (local.set 26 (i32.add (local.get 0 i32.const 28))) 58 (local.set 7 (i32.div_s (local.get 0) (local.get 0))) 59 local.get 0 60 local.get 1 61 local.get 2 62 local.get 3 63 local.get 4 64 local.get 5 65 local.get 6 66 local.get 7 67 local.get 8 68 local.get 9 69 local.get 10 70 local.get 11 71 local.get 12 72 local.get 13 73 local.get 14 74 local.get 15 75 local.get 16 76 local.get 17 77 local.get 18 78 local.get 19 79 local.get 20 80 local.get 21 81 local.get 22 82 local.get 23 83 local.get 24 84 local.get 25 85 local.get 26 86 i32.add 87 i32.add 88 i32.add 89 i32.add 90 i32.add 91 i32.add 92 i32.add 93 i32.add 94 i32.add 95 i32.add 96 i32.add 97 i32.add 98 i32.add 99 i32.add 100 i32.add 101 i32.add 102 i32.add 103 i32.add 104 i32.add 105 i32.add 106 i32.add 107 i32.add 108 i32.add 109 i32.add 110 i32.add 111 i32.add 112 ) 113 (export "" (func 0)) 114 )`).exports[""]; 115 assertEq(func(1), 417); 116 assertEq(func(2), 442); 117 let ex; 118 try { 119 func(0); 120 } catch (e) { 121 ex = e; 122 } 123 assertEq(ex instanceof WebAssembly.RuntimeError, true);