Index: dart/runtime/vm/flow_graph_compiler_arm.cc |
=================================================================== |
--- dart/runtime/vm/flow_graph_compiler_arm.cc (revision 42727) |
+++ dart/runtime/vm/flow_graph_compiler_arm.cc (working copy) |
@@ -1689,11 +1689,19 @@ |
Exchange(source.base_reg(), source.ToStackSlotOffset(), |
destination.base_reg(), destination.ToStackSlotOffset()); |
} else if (source.IsFpuRegister() && destination.IsFpuRegister()) { |
- const DRegister dst = EvenDRegisterOf(destination.fpu_reg()); |
- DRegister src = EvenDRegisterOf(source.fpu_reg()); |
- __ vmovd(DTMP, src); |
- __ vmovd(src, dst); |
- __ vmovd(dst, DTMP); |
+ if (TargetCPUFeatures::neon_supported()) { |
+ const QRegister dst = destination.fpu_reg(); |
+ const QRegister src = source.fpu_reg(); |
+ __ vmovq(QTMP, src); |
+ __ vmovq(src, dst); |
+ __ vmovq(dst, QTMP); |
+ } else { |
+ const DRegister dst = EvenDRegisterOf(destination.fpu_reg()); |
+ const DRegister src = EvenDRegisterOf(source.fpu_reg()); |
+ __ vmovd(DTMP, src); |
+ __ vmovd(src, dst); |
+ __ vmovd(dst, DTMP); |
+ } |
} else if (source.IsFpuRegister() || destination.IsFpuRegister()) { |
ASSERT(destination.IsDoubleStackSlot() || |
destination.IsQuadStackSlot() || |