Commit dc5a4c90 authored by Milad Fa's avatar Milad Fa Committed by V8 LUCI CQ

PPC/s390: [sparkplug][x64] Reduce CallRecordWrite instructions

Port f68e1be7

Original Commit Message:

    Directly use the correct registers for calling the RecordWrite stubs
    in sparkplug. To keep changes to existing builtins minimal there are
    certain register requirements which are now made explicit in
    WriteBarrierDescriptor::Verify.

R=cbruni@chromium.org, joransiu@ca.ibm.com, junyan@redhat.com, midawson@redhat.com
BUG=
LOG=N

Change-Id: Id01f936f96cf231dcfc599b4f2662124bc1a7744
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2945832Reviewed-by: 's avatarJunliang Yan <junyan@redhat.com>
Reviewed-by: 's avatarCamillo Bruni <cbruni@chromium.org>
Commit-Queue: Milad Fa <mfarazma@redhat.com>
Cr-Commit-Position: refs/heads/master@{#75018}
parent 863f322e
...@@ -19,6 +19,23 @@ constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { ...@@ -19,6 +19,23 @@ constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() {
return registers; return registers;
} }
#if DEBUG
template <typename DerivedDescriptor>
void StaticCallInterfaceDescriptor<DerivedDescriptor>::
VerifyArgumentRegisterCount(CallInterfaceDescriptorData* data, int argc) {
RegList allocatable_regs = data->allocatable_registers();
if (argc >= 1) DCHECK(allocatable_regs | r3.bit());
if (argc >= 2) DCHECK(allocatable_regs | r4.bit());
if (argc >= 3) DCHECK(allocatable_regs | r5.bit());
if (argc >= 4) DCHECK(allocatable_regs | r6.bit());
if (argc >= 5) DCHECK(allocatable_regs | r7.bit());
if (argc >= 6) DCHECK(allocatable_regs | r8.bit());
if (argc >= 7) DCHECK(allocatable_regs | r9.bit());
if (argc >= 8) DCHECK(allocatable_regs | r10.bit());
// Additional arguments are passed on the stack.
}
#endif // DEBUG
// static // static
constexpr auto WriteBarrierDescriptor::registers() { constexpr auto WriteBarrierDescriptor::registers() {
STATIC_ASSERT(kReturnRegister0 == r3); STATIC_ASSERT(kReturnRegister0 == r3);
......
...@@ -19,6 +19,23 @@ constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() { ...@@ -19,6 +19,23 @@ constexpr auto CallInterfaceDescriptor::DefaultRegisterArray() {
return registers; return registers;
} }
#if DEBUG
template <typename DerivedDescriptor>
void StaticCallInterfaceDescriptor<DerivedDescriptor>::
VerifyArgumentRegisterCount(CallInterfaceDescriptorData* data, int argc) {
RegList allocatable_regs = data->allocatable_registers();
if (argc >= 1) DCHECK(allocatable_regs | r2.bit());
if (argc >= 2) DCHECK(allocatable_regs | r3.bit());
if (argc >= 3) DCHECK(allocatable_regs | r4.bit());
if (argc >= 4) DCHECK(allocatable_regs | r5.bit());
if (argc >= 5) DCHECK(allocatable_regs | r6.bit());
if (argc >= 6) DCHECK(allocatable_regs | r7.bit());
if (argc >= 7) DCHECK(allocatable_regs | r8.bit());
if (argc >= 8) DCHECK(allocatable_regs | r9.bit());
// Additional arguments are passed on the stack.
}
#endif // DEBUG
// static // static
constexpr auto WriteBarrierDescriptor::registers() { constexpr auto WriteBarrierDescriptor::registers() {
STATIC_ASSERT(kReturnRegister0 == r2); STATIC_ASSERT(kReturnRegister0 == r2);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment