| Index: src/compiler/ppc/instruction-selector-ppc.cc | 
| diff --git a/src/compiler/ppc/instruction-selector-ppc.cc b/src/compiler/ppc/instruction-selector-ppc.cc | 
| index 28a1649f8fc567c54c1c4753405a08dd655e0542..cf78cdea65da1b3715b259f46f72772edeb1b816 100644 | 
| --- a/src/compiler/ppc/instruction-selector-ppc.cc | 
| +++ b/src/compiler/ppc/instruction-selector-ppc.cc | 
| @@ -909,6 +909,13 @@ void InstructionSelector::VisitFloat64Add(Node* node) { | 
|  | 
|  | 
| void InstructionSelector::VisitFloat32Sub(Node* node) { | 
| +  PPCOperandGenerator g(this); | 
| +  Float32BinopMatcher m(node); | 
| +  if (m.left().IsMinusZero()) { | 
| +    Emit(kPPC_NegDouble, g.DefineAsRegister(node), | 
| +         g.UseRegister(m.right().node())); | 
| +    return; | 
| +  } | 
| VisitRRR(this, kPPC_SubDouble, node); | 
| } | 
|  | 
| @@ -917,18 +924,23 @@ void InstructionSelector::VisitFloat64Sub(Node* node) { | 
| // TODO(mbrandy): detect multiply-subtract | 
| PPCOperandGenerator g(this); | 
| Float64BinopMatcher m(node); | 
| -  if (m.left().IsMinusZero() && m.right().IsFloat64RoundDown() && | 
| -      CanCover(m.node(), m.right().node())) { | 
| -    if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && | 
| -        CanCover(m.right().node(), m.right().InputAt(0))) { | 
| -      Float64BinopMatcher mright0(m.right().InputAt(0)); | 
| -      if (mright0.left().IsMinusZero()) { | 
| -        // -floor(-x) = ceil(x) | 
| -        Emit(kPPC_CeilDouble, g.DefineAsRegister(node), | 
| -             g.UseRegister(mright0.right().node())); | 
| -        return; | 
| +  if (m.left().IsMinusZero()) { | 
| +    if (m.right().IsFloat64RoundDown() && | 
| +        CanCover(m.node(), m.right().node())) { | 
| +      if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && | 
| +          CanCover(m.right().node(), m.right().InputAt(0))) { | 
| +        Float64BinopMatcher mright0(m.right().InputAt(0)); | 
| +        if (mright0.left().IsMinusZero()) { | 
| +          // -floor(-x) = ceil(x) | 
| +          Emit(kPPC_CeilDouble, g.DefineAsRegister(node), | 
| +               g.UseRegister(mright0.right().node())); | 
| +          return; | 
| +        } | 
| } | 
| } | 
| +    Emit(kPPC_NegDouble, g.DefineAsRegister(node), | 
| +         g.UseRegister(m.right().node())); | 
| +    return; | 
| } | 
| VisitRRR(this, kPPC_SubDouble, node); | 
| } | 
|  |