| Index: runtime/vm/intermediate_language_x64.cc
|
| diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
|
| index 0027008c8b7fef19e3e32e5562ca7613d6115a88..b524282db17e56999b4da1fb6f5068f57176076c 100644
|
| --- a/runtime/vm/intermediate_language_x64.cc
|
| +++ b/runtime/vm/intermediate_language_x64.cc
|
| @@ -2341,11 +2341,23 @@ LocationSummary* DoubleToDoubleInstr::MakeLocationSummary() const {
|
| void DoubleToDoubleInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
|
| XmmRegister value = locs()->in(0).fpu_reg();
|
| XmmRegister result = locs()->out().fpu_reg();
|
| - if (recognized_kind() == MethodRecognizer::kDoubleTruncate) {
|
| - __ roundsd(result, value, Assembler::kRoundToZero);
|
| - } else {
|
| - XmmRegister temp = locs()->temp(0).fpu_reg();
|
| - __ DoubleRound(result, value, temp);
|
| + switch (recognized_kind()) {
|
| + case MethodRecognizer::kDoubleTruncate:
|
| + __ roundsd(result, value, Assembler::kRoundToZero);
|
| + break;
|
| + case MethodRecognizer::kDoubleFloor:
|
| + __ roundsd(result, value, Assembler::kRoundDown);
|
| + break;
|
| + case MethodRecognizer::kDoubleCeil:
|
| + __ roundsd(result, value, Assembler::kRoundUp);
|
| + break;
|
| + case MethodRecognizer::kDoubleRound: {
|
| + XmmRegister temp = locs()->temp(0).fpu_reg();
|
| + __ DoubleRound(result, value, temp);
|
| + break;
|
| + }
|
| + default:
|
| + UNREACHABLE();
|
| }
|
| }
|
|
|
|
|