a76f2cb741
In the existing code we used a register of the UseScratchRegisterScope for the destination address. However, this register is needed for the ParallelRegisterMove as well. With this CL we use fixed registers for the destination address and the offset as well. The CL also changes the implementation of CalculateActualAddress to allow to set an explicit register for the result. R=clemensb@chromium.org Bug: v8:10108, chromium:1079449 Change-Id: I39c11b9ffa5f3e937ce4820b9991482ad711b4b0 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2192652 Commit-Queue: Andreas Haas <ahaas@chromium.org> Reviewed-by: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#67702}
38 lines
1.2 KiB
JavaScript
38 lines
1.2 KiB
JavaScript
// Copyright 2020 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: --wasm-staging
|
|
|
|
load('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
const builder = new WasmModuleBuilder();
|
|
builder.addMemory(16, 32, false, true);
|
|
const sig = builder.addType(makeSig(
|
|
[
|
|
kWasmI64, kWasmI32, kWasmI64, kWasmI32, kWasmI32, kWasmI32, kWasmI32,
|
|
kWasmI32, kWasmI32, kWasmI64, kWasmI64, kWasmI64
|
|
],
|
|
[kWasmI64]));
|
|
// Generate function 2 (out of 3).
|
|
builder.addFunction(undefined, sig)
|
|
.addLocals({f32_count: 10})
|
|
.addLocals({i32_count: 4})
|
|
.addLocals({f64_count: 1})
|
|
.addLocals({i32_count: 15})
|
|
.addBodyWithEnd([
|
|
// signature: v_liliiiiiilll
|
|
// body:
|
|
kExprI32Const, 0x00, // i32.const
|
|
kExprI64Const, 0x00, // i64.const
|
|
kExprI64Const, 0x00, // i64.const
|
|
kAtomicPrefix, kExprI64AtomicCompareExchange, 0x00,
|
|
0x8, // i64.atomic.cmpxchng64
|
|
kExprEnd, // end @124
|
|
]);
|
|
|
|
builder.addExport('main', 0);
|
|
const instance = builder.instantiate();
|
|
assertEquals(
|
|
0n, instance.exports.main(1n, 2, 3n, 4, 5, 6, 7, 8, 9, 10n, 11n, 12n, 13n));
|