Chromium Code Reviews| Index: runtime/vm/intermediate_language_ia32.cc |
| diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc |
| index 6daebaff042789c0c2a742d0c3b99571de451d4c..9f0fb5362384eaa3952199ce05f3e75e8fe22334 100644 |
| --- a/runtime/vm/intermediate_language_ia32.cc |
| +++ b/runtime/vm/intermediate_language_ia32.cc |
| @@ -2777,12 +2777,13 @@ void CheckEitherNonSmiInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| LocationSummary* BoxDoubleInstr::MakeLocationSummary() 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()); |
|
srdjan
2013/10/30 20:50:12
Ia32 does not have many registers available, and t
|
| summary->set_out(Location::RequiresRegister()); |
| return summary; |
| } |
| @@ -2830,7 +2831,8 @@ void BoxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ TryAllocate(compiler->double_class(), |
| slow_path->entry_label(), |
| Assembler::kFarJump, |
| - out_reg); |
| + out_reg, |
| + locs()->temp(0).reg()); |
| __ Bind(slow_path->exit_label()); |
| __ movsd(FieldAddress(out_reg, Double::value_offset()), value); |
| } |
| @@ -2884,12 +2886,13 @@ void UnboxDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| LocationSummary* BoxFloat32x4Instr::MakeLocationSummary() 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; |
| } |
| @@ -2937,7 +2940,8 @@ void BoxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ TryAllocate(compiler->float32x4_class(), |
| slow_path->entry_label(), |
| Assembler::kFarJump, |
| - out_reg); |
| + out_reg, |
| + locs()->temp(0).reg()); |
| __ Bind(slow_path->exit_label()); |
| __ movups(FieldAddress(out_reg, Float32x4::value_offset()), value); |
| } |
| @@ -2978,12 +2982,13 @@ void UnboxFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| LocationSummary* BoxUint32x4Instr::MakeLocationSummary() 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; |
| } |
| @@ -3031,7 +3036,8 @@ void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| __ TryAllocate(compiler->uint32x4_class(), |
| slow_path->entry_label(), |
| Assembler::kFarJump, |
| - out_reg); |
| + out_reg, |
| + locs()->temp(0).reg()); |
| __ Bind(slow_path->exit_label()); |
| __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value); |
| } |
| @@ -4494,7 +4500,8 @@ void BoxIntegerInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| Class::ZoneHandle(Isolate::Current()->object_store()->mint_class()), |
| slow_path->entry_label(), |
| Assembler::kFarJump, |
| - out_reg); |
| + out_reg, |
| + EDX); |
| __ Bind(slow_path->exit_label()); |
| __ movsd(FieldAddress(out_reg, Mint::value_offset()), value); |
| __ Bind(&done); |