| Index: src/x64/codegen-x64.cc
|
| ===================================================================
|
| --- src/x64/codegen-x64.cc (revision 2582)
|
| +++ src/x64/codegen-x64.cc (working copy)
|
| @@ -4976,14 +4976,14 @@
|
|
|
| // Complete the operation.
|
| if (op == Token::DIV) {
|
| - // Check for negative zero result. If result is zero, and divisor
|
| - // is negative, return a floating point negative zero. The jump
|
| - // to non_zero_result is safe w.r.t. the frame.
|
| + // Check for negative zero result. If the result is zero, and the
|
| + // divisor is negative, return a floating point negative zero.
|
| Label non_zero_result;
|
| __ testl(left->reg(), left->reg());
|
| __ j(not_zero, &non_zero_result);
|
| __ testl(right->reg(), right->reg());
|
| deferred->Branch(negative);
|
| + // The frame is identical on all paths reaching this label.
|
| __ bind(&non_zero_result);
|
| // Check for the corner case of dividing the most negative smi by
|
| // -1. We cannot use the overflow flag, since it is not set by
|
| @@ -5003,15 +5003,14 @@
|
| frame_->Push("ient);
|
| } else {
|
| ASSERT(op == Token::MOD);
|
| - // Check for a negative zero result. If the result is zero, and
|
| - // the dividend is negative, return a floating point negative
|
| - // zero. The frame is unchanged between the jump to &non_zero_result
|
| - // and the target, so a Label can be used.
|
| + // Check for a negative zero result. If the result is zero, and the
|
| + // dividend is negative, return a floating point negative zero.
|
| Label non_zero_result;
|
| __ testl(rdx, rdx);
|
| __ j(not_zero, &non_zero_result);
|
| __ testl(left->reg(), left->reg());
|
| deferred->Branch(negative);
|
| + // The frame is identical on all paths reaching this label.
|
| __ bind(&non_zero_result);
|
| deferred->BindExit();
|
| left->Unuse();
|
|
|