Chromium Code Reviews| Index: runtime/vm/intermediate_language_arm.cc |
| diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc |
| index dcd110e3926bb77706105329322c82fef1f394d6..f1d5b91b5d36447e6ee93f1005aece56ab06c386 100644 |
| --- a/runtime/vm/intermediate_language_arm.cc |
| +++ b/runtime/vm/intermediate_language_arm.cc |
| @@ -4093,6 +4093,60 @@ void Float64x2ZeroArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| } |
| +LocationSummary* Float64x2OneArgInstr::MakeLocationSummary(bool opt) const { |
| + const intptr_t kNumInputs = 2; |
| + const intptr_t kNumTemps = 0; |
| + LocationSummary* summary = |
| + new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall); |
| + summary->set_in(0, Location::RequiresFpuRegister()); |
| + summary->set_in(1, Location::RequiresFpuRegister()); |
| + summary->set_out(Location::SameAsFirstInput()); |
| + return summary; |
| +} |
| + |
| + |
| +void Float64x2OneArgInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + QRegister left = locs()->in(0).fpu_reg(); |
| + DRegister left0 = EvenDRegisterOf(left); |
| + DRegister left1 = OddDRegisterOf(left); |
| + QRegister right = locs()->in(1).fpu_reg(); |
| + DRegister right0 = EvenDRegisterOf(right); |
| + DRegister right1 = OddDRegisterOf(right); |
| + QRegister out = locs()->out().fpu_reg(); |
| + ASSERT(left == out); |
| + |
| + switch (op_kind()) { |
| + case MethodRecognizer::kFloat64x2Scale: |
| + __ vmuld(left0, left0, right0); |
| + __ vmuld(left1, left1, right0); |
| + break; |
| + case MethodRecognizer::kFloat64x2WithX: |
| + __ vmovd(left0, right0); |
| + break; |
| + case MethodRecognizer::kFloat64x2WithY: |
| + __ vmovd(left1, right0); |
| + break; |
| + case MethodRecognizer::kFloat64x2Min: |
| + __ vcmpd(left0, right0); |
| + __ vmstat(); |
| + __ vmovd(left0, right0, GT); |
|
zra
2014/03/10 22:14:08
I double checked the performance guide, and it loo
Cutch
2014/03/10 22:26:45
Done.
|
| + __ vcmpd(left1, right1); |
| + __ vmstat(); |
| + __ vmovd(left1, right1, GT); |
| + break; |
| + case MethodRecognizer::kFloat64x2Max: |
| + __ vcmpd(left0, right0); |
| + __ vmstat(); |
| + __ vmovd(left0, right0, LT); |
|
zra
2014/03/10 22:14:08
Same here.
Cutch
2014/03/10 22:26:45
Done.
|
| + __ vcmpd(left1, right1); |
| + __ vmstat(); |
| + __ vmovd(left1, right1, LT); |
| + break; |
| + default: UNREACHABLE(); |
| + } |
| +} |
| + |
| + |
| LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary( |
| bool opt) const { |
| const intptr_t kNumInputs = 4; |