Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. | 5 #include "vm/globals.h" // Needed here to get TARGET_ARCH_ARM. |
| 6 #if defined(TARGET_ARCH_ARM) | 6 #if defined(TARGET_ARCH_ARM) |
| 7 | 7 |
| 8 #include "vm/flow_graph_compiler.h" | 8 #include "vm/flow_graph_compiler.h" |
| 9 | 9 |
| 10 #include "vm/ast_printer.h" | 10 #include "vm/ast_printer.h" |
| (...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1683 } else if (source.IsRegister() && destination.IsStackSlot()) { | 1683 } else if (source.IsRegister() && destination.IsStackSlot()) { |
| 1684 Exchange(source.reg(), | 1684 Exchange(source.reg(), |
| 1685 destination.base_reg(), destination.ToStackSlotOffset()); | 1685 destination.base_reg(), destination.ToStackSlotOffset()); |
| 1686 } else if (source.IsStackSlot() && destination.IsRegister()) { | 1686 } else if (source.IsStackSlot() && destination.IsRegister()) { |
| 1687 Exchange(destination.reg(), | 1687 Exchange(destination.reg(), |
| 1688 source.base_reg(), source.ToStackSlotOffset()); | 1688 source.base_reg(), source.ToStackSlotOffset()); |
| 1689 } else if (source.IsStackSlot() && destination.IsStackSlot()) { | 1689 } else if (source.IsStackSlot() && destination.IsStackSlot()) { |
| 1690 Exchange(source.base_reg(), source.ToStackSlotOffset(), | 1690 Exchange(source.base_reg(), source.ToStackSlotOffset(), |
| 1691 destination.base_reg(), destination.ToStackSlotOffset()); | 1691 destination.base_reg(), destination.ToStackSlotOffset()); |
| 1692 } else if (source.IsFpuRegister() && destination.IsFpuRegister()) { | 1692 } else if (source.IsFpuRegister() && destination.IsFpuRegister()) { |
| 1693 const DRegister dst = EvenDRegisterOf(destination.fpu_reg()); | 1693 if (TargetCPUFeatures::neon_supported()) { |
| 1694 DRegister src = EvenDRegisterOf(source.fpu_reg()); | 1694 QRegister dst = destination.fpu_reg(); |
|
zerny-google
2014/12/01 15:23:02
Nit: should we keep const here and below?
Florian Schneider
2014/12/01 15:24:40
Done.
| |
| 1695 __ vmovd(DTMP, src); | 1695 QRegister src = source.fpu_reg(); |
| 1696 __ vmovd(src, dst); | 1696 __ vmovq(QTMP, src); |
| 1697 __ vmovd(dst, DTMP); | 1697 __ vmovq(src, dst); |
| 1698 __ vmovq(dst, QTMP); | |
| 1699 } else { | |
| 1700 DRegister dst = EvenDRegisterOf(destination.fpu_reg()); | |
| 1701 DRegister src = EvenDRegisterOf(source.fpu_reg()); | |
| 1702 __ vmovd(DTMP, src); | |
| 1703 __ vmovd(src, dst); | |
| 1704 __ vmovd(dst, DTMP); | |
| 1705 } | |
| 1698 } else if (source.IsFpuRegister() || destination.IsFpuRegister()) { | 1706 } else if (source.IsFpuRegister() || destination.IsFpuRegister()) { |
| 1699 ASSERT(destination.IsDoubleStackSlot() || | 1707 ASSERT(destination.IsDoubleStackSlot() || |
| 1700 destination.IsQuadStackSlot() || | 1708 destination.IsQuadStackSlot() || |
| 1701 source.IsDoubleStackSlot() || | 1709 source.IsDoubleStackSlot() || |
| 1702 source.IsQuadStackSlot()); | 1710 source.IsQuadStackSlot()); |
| 1703 bool double_width = destination.IsDoubleStackSlot() || | 1711 bool double_width = destination.IsDoubleStackSlot() || |
| 1704 source.IsDoubleStackSlot(); | 1712 source.IsDoubleStackSlot(); |
| 1705 QRegister qreg = source.IsFpuRegister() ? source.fpu_reg() | 1713 QRegister qreg = source.IsFpuRegister() ? source.fpu_reg() |
| 1706 : destination.fpu_reg(); | 1714 : destination.fpu_reg(); |
| 1707 DRegister reg = EvenDRegisterOf(qreg); | 1715 DRegister reg = EvenDRegisterOf(qreg); |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1832 DRegister dreg = EvenDRegisterOf(reg); | 1840 DRegister dreg = EvenDRegisterOf(reg); |
| 1833 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); | 1841 __ vldrd(dreg, Address(SP, kDoubleSize, Address::PostIndex)); |
| 1834 } | 1842 } |
| 1835 | 1843 |
| 1836 | 1844 |
| 1837 #undef __ | 1845 #undef __ |
| 1838 | 1846 |
| 1839 } // namespace dart | 1847 } // namespace dart |
| 1840 | 1848 |
| 1841 #endif // defined TARGET_ARCH_ARM | 1849 #endif // defined TARGET_ARCH_ARM |
| OLD | NEW |