Title: [291521] trunk/Source/_javascript_Core
- Revision
- 291521
- Author
- [email protected]
- Date
- 2022-03-18 20:46:14 -0700 (Fri, 18 Mar 2022)
Log Message
[JSC] Further reduce # of registers used in RegExpTestInline
https://bugs.webkit.org/show_bug.cgi?id=238105
Reviewed by Saam Barati.
This patch further reduces # of registers used in RegExpTestInline.
After flushRegisters(), we can use baseGPR for any purpose.
We also remove x64 hack since we have enough registers for x64 even
if we use one callee-save register in unlinked DFG.
* dfg/DFGSpeculativeJIT64.cpp:
(JSC::DFG::SpeculativeJIT::compileRegExpTestInline):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (291520 => 291521)
--- trunk/Source/_javascript_Core/ChangeLog 2022-03-19 03:30:12 UTC (rev 291520)
+++ trunk/Source/_javascript_Core/ChangeLog 2022-03-19 03:46:14 UTC (rev 291521)
@@ -1,3 +1,18 @@
+2022-03-18 Yusuke Suzuki <[email protected]>
+
+ [JSC] Further reduce # of registers used in RegExpTestInline
+ https://bugs.webkit.org/show_bug.cgi?id=238105
+
+ Reviewed by Saam Barati.
+
+ This patch further reduces # of registers used in RegExpTestInline.
+ After flushRegisters(), we can use baseGPR for any purpose.
+ We also remove x64 hack since we have enough registers for x64 even
+ if we use one callee-save register in unlinked DFG.
+
+ * dfg/DFGSpeculativeJIT64.cpp:
+ (JSC::DFG::SpeculativeJIT::compileRegExpTestInline):
+
2022-03-18 Devin Rousso <[email protected]>
Web Inspector: REGRESSION(?): Emulate User Gesture doesn't work
Modified: trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp (291520 => 291521)
--- trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2022-03-19 03:30:12 UTC (rev 291520)
+++ trunk/Source/_javascript_Core/dfg/DFGSpeculativeJIT64.cpp 2022-03-19 03:46:14 UTC (rev 291521)
@@ -2699,6 +2699,10 @@
{
RegExp* regExp = jsCast<RegExp*>(node->cellOperand2()->value());
+ auto jitCodeBlock = regExp->getRegExpJITCodeBlock();
+ ASSERT(jitCodeBlock);
+ auto inlineCodeStats8Bit = jitCodeBlock->get8BitInlineStats();
+
ASSERT(!regExp->globalOrSticky());
SpeculateCellOperand globalObject(this, node->child1());
@@ -2709,8 +2713,7 @@
GPRTemporary strLength(this);
GPRTemporary output(this);
GPRTemporary temp0(this);
- GPRTemporary temp1(this);
- std::optional<GPRTemporary> temp2;
+ std::optional<GPRTemporary> temp1;
GPRReg globalObjectGPR = globalObject.gpr();
GPRReg baseGPR = base.gpr();
@@ -2719,19 +2722,12 @@
GPRReg outputGPR = output.gpr();
GPRReg strLengthGPR = strLength.gpr();
GPRReg temp0GPR = temp0.gpr();
- GPRReg temp1GPR = temp1.gpr();
- GPRReg temp2GPR = InvalidGPRReg;
+ GPRReg temp1GPR = InvalidGPRReg;
- auto jitCodeBlock = regExp->getRegExpJITCodeBlock();
- ASSERT(jitCodeBlock);
- auto inlineCodeStats8Bit = jitCodeBlock->get8BitInlineStats();
-
-#if !CPU(X86_64)
if (inlineCodeStats8Bit.needsTemp2()) {
- temp2.emplace(this);
- temp2GPR = temp2->gpr();
+ temp1.emplace(this);
+ temp1GPR = temp1->gpr();
}
-#endif
speculateRegExpObject(node->child2(), baseGPR);
@@ -2750,6 +2746,7 @@
m_jit.load32(MacroAssembler::Address(stringImplGPR, StringImpl::lengthMemoryOffset()), strLengthGPR);
// Clobbering input registers is OK since we already called flushRegisters.
+ // slowCases jumps are already done. So we can modify baseGPR etc.
Yarr::YarrJITRegisters yarrRegisters;
yarrRegisters.input = stringDataGPR;
yarrRegisters.index = stringImplGPR;
@@ -2756,12 +2753,9 @@
yarrRegisters.length = strLengthGPR;
yarrRegisters.output = outputGPR;
yarrRegisters.regT0 = temp0GPR;
- yarrRegisters.regT1 = temp1GPR;
-#if CPU(X86_64)
- temp2GPR = globalObjectGPR;
-#endif
+ yarrRegisters.regT1 = baseGPR;
if (inlineCodeStats8Bit.needsTemp2())
- yarrRegisters.regT2 = temp2GPR;
+ yarrRegisters.regT2 = temp1GPR;
yarrRegisters.returnRegister = temp0GPR;
yarrRegisters.returnRegister2 = stringDataGPR;
@@ -2773,13 +2767,6 @@
auto failedMatch = m_jit.branch32(MacroAssembler::LessThan, yarrRegisters.returnRegister, TrustedImm32(0));
// Saved cached result
-#if CPU(X86_64)
- if (inlineCodeStats8Bit.needsTemp2()) {
- // Since we reused globalObjectGPR for temp2, let's restore the global object.
- m_jit.move(TrustedImmPtr::weakPointer(m_graph, jsCast<JSGlobalObject*>(node->cellOperand()->value())), globalObjectGPR);
- }
-#endif
-
ptrdiff_t offset = JSGlobalObject::regExpGlobalDataOffset() + RegExpGlobalData::offsetOfCachedResult();
m_jit.storePtr(TrustedImmPtr::weakPointer(m_graph, regExp), JITCompiler::Address(globalObjectGPR, offset + RegExpCachedResult::offsetOfLastRegExp()));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes