Index: runtime/vm/intermediate_language_arm.cc |
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc |
index 3efa8ceaa69b96ec09c8e3742ae000ba184d4aa8..3f18326a4b6908f915dfcbd03e959280560e1aa9 100644 |
--- a/runtime/vm/intermediate_language_arm.cc |
+++ b/runtime/vm/intermediate_language_arm.cc |
@@ -1666,7 +1666,8 @@ void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
compiler->AddSlowPathCode(slow_path); |
__ TryAllocate(compiler->double_class(), |
slow_path->entry_label(), |
- temp); |
+ temp, |
+ temp2); |
__ Bind(slow_path->exit_label()); |
__ MoveRegister(temp2, temp); |
__ StoreIntoObject(instance_reg, |
@@ -1713,7 +1714,8 @@ void StoreInstanceFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ TryAllocate(compiler->double_class(), |
slow_path->entry_label(), |
- temp); |
+ temp, |
+ temp2); |
__ Bind(slow_path->exit_label()); |
__ MoveRegister(temp2, temp); |
__ StoreIntoObject(instance_reg, |
@@ -1963,7 +1965,8 @@ void LoadFieldInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ TryAllocate(compiler->double_class(), |
slow_path->entry_label(), |
- result_reg); |
+ result_reg, |
+ temp); |
__ Bind(slow_path->exit_label()); |
__ ldr(temp, FieldAddress(instance_reg, offset_in_bytes())); |
__ LoadDFromOffset(value, temp, Double::value_offset() - kHeapObjectTag); |
@@ -2779,12 +2782,13 @@ void CheckEitherNonSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
LocationSummary* BoxDoubleInstr::MakeLocationSummary(bool opt) const { |
const intptr_t kNumInputs = 1; |
- const intptr_t kNumTemps = 0; |
+ const intptr_t kNumTemps = 1; |
LocationSummary* summary = |
new LocationSummary(kNumInputs, |
kNumTemps, |
LocationSummary::kCallOnSlowPath); |
summary->set_in(0, Location::RequiresFpuRegister()); |
+ summary->set_temp(0, Location::RequiresRegister()); |
summary->set_out(Location::RequiresRegister()); |
return summary; |
} |
@@ -2799,7 +2803,8 @@ void BoxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ TryAllocate(compiler->double_class(), |
slow_path->entry_label(), |
- out_reg); |
+ out_reg, |
+ locs()->temp(0).reg()); |
__ Bind(slow_path->exit_label()); |
__ StoreDToOffset(value, out_reg, Double::value_offset() - kHeapObjectTag); |
} |
@@ -2855,12 +2860,13 @@ void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
LocationSummary* BoxFloat32x4Instr::MakeLocationSummary(bool opt) const { |
const intptr_t kNumInputs = 1; |
- const intptr_t kNumTemps = 0; |
+ const intptr_t kNumTemps = 1; |
LocationSummary* summary = |
new LocationSummary(kNumInputs, |
kNumTemps, |
LocationSummary::kCallOnSlowPath); |
summary->set_in(0, Location::RequiresFpuRegister()); |
+ summary->set_temp(0, Location::RequiresRegister()); |
summary->set_out(Location::RequiresRegister()); |
return summary; |
} |
@@ -2909,7 +2915,8 @@ void BoxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ TryAllocate(compiler->float32x4_class(), |
slow_path->entry_label(), |
- out_reg); |
+ out_reg, |
+ locs()->temp(0).reg()); |
__ Bind(slow_path->exit_label()); |
__ StoreDToOffset(value_even, out_reg, |
@@ -2960,12 +2967,13 @@ void UnboxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
LocationSummary* BoxInt32x4Instr::MakeLocationSummary(bool opt) const { |
const intptr_t kNumInputs = 1; |
- const intptr_t kNumTemps = 0; |
+ const intptr_t kNumTemps = 1; |
LocationSummary* summary = |
new LocationSummary(kNumInputs, |
kNumTemps, |
LocationSummary::kCallOnSlowPath); |
summary->set_in(0, Location::RequiresFpuRegister()); |
+ summary->set_temp(0, Location::RequiresRegister()); |
summary->set_out(Location::RequiresRegister()); |
return summary; |
} |
@@ -3014,7 +3022,8 @@ void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
__ TryAllocate(compiler->int32x4_class(), |
slow_path->entry_label(), |
- out_reg); |
+ out_reg, |
+ locs()->temp(0).reg()); |
__ Bind(slow_path->exit_label()); |
__ StoreDToOffset(value_even, out_reg, |
Int32x4::value_offset() - kHeapObjectTag); |