42 lines
1.2 KiB
JavaScript
42 lines
1.2 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.exportMemoryAs("memory");
|
||
|
|
||
|
builder.addFunction("store", kSig_v_i).exportFunc().addBody([
|
||
|
kExprLocalGet, 0,
|
||
|
kExprI32Const, 3,
|
||
|
kExprI32Shl,
|
||
|
kExprI64Const, 42,
|
||
|
kAtomicPrefix, kExprI64AtomicStore, 3, 0, // alignment, offset
|
||
|
]);
|
||
|
|
||
|
builder.addFunction("load", kSig_l_i).exportFunc().addBody([
|
||
|
kExprLocalGet, 0,
|
||
|
kExprI32Const, 3,
|
||
|
kExprI32Shl,
|
||
|
kAtomicPrefix, kExprI64AtomicLoad, 3, 0, // alignment, offset
|
||
|
]);
|
||
|
|
||
|
let instance = builder.instantiate();
|
||
|
const kStoreIndex = 1;
|
||
|
instance.exports.store(kStoreIndex);
|
||
|
|
||
|
let i64 = new DataView(instance.exports.memory.buffer);
|
||
|
|
||
|
assertEquals(0n, i64.getBigInt64(0, true));
|
||
|
assertEquals(42n, i64.getBigInt64(kStoreIndex * 8, true));
|
||
|
|
||
|
const kLoadIndex = 10;
|
||
|
const kLoadValue = 1234n;
|
||
|
i64.setBigInt64(kLoadIndex * 8, kLoadValue, true);
|
||
|
let load = instance.exports.load;
|
||
|
assertEquals(0n, load(kLoadIndex * 8));
|
||
|
assertEquals(kLoadValue, load(kLoadIndex));
|