| Index: src/arm/macro-assembler-arm.cc | 
| diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc | 
| index c67fad8e1da67bf575bd180add34844a3f9af75f..d7dad5283357044a82731275a7788e385fbda797 100644 | 
| --- a/src/arm/macro-assembler-arm.cc | 
| +++ b/src/arm/macro-assembler-arm.cc | 
| @@ -264,6 +264,45 @@ void MacroAssembler::Move(DwVfpRegister dst, DwVfpRegister src, | 
| } | 
| } | 
|  | 
| +void MacroAssembler::Move(QwNeonRegister dst, QwNeonRegister src) { | 
| +  if (dst.is(src)) return;  // Moving aliased registers emits nothing. | 
| + | 
| +  if (CpuFeatures::IsSupported(NEON)) { | 
| +    vmov(dst, src); | 
| +  } else { | 
| +    vmov(dst.low(), src.low()); | 
| +    vmov(dst.high(), src.high()); | 
| +  } | 
| +} | 
| + | 
| +void MacroAssembler::Swap(DwVfpRegister srcdst0, DwVfpRegister srcdst1) { | 
| +  if (srcdst0.is(srcdst1)) return;  // Swapping aliased registers emits nothing. | 
| + | 
| +  DCHECK(VfpRegisterIsAvailable(srcdst0)); | 
| +  DCHECK(VfpRegisterIsAvailable(srcdst1)); | 
| + | 
| +  if (CpuFeatures::IsSupported(NEON)) { | 
| +    vswp(srcdst0, srcdst1); | 
| +  } else { | 
| +    DCHECK(!srcdst0.is(kScratchDoubleReg)); | 
| +    DCHECK(!srcdst1.is(kScratchDoubleReg)); | 
| +    vmov(kScratchDoubleReg, srcdst0); | 
| +    vmov(srcdst0, srcdst1); | 
| +    vmov(srcdst1, kScratchDoubleReg); | 
| +  } | 
| +} | 
| + | 
| +void MacroAssembler::Swap(QwNeonRegister srcdst0, QwNeonRegister srcdst1) { | 
| +  if (srcdst0.is(srcdst1)) return;  // Swapping aliased registers emits nothing. | 
| + | 
| +  if (CpuFeatures::IsSupported(NEON)) { | 
| +    vswp(srcdst0, srcdst1); | 
| +  } else { | 
| +    Swap(srcdst0.low(), srcdst1.low()); | 
| +    Swap(srcdst0.high(), srcdst1.high()); | 
| +  } | 
| +} | 
| + | 
| void MacroAssembler::Mls(Register dst, Register src1, Register src2, | 
| Register srcA, Condition cond) { | 
| if (CpuFeatures::IsSupported(ARMv7)) { | 
|  |