| 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/base/bits.h" | 6 #include "src/base/bits.h" |
| 7 #include "src/compiler/instruction-selector-impl.h" | 7 #include "src/compiler/instruction-selector-impl.h" |
| 8 #include "src/compiler/node-matchers.h" | 8 #include "src/compiler/node-matchers.h" |
| 9 #include "src/compiler/node-properties.h" | 9 #include "src/compiler/node-properties.h" |
| 10 | 10 |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 outputs[output_count++] = g.DefineAsRegister(node); | 112 outputs[output_count++] = g.DefineAsRegister(node); |
| 113 if (cont->IsSet()) { | 113 if (cont->IsSet()) { |
| 114 outputs[output_count++] = g.DefineAsRegister(cont->result()); | 114 outputs[output_count++] = g.DefineAsRegister(cont->result()); |
| 115 } | 115 } |
| 116 | 116 |
| 117 DCHECK_NE(0u, input_count); | 117 DCHECK_NE(0u, input_count); |
| 118 DCHECK_NE(0u, output_count); | 118 DCHECK_NE(0u, output_count); |
| 119 DCHECK_GE(arraysize(inputs), input_count); | 119 DCHECK_GE(arraysize(inputs), input_count); |
| 120 DCHECK_GE(arraysize(outputs), output_count); | 120 DCHECK_GE(arraysize(outputs), output_count); |
| 121 | 121 |
| 122 selector->Emit(cont->Encode(opcode), output_count, outputs, input_count, | 122 opcode = cont->Encode(opcode); |
| 123 inputs); | 123 if (cont->IsDeoptimize()) { |
| 124 selector->EmitDeoptimize(opcode, output_count, outputs, input_count, inputs, |
| 125 cont->frame_state()); |
| 126 } else { |
| 127 selector->Emit(opcode, output_count, outputs, input_count, inputs); |
| 128 } |
| 124 } | 129 } |
| 125 | 130 |
| 126 | 131 |
| 127 static void VisitBinop(InstructionSelector* selector, Node* node, | 132 static void VisitBinop(InstructionSelector* selector, Node* node, |
| 128 InstructionCode opcode) { | 133 InstructionCode opcode) { |
| 129 FlagsContinuation cont; | 134 FlagsContinuation cont; |
| 130 VisitBinop(selector, node, opcode, &cont); | 135 VisitBinop(selector, node, opcode, &cont); |
| 131 } | 136 } |
| 132 | 137 |
| 133 | 138 |
| (...skipping 1290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1424 | 1429 |
| 1425 // Shared routine for multiple compare operations. | 1430 // Shared routine for multiple compare operations. |
| 1426 static void VisitCompare(InstructionSelector* selector, InstructionCode opcode, | 1431 static void VisitCompare(InstructionSelector* selector, InstructionCode opcode, |
| 1427 InstructionOperand left, InstructionOperand right, | 1432 InstructionOperand left, InstructionOperand right, |
| 1428 FlagsContinuation* cont) { | 1433 FlagsContinuation* cont) { |
| 1429 Mips64OperandGenerator g(selector); | 1434 Mips64OperandGenerator g(selector); |
| 1430 opcode = cont->Encode(opcode); | 1435 opcode = cont->Encode(opcode); |
| 1431 if (cont->IsBranch()) { | 1436 if (cont->IsBranch()) { |
| 1432 selector->Emit(opcode, g.NoOutput(), left, right, | 1437 selector->Emit(opcode, g.NoOutput(), left, right, |
| 1433 g.Label(cont->true_block()), g.Label(cont->false_block())); | 1438 g.Label(cont->true_block()), g.Label(cont->false_block())); |
| 1439 } else if (cont->IsDeoptimize()) { |
| 1440 selector->EmitDeoptimize(opcode, g.NoOutput(), left, right, |
| 1441 cont->frame_state()); |
| 1434 } else { | 1442 } else { |
| 1435 DCHECK(cont->IsSet()); | 1443 DCHECK(cont->IsSet()); |
| 1436 selector->Emit(opcode, g.DefineAsRegister(cont->result()), left, right); | 1444 selector->Emit(opcode, g.DefineAsRegister(cont->result()), left, right); |
| 1437 } | 1445 } |
| 1438 } | 1446 } |
| 1439 | 1447 |
| 1440 | 1448 |
| 1441 // Shared routine for multiple float32 compare operations. | 1449 // Shared routine for multiple float32 compare operations. |
| 1442 void VisitFloat32Compare(InstructionSelector* selector, Node* node, | 1450 void VisitFloat32Compare(InstructionSelector* selector, Node* node, |
| 1443 FlagsContinuation* cont) { | 1451 FlagsContinuation* cont) { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1535 FlagsContinuation* cont) { | 1543 FlagsContinuation* cont) { |
| 1536 VisitWordCompare(selector, node, kMips64Cmp, cont, false); | 1544 VisitWordCompare(selector, node, kMips64Cmp, cont, false); |
| 1537 } | 1545 } |
| 1538 | 1546 |
| 1539 | 1547 |
| 1540 void VisitWord64Compare(InstructionSelector* selector, Node* node, | 1548 void VisitWord64Compare(InstructionSelector* selector, Node* node, |
| 1541 FlagsContinuation* cont) { | 1549 FlagsContinuation* cont) { |
| 1542 VisitWordCompare(selector, node, kMips64Cmp, cont, false); | 1550 VisitWordCompare(selector, node, kMips64Cmp, cont, false); |
| 1543 } | 1551 } |
| 1544 | 1552 |
| 1545 } // namespace | |
| 1546 | 1553 |
| 1547 | 1554 |
| 1548 void EmitWordCompareZero(InstructionSelector* selector, Node* value, | 1555 void EmitWordCompareZero(InstructionSelector* selector, Node* value, |
| 1549 FlagsContinuation* cont) { | 1556 FlagsContinuation* cont) { |
| 1550 Mips64OperandGenerator g(selector); | 1557 Mips64OperandGenerator g(selector); |
| 1551 InstructionCode opcode = cont->Encode(kMips64Cmp); | 1558 InstructionCode opcode = cont->Encode(kMips64Cmp); |
| 1552 InstructionOperand const value_operand = g.UseRegister(value); | 1559 InstructionOperand const value_operand = g.UseRegister(value); |
| 1553 if (cont->IsBranch()) { | 1560 if (cont->IsBranch()) { |
| 1554 selector->Emit(opcode, g.NoOutput(), value_operand, g.TempImmediate(0), | 1561 selector->Emit(opcode, g.NoOutput(), value_operand, g.TempImmediate(0), |
| 1555 g.Label(cont->true_block()), g.Label(cont->false_block())); | 1562 g.Label(cont->true_block()), g.Label(cont->false_block())); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1670 default: | 1677 default: |
| 1671 break; | 1678 break; |
| 1672 } | 1679 } |
| 1673 break; | 1680 break; |
| 1674 } | 1681 } |
| 1675 | 1682 |
| 1676 // Continuation could not be combined with a compare, emit compare against 0. | 1683 // Continuation could not be combined with a compare, emit compare against 0. |
| 1677 EmitWordCompareZero(selector, value, cont); | 1684 EmitWordCompareZero(selector, value, cont); |
| 1678 } | 1685 } |
| 1679 | 1686 |
| 1687 } // namespace |
| 1680 | 1688 |
| 1681 void InstructionSelector::VisitBranch(Node* branch, BasicBlock* tbranch, | 1689 void InstructionSelector::VisitBranch(Node* branch, BasicBlock* tbranch, |
| 1682 BasicBlock* fbranch) { | 1690 BasicBlock* fbranch) { |
| 1683 FlagsContinuation cont(kNotEqual, tbranch, fbranch); | 1691 FlagsContinuation cont(kNotEqual, tbranch, fbranch); |
| 1684 VisitWordCompareZero(this, branch, branch->InputAt(0), &cont); | 1692 VisitWordCompareZero(this, branch, branch->InputAt(0), &cont); |
| 1685 } | 1693 } |
| 1686 | 1694 |
| 1695 void InstructionSelector::VisitDeoptimizeIf(Node* node) { |
| 1696 FlagsContinuation cont = |
| 1697 FlagsContinuation::ForDeoptimize(kNotEqual, node->InputAt(1)); |
| 1698 VisitWordCompareZero(this, node, node->InputAt(0), &cont); |
| 1699 } |
| 1700 |
| 1701 void InstructionSelector::VisitDeoptimizeUnless(Node* node) { |
| 1702 FlagsContinuation cont = |
| 1703 FlagsContinuation::ForDeoptimize(kEqual, node->InputAt(1)); |
| 1704 VisitWordCompareZero(this, node, node->InputAt(0), &cont); |
| 1705 } |
| 1687 | 1706 |
| 1688 void InstructionSelector::VisitSwitch(Node* node, const SwitchInfo& sw) { | 1707 void InstructionSelector::VisitSwitch(Node* node, const SwitchInfo& sw) { |
| 1689 Mips64OperandGenerator g(this); | 1708 Mips64OperandGenerator g(this); |
| 1690 InstructionOperand value_operand = g.UseRegister(node->InputAt(0)); | 1709 InstructionOperand value_operand = g.UseRegister(node->InputAt(0)); |
| 1691 | 1710 |
| 1692 // Emit either ArchTableSwitch or ArchLookupSwitch. | 1711 // Emit either ArchTableSwitch or ArchLookupSwitch. |
| 1693 size_t table_space_cost = 10 + 2 * sw.value_range; | 1712 size_t table_space_cost = 10 + 2 * sw.value_range; |
| 1694 size_t table_time_cost = 3; | 1713 size_t table_time_cost = 3; |
| 1695 size_t lookup_space_cost = 2 + 2 * sw.case_count; | 1714 size_t lookup_space_cost = 2 + 2 * sw.case_count; |
| 1696 size_t lookup_time_cost = sw.case_count; | 1715 size_t lookup_time_cost = sw.case_count; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 1707 // Generate a table lookup. | 1726 // Generate a table lookup. |
| 1708 return EmitTableSwitch(sw, index_operand); | 1727 return EmitTableSwitch(sw, index_operand); |
| 1709 } | 1728 } |
| 1710 | 1729 |
| 1711 // Generate a sequence of conditional jumps. | 1730 // Generate a sequence of conditional jumps. |
| 1712 return EmitLookupSwitch(sw, value_operand); | 1731 return EmitLookupSwitch(sw, value_operand); |
| 1713 } | 1732 } |
| 1714 | 1733 |
| 1715 | 1734 |
| 1716 void InstructionSelector::VisitWord32Equal(Node* const node) { | 1735 void InstructionSelector::VisitWord32Equal(Node* const node) { |
| 1717 FlagsContinuation cont(kEqual, node); | 1736 FlagsContinuation cont = FlagsContinuation::ForSet(kEqual, node); |
| 1718 Int32BinopMatcher m(node); | 1737 Int32BinopMatcher m(node); |
| 1719 if (m.right().Is(0)) { | 1738 if (m.right().Is(0)) { |
| 1720 return VisitWordCompareZero(this, m.node(), m.left().node(), &cont); | 1739 return VisitWordCompareZero(this, m.node(), m.left().node(), &cont); |
| 1721 } | 1740 } |
| 1722 | 1741 |
| 1723 VisitWord32Compare(this, node, &cont); | 1742 VisitWord32Compare(this, node, &cont); |
| 1724 } | 1743 } |
| 1725 | 1744 |
| 1726 | 1745 |
| 1727 void InstructionSelector::VisitInt32LessThan(Node* node) { | 1746 void InstructionSelector::VisitInt32LessThan(Node* node) { |
| 1728 FlagsContinuation cont(kSignedLessThan, node); | 1747 FlagsContinuation cont = FlagsContinuation::ForSet(kSignedLessThan, node); |
| 1729 VisitWord32Compare(this, node, &cont); | 1748 VisitWord32Compare(this, node, &cont); |
| 1730 } | 1749 } |
| 1731 | 1750 |
| 1732 | 1751 |
| 1733 void InstructionSelector::VisitInt32LessThanOrEqual(Node* node) { | 1752 void InstructionSelector::VisitInt32LessThanOrEqual(Node* node) { |
| 1734 FlagsContinuation cont(kSignedLessThanOrEqual, node); | 1753 FlagsContinuation cont = |
| 1754 FlagsContinuation::ForSet(kSignedLessThanOrEqual, node); |
| 1735 VisitWord32Compare(this, node, &cont); | 1755 VisitWord32Compare(this, node, &cont); |
| 1736 } | 1756 } |
| 1737 | 1757 |
| 1738 | 1758 |
| 1739 void InstructionSelector::VisitUint32LessThan(Node* node) { | 1759 void InstructionSelector::VisitUint32LessThan(Node* node) { |
| 1740 FlagsContinuation cont(kUnsignedLessThan, node); | 1760 FlagsContinuation cont = FlagsContinuation::ForSet(kUnsignedLessThan, node); |
| 1741 VisitWord32Compare(this, node, &cont); | 1761 VisitWord32Compare(this, node, &cont); |
| 1742 } | 1762 } |
| 1743 | 1763 |
| 1744 | 1764 |
| 1745 void InstructionSelector::VisitUint32LessThanOrEqual(Node* node) { | 1765 void InstructionSelector::VisitUint32LessThanOrEqual(Node* node) { |
| 1746 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); | 1766 FlagsContinuation cont = |
| 1767 FlagsContinuation::ForSet(kUnsignedLessThanOrEqual, node); |
| 1747 VisitWord32Compare(this, node, &cont); | 1768 VisitWord32Compare(this, node, &cont); |
| 1748 } | 1769 } |
| 1749 | 1770 |
| 1750 | 1771 |
| 1751 void InstructionSelector::VisitInt32AddWithOverflow(Node* node) { | 1772 void InstructionSelector::VisitInt32AddWithOverflow(Node* node) { |
| 1752 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { | 1773 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1753 FlagsContinuation cont(kOverflow, ovf); | 1774 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1754 return VisitBinop(this, node, kMips64Dadd, &cont); | 1775 return VisitBinop(this, node, kMips64Dadd, &cont); |
| 1755 } | 1776 } |
| 1756 FlagsContinuation cont; | 1777 FlagsContinuation cont; |
| 1757 VisitBinop(this, node, kMips64Dadd, &cont); | 1778 VisitBinop(this, node, kMips64Dadd, &cont); |
| 1758 } | 1779 } |
| 1759 | 1780 |
| 1760 | 1781 |
| 1761 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { | 1782 void InstructionSelector::VisitInt32SubWithOverflow(Node* node) { |
| 1762 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { | 1783 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1763 FlagsContinuation cont(kOverflow, ovf); | 1784 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1764 return VisitBinop(this, node, kMips64Dsub, &cont); | 1785 return VisitBinop(this, node, kMips64Dsub, &cont); |
| 1765 } | 1786 } |
| 1766 FlagsContinuation cont; | 1787 FlagsContinuation cont; |
| 1767 VisitBinop(this, node, kMips64Dsub, &cont); | 1788 VisitBinop(this, node, kMips64Dsub, &cont); |
| 1768 } | 1789 } |
| 1769 | 1790 |
| 1770 | 1791 |
| 1771 void InstructionSelector::VisitInt64AddWithOverflow(Node* node) { | 1792 void InstructionSelector::VisitInt64AddWithOverflow(Node* node) { |
| 1772 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { | 1793 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1773 FlagsContinuation cont(kOverflow, ovf); | 1794 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1774 return VisitBinop(this, node, kMips64DaddOvf, &cont); | 1795 return VisitBinop(this, node, kMips64DaddOvf, &cont); |
| 1775 } | 1796 } |
| 1776 FlagsContinuation cont; | 1797 FlagsContinuation cont; |
| 1777 VisitBinop(this, node, kMips64DaddOvf, &cont); | 1798 VisitBinop(this, node, kMips64DaddOvf, &cont); |
| 1778 } | 1799 } |
| 1779 | 1800 |
| 1780 | 1801 |
| 1781 void InstructionSelector::VisitInt64SubWithOverflow(Node* node) { | 1802 void InstructionSelector::VisitInt64SubWithOverflow(Node* node) { |
| 1782 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { | 1803 if (Node* ovf = NodeProperties::FindProjection(node, 1)) { |
| 1783 FlagsContinuation cont(kOverflow, ovf); | 1804 FlagsContinuation cont = FlagsContinuation::ForSet(kOverflow, ovf); |
| 1784 return VisitBinop(this, node, kMips64DsubOvf, &cont); | 1805 return VisitBinop(this, node, kMips64DsubOvf, &cont); |
| 1785 } | 1806 } |
| 1786 FlagsContinuation cont; | 1807 FlagsContinuation cont; |
| 1787 VisitBinop(this, node, kMips64DsubOvf, &cont); | 1808 VisitBinop(this, node, kMips64DsubOvf, &cont); |
| 1788 } | 1809 } |
| 1789 | 1810 |
| 1790 | 1811 |
| 1791 void InstructionSelector::VisitWord64Equal(Node* const node) { | 1812 void InstructionSelector::VisitWord64Equal(Node* const node) { |
| 1792 FlagsContinuation cont(kEqual, node); | 1813 FlagsContinuation cont = FlagsContinuation::ForSet(kEqual, node); |
| 1793 Int64BinopMatcher m(node); | 1814 Int64BinopMatcher m(node); |
| 1794 if (m.right().Is(0)) { | 1815 if (m.right().Is(0)) { |
| 1795 return VisitWordCompareZero(this, m.node(), m.left().node(), &cont); | 1816 return VisitWordCompareZero(this, m.node(), m.left().node(), &cont); |
| 1796 } | 1817 } |
| 1797 | 1818 |
| 1798 VisitWord64Compare(this, node, &cont); | 1819 VisitWord64Compare(this, node, &cont); |
| 1799 } | 1820 } |
| 1800 | 1821 |
| 1801 | 1822 |
| 1802 void InstructionSelector::VisitInt64LessThan(Node* node) { | 1823 void InstructionSelector::VisitInt64LessThan(Node* node) { |
| 1803 FlagsContinuation cont(kSignedLessThan, node); | 1824 FlagsContinuation cont = FlagsContinuation::ForSet(kSignedLessThan, node); |
| 1804 VisitWord64Compare(this, node, &cont); | 1825 VisitWord64Compare(this, node, &cont); |
| 1805 } | 1826 } |
| 1806 | 1827 |
| 1807 | 1828 |
| 1808 void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { | 1829 void InstructionSelector::VisitInt64LessThanOrEqual(Node* node) { |
| 1809 FlagsContinuation cont(kSignedLessThanOrEqual, node); | 1830 FlagsContinuation cont = |
| 1831 FlagsContinuation::ForSet(kSignedLessThanOrEqual, node); |
| 1810 VisitWord64Compare(this, node, &cont); | 1832 VisitWord64Compare(this, node, &cont); |
| 1811 } | 1833 } |
| 1812 | 1834 |
| 1813 | 1835 |
| 1814 void InstructionSelector::VisitUint64LessThan(Node* node) { | 1836 void InstructionSelector::VisitUint64LessThan(Node* node) { |
| 1815 FlagsContinuation cont(kUnsignedLessThan, node); | 1837 FlagsContinuation cont = FlagsContinuation::ForSet(kUnsignedLessThan, node); |
| 1816 VisitWord64Compare(this, node, &cont); | 1838 VisitWord64Compare(this, node, &cont); |
| 1817 } | 1839 } |
| 1818 | 1840 |
| 1819 | 1841 |
| 1820 void InstructionSelector::VisitUint64LessThanOrEqual(Node* node) { | 1842 void InstructionSelector::VisitUint64LessThanOrEqual(Node* node) { |
| 1821 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); | 1843 FlagsContinuation cont = |
| 1844 FlagsContinuation::ForSet(kUnsignedLessThanOrEqual, node); |
| 1822 VisitWord64Compare(this, node, &cont); | 1845 VisitWord64Compare(this, node, &cont); |
| 1823 } | 1846 } |
| 1824 | 1847 |
| 1825 | 1848 |
| 1826 void InstructionSelector::VisitFloat32Equal(Node* node) { | 1849 void InstructionSelector::VisitFloat32Equal(Node* node) { |
| 1827 FlagsContinuation cont(kEqual, node); | 1850 FlagsContinuation cont = FlagsContinuation::ForSet(kEqual, node); |
| 1828 VisitFloat32Compare(this, node, &cont); | 1851 VisitFloat32Compare(this, node, &cont); |
| 1829 } | 1852 } |
| 1830 | 1853 |
| 1831 | 1854 |
| 1832 void InstructionSelector::VisitFloat32LessThan(Node* node) { | 1855 void InstructionSelector::VisitFloat32LessThan(Node* node) { |
| 1833 FlagsContinuation cont(kUnsignedLessThan, node); | 1856 FlagsContinuation cont = FlagsContinuation::ForSet(kUnsignedLessThan, node); |
| 1834 VisitFloat32Compare(this, node, &cont); | 1857 VisitFloat32Compare(this, node, &cont); |
| 1835 } | 1858 } |
| 1836 | 1859 |
| 1837 | 1860 |
| 1838 void InstructionSelector::VisitFloat32LessThanOrEqual(Node* node) { | 1861 void InstructionSelector::VisitFloat32LessThanOrEqual(Node* node) { |
| 1839 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); | 1862 FlagsContinuation cont = |
| 1863 FlagsContinuation::ForSet(kUnsignedLessThanOrEqual, node); |
| 1840 VisitFloat32Compare(this, node, &cont); | 1864 VisitFloat32Compare(this, node, &cont); |
| 1841 } | 1865 } |
| 1842 | 1866 |
| 1843 | 1867 |
| 1844 void InstructionSelector::VisitFloat64Equal(Node* node) { | 1868 void InstructionSelector::VisitFloat64Equal(Node* node) { |
| 1845 FlagsContinuation cont(kEqual, node); | 1869 FlagsContinuation cont = FlagsContinuation::ForSet(kEqual, node); |
| 1846 VisitFloat64Compare(this, node, &cont); | 1870 VisitFloat64Compare(this, node, &cont); |
| 1847 } | 1871 } |
| 1848 | 1872 |
| 1849 | 1873 |
| 1850 void InstructionSelector::VisitFloat64LessThan(Node* node) { | 1874 void InstructionSelector::VisitFloat64LessThan(Node* node) { |
| 1851 FlagsContinuation cont(kUnsignedLessThan, node); | 1875 FlagsContinuation cont = FlagsContinuation::ForSet(kUnsignedLessThan, node); |
| 1852 VisitFloat64Compare(this, node, &cont); | 1876 VisitFloat64Compare(this, node, &cont); |
| 1853 } | 1877 } |
| 1854 | 1878 |
| 1855 | 1879 |
| 1856 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { | 1880 void InstructionSelector::VisitFloat64LessThanOrEqual(Node* node) { |
| 1857 FlagsContinuation cont(kUnsignedLessThanOrEqual, node); | 1881 FlagsContinuation cont = |
| 1882 FlagsContinuation::ForSet(kUnsignedLessThanOrEqual, node); |
| 1858 VisitFloat64Compare(this, node, &cont); | 1883 VisitFloat64Compare(this, node, &cont); |
| 1859 } | 1884 } |
| 1860 | 1885 |
| 1861 | 1886 |
| 1862 void InstructionSelector::VisitFloat64ExtractLowWord32(Node* node) { | 1887 void InstructionSelector::VisitFloat64ExtractLowWord32(Node* node) { |
| 1863 VisitRR(this, kMips64Float64ExtractLowWord32, node); | 1888 VisitRR(this, kMips64Float64ExtractLowWord32, node); |
| 1864 } | 1889 } |
| 1865 | 1890 |
| 1866 | 1891 |
| 1867 void InstructionSelector::VisitFloat64ExtractHighWord32(Node* node) { | 1892 void InstructionSelector::VisitFloat64ExtractHighWord32(Node* node) { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1907 MachineOperatorBuilder::kFloat32RoundUp | | 1932 MachineOperatorBuilder::kFloat32RoundUp | |
| 1908 MachineOperatorBuilder::kFloat64RoundTruncate | | 1933 MachineOperatorBuilder::kFloat64RoundTruncate | |
| 1909 MachineOperatorBuilder::kFloat32RoundTruncate | | 1934 MachineOperatorBuilder::kFloat32RoundTruncate | |
| 1910 MachineOperatorBuilder::kFloat64RoundTiesEven | | 1935 MachineOperatorBuilder::kFloat64RoundTiesEven | |
| 1911 MachineOperatorBuilder::kFloat32RoundTiesEven; | 1936 MachineOperatorBuilder::kFloat32RoundTiesEven; |
| 1912 } | 1937 } |
| 1913 | 1938 |
| 1914 } // namespace compiler | 1939 } // namespace compiler |
| 1915 } // namespace internal | 1940 } // namespace internal |
| 1916 } // namespace v8 | 1941 } // namespace v8 |
| OLD | NEW |