| Index: runtime/vm/flow_graph_compiler_arm.cc
|
| ===================================================================
|
| --- runtime/vm/flow_graph_compiler_arm.cc (revision 36258)
|
| +++ runtime/vm/flow_graph_compiler_arm.cc (working copy)
|
| @@ -24,6 +24,7 @@
|
|
|
| DEFINE_FLAG(bool, trap_on_deoptimization, false, "Trap on deoptimization.");
|
| DEFINE_FLAG(bool, unbox_mints, true, "Optimize 64-bit integer arithmetic.");
|
| +DEFINE_FLAG(bool, unbox_doubles, true, "Optimize double arithmetic.");
|
| DECLARE_FLAG(int, optimization_counter_threshold);
|
| DECLARE_FLAG(int, reoptimization_counter_threshold);
|
| DECLARE_FLAG(bool, enable_type_checks);
|
| @@ -40,6 +41,11 @@
|
| }
|
|
|
|
|
| +bool FlowGraphCompiler::SupportsUnboxedDoubles() {
|
| + return TargetCPUFeatures::vfp_supported() && FLAG_unbox_doubles;
|
| +}
|
| +
|
| +
|
| bool FlowGraphCompiler::SupportsUnboxedMints() {
|
| return TargetCPUFeatures::neon_supported() && FLAG_unbox_mints;
|
| }
|
| @@ -1596,7 +1602,14 @@
|
| }
|
| } else if (source.IsFpuRegister()) {
|
| if (destination.IsFpuRegister()) {
|
| - __ vmovq(destination.fpu_reg(), source.fpu_reg());
|
| + if (TargetCPUFeatures::neon_supported()) {
|
| + __ vmovq(destination.fpu_reg(), source.fpu_reg());
|
| + } else {
|
| + // If we're not inlining simd values, then only the even numbered D
|
| + // register will have anything in them.
|
| + __ vmovd(EvenDRegisterOf(destination.fpu_reg()),
|
| + EvenDRegisterOf(source.fpu_reg()));
|
| + }
|
| } else {
|
| if (destination.IsDoubleStackSlot()) {
|
| const intptr_t dest_offset = destination.ToStackSlotOffset();
|
|
|