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/compiler/instruction-selector-impl.h" | 5 #include "src/compiler/instruction-selector-impl.h" |
6 #include "src/compiler/node-matchers.h" | 6 #include "src/compiler/node-matchers.h" |
7 #include "src/compiler/node-properties.h" | 7 #include "src/compiler/node-properties.h" |
8 | 8 |
9 namespace v8 { | 9 namespace v8 { |
10 namespace internal { | 10 namespace internal { |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1053 | 1053 |
1054 | 1054 |
1055 void InstructionSelector::VisitFloat32Sub(Node* node) { | 1055 void InstructionSelector::VisitFloat32Sub(Node* node) { |
1056 VisitRRR(this, kArm64Float32Sub, node); | 1056 VisitRRR(this, kArm64Float32Sub, node); |
1057 } | 1057 } |
1058 | 1058 |
1059 | 1059 |
1060 void InstructionSelector::VisitFloat64Sub(Node* node) { | 1060 void InstructionSelector::VisitFloat64Sub(Node* node) { |
1061 Arm64OperandGenerator g(this); | 1061 Arm64OperandGenerator g(this); |
1062 Float64BinopMatcher m(node); | 1062 Float64BinopMatcher m(node); |
1063 if (m.left().IsMinusZero() && m.right().IsFloat64RoundDown() && | 1063 if (m.left().IsMinusZero()) { |
1064 CanCover(m.node(), m.right().node())) { | 1064 if (m.right().IsFloat64RoundDown() && |
1065 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && | 1065 CanCover(m.node(), m.right().node())) { |
1066 CanCover(m.right().node(), m.right().InputAt(0))) { | 1066 if (m.right().InputAt(0)->opcode() == IrOpcode::kFloat64Sub && |
1067 Float64BinopMatcher mright0(m.right().InputAt(0)); | 1067 CanCover(m.right().node(), m.right().InputAt(0))) { |
1068 if (mright0.left().IsMinusZero()) { | 1068 Float64BinopMatcher mright0(m.right().InputAt(0)); |
1069 Emit(kArm64Float64RoundUp, g.DefineAsRegister(node), | 1069 if (mright0.left().IsMinusZero()) { |
1070 g.UseRegister(mright0.right().node())); | 1070 Emit(kArm64Float64RoundUp, g.DefineAsRegister(node), |
1071 return; | 1071 g.UseRegister(mright0.right().node())); |
| 1072 return; |
| 1073 } |
1072 } | 1074 } |
1073 } | 1075 } |
| 1076 Emit(kArm64Float64Neg, g.DefineAsRegister(node), |
| 1077 g.UseRegister(m.right().node())); |
| 1078 return; |
1074 } | 1079 } |
1075 VisitRRR(this, kArm64Float64Sub, node); | 1080 VisitRRR(this, kArm64Float64Sub, node); |
1076 } | 1081 } |
1077 | 1082 |
1078 | 1083 |
1079 void InstructionSelector::VisitFloat32Mul(Node* node) { | 1084 void InstructionSelector::VisitFloat32Mul(Node* node) { |
1080 VisitRRR(this, kArm64Float32Mul, node); | 1085 VisitRRR(this, kArm64Float32Mul, node); |
1081 } | 1086 } |
1082 | 1087 |
1083 | 1088 |
(...skipping 632 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1716 MachineOperatorBuilder::kFloat64RoundTruncate | | 1721 MachineOperatorBuilder::kFloat64RoundTruncate | |
1717 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1722 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1718 MachineOperatorBuilder::kWord32ShiftIsSafe | | 1723 MachineOperatorBuilder::kWord32ShiftIsSafe | |
1719 MachineOperatorBuilder::kInt32DivIsSafe | | 1724 MachineOperatorBuilder::kInt32DivIsSafe | |
1720 MachineOperatorBuilder::kUint32DivIsSafe; | 1725 MachineOperatorBuilder::kUint32DivIsSafe; |
1721 } | 1726 } |
1722 | 1727 |
1723 } // namespace compiler | 1728 } // namespace compiler |
1724 } // namespace internal | 1729 } // namespace internal |
1725 } // namespace v8 | 1730 } // namespace v8 |
OLD | NEW |