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