| Index: src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| diff --git a/src/crankshaft/mips64/lithium-codegen-mips64.cc b/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| index ab73d1072c97d6801850bf20458bac5a2f21196e..ba3b62d649c78bd1887672152feb0c68a28e713c 100644
|
| --- a/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| +++ b/src/crankshaft/mips64/lithium-codegen-mips64.cc
|
| @@ -1906,8 +1906,14 @@ void LCodeGen::DoMathMinMax(LMathMinMax* instr) {
|
| __ BranchF(&return_left, NULL, ne, left_reg, kDoubleRegZero);
|
| // At this point, both left and right are either 0 or -0.
|
| if (operation == HMathMinMax::kMathMin) {
|
| + // The algorithm is: -((-L) + (-R)), which in case of L and R being
|
| + // different registers is most efficiently expressed as -((-L) - R).
|
| __ neg_d(left_reg, left_reg);
|
| - __ sub_d(result_reg, left_reg, right_reg);
|
| + if (left_reg.is(right_reg)) {
|
| + __ add_d(result_reg, left_reg, right_reg);
|
| + } else {
|
| + __ sub_d(result_reg, left_reg, right_reg);
|
| + }
|
| __ neg_d(result_reg, result_reg);
|
| } else {
|
| __ add_d(result_reg, left_reg, right_reg);
|
|
|