Title: [170059] trunk/Source/WebCore
- Revision
- 170059
- Author
- [email protected]
- Date
- 2014-06-17 10:49:36 -0700 (Tue, 17 Jun 2014)
Log Message
Fix css jit register usage on armv7.
https://bugs.webkit.org/show_bug.cgi?id=133952
Reviewed by Benjamin Poulain.
* cssjit/RegisterAllocator.h:
List r7 as a callee saved register, which it is.
* cssjit/SelectorCompiler.cpp:
(WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
(WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
Save r6, which is used as a temporary register and must be preserved.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (170058 => 170059)
--- trunk/Source/WebCore/ChangeLog 2014-06-17 17:49:27 UTC (rev 170058)
+++ trunk/Source/WebCore/ChangeLog 2014-06-17 17:49:36 UTC (rev 170059)
@@ -1,3 +1,17 @@
+2014-06-17 Alex Christensen <[email protected]>
+
+ Fix css jit register usage on armv7.
+ https://bugs.webkit.org/show_bug.cgi?id=133952
+
+ Reviewed by Benjamin Poulain.
+
+ * cssjit/RegisterAllocator.h:
+ List r7 as a callee saved register, which it is.
+ * cssjit/SelectorCompiler.cpp:
+ (WebCore::SelectorCompiler::SelectorCodeGenerator::generatePrologue):
+ (WebCore::SelectorCompiler::SelectorCodeGenerator::generateEpilogue):
+ Save r6, which is used as a temporary register and must be preserved.
+
2014-06-17 Miyoung Shin <[email protected]>
Use references instead of pointers to RenderBlock in enclosingBoxModelObject()
Modified: trunk/Source/WebCore/cssjit/RegisterAllocator.h (170058 => 170059)
--- trunk/Source/WebCore/cssjit/RegisterAllocator.h 2014-06-17 17:49:27 UTC (rev 170058)
+++ trunk/Source/WebCore/cssjit/RegisterAllocator.h 2014-06-17 17:49:36 UTC (rev 170059)
@@ -62,13 +62,14 @@
JSC::ARMRegisters::r1,
JSC::ARMRegisters::r2,
JSC::ARMRegisters::r3,
- JSC::ARMRegisters::r7, // r7 is fp, and it's pushed in the prologue and popped in the epilogue so we can use it without saving it as long as we have a prologue.
};
static const JSC::MacroAssembler::RegisterID calleeSavedRegisters[] = {
JSC::ARMRegisters::r4,
JSC::ARMRegisters::r5,
+ JSC::ARMRegisters::r7,
};
-static const JSC::MacroAssembler::RegisterID tempRegister = JSC::ARMRegisters::r12; // ip
+// r6 is also used as addressTempRegister in the macro assembler. It is saved in the prologue and restored in the epilogue.
+static const JSC::MacroAssembler::RegisterID tempRegister = JSC::ARMRegisters::r6;
#elif CPU(X86_64)
static const JSC::MacroAssembler::RegisterID callerSavedRegisters[] = {
JSC::X86Registers::eax,
Modified: trunk/Source/WebCore/cssjit/SelectorCompiler.cpp (170058 => 170059)
--- trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2014-06-17 17:49:27 UTC (rev 170058)
+++ trunk/Source/WebCore/cssjit/SelectorCompiler.cpp 2014-06-17 17:49:36 UTC (rev 170059)
@@ -1114,7 +1114,8 @@
#elif CPU(ARM_THUMB2)
Vector<JSC::MacroAssembler::RegisterID, 2> prologueRegisters;
prologueRegisters.append(JSC::ARMRegisters::lr);
- prologueRegisters.append(JSC::ARMRegisters::fp); // fp is used as a caller saved register because we always have a prologue for now.
+ // r6 is tempRegister in RegisterAllocator.h and addressTempRegister in MacroAssemblerARMv7.h and must be preserved by the callee.
+ prologueRegisters.append(JSC::ARMRegisters::r6);
m_prologueStackReferences = m_stackAllocator.push(prologueRegisters);
return true;
#elif CPU(X86_64) && CSS_SELECTOR_JIT_DEBUGGING
@@ -1136,7 +1137,7 @@
#elif CPU(ARM_THUMB2)
Vector<JSC::MacroAssembler::RegisterID, 2> prologueRegisters;
prologueRegisters.append(JSC::ARMRegisters::lr);
- prologueRegisters.append(JSC::ARMRegisters::fp);
+ prologueRegisters.append(JSC::ARMRegisters::r6);
m_stackAllocator.pop(m_prologueStackReferences, prologueRegisters);
#elif CPU(X86_64) && CSS_SELECTOR_JIT_DEBUGGING
Vector<JSC::MacroAssembler::RegisterID, 1> prologueRegister;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes