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..f505c8f825ac5e00142829eeaa42adf1324139c3 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 dst, DwVfpRegister src) { |
+ if (dst.is(src)) return; // Swapping aliased registers emits nothing. |
+ |
+ DCHECK(VfpRegisterIsAvailable(dst)); |
+ DCHECK(VfpRegisterIsAvailable(src)); |
+ |
+ if (CpuFeatures::IsSupported(NEON)) { |
+ vswp(dst, src); |
+ } else { |
+ DCHECK(!dst.is(kScratchDoubleReg)); |
+ DCHECK(!src.is(kScratchDoubleReg)); |
+ vmov(kScratchDoubleReg, dst); |
+ vmov(dst, src); |
+ vmov(src, kScratchDoubleReg); |
+ } |
+} |
+ |
+void MacroAssembler::Swap(QwNeonRegister dst, QwNeonRegister src) { |
+ if (dst.is(src)) return; // Swapping aliased registers emits nothing. |
+ |
+ if (CpuFeatures::IsSupported(NEON)) { |
+ vswp(dst, src); |
+ } else { |
+ Swap(dst.low(), src.low()); |
+ Swap(dst.high(), src.high()); |
+ } |
+} |
+ |
void MacroAssembler::Mls(Register dst, Register src1, Register src2, |
Register srcA, Condition cond) { |
if (CpuFeatures::IsSupported(ARMv7)) { |