| Index: runtime/vm/intermediate_language_ia32.cc
|
| diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
|
| index fe7603e1b27525480b1856c9ec1d89618a77e32f..42cfb9ec8657c764e1df58e81071f2647c6e8e11 100644
|
| --- a/runtime/vm/intermediate_language_ia32.cc
|
| +++ b/runtime/vm/intermediate_language_ia32.cc
|
| @@ -2451,11 +2451,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();
|
| }
|
| }
|
|
|
|
|