Chromium Code Reviews| Index: runtime/vm/intermediate_language_x64.cc |
| =================================================================== |
| --- runtime/vm/intermediate_language_x64.cc (revision 25800) |
| +++ runtime/vm/intermediate_language_x64.cc (working copy) |
| @@ -3724,7 +3724,7 @@ |
| } |
| -LocationSummary* MathSqrtInstr::MakeLocationSummary() const { |
| +LocationSummary* MathUnaryInstr::MakeLocationSummary() const { |
| const intptr_t kNumInputs = 1; |
| const intptr_t kNumTemps = 0; |
| LocationSummary* summary = |
| @@ -3735,8 +3735,29 @@ |
| } |
| -void MathSqrtInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| - __ sqrtsd(locs()->out().fpu_reg(), locs()->in(0).fpu_reg()); |
| +void MathUnaryInstr::EmitNativeCode(FlowGraphCompiler* compiler) { |
| + if (kind() == MethodRecognizer::kMathSqrt) { |
|
Ivan Posva
2013/08/05 23:32:16
ditto
srdjan
2013/08/06 15:43:05
Done.
|
| + __ sqrtsd(locs()->out().fpu_reg(), locs()->in(0).fpu_reg()); |
| + return; |
| + } |
| + |
| + if ((kind() == MethodRecognizer::kMathCos) || |
| + (kind() == MethodRecognizer::kMathSin)) { |
| + __ pushq(RAX); |
| + __ movsd(Address(RSP, 0), locs()->in(0).fpu_reg()); |
| + __ fldl(Address(RSP, 0)); |
| + if (kind() == MethodRecognizer::kMathSin) { |
| + __ fsin(); |
| + } else { |
| + ASSERT(kind() == MethodRecognizer::kMathCos); |
| + __ fcos(); |
| + } |
| + __ fstpl(Address(RSP, 0)); |
| + __ movsd(locs()->out().fpu_reg(), Address(RSP, 0)); |
| + __ addq(RSP, Immediate(kWordSize)); |
| + return; |
| + } |
| + UNREACHABLE(); |
| } |