tor-browser

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

unroll2.js (1334B)


      1 // |jit-test| test-also=--setpref=wasm_unroll_loops=true
      2 
      3 // Loop unrolling test: 0 exiting values, 1 exit target => can be unrolled.
      4 
      5 let t = `
      6 (module
      7  (memory (export "mem") 1)
      8  (func (export "my_memset")
      9        (param $start i32) (param $byte i32) (param $count i32)
     10    (local $limit i32)
     11    (local.set $limit (i32.add (local.get $start) (local.get $count)))
     12    (if (i32.lt_u (local.get $start) (local.get $limit))
     13      (then
     14        (loop $cont
     15          (i32.store8 (local.get $start) (local.get $byte))
     16          (local.set $start (i32.add (local.get $start) (i32.const 1)))
     17          (br_if $cont (i32.lt_u (local.get $start) (local.get $limit)))
     18        )
     19      )
     20    )
     21  )
     22 )`;
     23 
     24 let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t)));
     25 
     26 i.exports.my_memset(1, 22, 1);
     27 i.exports.my_memset(3, 33, 2);
     28 i.exports.my_memset(6, 44, 3);
     29 i.exports.my_memset(10, 55, 4);
     30 i.exports.my_memset(15, 66, 5);
     31 i.exports.my_memset(21, 77, 6);
     32 i.exports.my_memset(28, 88, 7);
     33 i.exports.my_memset(36, 99, 8);
     34 
     35 let buf = new Uint8Array(i.exports.mem.buffer);
     36 
     37 let s = "";
     38 for (let i = 0; i < 45; i++) {
     39    s = s + (buf[i] + " ");
     40 }
     41 
     42 let expected =
     43    "0 22 0 33 33 0 44 44 44 0 55 55 55 55 0 66 66 66 66 66 0 77 77 77 " +
     44    "77 77 77 0 88 88 88 88 88 88 88 0 99 99 99 99 99 99 99 99 0 ";
     45 
     46 assertEq(s, expected);