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 720 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
731 void InstructionSelector::VisitWord32Ror(Node* node) { | 731 void InstructionSelector::VisitWord32Ror(Node* node) { |
732 VisitRRO(this, kArm64Ror32, node, kShift32Imm); | 732 VisitRRO(this, kArm64Ror32, node, kShift32Imm); |
733 } | 733 } |
734 | 734 |
735 | 735 |
736 void InstructionSelector::VisitWord64Ror(Node* node) { | 736 void InstructionSelector::VisitWord64Ror(Node* node) { |
737 VisitRRO(this, kArm64Ror, node, kShift64Imm); | 737 VisitRRO(this, kArm64Ror, node, kShift64Imm); |
738 } | 738 } |
739 | 739 |
740 | 740 |
| 741 void InstructionSelector::VisitWord32Clz(Node* node) { |
| 742 Arm64OperandGenerator g(this); |
| 743 Emit(kArm64Clz32, g.DefineAsRegister(node), g.UseRegister(node->InputAt(0))); |
| 744 } |
| 745 |
| 746 |
741 void InstructionSelector::VisitInt32Add(Node* node) { | 747 void InstructionSelector::VisitInt32Add(Node* node) { |
742 Arm64OperandGenerator g(this); | 748 Arm64OperandGenerator g(this); |
743 Int32BinopMatcher m(node); | 749 Int32BinopMatcher m(node); |
744 // Select Madd(x, y, z) for Add(Mul(x, y), z). | 750 // Select Madd(x, y, z) for Add(Mul(x, y), z). |
745 if (m.left().IsInt32Mul() && CanCover(node, m.left().node())) { | 751 if (m.left().IsInt32Mul() && CanCover(node, m.left().node())) { |
746 Int32BinopMatcher mleft(m.left().node()); | 752 Int32BinopMatcher mleft(m.left().node()); |
747 Emit(kArm64Madd32, g.DefineAsRegister(node), | 753 Emit(kArm64Madd32, g.DefineAsRegister(node), |
748 g.UseRegister(mleft.left().node()), | 754 g.UseRegister(mleft.left().node()), |
749 g.UseRegister(mleft.right().node()), g.UseRegister(m.right().node())); | 755 g.UseRegister(mleft.right().node()), g.UseRegister(m.right().node())); |
750 return; | 756 return; |
(...skipping 925 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1676 MachineOperatorBuilder::kFloat64RoundTruncate | | 1682 MachineOperatorBuilder::kFloat64RoundTruncate | |
1677 MachineOperatorBuilder::kFloat64RoundTiesAway | | 1683 MachineOperatorBuilder::kFloat64RoundTiesAway | |
1678 MachineOperatorBuilder::kWord32ShiftIsSafe | | 1684 MachineOperatorBuilder::kWord32ShiftIsSafe | |
1679 MachineOperatorBuilder::kInt32DivIsSafe | | 1685 MachineOperatorBuilder::kInt32DivIsSafe | |
1680 MachineOperatorBuilder::kUint32DivIsSafe; | 1686 MachineOperatorBuilder::kUint32DivIsSafe; |
1681 } | 1687 } |
1682 | 1688 |
1683 } // namespace compiler | 1689 } // namespace compiler |
1684 } // namespace internal | 1690 } // namespace internal |
1685 } // namespace v8 | 1691 } // namespace v8 |
OLD | NEW |