Title: [110751] trunk/Source/_javascript_Core
Revision
110751
Author
[email protected]
Date
2012-03-14 14:21:42 -0700 (Wed, 14 Mar 2012)

Log Message

Make ARMv7 work again
https://bugs.webkit.org/show_bug.cgi?id=81157

Reviewed by Geoffrey Garen.

We were trying to use the ARMv7 dataRegister as a scratch register in a scenario
where we the ARMv7MacroAssembler would also try to use dataRegister for its own
nefarious purposes.

* assembler/MacroAssembler.h:
(JSC::MacroAssembler::store32):
* assembler/MacroAssemblerARMv7.h:
(MacroAssemblerARMv7):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (110750 => 110751)


--- trunk/Source/_javascript_Core/ChangeLog	2012-03-14 21:20:56 UTC (rev 110750)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-03-14 21:21:42 UTC (rev 110751)
@@ -1,3 +1,19 @@
+2012-03-14  Oliver Hunt  <[email protected]>
+
+        Make ARMv7 work again
+        https://bugs.webkit.org/show_bug.cgi?id=81157
+
+        Reviewed by Geoffrey Garen.
+
+        We were trying to use the ARMv7 dataRegister as a scratch register in a scenario
+        where we the ARMv7MacroAssembler would also try to use dataRegister for its own
+        nefarious purposes.
+
+        * assembler/MacroAssembler.h:
+        (JSC::MacroAssembler::store32):
+        * assembler/MacroAssemblerARMv7.h:
+        (MacroAssemblerARMv7):
+
 2012-03-14  Mark Hahnenberg  <[email protected]>
 
         Heap::destroy leaks CopiedSpace

Modified: trunk/Source/_javascript_Core/assembler/MacroAssembler.h (110750 => 110751)


--- trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2012-03-14 21:20:56 UTC (rev 110750)
+++ trunk/Source/_javascript_Core/assembler/MacroAssembler.h	2012-03-14 21:21:42 UTC (rev 110751)
@@ -828,9 +828,17 @@
             store32(blind.value1, dest);
             xor32(blind.value2, dest);
 #else
-            RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding();
-            loadXorBlindedConstant(xorBlindConstant(imm), scratchRegister);
-            store32(scratchRegister, dest);
+            if (RegisterID scratchRegister = (RegisterID)scratchRegisterForBlinding()) {
+                loadXorBlindedConstant(xorBlindConstant(imm), scratchRegister);
+                store32(scratchRegister, dest);
+            } else {
+                // If we don't have a scratch register available for use, we'll just 
+                // place a random number of nops.
+                uint32_t nopCount = random() & 3;
+                while (nopCount--)
+                    nop();
+                store32(imm.asTrustedImm32(), dest);
+            }
 #endif
         } else
             store32(imm.asTrustedImm32(), dest);

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (110750 => 110751)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2012-03-14 21:20:56 UTC (rev 110750)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2012-03-14 21:21:42 UTC (rev 110751)
@@ -722,7 +722,6 @@
     }
 
 #if ENABLE(JIT_CONSTANT_BLINDING)
-    static RegisterID scratchRegisterForBlinding() { return dataTempRegister; }
     static bool shouldBlindForSpecificArch(uint32_t value)
     {
         ARMThumbImmediate immediate = ARMThumbImmediate::makeEncodedImm(value);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to