Changeset 280609 in webkit
- Timestamp:
- Aug 3, 2021, 1:26:54 PM (5 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 6 edited
-
ChangeLog (modified) (1 diff)
-
b3/B3Common.cpp (modified) (1 diff)
-
b3/B3Common.h (modified) (1 diff)
-
b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp (modified) (1 diff)
-
b3/air/AirCode.cpp (modified) (1 diff)
-
b3/air/AirLowerStackArgs.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r280583 r280609 1 2021-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 1 24 2021-08-02 Yijia Huang <yijia_huang@apple.com> 2 25 -
trunk/Source/JavaScriptCore/b3/B3Common.cpp
r278340 r280609 68 68 } 69 69 70 std::optional<GPRReg> pinnedExtendedOffsetAddrRegister()70 std::optional<GPRReg> linkRegister() 71 71 { 72 72 #if CPU(ARM64) 73 return MacroAssembler:: dataTempRegister;73 return MacroAssembler::linkRegister; 74 74 #elif CPU(X86_64) 75 75 return std::nullopt; -
trunk/Source/JavaScriptCore/b3/B3Common.h
r278253 r280609 184 184 } 185 185 186 std::optional<GPRReg> pinnedExtendedOffsetAddrRegister();186 std::optional<GPRReg> linkRegister(); 187 187 188 188 } } // namespace JSC::B3 -
trunk/Source/JavaScriptCore/b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp
r278253 r280609 145 145 } 146 146 147 ASSERT( pinnedExtendedOffsetAddrRegister());147 ASSERT(linkRegister()); 148 148 auto addr = Arg::addr(Air::Tmp(GPRInfo::callFrameRegister), offsetFromFP); 149 149 if (addr.isValidForm(Width64)) 150 150 return CCallHelpers::Address(GPRInfo::callFrameRegister, offsetFromFP); 151 GPRReg reg = * pinnedExtendedOffsetAddrRegister();151 GPRReg reg = *linkRegister(); 152 152 jit.move(CCallHelpers::TrustedImmPtr(offsetFromFP), reg); 153 153 jit.add64(GPRInfo::callFrameRegister, reg); -
trunk/Source/JavaScriptCore/b3/air/AirCode.cpp
r280198 r280609 91 91 }); 92 92 93 if (auto reg = pinnedExtendedOffsetAddrRegister())94 pinRegister(*reg);95 96 93 m_pinnedRegs.set(MacroAssembler::framePointerRegister); 97 94 } -
trunk/Source/JavaScriptCore/b3/air/AirLowerStackArgs.cpp
r279889 r280609 79 79 inst = Inst(inst.kind.opcode == Lea32 ? Add32 : Add64, inst.origin, Arg::imm(offset), base, inst.args[1]); 80 80 else { 81 ASSERT(pinnedExtendedOffsetAddrRegister()); 82 Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister()); 81 Air::Tmp tmp = Air::Tmp(*linkRegister()); 83 82 Arg offsetArg = Arg::bigImm(offset); 84 83 insertionSet.insert(instIndex, Move, inst.origin, offsetArg, tmp); … … 129 128 return result; 130 129 #if CPU(ARM64) 131 ASSERT(pinnedExtendedOffsetAddrRegister()); 132 Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister()); 130 Air::Tmp tmp = Air::Tmp(*linkRegister()); 133 131 134 132 Arg largeOffset = Arg::isValidImmForm(offsetFromSP) ? Arg::imm(offsetFromSP) : Arg::bigImm(offsetFromSP);
Note:
See TracChangeset
for help on using the changeset viewer.