| 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);
|
|
|