tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);