mirror of
https://github.com/nodejs/node.git
synced 2025-05-15 17:23:43 +00:00

PR-URL: https://github.com/nodejs/node/pull/47251 Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com> Reviewed-By: Richard Lau <rlau@redhat.com>
127 lines
4.2 KiB
JavaScript
127 lines
4.2 KiB
JavaScript
// Copyright 2022 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: --allow-natives-syntax
|
|
|
|
d8.file.execute("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
let builder = new WasmModuleBuilder();
|
|
let fcts = [
|
|
builder.addFunction('i64_shr_u_dynamic',
|
|
makeSig([kWasmI64, kWasmI64], [kWasmI64]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
kExprLocalGet, 1,
|
|
kExprI64ShrU,
|
|
]),
|
|
builder.addFunction('i64_shr_u_by_negative_48',
|
|
makeSig([kWasmI64], [kWasmI64]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
...wasmI64Const(-48),
|
|
kExprI64ShrU,
|
|
]),
|
|
builder.addFunction('i64_shr_s_dynamic',
|
|
makeSig([kWasmI64, kWasmI64], [kWasmI64]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
kExprLocalGet, 1,
|
|
kExprI64ShrS,
|
|
]),
|
|
builder.addFunction('i64_shr_s_by_negative_48',
|
|
makeSig([kWasmI64], [kWasmI64]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
...wasmI64Const(-48),
|
|
kExprI64ShrS,
|
|
]),
|
|
builder.addFunction('i32_shr_u_dynamic',
|
|
makeSig([kWasmI32, kWasmI32], [kWasmI32]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
kExprLocalGet, 1,
|
|
kExprI32ShrU,
|
|
]),
|
|
builder.addFunction('i32_shr_u_by_negative_22',
|
|
makeSig([kWasmI32], [kWasmI32]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
...wasmI32Const(-22),
|
|
kExprI32ShrU,
|
|
]),
|
|
builder.addFunction('i32_shr_s_dynamic',
|
|
makeSig([kWasmI32, kWasmI32], [kWasmI32]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
kExprLocalGet, 1,
|
|
kExprI32ShrS,
|
|
]),
|
|
builder.addFunction('i32_shr_s_by_negative_22',
|
|
makeSig([kWasmI32], [kWasmI32]))
|
|
.exportFunc().addBody([
|
|
kExprLocalGet, 0,
|
|
...wasmI32Const(-22),
|
|
kExprI32ShrS,
|
|
]),
|
|
];
|
|
|
|
let instance = builder.instantiate();
|
|
let wasm = instance.exports;
|
|
|
|
let testFct = () => {
|
|
// i64.shr_u
|
|
assertEquals(0n, wasm.i64_shr_u_dynamic(0n, 0n));
|
|
assertEquals(1n, wasm.i64_shr_u_dynamic(3n, 1n));
|
|
assertEquals(-1n, wasm.i64_shr_u_dynamic(-1n, 64n));
|
|
assertEquals(-1n, wasm.i64_shr_u_dynamic(-1n, -64n));
|
|
assertEquals(1n, wasm.i64_shr_u_dynamic(-1n, 63n));
|
|
assertEquals(1n, wasm.i64_shr_u_dynamic(-1n, -1n));
|
|
assertEquals(BigInt(2 ** 32 - 1), wasm.i64_shr_u_dynamic(-1n, -32n));
|
|
assertEquals(8n, wasm.i64_shr_u_dynamic(16n, 65n));
|
|
assertEquals(8n, wasm.i64_shr_u_dynamic(16n, -127n));
|
|
|
|
assertEquals(0n, wasm.i64_shr_u_by_negative_48(123n));
|
|
assertEquals(BigInt(2 ** 48 - 1), wasm.i64_shr_u_by_negative_48(-1n));
|
|
assertEquals(4n, wasm.i64_shr_u_by_negative_48(BigInt(2 ** 18)))
|
|
|
|
// i64.shr_s
|
|
assertEquals(0n, wasm.i64_shr_s_dynamic(0n, 0n));
|
|
assertEquals(1n, wasm.i64_shr_s_dynamic(3n, 1n));
|
|
assertEquals(-1n, wasm.i64_shr_s_dynamic(-1n, 64n));
|
|
assertEquals(-1n, wasm.i64_shr_s_dynamic(-1n, -64n));
|
|
assertEquals(-1n, wasm.i64_shr_s_dynamic(-8n, 63n));
|
|
assertEquals(-4n, wasm.i64_shr_s_dynamic(-8n, -63n));
|
|
assertEquals(-1n, wasm.i64_shr_s_dynamic(-16n, -2n));
|
|
|
|
assertEquals(0n, wasm.i64_shr_s_by_negative_48(123n));
|
|
assertEquals(-BigInt(2 ** 16),
|
|
wasm.i64_shr_s_by_negative_48(-BigInt(2 ** 32)));
|
|
|
|
// i32.shr_u
|
|
assertEquals(0, wasm.i32_shr_u_dynamic(0, 0));
|
|
assertEquals(1, wasm.i32_shr_u_dynamic(3, 1));
|
|
assertEquals(-1, wasm.i32_shr_u_dynamic(-1, 32));
|
|
assertEquals(-1, wasm.i32_shr_u_dynamic(-1, -32));
|
|
assertEquals((1 << 17) - 1, wasm.i32_shr_u_dynamic(-1, 15));
|
|
|
|
assertEquals(123, wasm.i32_shr_u_by_negative_22((123 << 10) + 456));
|
|
assertEquals((1 << 22) - 123, wasm.i32_shr_u_by_negative_22(-123 << 10));
|
|
|
|
// i32.shr_s
|
|
assertEquals(0, wasm.i32_shr_s_dynamic(0, 0));
|
|
assertEquals(1, wasm.i32_shr_s_dynamic(3, 1));
|
|
assertEquals(-1, wasm.i32_shr_s_dynamic(-1, 32));
|
|
assertEquals(-1, wasm.i32_shr_s_dynamic(-1, -32));
|
|
assertEquals(-123, wasm.i32_shr_s_dynamic(-123 << 15, 15));
|
|
|
|
assertEquals(123, wasm.i32_shr_s_by_negative_22((123 << 10) + 456));
|
|
assertEquals(-123, wasm.i32_shr_s_by_negative_22((-123 << 10) + 456));
|
|
};
|
|
|
|
for (let i = 0; i < 20; i++) testFct();
|
|
for (let fct of fcts) {
|
|
%WasmTierUpFunction(wasm[fct.name]);
|
|
}
|
|
testFct();
|