Source code

Revision control

Copy as Markdown

Other Tools

// Tests if the profiler (frame iterator) can unwind in the middle
// of collapse frame instructions.
enableGeckoProfiling();
try {
enableSingleStepProfiling();
} catch (e) {
// continue anyway if single step profiling is not supported
}
var ins = wasmEvalText(`
(module
(func $f (param i64 i64 i64 i64 i64 i64 i64 i64 i64)
local.get 0
i64.eqz
br_if 0
local.get 0
return_call $g
)
(func $g (param i64)
local.get 0
i64.const 1
i64.sub
i64.const 2
i64.const 6
i64.const 3
i64.const 4
i64.const 1
i64.const 2
i64.const 6
i64.const 3
return_call $f
)
(func (export "run") (param i64)
local.get 0
call $g
)
)`);
for (var i = 0; i < 10; i++) {
ins.exports.run(100n);
}
// Also when trampoline is used.
var ins0 = wasmEvalText(`(module (func (export "t")))`);
var ins = wasmEvalText(`
(module
(import "" "t" (func $g))
(func $f (return_call_indirect $t (i32.const 0)))
(table $t 1 1 funcref)
(func (export "run") (param i64)
loop
local.get 0
i64.eqz
br_if 1
call $f
local.get 0
i64.const 1
i64.sub
local.set 0
br 0
end
)
(elem (i32.const 0) $g)
)`, {"": {t: ins0.exports.t},});
ins.exports.run(10n);