Version 1.8.4
svn merge -c 42044 https://dart.googlecode.com/svn/branches/bleeding_edge 1.8
R=kasperl@google.com
Review URL: https://codereview.chromium.org//828433005
git-svn-id: http://dart.googlecode.com/svn/branches/1.8@42732 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index c6993f1..03aae79 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -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() ||
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index efe6b32..1ade094 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -1670,9 +1670,9 @@
} else if (source.IsFpuRegister() && destination.IsFpuRegister()) {
const VRegister dst = destination.fpu_reg();
const VRegister src = source.fpu_reg();
- __ fmovdd(VTMP, src);
- __ fmovdd(src, dst);
- __ fmovdd(dst, VTMP);
+ __ vmov(VTMP, src);
+ __ vmov(src, dst);
+ __ vmov(dst, VTMP);
} else if (source.IsFpuRegister() || destination.IsFpuRegister()) {
ASSERT(destination.IsDoubleStackSlot() ||
destination.IsQuadStackSlot() ||
@@ -1696,7 +1696,7 @@
} else {
__ LoadQFromOffset(VTMP, base_reg, slot_offset, PP);
__ StoreQToOffset(reg, base_reg, slot_offset, PP);
- __ fmovdd(reg, VTMP);
+ __ vmov(reg, VTMP);
}
} else if (source.IsDoubleStackSlot() && destination.IsDoubleStackSlot()) {
const intptr_t source_offset = source.ToStackSlotOffset();
diff --git a/tools/VERSION b/tools/VERSION
index 2b04169..b02fbca 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -26,6 +26,6 @@
CHANNEL stable
MAJOR 1
MINOR 8
-PATCH 3
+PATCH 4
PRERELEASE 0
PRERELEASE_PATCH 0