Source/JavaScriptCore/ChangeLog

112014-07-08 Benjamin Poulain <benjamin@webkit.org>
22
 3 Use 16bits instructions for push/pop on ARMv7 when possible
 4 https://bugs.webkit.org/show_bug.cgi?id=134753
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 The patch r170839 mixed the code for push/pop pair and single push/pop.
 9 That part was reverted in r170909.
 10
 11 This patch puts the code back but specialized for single push/pop.
 12
 13 * assembler/ARMv7Assembler.h:
 14 (JSC::ARMv7Assembler::pop):
 15 (JSC::ARMv7Assembler::push):
 16 * assembler/MacroAssemblerARMv7.h:
 17 (JSC::MacroAssemblerARMv7::pop):
 18 (JSC::MacroAssemblerARMv7::push):
 19
 202014-07-08 Benjamin Poulain <benjamin@webkit.org>
 21
322 Restore the assertion changed with 170839
423
524 * assembler/ARMv7Assembler.h:

Source/JavaScriptCore/assembler/ARMv7Assembler.h

@@public:
14991499 m_formatter.twoWordOp12Reg4FourFours(OP_ROR_reg_T2, rn, FourFours(0xf, rd, 0, rm));
15001500 }
15011501
 1502 ALWAYS_INLINE void pop(RegisterID dest)
 1503 {
 1504 if (dest < ARMRegisters::r8)
 1505 m_formatter.oneWordOp7Imm9(OP_POP_T1, 1 << dest);
 1506 else {
 1507 // Load postindexed with writeback.
 1508 ldr(dest, ARMRegisters::sp, sizeof(void*), false, true);
 1509 }
 1510 }
 1511
15021512 ALWAYS_INLINE void pop(uint32_t registerList)
15031513 {
15041514 ASSERT(WTF::bitCount(registerList) > 1);

@@public:
15071517 m_formatter.twoWordOp16Imm16(OP_POP_T2, registerList);
15081518 }
15091519
 1520 ALWAYS_INLINE void push(RegisterID src)
 1521 {
 1522 if (src < ARMRegisters::r8)
 1523 m_formatter.oneWordOp7Imm9(OP_PUSH_T1, 1 << src);
 1524 else if (src == ARMRegisters::lr)
 1525 m_formatter.oneWordOp7Imm9(OP_PUSH_T1, 0x100);
 1526 else {
 1527 // Store preindexed with writeback.
 1528 str(src, ARMRegisters::sp, -sizeof(void*), true, true);
 1529 }
 1530 }
 1531
15101532 ALWAYS_INLINE void push(uint32_t registerList)
15111533 {
15121534 ASSERT(WTF::bitCount(registerList) > 1);

Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h

@@public:
11811181
11821182 void pop(RegisterID dest)
11831183 {
1184  // Load postindexed with writeback.
1185  m_assembler.ldr(dest, ARMRegisters::sp, sizeof(void*), false, true);
 1184 m_assembler.pop(dest);
11861185 }
11871186
11881187 void push(RegisterID src)
11891188 {
1190  // Store preindexed with writeback.
1191  m_assembler.str(src, ARMRegisters::sp, -sizeof(void*), true, true);
 1189 m_assembler.push(src);
11921190 }
11931191
11941192 void push(Address address)