Source code
Revision control
Copy as Markdown
Other Tools
function test(op, x0, n, expected) {
const text = `
(module
(func (export "f") (param $n i32) (result i32)
(local $x i32) (local $acc i32) (local $i i32)
(local.set $x (i32.const ${x0}))
(loop $L
(local.set $acc (i32.add (local.get $acc) ${op}))
(local.set $x (local.get $n))
(local.set $i (i32.add (local.get $i) (i32.const 1)))
(br_if $L (i32.lt_u (local.get $i) (local.get $n))))
(local.get $acc)))
`;
const { exports } = new WebAssembly.Instance(
new WebAssembly.Module(wasmTextToBinary(text))
);
assertEq(exports.f(n), expected);
}
test("(i32.shr_u (local.get $x) (i32.const 0))", -1, 3, 5);
test("(i32.shr_u (local.get $x) (i32.const 32))", -1, 3, 5);
test("(i32.div_u (local.get $x) (i32.const 1))", -1, 3, 5);
test("(i32.rem_u (local.get $x) (i32.const -1))", -2, 3, 4);