Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (280649 => 280650)
--- trunk/Source/_javascript_Core/ChangeLog 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/ChangeLog 2021-08-04 19:24:47 UTC (rev 280650)
@@ -1,3 +1,17 @@
+2021-08-04 Commit Queue <commit-qu...@webkit.org>
+
+ Unreviewed, reverting r280609.
+ https://bugs.webkit.org/show_bug.cgi?id=228791
+
+ Broke JSC tests on iOS.
+
+ Reverted changeset:
+
+ "[ARM64] Use link register instead of pinning a register for
+ materializing big load constants"
+ https://bugs.webkit.org/show_bug.cgi?id=228710
+ https://commits.webkit.org/r280609
+
2021-08-03 Yijia Huang <yijia_hu...@apple.com>
[ARM64] Use link register instead of pinning a register for materializing big load constants
Modified: trunk/Source/_javascript_Core/b3/B3Common.cpp (280649 => 280650)
--- trunk/Source/_javascript_Core/b3/B3Common.cpp 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/b3/B3Common.cpp 2021-08-04 19:24:47 UTC (rev 280650)
@@ -67,10 +67,10 @@
return Options::verboseValidationFailure();
}
-std::optional<GPRReg> linkRegister()
+std::optional<GPRReg> pinnedExtendedOffsetAddrRegister()
{
#if CPU(ARM64)
- return MacroAssembler::linkRegister;
+ return MacroAssembler::dataTempRegister;
#elif CPU(X86_64)
return std::nullopt;
#else
Modified: trunk/Source/_javascript_Core/b3/B3Common.h (280649 => 280650)
--- trunk/Source/_javascript_Core/b3/B3Common.h 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/b3/B3Common.h 2021-08-04 19:24:47 UTC (rev 280650)
@@ -183,7 +183,7 @@
return Options::defaultB3OptLevel();
}
-std::optional<GPRReg> linkRegister();
+std::optional<GPRReg> pinnedExtendedOffsetAddrRegister();
} } // namespace JSC::B3
Modified: trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp (280649 => 280650)
--- trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp 2021-08-04 19:24:47 UTC (rev 280650)
@@ -144,11 +144,11 @@
return CCallHelpers::Address(GPRInfo::callFrameRegister, offsetFromFP);
}
- ASSERT(linkRegister());
+ ASSERT(pinnedExtendedOffsetAddrRegister());
auto addr = Arg::addr(Air::Tmp(GPRInfo::callFrameRegister), offsetFromFP);
if (addr.isValidForm(Width64))
return CCallHelpers::Address(GPRInfo::callFrameRegister, offsetFromFP);
- GPRReg reg = *linkRegister();
+ GPRReg reg = *pinnedExtendedOffsetAddrRegister();
jit.move(CCallHelpers::TrustedImmPtr(offsetFromFP), reg);
jit.add64(GPRInfo::callFrameRegister, reg);
return CCallHelpers::Address(reg);
Modified: trunk/Source/_javascript_Core/b3/air/AirCode.cpp (280649 => 280650)
--- trunk/Source/_javascript_Core/b3/air/AirCode.cpp 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/b3/air/AirCode.cpp 2021-08-04 19:24:47 UTC (rev 280650)
@@ -90,6 +90,9 @@
setRegsInPriorityOrder(bank, result);
});
+ if (auto reg = pinnedExtendedOffsetAddrRegister())
+ pinRegister(*reg);
+
m_pinnedRegs.set(MacroAssembler::framePointerRegister);
}
Modified: trunk/Source/_javascript_Core/b3/air/AirLowerStackArgs.cpp (280649 => 280650)
--- trunk/Source/_javascript_Core/b3/air/AirLowerStackArgs.cpp 2021-08-04 18:59:03 UTC (rev 280649)
+++ trunk/Source/_javascript_Core/b3/air/AirLowerStackArgs.cpp 2021-08-04 19:24:47 UTC (rev 280650)
@@ -78,7 +78,8 @@
if (Arg::isValidImmForm(offset))
inst = Inst(inst.kind.opcode == Lea32 ? Add32 : Add64, inst.origin, Arg::imm(offset), base, inst.args[1]);
else {
- Air::Tmp tmp = Air::Tmp(*linkRegister());
+ ASSERT(pinnedExtendedOffsetAddrRegister());
+ Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister());
Arg offsetArg = Arg::bigImm(offset);
insertionSet.insert(instIndex, Move, inst.origin, offsetArg, tmp);
inst = Inst(inst.kind.opcode == Lea32 ? Add32 : Add64, inst.origin, tmp, base, inst.args[1]);
@@ -127,7 +128,8 @@
if (result.isValidForm(width))
return result;
#if CPU(ARM64)
- Air::Tmp tmp = Air::Tmp(*linkRegister());
+ ASSERT(pinnedExtendedOffsetAddrRegister());
+ Air::Tmp tmp = Air::Tmp(*pinnedExtendedOffsetAddrRegister());
Arg largeOffset = Arg::isValidImmForm(offsetFromSP) ? Arg::imm(offsetFromSP) : Arg::bigImm(offsetFromSP);
insertionSet.insert(instIndex, Move, inst.origin, largeOffset, tmp);