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/code-generator.h" | 5 #include "src/compiler/code-generator.h" |
6 | 6 |
7 #include "src/arm/macro-assembler-arm.h" | 7 #include "src/arm/macro-assembler-arm.h" |
8 #include "src/compilation-info.h" | 8 #include "src/compilation-info.h" |
9 #include "src/compiler/code-generator-impl.h" | 9 #include "src/compiler/code-generator-impl.h" |
10 #include "src/compiler/gap-resolver.h" | 10 #include "src/compiler/gap-resolver.h" |
(...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1575 break; | 1575 break; |
1576 } | 1576 } |
1577 case kArmUint32x4FromFloat32x4: { | 1577 case kArmUint32x4FromFloat32x4: { |
1578 __ vcvt_u32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1578 __ vcvt_u32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
1579 break; | 1579 break; |
1580 } | 1580 } |
1581 case kArmInt32x4Neg: { | 1581 case kArmInt32x4Neg: { |
1582 __ vneg(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1582 __ vneg(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
1583 break; | 1583 break; |
1584 } | 1584 } |
1585 case kArmInt32x4ShiftLeftByScalar: { | |
1586 __ vshl(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1587 i.InputInt8(1)); | |
1588 break; | |
1589 } | |
1590 case kArmInt32x4ShiftRightByScalar: { | |
1591 __ vshr(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1592 i.InputInt8(1)); | |
1593 break; | |
1594 } | |
1585 case kArmInt32x4Add: { | 1595 case kArmInt32x4Add: { |
1586 __ vadd(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1596 __ vadd(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1587 i.InputSimd128Register(1)); | 1597 i.InputSimd128Register(1)); |
1588 break; | 1598 break; |
1589 } | 1599 } |
1590 case kArmInt32x4Sub: { | 1600 case kArmInt32x4Sub: { |
1591 __ vsub(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1601 __ vsub(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1592 i.InputSimd128Register(1)); | 1602 i.InputSimd128Register(1)); |
1593 break; | 1603 break; |
1594 } | 1604 } |
(...skipping 28 matching lines...) Expand all Loading... | |
1623 __ vcgt(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1633 __ vcgt(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1624 i.InputSimd128Register(1)); | 1634 i.InputSimd128Register(1)); |
1625 break; | 1635 break; |
1626 } | 1636 } |
1627 case kArmInt32x4GreaterThanOrEqual: { | 1637 case kArmInt32x4GreaterThanOrEqual: { |
1628 Simd128Register dst = i.OutputSimd128Register(); | 1638 Simd128Register dst = i.OutputSimd128Register(); |
1629 __ vcge(NeonS32, dst, i.InputSimd128Register(0), | 1639 __ vcge(NeonS32, dst, i.InputSimd128Register(0), |
1630 i.InputSimd128Register(1)); | 1640 i.InputSimd128Register(1)); |
1631 break; | 1641 break; |
1632 } | 1642 } |
1643 case kArmUint32x4ShiftRightByScalar: { | |
1644 __ vshr(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1645 i.InputInt8(1)); | |
martyn.capewell
2017/02/02 16:23:26
These are at most Int6, as there are only 6 bits t
bbudge
2017/02/06 18:51:44
Changed to appropriate InputIntN overloads.
| |
1646 break; | |
1647 } | |
1648 case kArmUint32x4Min: { | |
1649 __ vmin(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1650 i.InputSimd128Register(1)); | |
1651 break; | |
1652 } | |
1653 case kArmUint32x4Max: { | |
1654 __ vmax(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1655 i.InputSimd128Register(1)); | |
1656 break; | |
1657 } | |
1633 case kArmUint32x4GreaterThan: { | 1658 case kArmUint32x4GreaterThan: { |
1634 __ vcgt(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1659 __ vcgt(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1635 i.InputSimd128Register(1)); | 1660 i.InputSimd128Register(1)); |
1636 break; | 1661 break; |
1637 } | 1662 } |
1638 case kArmUint32x4GreaterThanOrEqual: { | 1663 case kArmUint32x4GreaterThanOrEqual: { |
1639 Simd128Register dst = i.OutputSimd128Register(); | 1664 Simd128Register dst = i.OutputSimd128Register(); |
1640 __ vcge(NeonU32, dst, i.InputSimd128Register(0), | 1665 __ vcge(NeonU32, dst, i.InputSimd128Register(0), |
1641 i.InputSimd128Register(1)); | 1666 i.InputSimd128Register(1)); |
1642 break; | 1667 break; |
(...skipping 18 matching lines...) Expand all Loading... | |
1661 } | 1686 } |
1662 case kArmInt16x8ReplaceLane: { | 1687 case kArmInt16x8ReplaceLane: { |
1663 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1688 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
1664 i.InputRegister(2), NeonS16, i.InputInt8(1)); | 1689 i.InputRegister(2), NeonS16, i.InputInt8(1)); |
1665 break; | 1690 break; |
1666 } | 1691 } |
1667 case kArmInt16x8Neg: { | 1692 case kArmInt16x8Neg: { |
1668 __ vneg(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1693 __ vneg(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
1669 break; | 1694 break; |
1670 } | 1695 } |
1696 case kArmInt16x8ShiftLeftByScalar: { | |
1697 __ vshl(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1698 i.InputInt8(1)); | |
1699 break; | |
1700 } | |
1701 case kArmInt16x8ShiftRightByScalar: { | |
1702 __ vshr(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1703 i.InputInt8(1)); | |
1704 break; | |
1705 } | |
1671 case kArmInt16x8Add: { | 1706 case kArmInt16x8Add: { |
1672 __ vadd(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1707 __ vadd(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1673 i.InputSimd128Register(1)); | 1708 i.InputSimd128Register(1)); |
1674 break; | 1709 break; |
1675 } | 1710 } |
1711 case kArmInt16x8AddSaturate: { | |
1712 __ vqadd(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1713 i.InputSimd128Register(1)); | |
1714 break; | |
1715 } | |
1676 case kArmInt16x8Sub: { | 1716 case kArmInt16x8Sub: { |
1677 __ vsub(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1717 __ vsub(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1678 i.InputSimd128Register(1)); | 1718 i.InputSimd128Register(1)); |
1679 break; | 1719 break; |
1680 } | 1720 } |
1721 case kArmInt16x8SubSaturate: { | |
1722 __ vqsub(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1723 i.InputSimd128Register(1)); | |
1724 break; | |
1725 } | |
1681 case kArmInt16x8Mul: { | 1726 case kArmInt16x8Mul: { |
1682 __ vmul(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1727 __ vmul(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1683 i.InputSimd128Register(1)); | 1728 i.InputSimd128Register(1)); |
1684 break; | 1729 break; |
1685 } | 1730 } |
1686 case kArmInt16x8Min: { | 1731 case kArmInt16x8Min: { |
1687 __ vmin(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1732 __ vmin(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1688 i.InputSimd128Register(1)); | 1733 i.InputSimd128Register(1)); |
1689 break; | 1734 break; |
1690 } | 1735 } |
(...skipping 18 matching lines...) Expand all Loading... | |
1709 __ vcgt(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1754 __ vcgt(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1710 i.InputSimd128Register(1)); | 1755 i.InputSimd128Register(1)); |
1711 break; | 1756 break; |
1712 } | 1757 } |
1713 case kArmInt16x8GreaterThanOrEqual: { | 1758 case kArmInt16x8GreaterThanOrEqual: { |
1714 Simd128Register dst = i.OutputSimd128Register(); | 1759 Simd128Register dst = i.OutputSimd128Register(); |
1715 __ vcge(NeonS16, dst, i.InputSimd128Register(0), | 1760 __ vcge(NeonS16, dst, i.InputSimd128Register(0), |
1716 i.InputSimd128Register(1)); | 1761 i.InputSimd128Register(1)); |
1717 break; | 1762 break; |
1718 } | 1763 } |
1764 case kArmUint16x8ShiftRightByScalar: { | |
1765 __ vshr(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1766 i.InputInt8(1)); | |
1767 break; | |
1768 } | |
1769 case kArmUint16x8AddSaturate: { | |
1770 __ vqadd(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1771 i.InputSimd128Register(1)); | |
1772 break; | |
1773 } | |
1774 case kArmUint16x8SubSaturate: { | |
1775 __ vqsub(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1776 i.InputSimd128Register(1)); | |
1777 break; | |
1778 } | |
1779 case kArmUint16x8Min: { | |
1780 __ vmin(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1781 i.InputSimd128Register(1)); | |
1782 break; | |
1783 } | |
1784 case kArmUint16x8Max: { | |
1785 __ vmax(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1786 i.InputSimd128Register(1)); | |
1787 break; | |
1788 } | |
1719 case kArmUint16x8GreaterThan: { | 1789 case kArmUint16x8GreaterThan: { |
1720 __ vcgt(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1790 __ vcgt(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1721 i.InputSimd128Register(1)); | 1791 i.InputSimd128Register(1)); |
1722 break; | 1792 break; |
1723 } | 1793 } |
1724 case kArmUint16x8GreaterThanOrEqual: { | 1794 case kArmUint16x8GreaterThanOrEqual: { |
1725 Simd128Register dst = i.OutputSimd128Register(); | 1795 Simd128Register dst = i.OutputSimd128Register(); |
1726 __ vcge(NeonU16, dst, i.InputSimd128Register(0), | 1796 __ vcge(NeonU16, dst, i.InputSimd128Register(0), |
1727 i.InputSimd128Register(1)); | 1797 i.InputSimd128Register(1)); |
1728 break; | 1798 break; |
1729 } | 1799 } |
1730 case kArmInt8x16Splat: { | 1800 case kArmInt8x16Splat: { |
1731 __ vdup(Neon8, i.OutputSimd128Register(), i.InputRegister(0)); | 1801 __ vdup(Neon8, i.OutputSimd128Register(), i.InputRegister(0)); |
1732 break; | 1802 break; |
1733 } | 1803 } |
1734 case kArmInt8x16ExtractLane: { | 1804 case kArmInt8x16ExtractLane: { |
1735 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS8, | 1805 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS8, |
1736 i.InputInt8(1)); | 1806 i.InputInt8(1)); |
1737 break; | 1807 break; |
1738 } | 1808 } |
1739 case kArmInt8x16ReplaceLane: { | 1809 case kArmInt8x16ReplaceLane: { |
1740 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1810 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
1741 i.InputRegister(2), NeonS8, i.InputInt8(1)); | 1811 i.InputRegister(2), NeonS8, i.InputInt8(1)); |
1742 break; | 1812 break; |
1743 } | 1813 } |
1744 case kArmInt8x16Neg: { | 1814 case kArmInt8x16Neg: { |
1745 __ vneg(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1815 __ vneg(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
1746 break; | 1816 break; |
1747 } | 1817 } |
1818 case kArmInt8x16ShiftLeftByScalar: { | |
1819 __ vshl(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1820 i.InputInt8(1)); | |
1821 break; | |
1822 } | |
1823 case kArmInt8x16ShiftRightByScalar: { | |
1824 __ vshr(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1825 i.InputInt8(1)); | |
1826 break; | |
1827 } | |
1748 case kArmInt8x16Add: { | 1828 case kArmInt8x16Add: { |
1749 __ vadd(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1829 __ vadd(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1750 i.InputSimd128Register(1)); | 1830 i.InputSimd128Register(1)); |
1751 break; | 1831 break; |
1752 } | 1832 } |
1833 case kArmInt8x16AddSaturate: { | |
1834 __ vqadd(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1835 i.InputSimd128Register(1)); | |
1836 break; | |
1837 } | |
1753 case kArmInt8x16Sub: { | 1838 case kArmInt8x16Sub: { |
1754 __ vsub(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1839 __ vsub(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1755 i.InputSimd128Register(1)); | 1840 i.InputSimd128Register(1)); |
1756 break; | 1841 break; |
1757 } | 1842 } |
1843 case kArmInt8x16SubSaturate: { | |
1844 __ vqsub(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1845 i.InputSimd128Register(1)); | |
1846 break; | |
1847 } | |
1758 case kArmInt8x16Mul: { | 1848 case kArmInt8x16Mul: { |
1759 __ vmul(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1849 __ vmul(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1760 i.InputSimd128Register(1)); | 1850 i.InputSimd128Register(1)); |
1761 break; | 1851 break; |
1762 } | 1852 } |
1763 case kArmInt8x16Min: { | 1853 case kArmInt8x16Min: { |
1764 __ vmin(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1854 __ vmin(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1765 i.InputSimd128Register(1)); | 1855 i.InputSimd128Register(1)); |
1766 break; | 1856 break; |
1767 } | 1857 } |
(...skipping 17 matching lines...) Expand all Loading... | |
1785 __ vcgt(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1875 __ vcgt(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1786 i.InputSimd128Register(1)); | 1876 i.InputSimd128Register(1)); |
1787 break; | 1877 break; |
1788 } | 1878 } |
1789 case kArmInt8x16GreaterThanOrEqual: { | 1879 case kArmInt8x16GreaterThanOrEqual: { |
1790 Simd128Register dst = i.OutputSimd128Register(); | 1880 Simd128Register dst = i.OutputSimd128Register(); |
1791 __ vcge(NeonS8, dst, i.InputSimd128Register(0), | 1881 __ vcge(NeonS8, dst, i.InputSimd128Register(0), |
1792 i.InputSimd128Register(1)); | 1882 i.InputSimd128Register(1)); |
1793 break; | 1883 break; |
1794 } | 1884 } |
1885 case kArmUint8x16ShiftRightByScalar: { | |
1886 __ vshr(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1887 i.InputInt8(1)); | |
1888 break; | |
1889 } | |
1890 case kArmUint8x16AddSaturate: { | |
1891 __ vqadd(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1892 i.InputSimd128Register(1)); | |
1893 break; | |
1894 } | |
1895 case kArmUint8x16SubSaturate: { | |
1896 __ vqsub(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1897 i.InputSimd128Register(1)); | |
1898 break; | |
1899 } | |
1900 case kArmUint8x16Min: { | |
1901 __ vmin(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1902 i.InputSimd128Register(1)); | |
1903 break; | |
1904 } | |
1905 case kArmUint8x16Max: { | |
1906 __ vmax(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | |
1907 i.InputSimd128Register(1)); | |
1908 break; | |
1909 } | |
1795 case kArmUint8x16GreaterThan: { | 1910 case kArmUint8x16GreaterThan: { |
1796 __ vcgt(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1911 __ vcgt(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
1797 i.InputSimd128Register(1)); | 1912 i.InputSimd128Register(1)); |
1798 break; | 1913 break; |
1799 } | 1914 } |
1800 case kArmUint8x16GreaterThanOrEqual: { | 1915 case kArmUint8x16GreaterThanOrEqual: { |
1801 Simd128Register dst = i.OutputSimd128Register(); | 1916 Simd128Register dst = i.OutputSimd128Register(); |
1802 __ vcge(NeonU8, dst, i.InputSimd128Register(0), | 1917 __ vcge(NeonU8, dst, i.InputSimd128Register(0), |
1803 i.InputSimd128Register(1)); | 1918 i.InputSimd128Register(1)); |
1804 break; | 1919 break; |
(...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2461 padding_size -= v8::internal::Assembler::kInstrSize; | 2576 padding_size -= v8::internal::Assembler::kInstrSize; |
2462 } | 2577 } |
2463 } | 2578 } |
2464 } | 2579 } |
2465 | 2580 |
2466 #undef __ | 2581 #undef __ |
2467 | 2582 |
2468 } // namespace compiler | 2583 } // namespace compiler |
2469 } // namespace internal | 2584 } // namespace internal |
2470 } // namespace v8 | 2585 } // namespace v8 |
OLD | NEW |