Source code

Revision control

Copy as Markdown

Other Tools

const K = 105;
const V = 58;
let body = [];
for (let k = 0; k < K; k++) {
let init = [];
let rot = [];
let sum = ["(local.get 1)"];
for (let i = 0; i < V; i++) {
init.push(`(local.set ${i + 1} (i32.const ${k * 1000 + i + 1}))`);
rot.push(`(local.set ${i + 1} (local.get ${((i + 1) % V) + 1}))`);
if (i > 0) sum.push(`(local.get ${i + 1}) (i32.add)`);
}
body.push(`
${init.join(" ")}
(local.set 0 (local.get ${V + 1}))
(loop $l${k}
${rot.join(" ")}
(br_if $l${k} (local.tee 0 (i32.sub (local.get 0) (i32.const 1))))
)
${sum.join(" ")}
(local.set ${V + 2} (i32.add (local.get ${V + 2})))
`);
}
const wat = `(module
(func (export "run") (param i32) (result i32)
(local ${Array(V + 2).fill("i32").join(" ")})
(local.set ${V + 1} (local.get 0))
${body.join("\n")}
(local.get ${V + 2})
)
)`;
const inst = wasmEvalText(wat);