Files
ladybird/Libraries/LibWasm/Tests/Executor/test-const-local-local-fusion.js
Ali Mohammad Pur 0e7fb1386e LibWasm: Use the right indices for i64 constlocal fused ops
Also aligns the i32 ones to use the same detection logic as the i64
cases.
2026-02-23 00:22:47 +01:00

46 lines
1.9 KiB
JavaScript

// `*.const; local.get; local.get; op` fusion must pick the right indices
test("i64.const; local.get; local.get; i64.add uses correct locals", () => {
const bin = readBinaryWasmFile("Fixtures/Modules/const-local-local-fusion.wasm");
const module = parseWebAssemblyModule(bin);
const fn = module.getExport("i64_const_2local_add");
// 1000 + (10 + 20) = 1030
expect(module.invoke(fn, 10n, 20n)).toBe(1030n);
// 1000 + (100 + 200) = 1300
expect(module.invoke(fn, 100n, 200n)).toBe(1300n);
});
test("i64.const; local.get; local.get; i64.sub uses correct locals and order", () => {
const bin = readBinaryWasmFile("Fixtures/Modules/const-local-local-fusion.wasm");
const module = parseWebAssemblyModule(bin);
const fn = module.getExport("i64_const_2local_sub");
// 1000 + (50 - 20) = 1030
expect(module.invoke(fn, 50n, 20n)).toBe(1030n);
// 1000 + (200 - 50) = 1150
expect(module.invoke(fn, 200n, 50n)).toBe(1150n);
});
test("i32.const; local.get; local.get; i32.add uses correct locals", () => {
const bin = readBinaryWasmFile("Fixtures/Modules/const-local-local-fusion.wasm");
const module = parseWebAssemblyModule(bin);
const fn = module.getExport("i32_const_2local_add");
// 1000 + (10 + 20) = 1030
expect(module.invoke(fn, 10, 20)).toBe(1030);
// 1000 + (100 + 200) = 1300
expect(module.invoke(fn, 100, 200)).toBe(1300);
});
test("i32.const; local.get; local.get; i32.and uses correct locals", () => {
const bin = readBinaryWasmFile("Fixtures/Modules/const-local-local-fusion.wasm");
const module = parseWebAssemblyModule(bin);
const fn = module.getExport("i32_const_2local_and");
// 0xFF00 | (0xFF & 0x0F) = 0xFF00 | 0x0F = 0xFF0F
expect(module.invoke(fn, 0xff, 0x0f)).toBe(0xff0f);
// 0xFF00 | (0xAB & 0xF0) = 0xFF00 | 0xA0 = 0xFFA0
expect(module.invoke(fn, 0xab, 0xf0)).toBe(0xffa0);
});