Title: [167599] trunk/Source/_javascript_Core
Revision
167599
Author
msab...@apple.com
Date
2014-04-21 11:10:41 -0700 (Mon, 21 Apr 2014)

Log Message

REGRESSION(r167591): ARM64 and ARM traditional builds broken
https://bugs.webkit.org/show_bug.cgi?id=131935

Reviewed by Mark Hahnenberg.

Added store8(TrustedImm32, MacroAssembler::Address) to the ARM traditional and ARM64
macro assemblers.  Added a new test for the original patch.

* assembler/MacroAssemblerARM.h:
(JSC::MacroAssemblerARM::store8):
* assembler/MacroAssemblerARM64.h:
(JSC::MacroAssemblerARM64::store8):
* tests/stress/dfg-create-arguments-inline-alloc.js: New test.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (167598 => 167599)


--- trunk/Source/_javascript_Core/ChangeLog	2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-04-21 18:10:41 UTC (rev 167599)
@@ -1,3 +1,19 @@
+2014-04-21  Michael Saboff  <msab...@apple.com>
+
+        REGRESSION(r167591): ARM64 and ARM traditional builds broken
+        https://bugs.webkit.org/show_bug.cgi?id=131935
+
+        Reviewed by Mark Hahnenberg.
+
+        Added store8(TrustedImm32, MacroAssembler::Address) to the ARM traditional and ARM64
+        macro assemblers.  Added a new test for the original patch.
+
+        * assembler/MacroAssemblerARM.h:
+        (JSC::MacroAssemblerARM::store8):
+        * assembler/MacroAssemblerARM64.h:
+        (JSC::MacroAssemblerARM64::store8):
+        * tests/stress/dfg-create-arguments-inline-alloc.js: New test.
+
 2014-04-21  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         Inline allocate Arguments objects in the DFG

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (167598 => 167599)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h	2014-04-21 18:10:41 UTC (rev 167599)
@@ -459,12 +459,23 @@
         m_assembler.baseIndexTransfer32(ARMAssembler::StoreUint8, src, address.base, address.index, static_cast<int>(address.scale), address.offset);
     }
 
+    void store8(RegisterID src, ImplicitAddress address)
+    {
+        m_assembler.dtrUp(ARMAssembler::StoreUint8, src, address.base, address.offset);
+    }
+
     void store8(RegisterID src, const void* address)
     {
         move(TrustedImmPtr(address), ARMRegisters::S0);
         m_assembler.dtrUp(ARMAssembler::StoreUint8, src, ARMRegisters::S0, 0);
     }
 
+    void store8(TrustedImm32 imm, ImplicitAddress address)
+    {
+        move(imm, ARMRegisters::S1);
+        store8(ARMRegisters::S1, address);
+    }
+
     void store8(TrustedImm32 imm, const void* address)
     {
         move(TrustedImm32(reinterpret_cast<ARMWord>(address)), ARMRegisters::S0);

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h (167598 => 167599)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h	2014-04-21 18:08:49 UTC (rev 167598)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM64.h	2014-04-21 18:10:41 UTC (rev 167599)
@@ -1093,6 +1093,15 @@
         m_assembler.strb(src, memoryTempRegister, 0);
     }
 
+    void store8(RegisterID src, ImplicitAddress address)
+    {
+        if (tryStoreWithOffset<8>(src, address.base, address.offset))
+            return;
+
+        signExtend32ToPtr(TrustedImm32(address.offset), getCachedMemoryTempRegisterIDAndInvalidate());
+        m_assembler.str<8>(src, address.base, memoryTempRegister);
+    }
+
     void store8(TrustedImm32 imm, void* address)
     {
         if (!imm.m_value) {
@@ -1104,7 +1113,17 @@
         store8(dataTempRegister, address);
     }
 
+    void store8(TrustedImm32 imm, ImplicitAddress address)
+    {
+        if (!imm.m_value) {
+            store8(ARM64Registers::zr, address);
+            return;
+        }
 
+        move(imm, getCachedDataTempRegisterIDAndInvalidate());
+        store8(dataTempRegister, address);
+    }
+
     // Floating-point operations:
 
     static bool supportsFloatingPoint() { return true; }

Added: trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js (0 => 167599)


--- trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js	                        (rev 0)
+++ trunk/Source/_javascript_Core/tests/stress/dfg-create-arguments-inline-alloc.js	2014-04-21 18:10:41 UTC (rev 167599)
@@ -0,0 +1,19 @@
+var foo = function(o) {
+    var a = Array.prototype.slice.call(arguments);
+    var sum = 0;
+    for (var i = 0; i < a.length; ++i)
+        sum += a[i].x;
+    return sum;
+};
+
+noInline(foo);
+
+var niters = 10000;
+var total = 0;
+var o = {x: 42};
+for (var i = 0; i < niters; ++i) {
+    total += foo(o, o, o);
+}
+
+if (total != 42 * 3 * niters)
+    throw new Error("Incorrect result!");
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to