| Index: src/arm/macro-assembler-arm.cc
 | 
| ===================================================================
 | 
| --- src/arm/macro-assembler-arm.cc	(revision 4723)
 | 
| +++ src/arm/macro-assembler-arm.cc	(working copy)
 | 
| @@ -354,6 +354,51 @@
 | 
|  }
 | 
|  
 | 
|  
 | 
| +void MacroAssembler::Ldrd(Register dst1, Register dst2,
 | 
| +                          const MemOperand& src, Condition cond) {
 | 
| +  ASSERT(src.rm().is(no_reg));
 | 
| +  ASSERT(!dst1.is(lr));  // r14.
 | 
| +  ASSERT_EQ(0, dst1.code() % 2);
 | 
| +  ASSERT_EQ(dst1.code() + 1, dst2.code());
 | 
| +
 | 
| +  // Generate two ldr instructions if ldrd is not available.
 | 
| +  if (CpuFeatures::IsSupported(ARMv7)) {
 | 
| +    CpuFeatures::Scope scope(ARMv7);
 | 
| +    ldrd(dst1, dst2, src, cond);
 | 
| +  } else {
 | 
| +    MemOperand src2(src);
 | 
| +    src2.set_offset(src2.offset() + 4);
 | 
| +    if (dst1.is(src.rn())) {
 | 
| +      ldr(dst2, src2, cond);
 | 
| +      ldr(dst1, src, cond);
 | 
| +    } else {
 | 
| +      ldr(dst1, src, cond);
 | 
| +      ldr(dst2, src2, cond);
 | 
| +    }
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +void MacroAssembler::Strd(Register src1, Register src2,
 | 
| +                          const MemOperand& dst, Condition cond) {
 | 
| +  ASSERT(dst.rm().is(no_reg));
 | 
| +  ASSERT(!src1.is(lr));  // r14.
 | 
| +  ASSERT_EQ(0, src1.code() % 2);
 | 
| +  ASSERT_EQ(src1.code() + 1, src2.code());
 | 
| +
 | 
| +  // Generate two str instructions if strd is not available.
 | 
| +  if (CpuFeatures::IsSupported(ARMv7)) {
 | 
| +    CpuFeatures::Scope scope(ARMv7);
 | 
| +    strd(src1, src2, dst, cond);
 | 
| +  } else {
 | 
| +    MemOperand dst2(dst);
 | 
| +    dst2.set_offset(dst2.offset() + 4);
 | 
| +    str(src1, dst, cond);
 | 
| +    str(src2, dst2, cond);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
|  void MacroAssembler::EnterFrame(StackFrame::Type type) {
 | 
|    // r0-r3: preserved
 | 
|    stm(db_w, sp, cp.bit() | fp.bit() | lr.bit());
 | 
| 
 |