Chromium Code Reviews| Index: runtime/vm/intermediate_language_mips.cc |
| =================================================================== |
| --- runtime/vm/intermediate_language_mips.cc (revision 26120) |
| +++ runtime/vm/intermediate_language_mips.cc (working copy) |
| @@ -3230,6 +3230,32 @@ |
| } |
| +LocationSummary* UnaryDoubleOpInstr::MakeLocationSummary() const { |
| + const intptr_t kNumInputs = 1; |
| + const intptr_t kNumTemps = 2; |
| + LocationSummary* summary = |
| + new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| + summary->set_in(0, Location::RequiresFpuRegister()); |
| + summary->set_out(Location::RequiresFpuRegister()); |
| + summary->set_temp(0, Location::RequiresRegister()); |
| + summary->set_in(2, Location::RequiresFpuRegister()); |
| + return summary; |
| +} |
| + |
| + |
| +void UnaryDoubleOpInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + Register temp = locs()->temp(0).reg(); |
| + const Double& minus_one = Double::ZoneHandle(Double::NewCanonical(-1)); |
| + __ LoadObject(temp, minus_one); |
| + FpuRegister result = locs()->out().fpu_reg(); |
| + FpuRegister value = locs()->in(0).fpu_reg(); |
| + FpuRegister temp_fp = locs()->temp(1).fpu_reg(); |
| + __ LoadDFromOffset(temp_fp, temp, Double::value_offset() - kHeapObjectTag); |
| + __ muld(result, value, temp_fp); |
|
regis
2013/08/14 22:07:47
Please add a TODO(zra) to support negd.
srdjan
2013/08/14 23:04:30
Done.
|
| +} |
| + |
| + |
| + |
| LocationSummary* SmiToDoubleInstr::MakeLocationSummary() const { |
| const intptr_t kNumInputs = 1; |
| const intptr_t kNumTemps = 0; |