node/deps/v8/test/mjsunit/wasm/table64-init.js
Michaël Zasso 9d7cd9b864
deps: update V8 to 12.8.374.13
PR-URL: https://github.com/nodejs/node/pull/54077
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
2024-08-16 16:03:01 +02:00

111 lines
3.6 KiB
JavaScript

// Copyright 2024 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --experimental-wasm-memory64
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
function exportTable64Getter(builder, table, type) {
const table64_get_sig = makeSig([kWasmI64], [type]);
builder.addFunction('table64_get', table64_get_sig)
.addBody([
kExprLocalGet, 0,
kExprTableGet, table.index])
.exportFunc();
}
function exportTable64Size(builder, table) {
builder.addFunction('table64_size', kSig_l_v)
.addBody([kNumericPrefix, kExprTableSize, table.index])
.exportFunc();
}
function exportTable64Init(builder, table, passive) {
builder.addFunction('table64_init', kSig_v_lii)
.addBody([
kExprLocalGet, 0,
kExprLocalGet, 1,
kExprLocalGet, 2,
kNumericPrefix, kExprTableInit, passive, table.index
])
.exportFunc();
}
function addPassiveSegmentWithExportedFuncs(builder) {
let sig = builder.addType(kSig_i_v, kNoSuperType, false);
let f1 =
builder.addFunction('f1', sig).addBody([kExprI32Const, 11]).exportFunc();
let f2 =
builder.addFunction('f2', sig).addBody([kExprI32Const, 22]).exportFunc();
let f3 =
builder.addFunction('f3', sig).addBody([kExprI32Const, 33]).exportFunc();
let passive = builder.addPassiveElementSegment(
[
[kExprRefFunc, f1.index], [kExprRefFunc, f2.index],
[kExprRefFunc, f3.index]
],
wasmRefType(0));
return passive;
}
(function TestTable64Init() {
print(arguments.callee.name);
const builder = new WasmModuleBuilder();
let passive = addPassiveSegmentWithExportedFuncs(builder);
const table = builder.addTable64(kWasmAnyFunc, 5, 5).exportAs('table');
exportTable64Init(builder, table, passive);
exportTable64Getter(builder, table, kWasmAnyFunc);
exportTable64Size(builder, table);
let exports = builder.instantiate().exports;
const dst = 1n;
const src = 0;
const size = 3;
exports.table64_init(dst, src, size);
assertEquals(5n, exports.table64_size());
assertEquals(null, exports.table64_get(0n));
assertSame(exports.f1, exports.table64_get(dst));
assertEquals(11, exports.table64_get(dst)());
assertSame(exports.f2, exports.table64_get(dst + 1n));
assertEquals(22, exports.table64_get(dst + 1n)());
assertSame(exports.f3, exports.table64_get(dst + 2n));
assertEquals(33, exports.table64_get(dst + 2n)());
assertEquals(null, exports.table64_get(4n));
})();
(function TestTable64InitOOB() {
print(arguments.callee.name);
const builder = new WasmModuleBuilder();
let passive = addPassiveSegmentWithExportedFuncs(builder);
const table = builder.addTable64(kWasmAnyFunc, 5, 5).exportAs('table');
exportTable64Init(builder, table, passive);
exportTable64Getter(builder, table, kWasmAnyFunc);
exportTable64Size(builder, table);
let exports = builder.instantiate().exports;
const src = 0;
const size = 3;
// Just in bouds.
let dst = 2n;
exports.table64_init(dst, src, size);
assertEquals(5n, exports.table64_size());
assertSame(null, exports.table64_get(0n));
assertSame(null, exports.table64_get(1n));
assertSame(exports.f1, exports.table64_get(2n));
assertSame(exports.f2, exports.table64_get(3n));
assertSame(exports.f3, exports.table64_get(4n));
// OOB.
dst = 3n;
assertTraps(
kTrapTableOutOfBounds, () => exports.table64_init(dst, src, size));
dst = 1n << 32n;
assertTraps(
kTrapTableOutOfBounds, () => exports.table64_init(dst, src, size));
})();