tor-browser

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

baseline-pop-along-edge.js (2124B)


      1 // Bug 1316181
      2 
      3 // There are locals with different values here to ensure that the
      4 // local.get at the end picks up the right one even if the stack might
      5 // have become unbalanced by a failure to adjust SP along the branch
      6 // edge.  The logic is that we use SP-relative addressing, and if the
      7 // actual SP is not what the compiler thinks it is we will read
      8 // something other than the expected value.
      9 
     10 var o = wasmEvalText(
     11    `(module
     12      (func (result i32)
     13       (local $v0 i32)
     14       (local $v1 i32)
     15       (local $v2 i32)
     16       (local $v3 i32)
     17       (local $v4 i32)
     18       (local $v5 i32)
     19       (local $v6 i32)
     20       (local $v7 i32)
     21       (local $res i32)
     22       (local.set $v0 (i32.const 0xDEADBEEF))
     23       (local.set $v1 (i32.const 0xFDEADBEE))
     24       (local.set $v2 (i32.const 0xEFDEADBE))
     25       (local.set $v3 (i32.const 0xEEFDEADB))
     26       (local.set $v4 (i32.const 0xBEEFDEAD))
     27       (local.set $v5 (i32.const 0xDBEEFDEA))
     28       (local.set $v6 (i32.const 0xADBEEFDE))
     29       (local.set $v7 (i32.const 0xEADBEEFD))
     30       (block $b
     31 (local.set $res
     32  (i32.add
     33   (i32.add (i32.const 1) (i32.const 2))
     34   (i32.add
     35    (i32.add (i32.const 3) (i32.const 4))
     36    (i32.add
     37     (i32.add (i32.const 5) (i32.const 6))
     38     (i32.add
     39      (i32.add (i32.const 7) (i32.const 8))
     40      (i32.add
     41       (i32.add (i32.const 9) (i32.const 10))
     42       (i32.add
     43        (i32.add (i32.const 11) (i32.const 12))
     44        (i32.add
     45 	(i32.add (i32.const 13) (i32.const 14))
     46 	(i32.add
     47 	 (i32.add (i32.const 15) (i32.const 16))
     48 	 (i32.add
     49 	  (i32.add (i32.const 17) (i32.const 18))
     50 	  (i32.add
     51 	   (i32.add (i32.const 19) (i32.const 20))
     52 	   (i32.add
     53 	    (i32.add (i32.const 21) (i32.const 22))
     54 	    (i32.add
     55 	     (i32.add (i32.const 23) (i32.const 24))
     56 	     (i32.add
     57 	      (i32.add (i32.const 25) (i32.const 26))
     58 	      (i32.add
     59 	       (i32.add (i32.const 27) (i32.const 28))
     60 	       (i32.add
     61 		(i32.add (i32.const 29) (i32.const 30))
     62 		(br_if $b (i32.const 31) (i32.const 1)))))))))))))))))))
     63       (return (local.get $v3)))
     64      (export "a" (func 0)))`).exports;
     65 
     66 assertEq(o["a"](), 0xEEFDEADB|0);