From 26a029d407be480d791972afb5975cf62c9360a6 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 02:47:55 +0200 Subject: Adding upstream version 124.0.1. Signed-off-by: Daniel Baumann --- js/src/jit-test/tests/wasm/memory64/memory-fill.js | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 js/src/jit-test/tests/wasm/memory64/memory-fill.js (limited to 'js/src/jit-test/tests/wasm/memory64/memory-fill.js') diff --git a/js/src/jit-test/tests/wasm/memory64/memory-fill.js b/js/src/jit-test/tests/wasm/memory64/memory-fill.js new file mode 100644 index 0000000000..500247d13c --- /dev/null +++ b/js/src/jit-test/tests/wasm/memory64/memory-fill.js @@ -0,0 +1,56 @@ +// |jit-test| allow-oom; skip-if: !canRunHugeMemoryTests() + +// Also see memory-fill-shared.js + +try { + var ins = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(` +(module + (memory (export "mem") i64 65537) + (func (export "f") (param $p i64) (param $c i32) (param $n i64) + (memory.fill (local.get $p) (local.get $c) (local.get $n))))`))); +} catch (e) { + if (e instanceof WebAssembly.RuntimeError && String(e).match(/too many memory pages/)) { + quit(0); + } + throw e; +} + +var mem = new Uint8Array(ins.exports.mem.buffer); + +// Fill above 4GB +doit(mem, 0x100000100, 37, 14); + +// Fill OOB above 4GB +assertErrorMessage(() => ins.exports.f(0x10000FFFFn, 66, 14n), + WebAssembly.RuntimeError, + /out of bounds/); +assertEq(mem[0x10000FFFF], 0); +assertEq(mem[mem.length-1], 0); + +// Fill across 4GB +doit(mem, 0x100000000 - 16, 42, 32); + +// Fill more than 4GB... +ins.exports.f(0n, 86, 65536n*65537n); +assertEq(mem[mem.length-1], 86); +assertEq(mem[0], 86); + +// Fill OOB more than 4GB +assertErrorMessage(() => ins.exports.f(1n, 75, 65536n*65537n), + WebAssembly.RuntimeError, + /out of bounds/); +assertEq(mem[1], 86); +assertEq(mem[mem.length-1], 86); + +function doit(mem, addr, c, n) { + assertEq(mem[addr-1], 0); + assertEq(mem[addr], 0); + assertEq(mem[addr + n - 1], 0); + assertEq(mem[addr + n], 0); + ins.exports.f(BigInt(addr), c, BigInt(n)); + assertEq(mem[addr-1], 0); + assertEq(mem[addr], c); + assertEq(mem[addr + n - 1], c); + assertEq(mem[addr + n], 0); +} + -- cgit v1.2.3