tor-browser

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

wasm-08.js (3106B)


      1 // |jit-test| test-also=--wasm-compiler=optimizing; skip-if: !wasmDebuggingEnabled()
      2 // Checking if we destroying work registers by breakpoint/step handler.
      3 
      4 load(libdir + "wasm.js");
      5 
      6 // Running the following code compiled from C snippet:
      7 //
      8 //     signed func0(signed n) {
      9 //         double a = 1; float b = 0; signed c = 1; long long d = 1;
     10 //         for (;n > 0; n--) {
     11 //             a *= c; b += c; c++; d <<= 1;
     12 //         }
     13 //         return (signed)a + (signed)b + c + (signed)d;
     14 //     }
     15 //
     16 var onStepCalled;
     17 wasmRunWithDebugger(
     18  `(module
     19  (func $func0 (param $var0 i32) (result i32)
     20    (local $var1 i32) (local $var2 i64) (local $var3 f64) (local $var4 f32)
     21    (local $var5 f64) (local $var6 i32) (local $var7 i32) (local $var8 i32)
     22    i32.const 1
     23    local.set $var1
     24    i32.const 0
     25    local.set $var7
     26    i32.const 1
     27    local.set $var6
     28    i32.const 1
     29    local.set $var8
     30    block $label0
     31      local.get $var0
     32      i32.const 1
     33      i32.lt_s
     34      br_if $label0
     35      local.get $var0
     36      i32.const 1
     37      i32.add
     38      local.set $var1
     39      f32.const 0
     40      local.set $var4
     41      i64.const 1
     42      local.set $var2
     43      f64.const 1
     44      local.set $var3
     45      i32.const 1
     46      local.set $var0
     47      f64.const 1
     48      local.set $var5
     49      block
     50        loop $label1
     51          local.get $var2
     52          i64.const 1
     53          i64.shl
     54          local.set $var2
     55          local.get $var5
     56          local.get $var3
     57          f64.mul
     58          local.set $var5
     59          local.get $var4
     60          local.get $var0
     61          f32.convert_i32_s
     62          f32.add
     63          local.set $var4
     64          local.get $var3
     65          f64.const 1
     66          f64.add
     67          local.set $var3
     68          local.get $var0
     69          i32.const 1
     70          i32.add
     71          local.tee $var6
     72          local.set $var0
     73          local.get $var1
     74          i32.const -1
     75          i32.add
     76          local.tee $var1
     77          i32.const 1
     78          i32.gt_s
     79          br_if $label1
     80        end $label1
     81      end
     82      local.get $var2
     83      i32.wrap_i64
     84      local.set $var1
     85      local.get $var4
     86      i32.trunc_f32_s
     87      local.set $var7
     88      local.get $var5
     89      i32.trunc_f64_s
     90      local.set $var8
     91    end $label0
     92    local.get $var7
     93    local.get $var8
     94    i32.add
     95    local.get $var6
     96    i32.add
     97    local.get $var1
     98    i32.add
     99    return
    100  )
    101  (func (export "test") (result i32) (call $func0 (i32.const 4)))
    102 )`.split('\n').join(' '),
    103    undefined,
    104    function ({dbg}) {
    105        onStepCalled = [];
    106        dbg.onEnterFrame = function (frame) {
    107            if (frame.type != 'wasmcall') return;
    108            frame.onStep = function () {
    109                onStepCalled.push(frame.offset);
    110            };
    111        };
    112  },
    113  function ({result, error}) {
    114      assertEq(result, /* func0(4) = */ 55);
    115      assertEq(error, undefined);
    116      // The number below reflects amount of wasm operators executed during
    117      // the run of the test function, which runs $func0(4). It can change
    118      // when the code above and/or meaning of wasm operators will change.
    119      assertEq(onStepCalled.length, 85);
    120  }
    121 );