| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 5f6e86bb28c0933b618153a726b70562ff0daf2c..937f5b086b41029a1e4c70130ae3953cca3d1fe8 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -8330,13 +8330,8 @@
|
| if (!FLAG_fast_math) break;
|
| // Fall through if FLAG_fast_math.
|
| case kMathRound:
|
| + case kMathFround:
|
| case kMathFloor:
|
| - // If round has seen minus zero, don't inline, since that assumes
|
| - // returned value is an integer, which -0 definitely is not.
|
| - if (expr->ShouldHandleMinusZeroResult()) {
|
| - break;
|
| - }
|
| - case kMathFround:
|
| case kMathAbs:
|
| case kMathSqrt:
|
| case kMathLog:
|
| @@ -8346,28 +8341,6 @@
|
| Drop(2); // Receiver and function.
|
| HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id);
|
| ast_context()->ReturnInstruction(op, expr->id());
|
| - return true;
|
| - }
|
| - break;
|
| - case kMathCeil:
|
| - // If round/floor has seen minus zero, don't inline, since that assumes
|
| - // returned value is an integer, which -0 definitely is not.
|
| - if (expr->ShouldHandleMinusZeroResult()) {
|
| - break;
|
| - }
|
| - if (expr->arguments()->length() == 1) {
|
| - HValue* argument = Pop();
|
| - Drop(2); // Receiver and function.
|
| - HValue* op = NULL;
|
| - {
|
| - NoObservableSideEffectsScope s(this);
|
| - HValue* neg_arg =
|
| - AddUncasted<HMul>(graph()->GetConstantMinus1(), argument);
|
| - op = AddUncasted<HUnaryMathOperation>(neg_arg, kMathFloor);
|
| - }
|
| - HInstruction* neg_op =
|
| - NewUncasted<HMul>(graph()->GetConstantMinus1(), op);
|
| - ast_context()->ReturnInstruction(neg_op, expr->id());
|
| return true;
|
| }
|
| break;
|
| @@ -8464,13 +8437,8 @@
|
| if (!FLAG_fast_math) break;
|
| // Fall through if FLAG_fast_math.
|
| case kMathRound:
|
| + case kMathFround:
|
| case kMathFloor:
|
| - // If round/floor has seen minus zero, don't inline, since that assumes
|
| - // returned value is an integer, which -0 definitely is not.
|
| - if (expr->ShouldHandleMinusZeroResult()) {
|
| - break;
|
| - }
|
| - case kMathFround:
|
| case kMathAbs:
|
| case kMathSqrt:
|
| case kMathLog:
|
| @@ -8480,28 +8448,6 @@
|
| Drop(2); // Receiver and function.
|
| HInstruction* op = NewUncasted<HUnaryMathOperation>(argument, id);
|
| ast_context()->ReturnInstruction(op, expr->id());
|
| - return true;
|
| - }
|
| - break;
|
| - case kMathCeil:
|
| - // If round/floor has seen minus zero, don't inline, since that assumes
|
| - // returned value is an integer, which -0 definitely is not.
|
| - if (expr->ShouldHandleMinusZeroResult()) {
|
| - break;
|
| - }
|
| - if (argument_count == 2) {
|
| - HValue* argument = Pop();
|
| - Drop(2); // Receiver and function.
|
| - HValue* op = NULL;
|
| - {
|
| - NoObservableSideEffectsScope s(this);
|
| - HValue* neg_arg =
|
| - AddUncasted<HMul>(graph()->GetConstantMinus1(), argument);
|
| - op = AddUncasted<HUnaryMathOperation>(neg_arg, kMathFloor);
|
| - }
|
| - HInstruction* neg_op =
|
| - NewUncasted<HMul>(graph()->GetConstantMinus1(), op);
|
| - ast_context()->ReturnInstruction(neg_op, expr->id());
|
| return true;
|
| }
|
| break;
|
| @@ -12240,6 +12186,15 @@
|
| }
|
|
|
|
|
| +void HOptimizedGraphBuilder::GenerateMathFloor(CallRuntime* call) {
|
| + DCHECK(call->arguments()->length() == 1);
|
| + CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
| + HValue* value = Pop();
|
| + HInstruction* result = NewUncasted<HUnaryMathOperation>(value, kMathFloor);
|
| + return ast_context()->ReturnInstruction(result, call->id());
|
| +}
|
| +
|
| +
|
| void HOptimizedGraphBuilder::GenerateMathLogRT(CallRuntime* call) {
|
| DCHECK(call->arguments()->length() == 1);
|
| CHECK_ALIVE(VisitForValue(call->arguments()->at(0)));
|
|
|