tor-browser

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

volatile-high-bits-arm64.js (3411B)


      1 // |jit-test| skip-if: !wasmSimdEnabled()
      2 
      3 const m = new WebAssembly.Module(wasmTextToBinary(`(module
      4  (import "imp" "f" (func $f (result i32)))
      5 
      6  (type $node (struct
      7    (field $v (mut (ref null $node)))
      8  ))
      9 
     10  (memory (export "mem") 1 1)
     11 
     12  (func (export "run")
     13    (v128.store (i32.const 0) (
     14      call $doit (
     15        v128.load (i32.const 0)
     16        v128.load (i32.const 0)
     17        v128.load (i32.const 0)
     18        v128.load (i32.const 0)
     19        v128.load (i32.const 0)
     20        v128.load (i32.const 0)
     21        v128.load (i32.const 0)
     22        v128.load (i32.const 0)
     23      )
     24    ))
     25  )
     26 
     27  (func $doit
     28    ;; Enough Simd128 parameters and locals to ensure registers v8-v15 are used.
     29    (param v128) (param v128) (param v128) (param v128)
     30    (param v128) (param v128) (param v128) (param v128)
     31 
     32    (result v128)
     33 
     34    (local $var1 v128) (local $var2 v128) (local $var3 v128) (local $var4 v128)
     35    (local $var5 v128) (local $var6 v128) (local $var7 v128) (local $var8 v128)
     36 
     37    (local $var_s (ref $node))
     38    (local $var_c (ref $node))
     39 
     40    (struct.new_default $node)
     41    local.set $var_s
     42 
     43    ;; GC to tenure $var_s
     44    (drop (call $f))
     45 
     46    ;; New nursery allocated $var_c
     47    (struct.new_default $node)
     48    local.set $var_c
     49 
     50    (v128.const i32x4 0x1111_1111 0x1111_2222 0x1111_3333 0x1111_4444)
     51    local.set $var1
     52 
     53    (v128.const i32x4 0x2222_1111 0x2222_2222 0x2222_3333 0x2222_4444)
     54    local.set $var2
     55 
     56    (v128.const i32x4 0x3333_1111 0x3333_2222 0x3333_3333 0x3333_4444)
     57    local.set $var3
     58 
     59    (v128.const i32x4 0x4444_1111 0x4444_2222 0x4444_3333 0x4444_4444)
     60    local.set $var4
     61 
     62    (v128.const i32x4 0x5555_1111 0x5555_2222 0x5555_3333 0x5555_4444)
     63    local.set $var5
     64 
     65    (v128.const i32x4 0x6666_1111 0x6666_2222 0x6666_3333 0x6666_4444)
     66    local.set $var6
     67 
     68    (v128.const i32x4 0x7777_1111 0x7777_2222 0x7777_3333 0x7777_4444)
     69    local.set $var7
     70 
     71    (v128.const i32x4 0x8888_1111 0x8888_2222 0x8888_3333 0x8888_4444)
     72    local.set $var8
     73 
     74    local.get $var1
     75    local.get 0
     76    v128.or
     77 
     78    local.get $var2
     79    local.get 1
     80    v128.or
     81 
     82    local.get $var3
     83    local.get 2
     84    v128.or
     85 
     86    local.get $var4
     87    local.get 3
     88    v128.or
     89 
     90    local.get $var5
     91    local.get 4
     92    v128.or
     93 
     94    local.get $var6
     95    local.get 5
     96    v128.or
     97 
     98    local.get $var7
     99    local.get 6
    100    v128.or
    101 
    102    local.get $var8
    103    local.get 7
    104    v128.or
    105 
    106    local.get $var1
    107    local.get 1
    108    v128.or
    109 
    110    local.get $var2
    111    local.get 1
    112    v128.or
    113 
    114    local.get $var3
    115    local.get 1
    116    v128.or
    117 
    118    local.get $var4
    119    local.get 1
    120    v128.or
    121 
    122    local.get $var5
    123    local.get 1
    124    v128.or
    125 
    126    local.get $var6
    127    local.get 1
    128    v128.or
    129 
    130    local.get $var7
    131    local.get 1
    132    v128.or
    133 
    134    local.get $var8
    135    local.get 1
    136    v128.or
    137 
    138    ;; Postwrite barrier with ABI call.
    139    (struct.set $node 0 (local.get $var_s) (local.get $var_c))
    140 
    141    v128.or
    142    v128.or
    143    v128.or
    144    v128.or
    145    v128.or
    146    v128.or
    147    v128.or
    148 
    149    v128.or
    150    v128.or
    151    v128.or
    152    v128.or
    153    v128.or
    154    v128.or
    155    v128.or
    156 
    157    v128.or
    158  )
    159 )`));
    160 
    161 const {
    162  run, mem
    163 } = new WebAssembly.Instance(m, {
    164  imp: {
    165    f() {
    166      gc();
    167      return 0;
    168    }
    169  }
    170 }).exports;
    171 
    172 var view = new BigUint64Array(mem.buffer, 0, 2);
    173 
    174 for (let i = 0; i < 100; ++i) {
    175  view[0] = 0n;
    176  view[1] = 0n;
    177 
    178  run();
    179 
    180  assertEq(view[0].toString(16), "ffff2222ffff1111");
    181  assertEq(view[1].toString(16), "ffff4444ffff3333");
    182 }