Index: runtime/vm/intermediate_language_arm.cc |
=================================================================== |
--- runtime/vm/intermediate_language_arm.cc (revision 35712) |
+++ runtime/vm/intermediate_language_arm.cc (working copy) |
@@ -4737,8 +4737,7 @@ |
LocationSummary* MathUnaryInstr::MakeLocationSummary(bool opt) const { |
- if ((kind() == MethodRecognizer::kMathSin) || |
- (kind() == MethodRecognizer::kMathCos)) { |
+ if ((kind() == MathUnaryInstr::kSin) || (kind() == MathUnaryInstr::kCos)) { |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 0; |
LocationSummary* summary = |
@@ -4753,7 +4752,8 @@ |
#endif |
return summary; |
} |
- // Sqrt. |
+ ASSERT((kind() == MathUnaryInstr::kSqrt) || |
+ (kind() == MathUnaryInstr::kDoubleSquare)); |
const intptr_t kNumInputs = 1; |
const intptr_t kNumTemps = 0; |
LocationSummary* summary = |
@@ -4765,11 +4765,17 @@ |
void MathUnaryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
- if (kind() == MethodRecognizer::kMathSqrt) { |
+ if (kind() == MathUnaryInstr::kSqrt) { |
DRegister val = EvenDRegisterOf(locs()->in(0).fpu_reg()); |
DRegister result = EvenDRegisterOf(locs()->out(0).fpu_reg()); |
__ vsqrtd(result, val); |
+ } else if (kind() == MathUnaryInstr::kDoubleSquare) { |
+ DRegister val = EvenDRegisterOf(locs()->in(0).fpu_reg()); |
+ DRegister result = EvenDRegisterOf(locs()->out(0).fpu_reg()); |
+ __ vmuld(result, val, val); |
} else { |
+ ASSERT((kind() == MathUnaryInstr::kSin) || |
+ (kind() == MathUnaryInstr::kCos)); |
#if defined(ARM_FLOAT_ABI_HARD) |
__ CallRuntime(TargetFunction(), InputCount()); |
#else |