Chromium Code Reviews| 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/assembler-inl.h" | 8 #include "src/assembler-inl.h" |
| 9 #include "src/compilation-info.h" | 9 #include "src/compilation-info.h" |
| 10 #include "src/compiler/code-generator-impl.h" | 10 #include "src/compiler/code-generator-impl.h" |
| (...skipping 1538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1549 frame_access_state()->IncreaseSPDelta(1); | 1549 frame_access_state()->IncreaseSPDelta(1); |
| 1550 } | 1550 } |
| 1551 DCHECK_EQ(LeaveCC, i.OutputSBit()); | 1551 DCHECK_EQ(LeaveCC, i.OutputSBit()); |
| 1552 break; | 1552 break; |
| 1553 case kArmPoke: { | 1553 case kArmPoke: { |
| 1554 int const slot = MiscField::decode(instr->opcode()); | 1554 int const slot = MiscField::decode(instr->opcode()); |
| 1555 __ str(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); | 1555 __ str(i.InputRegister(0), MemOperand(sp, slot * kPointerSize)); |
| 1556 DCHECK_EQ(LeaveCC, i.OutputSBit()); | 1556 DCHECK_EQ(LeaveCC, i.OutputSBit()); |
| 1557 break; | 1557 break; |
| 1558 } | 1558 } |
| 1559 case kArmFloat32x4Splat: { | 1559 case kArmF32x4Splat: { |
| 1560 __ vdup(i.OutputSimd128Register(), i.InputFloatRegister(0)); | 1560 __ vdup(i.OutputSimd128Register(), i.InputFloatRegister(0)); |
| 1561 break; | 1561 break; |
| 1562 } | 1562 } |
| 1563 case kArmFloat32x4ExtractLane: { | 1563 case kArmF32x4ExtractLane: { |
| 1564 __ ExtractLane(i.OutputFloatRegister(), i.InputSimd128Register(0), | 1564 __ ExtractLane(i.OutputFloatRegister(), i.InputSimd128Register(0), |
| 1565 kScratchReg, i.InputInt8(1)); | 1565 kScratchReg, i.InputInt8(1)); |
| 1566 break; | 1566 break; |
| 1567 } | 1567 } |
| 1568 case kArmFloat32x4ReplaceLane: { | 1568 case kArmF32x4ReplaceLane: { |
| 1569 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1569 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1570 i.InputFloatRegister(2), kScratchReg, i.InputInt8(1)); | 1570 i.InputFloatRegister(2), kScratchReg, i.InputInt8(1)); |
| 1571 break; | 1571 break; |
| 1572 } | 1572 } |
| 1573 case kArmFloat32x4FromInt32x4: { | 1573 case kArmF32x4Abs: { |
|
aseemgarg
2017/03/28 22:25:22
seems like you forgot to create the convert cases
gdeepti
2017/03/28 22:27:24
Fixed in the patch I uploaded right after this one
| |
| 1574 __ vcvt_f32_s32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | |
| 1575 break; | |
| 1576 } | |
| 1577 case kArmFloat32x4FromUint32x4: { | |
| 1578 __ vcvt_f32_u32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | |
| 1579 break; | |
| 1580 } | |
| 1581 case kArmFloat32x4Abs: { | |
| 1582 __ vabs(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1574 __ vabs(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1583 break; | 1575 break; |
| 1584 } | 1576 } |
| 1585 case kArmFloat32x4Neg: { | 1577 case kArmF32x4Neg: { |
| 1586 __ vneg(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1578 __ vneg(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1587 break; | 1579 break; |
| 1588 } | 1580 } |
| 1589 case kArmFloat32x4RecipApprox: { | 1581 case kArmF32x4RecipApprox: { |
| 1590 __ vrecpe(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1582 __ vrecpe(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1591 break; | 1583 break; |
| 1592 } | 1584 } |
| 1593 case kArmFloat32x4RecipSqrtApprox: { | 1585 case kArmF32x4RecipSqrtApprox: { |
| 1594 __ vrsqrte(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1586 __ vrsqrte(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1595 break; | 1587 break; |
| 1596 } | 1588 } |
| 1597 case kArmFloat32x4Add: { | 1589 case kArmF32x4Add: { |
| 1598 __ vadd(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1590 __ vadd(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1599 i.InputSimd128Register(1)); | 1591 i.InputSimd128Register(1)); |
| 1600 break; | 1592 break; |
| 1601 } | 1593 } |
| 1602 case kArmFloat32x4Sub: { | 1594 case kArmF32x4Sub: { |
| 1603 __ vsub(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1595 __ vsub(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1604 i.InputSimd128Register(1)); | 1596 i.InputSimd128Register(1)); |
| 1605 break; | 1597 break; |
| 1606 } | 1598 } |
| 1607 case kArmFloat32x4Mul: { | 1599 case kArmF32x4Mul: { |
| 1608 __ vmul(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1600 __ vmul(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1609 i.InputSimd128Register(1)); | 1601 i.InputSimd128Register(1)); |
| 1610 break; | 1602 break; |
| 1611 } | 1603 } |
| 1612 case kArmFloat32x4Min: { | 1604 case kArmF32x4Min: { |
| 1613 __ vmin(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1605 __ vmin(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1614 i.InputSimd128Register(1)); | 1606 i.InputSimd128Register(1)); |
| 1615 break; | 1607 break; |
| 1616 } | 1608 } |
| 1617 case kArmFloat32x4Max: { | 1609 case kArmF32x4Max: { |
| 1618 __ vmax(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1610 __ vmax(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1619 i.InputSimd128Register(1)); | 1611 i.InputSimd128Register(1)); |
| 1620 break; | 1612 break; |
| 1621 } | 1613 } |
| 1622 case kArmFloat32x4RecipRefine: { | 1614 case kArmF32x4RecipRefine: { |
| 1623 __ vrecps(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1615 __ vrecps(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1624 i.InputSimd128Register(1)); | 1616 i.InputSimd128Register(1)); |
| 1625 break; | 1617 break; |
| 1626 } | 1618 } |
| 1627 case kArmFloat32x4RecipSqrtRefine: { | 1619 case kArmF32x4RecipSqrtRefine: { |
| 1628 __ vrsqrts(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1620 __ vrsqrts(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1629 i.InputSimd128Register(1)); | 1621 i.InputSimd128Register(1)); |
| 1630 break; | 1622 break; |
| 1631 } | 1623 } |
| 1632 case kArmFloat32x4Equal: { | 1624 case kArmF32x4Eq: { |
| 1633 __ vceq(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1625 __ vceq(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1634 i.InputSimd128Register(1)); | 1626 i.InputSimd128Register(1)); |
| 1635 break; | 1627 break; |
| 1636 } | 1628 } |
| 1637 case kArmFloat32x4NotEqual: { | 1629 case kArmF32x4Ne: { |
| 1638 Simd128Register dst = i.OutputSimd128Register(); | 1630 Simd128Register dst = i.OutputSimd128Register(); |
| 1639 __ vceq(dst, i.InputSimd128Register(0), i.InputSimd128Register(1)); | 1631 __ vceq(dst, i.InputSimd128Register(0), i.InputSimd128Register(1)); |
| 1640 __ vmvn(dst, dst); | 1632 __ vmvn(dst, dst); |
| 1641 break; | 1633 break; |
| 1642 } | 1634 } |
| 1643 case kArmFloat32x4LessThan: { | 1635 case kArmF32x4Lt: { |
| 1644 __ vcgt(i.OutputSimd128Register(), i.InputSimd128Register(1), | 1636 __ vcgt(i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1645 i.InputSimd128Register(0)); | 1637 i.InputSimd128Register(0)); |
| 1646 break; | 1638 break; |
| 1647 } | 1639 } |
| 1648 case kArmFloat32x4LessThanOrEqual: { | 1640 case kArmF32x4Le: { |
| 1649 __ vcge(i.OutputSimd128Register(), i.InputSimd128Register(1), | 1641 __ vcge(i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1650 i.InputSimd128Register(0)); | 1642 i.InputSimd128Register(0)); |
| 1651 break; | 1643 break; |
| 1652 } | 1644 } |
| 1653 case kArmInt32x4Splat: { | 1645 case kArmI32x4Splat: { |
| 1654 __ vdup(Neon32, i.OutputSimd128Register(), i.InputRegister(0)); | 1646 __ vdup(Neon32, i.OutputSimd128Register(), i.InputRegister(0)); |
| 1655 break; | 1647 break; |
| 1656 } | 1648 } |
| 1657 case kArmInt32x4ExtractLane: { | 1649 case kArmI32x4ExtractLane: { |
| 1658 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS32, | 1650 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS32, |
| 1659 i.InputInt8(1)); | 1651 i.InputInt8(1)); |
| 1660 break; | 1652 break; |
| 1661 } | 1653 } |
| 1662 case kArmInt32x4ReplaceLane: { | 1654 case kArmI32x4ReplaceLane: { |
| 1663 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1655 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1664 i.InputRegister(2), NeonS32, i.InputInt8(1)); | 1656 i.InputRegister(2), NeonS32, i.InputInt8(1)); |
| 1665 break; | 1657 break; |
| 1666 } | 1658 } |
| 1667 case kArmInt32x4FromFloat32x4: { | 1659 case kArmI32x4SConvertF32x4: { |
| 1668 __ vcvt_s32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1660 __ vcvt_s32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1669 break; | 1661 break; |
| 1670 } | 1662 } |
| 1671 case kArmUint32x4FromFloat32x4: { | 1663 case kArmI32x4Neg: { |
| 1672 __ vcvt_u32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | |
| 1673 break; | |
| 1674 } | |
| 1675 case kArmInt32x4Neg: { | |
| 1676 __ vneg(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1664 __ vneg(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1677 break; | 1665 break; |
| 1678 } | 1666 } |
| 1679 case kArmInt32x4ShiftLeftByScalar: { | 1667 case kArmI32x4Shl: { |
| 1680 __ vshl(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1668 __ vshl(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1681 i.InputInt5(1)); | 1669 i.InputInt5(1)); |
| 1682 break; | 1670 break; |
| 1683 } | 1671 } |
| 1684 case kArmInt32x4ShiftRightByScalar: { | 1672 case kArmI32x4ShrS: { |
| 1685 __ vshr(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1673 __ vshr(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1686 i.InputInt5(1)); | 1674 i.InputInt5(1)); |
| 1687 break; | 1675 break; |
| 1688 } | 1676 } |
| 1689 case kArmInt32x4Add: { | 1677 case kArmI32x4Add: { |
| 1690 __ vadd(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1678 __ vadd(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1691 i.InputSimd128Register(1)); | 1679 i.InputSimd128Register(1)); |
| 1692 break; | 1680 break; |
| 1693 } | 1681 } |
| 1694 case kArmInt32x4Sub: { | 1682 case kArmI32x4Sub: { |
| 1695 __ vsub(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1683 __ vsub(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1696 i.InputSimd128Register(1)); | 1684 i.InputSimd128Register(1)); |
| 1697 break; | 1685 break; |
| 1698 } | 1686 } |
| 1699 case kArmInt32x4Mul: { | 1687 case kArmI32x4Mul: { |
| 1700 __ vmul(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1688 __ vmul(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1701 i.InputSimd128Register(1)); | 1689 i.InputSimd128Register(1)); |
| 1702 break; | 1690 break; |
| 1703 } | 1691 } |
| 1704 case kArmInt32x4Min: { | 1692 case kArmI32x4MinS: { |
| 1705 __ vmin(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1693 __ vmin(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1706 i.InputSimd128Register(1)); | 1694 i.InputSimd128Register(1)); |
| 1707 break; | 1695 break; |
| 1708 } | 1696 } |
| 1709 case kArmInt32x4Max: { | 1697 case kArmI32x4MaxS: { |
| 1710 __ vmax(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1698 __ vmax(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1711 i.InputSimd128Register(1)); | 1699 i.InputSimd128Register(1)); |
| 1712 break; | 1700 break; |
| 1713 } | 1701 } |
| 1714 case kArmInt32x4Equal: { | 1702 case kArmI32x4Eq: { |
| 1715 __ vceq(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1703 __ vceq(Neon32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1716 i.InputSimd128Register(1)); | 1704 i.InputSimd128Register(1)); |
| 1717 break; | 1705 break; |
| 1718 } | 1706 } |
| 1719 case kArmInt32x4NotEqual: { | 1707 case kArmI32x4Ne: { |
| 1720 Simd128Register dst = i.OutputSimd128Register(); | 1708 Simd128Register dst = i.OutputSimd128Register(); |
| 1721 __ vceq(Neon32, dst, i.InputSimd128Register(0), | 1709 __ vceq(Neon32, dst, i.InputSimd128Register(0), |
| 1722 i.InputSimd128Register(1)); | 1710 i.InputSimd128Register(1)); |
| 1723 __ vmvn(dst, dst); | 1711 __ vmvn(dst, dst); |
| 1724 break; | 1712 break; |
| 1725 } | 1713 } |
| 1726 case kArmInt32x4LessThan: { | 1714 case kArmI32x4LtS: { |
| 1727 __ vcgt(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1715 __ vcgt(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1728 i.InputSimd128Register(0)); | 1716 i.InputSimd128Register(0)); |
| 1729 break; | 1717 break; |
| 1730 } | 1718 } |
| 1731 case kArmInt32x4LessThanOrEqual: { | 1719 case kArmI32x4LeS: { |
| 1732 __ vcge(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1720 __ vcge(NeonS32, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1733 i.InputSimd128Register(0)); | 1721 i.InputSimd128Register(0)); |
| 1734 break; | 1722 break; |
| 1735 } | 1723 } |
| 1736 case kArmUint32x4ShiftRightByScalar: { | 1724 case kArmI32x4UConvertF32x4: { |
| 1725 __ vcvt_u32_f32(i.OutputSimd128Register(), i.InputSimd128Register(0)); | |
| 1726 break; | |
| 1727 } | |
| 1728 case kArmI32x4ShrU: { | |
| 1737 __ vshr(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1729 __ vshr(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1738 i.InputInt5(1)); | 1730 i.InputInt5(1)); |
| 1739 break; | 1731 break; |
| 1740 } | 1732 } |
| 1741 case kArmUint32x4Min: { | 1733 case kArmI32x4MinU: { |
| 1742 __ vmin(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1734 __ vmin(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1743 i.InputSimd128Register(1)); | 1735 i.InputSimd128Register(1)); |
| 1744 break; | 1736 break; |
| 1745 } | 1737 } |
| 1746 case kArmUint32x4Max: { | 1738 case kArmI32x4MaxU: { |
| 1747 __ vmax(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1739 __ vmax(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1748 i.InputSimd128Register(1)); | 1740 i.InputSimd128Register(1)); |
| 1749 break; | 1741 break; |
| 1750 } | 1742 } |
| 1751 case kArmUint32x4LessThan: { | 1743 case kArmI32x4LtU: { |
| 1752 __ vcgt(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1744 __ vcgt(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1753 i.InputSimd128Register(0)); | 1745 i.InputSimd128Register(0)); |
| 1754 break; | 1746 break; |
| 1755 } | 1747 } |
| 1756 case kArmUint32x4LessThanOrEqual: { | 1748 case kArmI32x4LeU: { |
| 1757 __ vcge(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1749 __ vcge(NeonU32, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1758 i.InputSimd128Register(0)); | 1750 i.InputSimd128Register(0)); |
| 1759 break; | 1751 break; |
| 1760 } | 1752 } |
| 1761 case kArmInt16x8Splat: { | 1753 case kArmI16x8Splat: { |
| 1762 __ vdup(Neon16, i.OutputSimd128Register(), i.InputRegister(0)); | 1754 __ vdup(Neon16, i.OutputSimd128Register(), i.InputRegister(0)); |
| 1763 break; | 1755 break; |
| 1764 } | 1756 } |
| 1765 case kArmInt16x8ExtractLane: { | 1757 case kArmI16x8ExtractLane: { |
| 1766 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS16, | 1758 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS16, |
| 1767 i.InputInt8(1)); | 1759 i.InputInt8(1)); |
| 1768 break; | 1760 break; |
| 1769 } | 1761 } |
| 1770 case kArmInt16x8ReplaceLane: { | 1762 case kArmI16x8ReplaceLane: { |
| 1771 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1763 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1772 i.InputRegister(2), NeonS16, i.InputInt8(1)); | 1764 i.InputRegister(2), NeonS16, i.InputInt8(1)); |
| 1773 break; | 1765 break; |
| 1774 } | 1766 } |
| 1775 case kArmInt16x8Neg: { | 1767 case kArmI16x8Neg: { |
| 1776 __ vneg(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1768 __ vneg(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1777 break; | 1769 break; |
| 1778 } | 1770 } |
| 1779 case kArmInt16x8ShiftLeftByScalar: { | 1771 case kArmI16x8Shl: { |
| 1780 __ vshl(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1772 __ vshl(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1781 i.InputInt4(1)); | 1773 i.InputInt4(1)); |
| 1782 break; | 1774 break; |
| 1783 } | 1775 } |
| 1784 case kArmInt16x8ShiftRightByScalar: { | 1776 case kArmI16x8ShrS: { |
| 1785 __ vshr(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1777 __ vshr(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1786 i.InputInt4(1)); | 1778 i.InputInt4(1)); |
| 1787 break; | 1779 break; |
| 1788 } | 1780 } |
| 1789 case kArmInt16x8Add: { | 1781 case kArmI16x8Add: { |
| 1790 __ vadd(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1782 __ vadd(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1791 i.InputSimd128Register(1)); | 1783 i.InputSimd128Register(1)); |
| 1792 break; | 1784 break; |
| 1793 } | 1785 } |
| 1794 case kArmInt16x8AddSaturate: { | 1786 case kArmI16x8AddSaturate: { |
| 1795 __ vqadd(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1787 __ vqadd(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1796 i.InputSimd128Register(1)); | 1788 i.InputSimd128Register(1)); |
| 1797 break; | 1789 break; |
| 1798 } | 1790 } |
| 1799 case kArmInt16x8Sub: { | 1791 case kArmI16x8Sub: { |
| 1800 __ vsub(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1792 __ vsub(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1801 i.InputSimd128Register(1)); | 1793 i.InputSimd128Register(1)); |
| 1802 break; | 1794 break; |
| 1803 } | 1795 } |
| 1804 case kArmInt16x8SubSaturate: { | 1796 case kArmI16x8SubSaturate: { |
| 1805 __ vqsub(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1797 __ vqsub(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1806 i.InputSimd128Register(1)); | 1798 i.InputSimd128Register(1)); |
| 1807 break; | 1799 break; |
| 1808 } | 1800 } |
| 1809 case kArmInt16x8Mul: { | 1801 case kArmI16x8Mul: { |
| 1810 __ vmul(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1802 __ vmul(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1811 i.InputSimd128Register(1)); | 1803 i.InputSimd128Register(1)); |
| 1812 break; | 1804 break; |
| 1813 } | 1805 } |
| 1814 case kArmInt16x8Min: { | 1806 case kArmI16x8MinS: { |
| 1815 __ vmin(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1807 __ vmin(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1816 i.InputSimd128Register(1)); | 1808 i.InputSimd128Register(1)); |
| 1817 break; | 1809 break; |
| 1818 } | 1810 } |
| 1819 case kArmInt16x8Max: { | 1811 case kArmI16x8MaxS: { |
| 1820 __ vmax(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1812 __ vmax(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1821 i.InputSimd128Register(1)); | 1813 i.InputSimd128Register(1)); |
| 1822 break; | 1814 break; |
| 1823 } | 1815 } |
| 1824 case kArmInt16x8Equal: { | 1816 case kArmI16x8Eq: { |
| 1825 __ vceq(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1817 __ vceq(Neon16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1826 i.InputSimd128Register(1)); | 1818 i.InputSimd128Register(1)); |
| 1827 break; | 1819 break; |
| 1828 } | 1820 } |
| 1829 case kArmInt16x8NotEqual: { | 1821 case kArmI16x8Ne: { |
| 1830 Simd128Register dst = i.OutputSimd128Register(); | 1822 Simd128Register dst = i.OutputSimd128Register(); |
| 1831 __ vceq(Neon16, dst, i.InputSimd128Register(0), | 1823 __ vceq(Neon16, dst, i.InputSimd128Register(0), |
| 1832 i.InputSimd128Register(1)); | 1824 i.InputSimd128Register(1)); |
| 1833 __ vmvn(dst, dst); | 1825 __ vmvn(dst, dst); |
| 1834 break; | 1826 break; |
| 1835 } | 1827 } |
| 1836 case kArmInt16x8LessThan: { | 1828 case kArmI16x8LtS: { |
| 1837 __ vcgt(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1829 __ vcgt(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1838 i.InputSimd128Register(0)); | 1830 i.InputSimd128Register(0)); |
| 1839 break; | 1831 break; |
| 1840 } | 1832 } |
| 1841 case kArmInt16x8LessThanOrEqual: { | 1833 case kArmI16x8LeS: { |
| 1842 __ vcge(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1834 __ vcge(NeonS16, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1843 i.InputSimd128Register(0)); | 1835 i.InputSimd128Register(0)); |
| 1844 break; | 1836 break; |
| 1845 } | 1837 } |
| 1846 case kArmUint16x8ShiftRightByScalar: { | 1838 case kArmI16x8ShrU: { |
| 1847 __ vshr(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1839 __ vshr(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1848 i.InputInt4(1)); | 1840 i.InputInt4(1)); |
| 1849 break; | 1841 break; |
| 1850 } | 1842 } |
| 1851 case kArmUint16x8AddSaturate: { | 1843 case kArmI16x8AddSaturateU: { |
| 1852 __ vqadd(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1844 __ vqadd(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1853 i.InputSimd128Register(1)); | 1845 i.InputSimd128Register(1)); |
| 1854 break; | 1846 break; |
| 1855 } | 1847 } |
| 1856 case kArmUint16x8SubSaturate: { | 1848 case kArmI16x8SubSaturateU: { |
| 1857 __ vqsub(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1849 __ vqsub(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1858 i.InputSimd128Register(1)); | 1850 i.InputSimd128Register(1)); |
| 1859 break; | 1851 break; |
| 1860 } | 1852 } |
| 1861 case kArmUint16x8Min: { | 1853 case kArmI16x8MinU: { |
| 1862 __ vmin(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1854 __ vmin(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1863 i.InputSimd128Register(1)); | 1855 i.InputSimd128Register(1)); |
| 1864 break; | 1856 break; |
| 1865 } | 1857 } |
| 1866 case kArmUint16x8Max: { | 1858 case kArmI16x8MaxU: { |
| 1867 __ vmax(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1859 __ vmax(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1868 i.InputSimd128Register(1)); | 1860 i.InputSimd128Register(1)); |
| 1869 break; | 1861 break; |
| 1870 } | 1862 } |
| 1871 case kArmUint16x8LessThan: { | 1863 case kArmI16x8LtU: { |
| 1872 __ vcgt(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1864 __ vcgt(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1873 i.InputSimd128Register(0)); | 1865 i.InputSimd128Register(0)); |
| 1874 break; | 1866 break; |
| 1875 } | 1867 } |
| 1876 case kArmUint16x8LessThanOrEqual: { | 1868 case kArmI16x8LeU: { |
| 1877 __ vcge(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1869 __ vcge(NeonU16, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1878 i.InputSimd128Register(0)); | 1870 i.InputSimd128Register(0)); |
| 1879 break; | 1871 break; |
| 1880 } | 1872 } |
| 1881 case kArmInt8x16Splat: { | 1873 case kArmI8x16Splat: { |
| 1882 __ vdup(Neon8, i.OutputSimd128Register(), i.InputRegister(0)); | 1874 __ vdup(Neon8, i.OutputSimd128Register(), i.InputRegister(0)); |
| 1883 break; | 1875 break; |
| 1884 } | 1876 } |
| 1885 case kArmInt8x16ExtractLane: { | 1877 case kArmI8x16ExtractLane: { |
| 1886 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS8, | 1878 __ ExtractLane(i.OutputRegister(), i.InputSimd128Register(0), NeonS8, |
| 1887 i.InputInt8(1)); | 1879 i.InputInt8(1)); |
| 1888 break; | 1880 break; |
| 1889 } | 1881 } |
| 1890 case kArmInt8x16ReplaceLane: { | 1882 case kArmI8x16ReplaceLane: { |
| 1891 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1883 __ ReplaceLane(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1892 i.InputRegister(2), NeonS8, i.InputInt8(1)); | 1884 i.InputRegister(2), NeonS8, i.InputInt8(1)); |
| 1893 break; | 1885 break; |
| 1894 } | 1886 } |
| 1895 case kArmInt8x16Neg: { | 1887 case kArmI8x16Neg: { |
| 1896 __ vneg(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0)); | 1888 __ vneg(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 1897 break; | 1889 break; |
| 1898 } | 1890 } |
| 1899 case kArmInt8x16ShiftLeftByScalar: { | 1891 case kArmI8x16Shl: { |
| 1900 __ vshl(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1892 __ vshl(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1901 i.InputInt3(1)); | 1893 i.InputInt3(1)); |
| 1902 break; | 1894 break; |
| 1903 } | 1895 } |
| 1904 case kArmInt8x16ShiftRightByScalar: { | 1896 case kArmI8x16ShrS: { |
| 1905 __ vshr(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1897 __ vshr(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1906 i.InputInt3(1)); | 1898 i.InputInt3(1)); |
| 1907 break; | 1899 break; |
| 1908 } | 1900 } |
| 1909 case kArmInt8x16Add: { | 1901 case kArmI8x16Add: { |
| 1910 __ vadd(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1902 __ vadd(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1911 i.InputSimd128Register(1)); | 1903 i.InputSimd128Register(1)); |
| 1912 break; | 1904 break; |
| 1913 } | 1905 } |
| 1914 case kArmInt8x16AddSaturate: { | 1906 case kArmI8x16AddSaturate: { |
| 1915 __ vqadd(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1907 __ vqadd(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1916 i.InputSimd128Register(1)); | 1908 i.InputSimd128Register(1)); |
| 1917 break; | 1909 break; |
| 1918 } | 1910 } |
| 1919 case kArmInt8x16Sub: { | 1911 case kArmI8x16Sub: { |
| 1920 __ vsub(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1912 __ vsub(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1921 i.InputSimd128Register(1)); | 1913 i.InputSimd128Register(1)); |
| 1922 break; | 1914 break; |
| 1923 } | 1915 } |
| 1924 case kArmInt8x16SubSaturate: { | 1916 case kArmI8x16SubSaturate: { |
| 1925 __ vqsub(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1917 __ vqsub(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1926 i.InputSimd128Register(1)); | 1918 i.InputSimd128Register(1)); |
| 1927 break; | 1919 break; |
| 1928 } | 1920 } |
| 1929 case kArmInt8x16Mul: { | 1921 case kArmI8x16Mul: { |
| 1930 __ vmul(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1922 __ vmul(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1931 i.InputSimd128Register(1)); | 1923 i.InputSimd128Register(1)); |
| 1932 break; | 1924 break; |
| 1933 } | 1925 } |
| 1934 case kArmInt8x16Min: { | 1926 case kArmI8x16MinS: { |
| 1935 __ vmin(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1927 __ vmin(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1936 i.InputSimd128Register(1)); | 1928 i.InputSimd128Register(1)); |
| 1937 break; | 1929 break; |
| 1938 } | 1930 } |
| 1939 case kArmInt8x16Max: { | 1931 case kArmI8x16MaxS: { |
| 1940 __ vmax(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1932 __ vmax(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1941 i.InputSimd128Register(1)); | 1933 i.InputSimd128Register(1)); |
| 1942 break; | 1934 break; |
| 1943 } | 1935 } |
| 1944 case kArmInt8x16Equal: { | 1936 case kArmI8x16Eq: { |
| 1945 __ vceq(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1937 __ vceq(Neon8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1946 i.InputSimd128Register(1)); | 1938 i.InputSimd128Register(1)); |
| 1947 break; | 1939 break; |
| 1948 } | 1940 } |
| 1949 case kArmInt8x16NotEqual: { | 1941 case kArmI8x16Ne: { |
| 1950 Simd128Register dst = i.OutputSimd128Register(); | 1942 Simd128Register dst = i.OutputSimd128Register(); |
| 1951 __ vceq(Neon8, dst, i.InputSimd128Register(0), i.InputSimd128Register(1)); | 1943 __ vceq(Neon8, dst, i.InputSimd128Register(0), i.InputSimd128Register(1)); |
| 1952 __ vmvn(dst, dst); | 1944 __ vmvn(dst, dst); |
| 1953 break; | 1945 break; |
| 1954 } | 1946 } |
| 1955 case kArmInt8x16LessThan: { | 1947 case kArmI8x16LtS: { |
| 1956 __ vcgt(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1948 __ vcgt(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1957 i.InputSimd128Register(0)); | 1949 i.InputSimd128Register(0)); |
| 1958 break; | 1950 break; |
| 1959 } | 1951 } |
| 1960 case kArmInt8x16LessThanOrEqual: { | 1952 case kArmI8x16LeS: { |
| 1961 __ vcge(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1953 __ vcge(NeonS8, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1962 i.InputSimd128Register(0)); | 1954 i.InputSimd128Register(0)); |
| 1963 break; | 1955 break; |
| 1964 } | 1956 } |
| 1965 case kArmUint8x16ShiftRightByScalar: { | 1957 case kArmI8x16ShrU: { |
| 1966 __ vshr(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1958 __ vshr(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1967 i.InputInt3(1)); | 1959 i.InputInt3(1)); |
| 1968 break; | 1960 break; |
| 1969 } | 1961 } |
| 1970 case kArmUint8x16AddSaturate: { | 1962 case kArmI8x16AddSaturateU: { |
| 1971 __ vqadd(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1963 __ vqadd(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1972 i.InputSimd128Register(1)); | 1964 i.InputSimd128Register(1)); |
| 1973 break; | 1965 break; |
| 1974 } | 1966 } |
| 1975 case kArmUint8x16SubSaturate: { | 1967 case kArmI8x16SubSaturateU: { |
| 1976 __ vqsub(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1968 __ vqsub(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1977 i.InputSimd128Register(1)); | 1969 i.InputSimd128Register(1)); |
| 1978 break; | 1970 break; |
| 1979 } | 1971 } |
| 1980 case kArmUint8x16Min: { | 1972 case kArmI8x16MinU: { |
| 1981 __ vmin(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1973 __ vmin(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1982 i.InputSimd128Register(1)); | 1974 i.InputSimd128Register(1)); |
| 1983 break; | 1975 break; |
| 1984 } | 1976 } |
| 1985 case kArmUint8x16Max: { | 1977 case kArmI8x16MaxU: { |
| 1986 __ vmax(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), | 1978 __ vmax(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 1987 i.InputSimd128Register(1)); | 1979 i.InputSimd128Register(1)); |
| 1988 break; | 1980 break; |
| 1989 } | 1981 } |
| 1990 case kArmUint8x16LessThan: { | 1982 case kArmI8x16LtU: { |
| 1991 __ vcgt(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1983 __ vcgt(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1992 i.InputSimd128Register(0)); | 1984 i.InputSimd128Register(0)); |
| 1993 break; | 1985 break; |
| 1994 } | 1986 } |
| 1995 case kArmUint8x16LessThanOrEqual: { | 1987 case kArmI8x16LeU: { |
| 1996 __ vcge(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(1), | 1988 __ vcge(NeonU8, i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 1997 i.InputSimd128Register(0)); | 1989 i.InputSimd128Register(0)); |
| 1998 break; | 1990 break; |
| 1999 } | 1991 } |
| 2000 case kArmSimd128Zero: { | 1992 case kArmS128Zero: { |
| 2001 __ veor(i.OutputSimd128Register(), i.OutputSimd128Register(), | 1993 __ veor(i.OutputSimd128Register(), i.OutputSimd128Register(), |
| 2002 i.OutputSimd128Register()); | 1994 i.OutputSimd128Register()); |
| 2003 break; | 1995 break; |
| 2004 } | 1996 } |
| 2005 case kArmSimd128And: { | 1997 case kArmS128And: { |
| 2006 __ vand(i.OutputSimd128Register(), i.InputSimd128Register(0), | 1998 __ vand(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 2007 i.InputSimd128Register(1)); | 1999 i.InputSimd128Register(1)); |
| 2008 break; | 2000 break; |
| 2009 } | 2001 } |
| 2010 case kArmSimd128Or: { | 2002 case kArmS128Or: { |
| 2011 __ vorr(i.OutputSimd128Register(), i.InputSimd128Register(0), | 2003 __ vorr(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 2012 i.InputSimd128Register(1)); | 2004 i.InputSimd128Register(1)); |
| 2013 break; | 2005 break; |
| 2014 } | 2006 } |
| 2015 case kArmSimd128Xor: { | 2007 case kArmS128Xor: { |
| 2016 __ veor(i.OutputSimd128Register(), i.InputSimd128Register(0), | 2008 __ veor(i.OutputSimd128Register(), i.InputSimd128Register(0), |
| 2017 i.InputSimd128Register(1)); | 2009 i.InputSimd128Register(1)); |
| 2018 break; | 2010 break; |
| 2019 } | 2011 } |
| 2020 case kArmSimd128Not: { | 2012 case kArmS128Not: { |
| 2021 __ vmvn(i.OutputSimd128Register(), i.InputSimd128Register(0)); | 2013 __ vmvn(i.OutputSimd128Register(), i.InputSimd128Register(0)); |
| 2022 break; | 2014 break; |
| 2023 } | 2015 } |
| 2024 case kArmSimd128Select: { | 2016 case kArmS128Select: { |
| 2025 // vbsl clobbers the mask input so make sure it was DefineSameAsFirst. | 2017 // vbsl clobbers the mask input so make sure it was DefineSameAsFirst. |
| 2026 DCHECK(i.OutputSimd128Register().is(i.InputSimd128Register(0))); | 2018 DCHECK(i.OutputSimd128Register().is(i.InputSimd128Register(0))); |
| 2027 __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), | 2019 __ vbsl(i.OutputSimd128Register(), i.InputSimd128Register(1), |
| 2028 i.InputSimd128Register(2)); | 2020 i.InputSimd128Register(2)); |
| 2029 break; | 2021 break; |
| 2030 } | 2022 } |
| 2031 case kArmSimd1x4AnyTrue: { | 2023 case kArmS1x4AnyTrue: { |
| 2032 const QwNeonRegister& src = i.InputSimd128Register(0); | 2024 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2033 __ vpmax(NeonU32, kScratchDoubleReg, src.low(), src.high()); | 2025 __ vpmax(NeonU32, kScratchDoubleReg, src.low(), src.high()); |
| 2034 __ vpmax(NeonU32, kScratchDoubleReg, kScratchDoubleReg, | 2026 __ vpmax(NeonU32, kScratchDoubleReg, kScratchDoubleReg, |
| 2035 kScratchDoubleReg); | 2027 kScratchDoubleReg); |
| 2036 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); | 2028 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); |
| 2037 break; | 2029 break; |
| 2038 } | 2030 } |
| 2039 case kArmSimd1x4AllTrue: { | 2031 case kArmS1x4AllTrue: { |
| 2040 const QwNeonRegister& src = i.InputSimd128Register(0); | 2032 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2041 __ vpmin(NeonU32, kScratchDoubleReg, src.low(), src.high()); | 2033 __ vpmin(NeonU32, kScratchDoubleReg, src.low(), src.high()); |
| 2042 __ vpmin(NeonU32, kScratchDoubleReg, kScratchDoubleReg, | 2034 __ vpmin(NeonU32, kScratchDoubleReg, kScratchDoubleReg, |
| 2043 kScratchDoubleReg); | 2035 kScratchDoubleReg); |
| 2044 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); | 2036 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); |
| 2045 break; | 2037 break; |
| 2046 } | 2038 } |
| 2047 case kArmSimd1x8AnyTrue: { | 2039 case kArmS1x8AnyTrue: { |
| 2048 const QwNeonRegister& src = i.InputSimd128Register(0); | 2040 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2049 __ vpmax(NeonU16, kScratchDoubleReg, src.low(), src.high()); | 2041 __ vpmax(NeonU16, kScratchDoubleReg, src.low(), src.high()); |
| 2050 __ vpmax(NeonU16, kScratchDoubleReg, kScratchDoubleReg, | 2042 __ vpmax(NeonU16, kScratchDoubleReg, kScratchDoubleReg, |
| 2051 kScratchDoubleReg); | 2043 kScratchDoubleReg); |
| 2052 __ vpmax(NeonU16, kScratchDoubleReg, kScratchDoubleReg, | 2044 __ vpmax(NeonU16, kScratchDoubleReg, kScratchDoubleReg, |
| 2053 kScratchDoubleReg); | 2045 kScratchDoubleReg); |
| 2054 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS16, 0); | 2046 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS16, 0); |
| 2055 break; | 2047 break; |
| 2056 } | 2048 } |
| 2057 case kArmSimd1x8AllTrue: { | 2049 case kArmS1x8AllTrue: { |
| 2058 const QwNeonRegister& src = i.InputSimd128Register(0); | 2050 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2059 __ vpmin(NeonU16, kScratchDoubleReg, src.low(), src.high()); | 2051 __ vpmin(NeonU16, kScratchDoubleReg, src.low(), src.high()); |
| 2060 __ vpmin(NeonU16, kScratchDoubleReg, kScratchDoubleReg, | 2052 __ vpmin(NeonU16, kScratchDoubleReg, kScratchDoubleReg, |
| 2061 kScratchDoubleReg); | 2053 kScratchDoubleReg); |
| 2062 __ vpmin(NeonU16, kScratchDoubleReg, kScratchDoubleReg, | 2054 __ vpmin(NeonU16, kScratchDoubleReg, kScratchDoubleReg, |
| 2063 kScratchDoubleReg); | 2055 kScratchDoubleReg); |
| 2064 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS16, 0); | 2056 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS16, 0); |
| 2065 break; | 2057 break; |
| 2066 } | 2058 } |
| 2067 case kArmSimd1x16AnyTrue: { | 2059 case kArmS1x16AnyTrue: { |
| 2068 const QwNeonRegister& src = i.InputSimd128Register(0); | 2060 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2069 __ vpmax(NeonU8, kScratchDoubleReg, src.low(), src.high()); | 2061 __ vpmax(NeonU8, kScratchDoubleReg, src.low(), src.high()); |
| 2070 __ vpmax(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); | 2062 __ vpmax(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); |
| 2071 // vtst to detect any bits in the bottom 32 bits of kScratchDoubleReg. | 2063 // vtst to detect any bits in the bottom 32 bits of kScratchDoubleReg. |
| 2072 // This saves an instruction vs. the naive sequence of vpmax. | 2064 // This saves an instruction vs. the naive sequence of vpmax. |
| 2073 // kDoubleRegZero is not changed, since it is 0. | 2065 // kDoubleRegZero is not changed, since it is 0. |
| 2074 __ vtst(Neon32, kScratchQuadReg, kScratchQuadReg, kScratchQuadReg); | 2066 __ vtst(Neon32, kScratchQuadReg, kScratchQuadReg, kScratchQuadReg); |
| 2075 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); | 2067 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS32, 0); |
| 2076 break; | 2068 break; |
| 2077 } | 2069 } |
| 2078 case kArmSimd1x16AllTrue: { | 2070 case kArmS1x16AllTrue: { |
| 2079 const QwNeonRegister& src = i.InputSimd128Register(0); | 2071 const QwNeonRegister& src = i.InputSimd128Register(0); |
| 2080 __ vpmin(NeonU8, kScratchDoubleReg, src.low(), src.high()); | 2072 __ vpmin(NeonU8, kScratchDoubleReg, src.low(), src.high()); |
| 2081 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); | 2073 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); |
| 2082 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); | 2074 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); |
| 2083 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); | 2075 __ vpmin(NeonU8, kScratchDoubleReg, kScratchDoubleReg, kScratchDoubleReg); |
| 2084 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS8, 0); | 2076 __ ExtractLane(i.OutputRegister(), kScratchDoubleReg, NeonS8, 0); |
| 2085 break; | 2077 break; |
| 2086 } | 2078 } |
| 2087 case kCheckedLoadInt8: | 2079 case kCheckedLoadInt8: |
| 2088 ASSEMBLE_CHECKED_LOAD_INTEGER(ldrsb); | 2080 ASSEMBLE_CHECKED_LOAD_INTEGER(ldrsb); |
| (...skipping 742 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2831 padding_size -= v8::internal::Assembler::kInstrSize; | 2823 padding_size -= v8::internal::Assembler::kInstrSize; |
| 2832 } | 2824 } |
| 2833 } | 2825 } |
| 2834 } | 2826 } |
| 2835 | 2827 |
| 2836 #undef __ | 2828 #undef __ |
| 2837 | 2829 |
| 2838 } // namespace compiler | 2830 } // namespace compiler |
| 2839 } // namespace internal | 2831 } // namespace internal |
| 2840 } // namespace v8 | 2832 } // namespace v8 |
| OLD | NEW |