Title: [114434] trunk/Source/_javascript_Core
Revision
114434
Author
fpi...@apple.com
Date
2012-04-17 14:41:17 -0700 (Tue, 17 Apr 2012)

Log Message

DFG and LLInt should not clobber the frame pointer on ARMv7
https://bugs.webkit.org/show_bug.cgi?id=84185
<rdar://problem/10767252>

Reviewed by Gavin Barraclough.
        
Changed LLInt to use a different register. Changed DFG to use one fewer
registers. We should revisit this and switch the DFG to use a different
register instead of r7, but we can do that in a subsequent step since
the performance effect is tiny.

* dfg/DFGGPRInfo.h:
(GPRInfo):
(JSC::DFG::GPRInfo::toRegister):
(JSC::DFG::GPRInfo::toIndex):
* offlineasm/armv7.rb:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (114433 => 114434)


--- trunk/Source/_javascript_Core/ChangeLog	2012-04-17 21:32:37 UTC (rev 114433)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-04-17 21:41:17 UTC (rev 114434)
@@ -1,5 +1,24 @@
 2012-04-17  Filip Pizlo  <fpi...@apple.com>
 
+        DFG and LLInt should not clobber the frame pointer on ARMv7
+        https://bugs.webkit.org/show_bug.cgi?id=84185
+        <rdar://problem/10767252>
+
+        Reviewed by Gavin Barraclough.
+        
+        Changed LLInt to use a different register. Changed DFG to use one fewer
+        registers. We should revisit this and switch the DFG to use a different
+        register instead of r7, but we can do that in a subsequent step since
+        the performance effect is tiny.
+
+        * dfg/DFGGPRInfo.h:
+        (GPRInfo):
+        (JSC::DFG::GPRInfo::toRegister):
+        (JSC::DFG::GPRInfo::toIndex):
+        * offlineasm/armv7.rb:
+
+2012-04-17  Filip Pizlo  <fpi...@apple.com>
+
         use after free in JSC::DFG::Node::op / JSC::DFG::ByteCodeParser::flushArgument
         https://bugs.webkit.org/show_bug.cgi?id=83942
         <rdar://problem/11247370>

Modified: trunk/Source/_javascript_Core/dfg/DFGGPRInfo.h (114433 => 114434)


--- trunk/Source/_javascript_Core/dfg/DFGGPRInfo.h	2012-04-17 21:32:37 UTC (rev 114433)
+++ trunk/Source/_javascript_Core/dfg/DFGGPRInfo.h	2012-04-17 21:41:17 UTC (rev 114434)
@@ -386,18 +386,17 @@
 class GPRInfo {
 public:
     typedef GPRReg RegisterType;
-    static const unsigned numberOfRegisters = 9;
+    static const unsigned numberOfRegisters = 8;
 
     // Temporary registers.
     static const GPRReg regT0 = ARMRegisters::r0;
     static const GPRReg regT1 = ARMRegisters::r1;
     static const GPRReg regT2 = ARMRegisters::r2;
     static const GPRReg regT3 = ARMRegisters::r4;
-    static const GPRReg regT4 = ARMRegisters::r7;
-    static const GPRReg regT5 = ARMRegisters::r8;
-    static const GPRReg regT6 = ARMRegisters::r9;
-    static const GPRReg regT7 = ARMRegisters::r10;
-    static const GPRReg regT8 = ARMRegisters::r11;
+    static const GPRReg regT4 = ARMRegisters::r8;
+    static const GPRReg regT5 = ARMRegisters::r9;
+    static const GPRReg regT6 = ARMRegisters::r10;
+    static const GPRReg regT7 = ARMRegisters::r11;
     // These registers match the baseline JIT.
     static const GPRReg cachedResultRegister = regT0;
     static const GPRReg cachedResultRegister2 = regT1;
@@ -418,7 +417,7 @@
     static GPRReg toRegister(unsigned index)
     {
         ASSERT(index < numberOfRegisters);
-        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7, regT8 };
+        static const GPRReg registerForIndex[numberOfRegisters] = { regT0, regT1, regT2, regT3, regT4, regT5, regT6, regT7 };
         return registerForIndex[index];
     }
 
@@ -426,7 +425,7 @@
     {
         ASSERT(reg != InvalidGPRReg);
         ASSERT(reg < 16);
-        static const unsigned indexForRegister[16] = { 0, 1, 2, InvalidIndex, 3, InvalidIndex, InvalidIndex, 4, 5, 6, 7, 8, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex };
+        static const unsigned indexForRegister[16] = { 0, 1, 2, InvalidIndex, 3, InvalidIndex, InvalidIndex, InvalidIndex, 4, 5, 6, 7, InvalidIndex, InvalidIndex, InvalidIndex, InvalidIndex };
         unsigned result = indexForRegister[reg];
         ASSERT(result != InvalidIndex);
         return result;

Modified: trunk/Source/_javascript_Core/offlineasm/armv7.rb (114433 => 114434)


--- trunk/Source/_javascript_Core/offlineasm/armv7.rb	2012-04-17 21:32:37 UTC (rev 114433)
+++ trunk/Source/_javascript_Core/offlineasm/armv7.rb	2012-04-17 21:41:17 UTC (rev 114434)
@@ -70,7 +70,7 @@
         when "t3"
             "r4"
         when "t4"
-            "r7"
+            "r10"
         when "cfr"
             "r5"
         when "lr"
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to