| 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 | 9 |
| 10 namespace v8 { | 10 namespace v8 { |
| (...skipping 1422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1433 Node* const node = value->InputAt(0); | 1433 Node* const node = value->InputAt(0); |
| 1434 Node* const result = NodeProperties::FindProjection(node, 0); | 1434 Node* const result = NodeProperties::FindProjection(node, 0); |
| 1435 if (result == nullptr || selector->IsDefined(result)) { | 1435 if (result == nullptr || selector->IsDefined(result)) { |
| 1436 switch (node->opcode()) { | 1436 switch (node->opcode()) { |
| 1437 case IrOpcode::kInt32AddWithOverflow: | 1437 case IrOpcode::kInt32AddWithOverflow: |
| 1438 cont->OverwriteAndNegateIfEqual(kOverflow); | 1438 cont->OverwriteAndNegateIfEqual(kOverflow); |
| 1439 return VisitBinop(selector, node, kX87Add, cont); | 1439 return VisitBinop(selector, node, kX87Add, cont); |
| 1440 case IrOpcode::kInt32SubWithOverflow: | 1440 case IrOpcode::kInt32SubWithOverflow: |
| 1441 cont->OverwriteAndNegateIfEqual(kOverflow); | 1441 cont->OverwriteAndNegateIfEqual(kOverflow); |
| 1442 return VisitBinop(selector, node, kX87Sub, cont); | 1442 return VisitBinop(selector, node, kX87Sub, cont); |
| 1443 case IrOpcode::kInt32MulWithOverflow: |
| 1444 cont->OverwriteAndNegateIfEqual(kOverflow); |
| 1445 return VisitBinop(selector, node, kX87Imul, cont); |
| 1443 default: | 1446 default: |
| 1444 break; | 1447 break; |
| 1445 } | 1448 } |
| 1446 } | 1449 } |
| 1447 } | 1450 } |
| 1448 break; | 1451 break; |
| 1449 case IrOpcode::kInt32Sub: | 1452 case IrOpcode::kInt32Sub: |
| 1450 return VisitWordCompare(selector, value, cont); | 1453 return VisitWordCompare(selector, value, cont); |
| 1451 case IrOpcode::kWord32And: | 1454 case IrOpcode::kWord32And: |
| 1452 return VisitWordCompare(selector, value, kX87Test, cont); | 1455 return VisitWordCompare(selector, value, kX87Test, cont); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1558 | 1561 |
| 1559 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { | 1562 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { |
| 1560 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { | 1563 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1561 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); | 1564 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1562 return VisitBinop(this, node, kX87Sub, &cont); | 1565 return VisitBinop(this, node, kX87Sub, &cont); |
| 1563 } | 1566 } |
| 1564 FlagsContinuation cont; | 1567 FlagsContinuation cont; |
| 1565 VisitBinop(this, node, kX87Sub, &cont); | 1568 VisitBinop(this, node, kX87Sub, &cont); |
| 1566 } | 1569 } |
| 1567 | 1570 |
| 1571 void InstructionSelector::VisitInt32MulWithOverflow(Node* node) { |
| 1572 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1573 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1574 return VisitBinop(this, node, kX87Imul, &cont); |
| 1575 } |
| 1576 FlagsContinuation cont; |
| 1577 VisitBinop(this, node, kX87Imul, &cont); |
| 1578 } |
| 1568 | 1579 |
| 1569 void InstructionSelector::VisitFloat32Equal(Node* node) { | 1580 void InstructionSelector::VisitFloat32Equal(Node* node) { |
| 1570 FlagsContinuation cont = FlagsContinuation::ForSet(kUnorderedEqual, node); | 1581 FlagsContinuation cont = FlagsContinuation::ForSet(kUnorderedEqual, node); |
| 1571 VisitFloat32Compare(this, node, &cont); | 1582 VisitFloat32Compare(this, node, &cont); |
| 1572 } | 1583 } |
| 1573 | 1584 |
| 1574 | 1585 |
| 1575 void InstructionSelector::VisitFloat32LessThan(Node* node) { | 1586 void InstructionSelector::VisitFloat32LessThan(Node* node) { |
| 1576 FlagsContinuation cont = | 1587 FlagsContinuation cont = |
| 1577 FlagsContinuation::ForSet(kUnsignedGreaterThan, node); | 1588 FlagsContinuation::ForSet(kUnsignedGreaterThan, node); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1717 // static | 1728 // static |
| 1718 MachineOperatorBuilder::AlignmentRequirements | 1729 MachineOperatorBuilder::AlignmentRequirements |
| 1719 InstructionSelector::AlignmentRequirements() { | 1730 InstructionSelector::AlignmentRequirements() { |
| 1720 return MachineOperatorBuilder::AlignmentRequirements:: | 1731 return MachineOperatorBuilder::AlignmentRequirements:: |
| 1721 FullUnalignedAccessSupport(); | 1732 FullUnalignedAccessSupport(); |
| 1722 } | 1733 } |
| 1723 | 1734 |
| 1724 } // namespace compiler | 1735 } // namespace compiler |
| 1725 } // namespace internal | 1736 } // namespace internal |
| 1726 } // namespace v8 | 1737 } // namespace v8 |
| OLD | NEW |