Modified: trunk/Source/_javascript_Core/ChangeLog (137425 => 137426)
--- trunk/Source/_javascript_Core/ChangeLog 2012-12-12 07:54:30 UTC (rev 137425)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-12-12 08:00:33 UTC (rev 137426)
@@ -1,3 +1,16 @@
+2012-12-11 Gabor Ballabas <[email protected]>
+
+ Implement add64 for ARM traditional assembler after r136601
+ https://bugs.webkit.org/show_bug.cgi?id=104103
+
+ Reviewed by Zoltan Herczeg.
+
+ Implement add64 function for ARM traditional macroassembler.
+
+ * assembler/MacroAssemblerARM.h:
+ (JSC::MacroAssemblerARM::add64):
+ (MacroAssemblerARM):
+
2012-12-11 Filip Pizlo <[email protected]>
Unreviewed. Fix build with DFG_ENABLE(DEBUG_PROPAGATION_VERBOSE).
Modified: trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h (137425 => 137426)
--- trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2012-12-12 07:54:30 UTC (rev 137425)
+++ trunk/Source/_javascript_Core/assembler/MacroAssemblerARM.h 2012-12-12 08:00:33 UTC (rev 137426)
@@ -893,6 +893,31 @@
m_assembler.dtrUp(ARMAssembler::StoreUint32, ARMRegisters::S1, ARMRegisters::S0, 0);
}
+ void add64(TrustedImm32 imm, AbsoluteAddress address)
+ {
+ ARMWord tmp;
+
+ move(TrustedImmPtr(address.m_ptr), ARMRegisters::S1);
+ m_assembler.dtrUp(ARMAssembler::LoadUint32, ARMRegisters::S0, ARMRegisters::S1, 0);
+
+ if ((tmp = ARMAssembler::getOp2(imm.m_value)) != ARMAssembler::InvalidImmediate)
+ m_assembler.adds(ARMRegisters::S0, ARMRegisters::S0, tmp);
+ else if ((tmp = ARMAssembler::getOp2(-imm.m_value)) != ARMAssembler::InvalidImmediate)
+ m_assembler.subs(ARMRegisters::S0, ARMRegisters::S0, tmp);
+ else {
+ m_assembler.adds(ARMRegisters::S0, ARMRegisters::S0, m_assembler.getImm(imm.m_value, ARMRegisters::S1));
+ move(TrustedImmPtr(address.m_ptr), ARMRegisters::S1);
+ }
+ m_assembler.dtrUp(ARMAssembler::StoreUint32, ARMRegisters::S0, ARMRegisters::S1, 0);
+
+ m_assembler.dtrUp(ARMAssembler::LoadUint32, ARMRegisters::S0, ARMRegisters::S1, sizeof(ARMWord));
+ if (imm.m_value >= 0)
+ m_assembler.adc(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::getOp2Byte(0));
+ else
+ m_assembler.sbc(ARMRegisters::S0, ARMRegisters::S0, ARMAssembler::getOp2Byte(0));
+ m_assembler.dtrUp(ARMAssembler::StoreUint32, ARMRegisters::S0, ARMRegisters::S1, sizeof(ARMWord));
+ }
+
void sub32(TrustedImm32 imm, AbsoluteAddress address)
{
m_assembler.ldrUniqueImmediate(ARMRegisters::S1, reinterpret_cast<ARMWord>(address.m_ptr));