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