| OLD | NEW |
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/base/adapters.h" | 5 #include "src/base/adapters.h" |
| 6 #include "src/compiler/instruction-selector-impl.h" | 6 #include "src/compiler/instruction-selector-impl.h" |
| 7 #include "src/compiler/node-matchers.h" | 7 #include "src/compiler/node-matchers.h" |
| 8 #include "src/compiler/node-properties.h" | 8 #include "src/compiler/node-properties.h" |
| 9 #include "src/ppc/frames-ppc.h" | 9 #include "src/ppc/frames-ppc.h" |
| 10 | 10 |
| (...skipping 1208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1219 PPCOperandGenerator g(this); | 1219 PPCOperandGenerator g(this); |
| 1220 Float32BinopMatcher m(node); | 1220 Float32BinopMatcher m(node); |
| 1221 if (m.left().IsMinusZero()) { | 1221 if (m.left().IsMinusZero()) { |
| 1222 Emit(kPPC_NegDouble | MiscField::encode(1), g.DefineAsRegister(node), | 1222 Emit(kPPC_NegDouble | MiscField::encode(1), g.DefineAsRegister(node), |
| 1223 g.UseRegister(m.right().node())); | 1223 g.UseRegister(m.right().node())); |
| 1224 return; | 1224 return; |
| 1225 } | 1225 } |
| 1226 VisitRRR(this, kPPC_SubDouble | MiscField::encode(1), node); | 1226 VisitRRR(this, kPPC_SubDouble | MiscField::encode(1), node); |
| 1227 } | 1227 } |
| 1228 | 1228 |
| 1229 void InstructionSelector::VisitFloat32SubPreserveNan(Node* node) { |
| 1230 PPCOperandGenerator g(this); |
| 1231 VisitRRR(this, kPPC_SubDouble | MiscField::encode(1), node); |
| 1232 } |
| 1229 | 1233 |
| 1230 void InstructionSelector::VisitFloat64Sub(Node* node) { | 1234 void InstructionSelector::VisitFloat64Sub(Node* node) { |
| 1231 // TODO(mbrandy): detect multiply-subtract | 1235 // TODO(mbrandy): detect multiply-subtract |
| 1232 PPCOperandGenerator g(this); | 1236 PPCOperandGenerator g(this); |
| 1233 Float64BinopMatcher m(node); | 1237 Float64BinopMatcher m(node); |
| 1234 if (m.left().IsMinusZero()) { | 1238 if (m.left().IsMinusZero()) { |
| 1235 if (m.right().IsFloat64RoundDown() && | 1239 if (m.right().IsFloat64RoundDown() && |
| 1236 CanCover(m.node(), m.right().node())) { | 1240 CanCover(m.node(), m.right().node())) { |
| 1237 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && | 1241 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && |
| 1238 CanCover(m.right().node(), m.right().InputAt(0))) { | 1242 CanCover(m.right().node(), m.right().InputAt(0))) { |
| 1239 Float64BinopMatcher mright0(m.right().InputAt(0)); | 1243 Float64BinopMatcher mright0(m.right().InputAt(0)); |
| 1240 if (mright0.left().IsMinusZero()) { | 1244 if (mright0.left().IsMinusZero()) { |
| 1241 // -floor(-x) = ceil(x) | 1245 // -floor(-x) = ceil(x) |
| 1242 Emit(kPPC_CeilDouble, g.DefineAsRegister(node), | 1246 Emit(kPPC_CeilDouble, g.DefineAsRegister(node), |
| 1243 g.UseRegister(mright0.right().node())); | 1247 g.UseRegister(mright0.right().node())); |
| 1244 return; | 1248 return; |
| 1245 } | 1249 } |
| 1246 } | 1250 } |
| 1247 } | 1251 } |
| 1248 Emit(kPPC_NegDouble, g.DefineAsRegister(node), | 1252 Emit(kPPC_NegDouble, g.DefineAsRegister(node), |
| 1249 g.UseRegister(m.right().node())); | 1253 g.UseRegister(m.right().node())); |
| 1250 return; | 1254 return; |
| 1251 } | 1255 } |
| 1252 VisitRRR(this, kPPC_SubDouble, node); | 1256 VisitRRR(this, kPPC_SubDouble, node); |
| 1253 } | 1257 } |
| 1254 | 1258 |
| 1259 void InstructionSelector::VisitFloat64SubPreserveNan(Node* node) { |
| 1260 VisitRRR(this, kPPC_SubDouble, node); |
| 1261 } |
| 1255 | 1262 |
| 1256 void InstructionSelector::VisitFloat32Mul(Node* node) { | 1263 void InstructionSelector::VisitFloat32Mul(Node* node) { |
| 1257 VisitRRR(this, kPPC_MulDouble | MiscField::encode(1), node); | 1264 VisitRRR(this, kPPC_MulDouble | MiscField::encode(1), node); |
| 1258 } | 1265 } |
| 1259 | 1266 |
| 1260 | 1267 |
| 1261 void InstructionSelector::VisitFloat64Mul(Node* node) { | 1268 void InstructionSelector::VisitFloat64Mul(Node* node) { |
| 1262 // TODO(mbrandy): detect negate | 1269 // TODO(mbrandy): detect negate |
| 1263 VisitRRR(this, kPPC_MulDouble, node); | 1270 VisitRRR(this, kPPC_MulDouble, node); |
| 1264 } | 1271 } |
| (...skipping 715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1980 MachineOperatorBuilder::kFloat64RoundTruncate | | 1987 MachineOperatorBuilder::kFloat64RoundTruncate | |
| 1981 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1988 MachineOperatorBuilder::kFloat64RoundTiesAway | |
| 1982 MachineOperatorBuilder::kWord32Popcnt | | 1989 MachineOperatorBuilder::kWord32Popcnt | |
| 1983 MachineOperatorBuilder::kWord64Popcnt; | 1990 MachineOperatorBuilder::kWord64Popcnt; |
| 1984 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. | 1991 // We omit kWord32ShiftIsSafe as s[rl]w use 0x3f as a mask rather than 0x1f. |
| 1985 } | 1992 } |
| 1986 | 1993 |
| 1987 } // namespace compiler | 1994 } // namespace compiler |
| 1988 } // namespace internal | 1995 } // namespace internal |
| 1989 } // namespace v8 | 1996 } // namespace v8 |
| OLD | NEW |