⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 280609 in webkit


Ignore:
Timestamp:
Aug 3, 2021, 1:26:54 PM (5 years ago)
Author:
Yijia Huang
Message:

[ARM64] Use link register instead of pinning a register for materializing big load constants
https://bugs.webkit.org/show_bug.cgi?id=228710

Reviewed by Mark Lam.

Previously, we pin a register as a temp for materializing a large constant that cannot fit in
Load/Store imm form. This is not efficient since the register allocator has one less register
to allocate from. To solve this problem, we should switch to using the link register as the temp
on ARM64.

  • b3/B3Common.cpp:

(JSC::B3::linkRegister):
(JSC::B3::pinnedExtendedOffsetAddrRegister): Deleted.

  • b3/B3Common.h:
  • b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:

(JSC::B3::Air::callFrameAddr):

  • b3/air/AirCode.cpp:

(JSC::B3::Air::Code::Code):

  • b3/air/AirLowerStackArgs.cpp:

(JSC::B3::Air::lowerStackArgs):

Location:
trunk/Source/JavaScriptCore
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r280583 r280609  
     12021-08-03  Yijia Huang  <yijia_huang@apple.com>
     2
     3        [ARM64] Use link register instead of pinning a register for materializing big load constants
     4        https://bugs.webkit.org/show_bug.cgi?id=228710
     5
     6        Reviewed by Mark Lam.
     7
     8        Previously, we pin a register as a temp for materializing a large constant that cannot fit in
     9        Load/Store imm form. This is not efficient since the register allocator has one less register
     10        to allocate from. To solve this problem, we should switch to using the link register as the temp
     11        on ARM64.
     12
     13        * b3/B3Common.cpp:
     14        (JSC::B3::linkRegister):
     15        (JSC::B3::pinnedExtendedOffsetAddrRegister): Deleted.
     16        * b3/B3Common.h:
     17        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
     18        (JSC::B3::Air::callFrameAddr):
     19        * b3/air/AirCode.cpp:
     20        (JSC::B3::Air::Code::Code):
     21        * b3/air/AirLowerStackArgs.cpp:
     22        (JSC::B3::Air::lowerStackArgs):
     23
    1242021-08-02  Yijia Huang  <yijia_huang@apple.com>
    225
  • trunk/Source/JavaScriptCore/b3/B3Common.cpp

    r278340 r280609  
    6868}
    6969
    70 std::optional<GPRReg> pinnedExtendedOffsetAddrRegister()
     70std::optional<GPRReg> linkRegister()
    7171{
    7272#if CPU(ARM64)
    73     return MacroAssembler::dataTempRegister;
     73    return MacroAssembler::linkRegister;
    7474#elif CPU(X86_64)
    7575    return std::nullopt;
  • trunk/Source/JavaScriptCore/b3/B3Common.h

    r278253 r280609  
    184184}
    185185
    186 std::optional<GPRReg> pinnedExtendedOffsetAddrRegister();
     186std::optional<GPRReg> linkRegister();
    187187
    188188} } // namespace JSC::B3
  • trunk/Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp

    r278253 r280609  
    145145    }
    146146
    147     ASSERT(pinnedExtendedOffsetAddrRegister());
     147    ASSERT(linkRegister());
    148148    auto addr = Arg::addr(Air::Tmp(GPRInfo::callFrameRegister), offsetFromFP);
    149149    if (addr.isValidForm(Width64))
    150150        return CCallHelpers::Address(GPRInfo::callFrameRegister, offsetFromFP);
    151     GPRReg reg = *pinnedExtendedOffsetAddrRegister();
     151    GPRReg reg = *linkRegister();
    152152    jit.move(CCallHelpers::TrustedImmPtr(offsetFromFP), reg);
    153153    jit.add64(GPRInfo::callFrameRegister, reg);
  • trunk/Source/JavaScriptCore/b3/air/AirCode.cpp

    r280198 r280609  
    9191        });
    9292
    93     if (auto reg = pinnedExtendedOffsetAddrRegister())
    94         pinRegister(*reg);
    95 
    9693    m_pinnedRegs.set(MacroAssembler::framePointerRegister);
    9794}
  • trunk/Source/JavaScriptCore/b3/air/AirLowerStackArgs.cpp

    r279889 r280609  
    7979                        inst = Inst(inst.kind.opcode == Lea32 ? Add32 : Add64, inst.origin, Arg::imm(offset), base, inst.args[1]);
    8080                    else {
    81                         ASSERT(pinnedExtendedOffsetAddrRegister());
    82                         Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister());
     81                        Air::Tmp tmp = Air::Tmp(*linkRegister());
    8382                        Arg offsetArg = Arg::bigImm(offset);
    8483                        insertionSet.insert(instIndex, Move, inst.origin, offsetArg, tmp);
     
    129128                            return result;
    130129#if CPU(ARM64)
    131                         ASSERT(pinnedExtendedOffsetAddrRegister());
    132                         Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister());
     130                        Air::Tmp tmp = Air::Tmp(*linkRegister());
    133131
    134132                        Arg largeOffset = Arg::isValidImmForm(offsetFromSP) ? Arg::imm(offsetFromSP) : Arg::bigImm(offsetFromSP);
Note: See TracChangeset for help on using the changeset viewer.