Title: [170950] trunk/Source/_javascript_Core
Revision
170950
Author
benja...@webkit.org
Date
2014-07-09 21:11:34 -0700 (Wed, 09 Jul 2014)

Log Message

Use 16bits instructions for push/pop on ARMv7 when possible
https://bugs.webkit.org/show_bug.cgi?id=134753

Reviewed by Geoffrey Garen.

The patch r170839 mixed the code for push/pop pair and single push/pop.
That part was reverted in r170909.

This patch puts the code back but specialized for single push/pop.

* assembler/ARMv7Assembler.h:
(JSC::ARMv7Assembler::pop):
(JSC::ARMv7Assembler::push):
* assembler/MacroAssemblerARMv7.h:
(JSC::MacroAssemblerARMv7::pop):
(JSC::MacroAssemblerARMv7::push):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (170949 => 170950)


--- trunk/Source/_javascript_Core/ChangeLog	2014-07-10 03:11:26 UTC (rev 170949)
+++ trunk/Source/_javascript_Core/ChangeLog	2014-07-10 04:11:34 UTC (rev 170950)
@@ -1,3 +1,22 @@
+2014-07-09  Benjamin Poulain  <benja...@webkit.org>
+
+        Use 16bits instructions for push/pop on ARMv7 when possible
+        https://bugs.webkit.org/show_bug.cgi?id=134753
+
+        Reviewed by Geoffrey Garen.
+
+        The patch r170839 mixed the code for push/pop pair and single push/pop.
+        That part was reverted in r170909.
+
+        This patch puts the code back but specialized for single push/pop.
+
+        * assembler/ARMv7Assembler.h:
+        (JSC::ARMv7Assembler::pop):
+        (JSC::ARMv7Assembler::push):
+        * assembler/MacroAssemblerARMv7.h:
+        (JSC::MacroAssemblerARMv7::pop):
+        (JSC::MacroAssemblerARMv7::push):
+
 2014-07-09  Brent Fulgham  <bfulg...@apple.com>
 
         [Win] Remove uses of 'bash' in build system

Modified: trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h (170949 => 170950)


--- trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h	2014-07-10 03:11:26 UTC (rev 170949)
+++ trunk/Source/_javascript_Core/assembler/ARMv7Assembler.h	2014-07-10 04:11:34 UTC (rev 170950)
@@ -1499,6 +1499,16 @@
         m_formatter.twoWordOp12Reg4FourFours(OP_ROR_reg_T2, rn, FourFours(0xf, rd, 0, rm));
     }
 
+    ALWAYS_INLINE void pop(RegisterID dest)
+    {
+        if (dest < ARMRegisters::r8)
+            m_formatter.oneWordOp7Imm9(OP_POP_T1, 1 << dest);
+        else {
+            // Load postindexed with writeback.
+            ldr(dest, ARMRegisters::sp, sizeof(void*), false, true);
+        }
+    }
+
     ALWAYS_INLINE void pop(uint32_t registerList)
     {
         ASSERT(WTF::bitCount(registerList) > 1);
@@ -1507,6 +1517,18 @@
         m_formatter.twoWordOp16Imm16(OP_POP_T2, registerList);
     }
 
+    ALWAYS_INLINE void push(RegisterID src)
+    {
+        if (src < ARMRegisters::r8)
+            m_formatter.oneWordOp7Imm9(OP_PUSH_T1, 1 << src);
+        else if (src == ARMRegisters::lr)
+            m_formatter.oneWordOp7Imm9(OP_PUSH_T1, 0x100);
+        else {
+            // Store preindexed with writeback.
+            str(src, ARMRegisters::sp, -sizeof(void*), true, true);
+        }
+    }
+
     ALWAYS_INLINE void push(uint32_t registerList)
     {
         ASSERT(WTF::bitCount(registerList) > 1);

Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h (170949 => 170950)


--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2014-07-10 03:11:26 UTC (rev 170949)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARMv7.h	2014-07-10 04:11:34 UTC (rev 170950)
@@ -1181,14 +1181,12 @@
     
     void pop(RegisterID dest)
     {
-        // Load postindexed with writeback.
-        m_assembler.ldr(dest, ARMRegisters::sp, sizeof(void*), false, true);
+        m_assembler.pop(dest);
     }
 
     void push(RegisterID src)
     {
-        // Store preindexed with writeback.
-        m_assembler.str(src, ARMRegisters::sp, -sizeof(void*), true, true);
+        m_assembler.push(src);
     }
 
     void push(Address address)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to