43 lines
1.4 KiB
JavaScript
43 lines
1.4 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.
|
||
|
|
||
|
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
|
||
|
|
||
|
const builder = new WasmModuleBuilder();
|
||
|
builder.addMemory(1, 1);
|
||
|
builder.addFunction("main", kSig_i_v).exportFunc().addBody([
|
||
|
kExprF32Const, 0x11, 0x00, 0xc0, 0xff,
|
||
|
kExprF32Const, 0x22, 0x00, 0xc0, 0xff,
|
||
|
kExprI32Const, 0, // Address.
|
||
|
kExprI32LoadMem, 2, 0, // Alignment, offset.
|
||
|
kExprSelect,
|
||
|
kExprI32ReinterpretF32,
|
||
|
]);
|
||
|
|
||
|
builder.addFunction("reinterpret", kSig_i_v).exportFunc().addBody([
|
||
|
...wasmI32Const(0xffc00011),
|
||
|
kExprF32ReinterpretI32,
|
||
|
...wasmI32Const(0xffc00022),
|
||
|
kExprF32ReinterpretI32,
|
||
|
kExprI32Const, 0, // Address.
|
||
|
kExprI32LoadMem, 2, 0, // Alignment, offset.
|
||
|
kExprSelect,
|
||
|
kExprI32ReinterpretF32,
|
||
|
]);
|
||
|
|
||
|
builder.addFunction("gvn", makeSig([], [kWasmI32, kWasmI32])).exportFunc().addBody([
|
||
|
kExprF32Const, 0x11, 0x00, 0xc0, 0xff,
|
||
|
kExprI32ReinterpretF32,
|
||
|
kExprF32Const, 0x11, 0x00, 0xe0, 0xff, // Note difference in third byte.
|
||
|
kExprI32ReinterpretF32,
|
||
|
]);
|
||
|
|
||
|
const instance = builder.instantiate();
|
||
|
assertEquals(0xffc00022, instance.exports.main() >>> 0);
|
||
|
assertEquals(0xffc00022, instance.exports.reinterpret() >>> 0);
|
||
|
|
||
|
let fs = instance.exports.gvn();
|
||
|
assertEquals(0xffc00011, fs[0] >>> 0);
|
||
|
assertEquals(0xffe00011, fs[1] >>> 0);
|