Skip to content

Commit 232db11

Browse files
committedJun 20, 2019
[ARM] Add a batch of MVE integer instructions.
This includes integer arithmetic of various kinds (add/sub/multiply, saturating and not), and the immediate forms of VMOV and VMVN that load an immediate into all lanes of a vector. Reviewers: dmgreen, samparker, SjoerdMeijer, t.p.northover Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D62674 llvm-svn: 363936
1 parent 0ac17be commit 232db11

File tree

5 files changed

+1127
-1
lines changed

5 files changed

+1127
-1
lines changed
 

‎llvm/lib/Target/ARM/ARMInstrMVE.td

+372
Original file line numberDiff line numberDiff line change
@@ -1521,6 +1521,378 @@ def MVE_VMOV_to_lane_8 : MVE_VMOV_lane_8 < "8", 0b0, MVE_VMOV_to_lane>;
15211521

15221522
// end of mve_bit instructions
15231523

1524+
// start of MVE Integer instructions
1525+
1526+
class MVE_int<string iname, string suffix, bits<2> size, list<dag> pattern=[]>
1527+
: MVE_p<(outs MQPR:$Qd), (ins MQPR:$Qn, MQPR:$Qm), NoItinerary,
1528+
iname, suffix, "$Qd, $Qn, $Qm", vpred_r, "", pattern> {
1529+
bits<4> Qd;
1530+
bits<4> Qn;
1531+
bits<4> Qm;
1532+
1533+
let Inst{22} = Qd{3};
1534+
let Inst{21-20} = size;
1535+
let Inst{19-17} = Qn{2-0};
1536+
let Inst{15-13} = Qd{2-0};
1537+
let Inst{7} = Qn{3};
1538+
let Inst{6} = 0b1;
1539+
let Inst{5} = Qm{3};
1540+
let Inst{3-1} = Qm{2-0};
1541+
}
1542+
1543+
class MVE_VMULt1<string suffix, bits<2> size, list<dag> pattern=[]>
1544+
: MVE_int<"vmul", suffix, size, pattern> {
1545+
1546+
let Inst{28} = 0b0;
1547+
let Inst{25-23} = 0b110;
1548+
let Inst{16} = 0b0;
1549+
let Inst{12-8} = 0b01001;
1550+
let Inst{4} = 0b1;
1551+
let Inst{0} = 0b0;
1552+
}
1553+
1554+
def MVE_VMULt1i8 : MVE_VMULt1<"i8", 0b00>;
1555+
def MVE_VMULt1i16 : MVE_VMULt1<"i16", 0b01>;
1556+
def MVE_VMULt1i32 : MVE_VMULt1<"i32", 0b10>;
1557+
1558+
class MVE_VQxDMULH<string iname, string suffix, bits<2> size, bit rounding,
1559+
list<dag> pattern=[]>
1560+
: MVE_int<iname, suffix, size, pattern> {
1561+
1562+
let Inst{28} = rounding;
1563+
let Inst{25-23} = 0b110;
1564+
let Inst{16} = 0b0;
1565+
let Inst{12-8} = 0b01011;
1566+
let Inst{4} = 0b0;
1567+
let Inst{0} = 0b0;
1568+
}
1569+
1570+
class MVE_VQDMULH<string suffix, bits<2> size, list<dag> pattern=[]>
1571+
: MVE_VQxDMULH<"vqdmulh", suffix, size, 0b0, pattern>;
1572+
class MVE_VQRDMULH<string suffix, bits<2> size, list<dag> pattern=[]>
1573+
: MVE_VQxDMULH<"vqrdmulh", suffix, size, 0b1, pattern>;
1574+
1575+
def MVE_VQDMULHi8 : MVE_VQDMULH<"s8", 0b00>;
1576+
def MVE_VQDMULHi16 : MVE_VQDMULH<"s16", 0b01>;
1577+
def MVE_VQDMULHi32 : MVE_VQDMULH<"s32", 0b10>;
1578+
1579+
def MVE_VQRDMULHi8 : MVE_VQRDMULH<"s8", 0b00>;
1580+
def MVE_VQRDMULHi16 : MVE_VQRDMULH<"s16", 0b01>;
1581+
def MVE_VQRDMULHi32 : MVE_VQRDMULH<"s32", 0b10>;
1582+
1583+
class MVE_VADDSUB<string iname, string suffix, bits<2> size, bit subtract,
1584+
list<dag> pattern=[]>
1585+
: MVE_int<iname, suffix, size, pattern> {
1586+
1587+
let Inst{28} = subtract;
1588+
let Inst{25-23} = 0b110;
1589+
let Inst{16} = 0b0;
1590+
let Inst{12-8} = 0b01000;
1591+
let Inst{4} = 0b0;
1592+
let Inst{0} = 0b0;
1593+
}
1594+
1595+
class MVE_VADD<string suffix, bits<2> size, list<dag> pattern=[]>
1596+
: MVE_VADDSUB<"vadd", suffix, size, 0b0, pattern>;
1597+
class MVE_VSUB<string suffix, bits<2> size, list<dag> pattern=[]>
1598+
: MVE_VADDSUB<"vsub", suffix, size, 0b1, pattern>;
1599+
1600+
def MVE_VADDi8 : MVE_VADD<"i8", 0b00>;
1601+
def MVE_VADDi16 : MVE_VADD<"i16", 0b01>;
1602+
def MVE_VADDi32 : MVE_VADD<"i32", 0b10>;
1603+
1604+
def MVE_VSUBi8 : MVE_VSUB<"i8", 0b00>;
1605+
def MVE_VSUBi16 : MVE_VSUB<"i16", 0b01>;
1606+
def MVE_VSUBi32 : MVE_VSUB<"i32", 0b10>;
1607+
1608+
class MVE_VQADDSUB<string iname, string suffix, bit U, bit subtract,
1609+
bits<2> size, list<dag> pattern=[]>
1610+
: MVE_int<iname, suffix, size, pattern> {
1611+
1612+
let Inst{28} = U;
1613+
let Inst{25-23} = 0b110;
1614+
let Inst{16} = 0b0;
1615+
let Inst{12-10} = 0b000;
1616+
let Inst{9} = subtract;
1617+
let Inst{8} = 0b0;
1618+
let Inst{4} = 0b1;
1619+
let Inst{0} = 0b0;
1620+
}
1621+
1622+
class MVE_VQADD<string suffix, bit U, bits<2> size, list<dag> pattern=[]>
1623+
: MVE_VQADDSUB<"vqadd", suffix, U, 0b0, size, pattern>;
1624+
class MVE_VQSUB<string suffix, bit U, bits<2> size, list<dag> pattern=[]>
1625+
: MVE_VQADDSUB<"vqsub", suffix, U, 0b1, size, pattern>;
1626+
1627+
def MVE_VQADDs8 : MVE_VQADD<"s8", 0b0, 0b00>;
1628+
def MVE_VQADDs16 : MVE_VQADD<"s16", 0b0, 0b01>;
1629+
def MVE_VQADDs32 : MVE_VQADD<"s32", 0b0, 0b10>;
1630+
def MVE_VQADDu8 : MVE_VQADD<"u8", 0b1, 0b00>;
1631+
def MVE_VQADDu16 : MVE_VQADD<"u16", 0b1, 0b01>;
1632+
def MVE_VQADDu32 : MVE_VQADD<"u32", 0b1, 0b10>;
1633+
1634+
def MVE_VQSUBs8 : MVE_VQSUB<"s8", 0b0, 0b00>;
1635+
def MVE_VQSUBs16 : MVE_VQSUB<"s16", 0b0, 0b01>;
1636+
def MVE_VQSUBs32 : MVE_VQSUB<"s32", 0b0, 0b10>;
1637+
def MVE_VQSUBu8 : MVE_VQSUB<"u8", 0b1, 0b00>;
1638+
def MVE_VQSUBu16 : MVE_VQSUB<"u16", 0b1, 0b01>;
1639+
def MVE_VQSUBu32 : MVE_VQSUB<"u32", 0b1, 0b10>;
1640+
1641+
class MVE_VABD_int<string suffix, bit U, bits<2> size, list<dag> pattern=[]>
1642+
: MVE_int<"vabd", suffix, size, pattern> {
1643+
1644+
let Inst{28} = U;
1645+
let Inst{25-23} = 0b110;
1646+
let Inst{16} = 0b0;
1647+
let Inst{12-8} = 0b00111;
1648+
let Inst{4} = 0b0;
1649+
let Inst{0} = 0b0;
1650+
}
1651+
1652+
def MVE_VABDs8 : MVE_VABD_int<"s8", 0b0, 0b00>;
1653+
def MVE_VABDs16 : MVE_VABD_int<"s16", 0b0, 0b01>;
1654+
def MVE_VABDs32 : MVE_VABD_int<"s32", 0b0, 0b10>;
1655+
def MVE_VABDu8 : MVE_VABD_int<"u8", 0b1, 0b00>;
1656+
def MVE_VABDu16 : MVE_VABD_int<"u16", 0b1, 0b01>;
1657+
def MVE_VABDu32 : MVE_VABD_int<"u32", 0b1, 0b10>;
1658+
1659+
class MVE_VRHADD<string suffix, bit U, bits<2> size, list<dag> pattern=[]>
1660+
: MVE_int<"vrhadd", suffix, size, pattern> {
1661+
1662+
let Inst{28} = U;
1663+
let Inst{25-23} = 0b110;
1664+
let Inst{16} = 0b0;
1665+
let Inst{12-8} = 0b00001;
1666+
let Inst{4} = 0b0;
1667+
let Inst{0} = 0b0;
1668+
}
1669+
1670+
def MVE_VRHADDs8 : MVE_VRHADD<"s8", 0b0, 0b00>;
1671+
def MVE_VRHADDs16 : MVE_VRHADD<"s16", 0b0, 0b01>;
1672+
def MVE_VRHADDs32 : MVE_VRHADD<"s32", 0b0, 0b10>;
1673+
def MVE_VRHADDu8 : MVE_VRHADD<"u8", 0b1, 0b00>;
1674+
def MVE_VRHADDu16 : MVE_VRHADD<"u16", 0b1, 0b01>;
1675+
def MVE_VRHADDu32 : MVE_VRHADD<"u32", 0b1, 0b10>;
1676+
1677+
class MVE_VHADDSUB<string iname, string suffix, bit U, bit subtract,
1678+
bits<2> size, list<dag> pattern=[]>
1679+
: MVE_int<iname, suffix, size, pattern> {
1680+
1681+
let Inst{28} = U;
1682+
let Inst{25-23} = 0b110;
1683+
let Inst{16} = 0b0;
1684+
let Inst{12-10} = 0b000;
1685+
let Inst{9} = subtract;
1686+
let Inst{8} = 0b0;
1687+
let Inst{4} = 0b0;
1688+
let Inst{0} = 0b0;
1689+
}
1690+
1691+
class MVE_VHADD<string suffix, bit U, bits<2> size,
1692+
list<dag> pattern=[]>
1693+
: MVE_VHADDSUB<"vhadd", suffix, U, 0b0, size, pattern>;
1694+
class MVE_VHSUB<string suffix, bit U, bits<2> size,
1695+
list<dag> pattern=[]>
1696+
: MVE_VHADDSUB<"vhsub", suffix, U, 0b1, size, pattern>;
1697+
1698+
def MVE_VHADDs8 : MVE_VHADD<"s8", 0b0, 0b00>;
1699+
def MVE_VHADDs16 : MVE_VHADD<"s16", 0b0, 0b01>;
1700+
def MVE_VHADDs32 : MVE_VHADD<"s32", 0b0, 0b10>;
1701+
def MVE_VHADDu8 : MVE_VHADD<"u8", 0b1, 0b00>;
1702+
def MVE_VHADDu16 : MVE_VHADD<"u16", 0b1, 0b01>;
1703+
def MVE_VHADDu32 : MVE_VHADD<"u32", 0b1, 0b10>;
1704+
1705+
def MVE_VHSUBs8 : MVE_VHSUB<"s8", 0b0, 0b00>;
1706+
def MVE_VHSUBs16 : MVE_VHSUB<"s16", 0b0, 0b01>;
1707+
def MVE_VHSUBs32 : MVE_VHSUB<"s32", 0b0, 0b10>;
1708+
def MVE_VHSUBu8 : MVE_VHSUB<"u8", 0b1, 0b00>;
1709+
def MVE_VHSUBu16 : MVE_VHSUB<"u16", 0b1, 0b01>;
1710+
def MVE_VHSUBu32 : MVE_VHSUB<"u32", 0b1, 0b10>;
1711+
1712+
class MVE_VDUP<string suffix, bit B, bit E, list<dag> pattern=[]>
1713+
: MVE_p<(outs MQPR:$Qd), (ins rGPR:$Rt), NoItinerary,
1714+
"vdup", suffix, "$Qd, $Rt", vpred_r, "", pattern> {
1715+
bits<4> Qd;
1716+
bits<4> Rt;
1717+
1718+
let Inst{28} = 0b0;
1719+
let Inst{25-23} = 0b101;
1720+
let Inst{22} = B;
1721+
let Inst{21-20} = 0b10;
1722+
let Inst{19-17} = Qd{2-0};
1723+
let Inst{16} = 0b0;
1724+
let Inst{15-12} = Rt;
1725+
let Inst{11-8} = 0b1011;
1726+
let Inst{7} = Qd{3};
1727+
let Inst{6} = 0b0;
1728+
let Inst{5} = E;
1729+
let Inst{4-0} = 0b10000;
1730+
}
1731+
1732+
def MVE_VDUP32 : MVE_VDUP<"32", 0b0, 0b0>;
1733+
def MVE_VDUP16 : MVE_VDUP<"16", 0b0, 0b1>;
1734+
def MVE_VDUP8 : MVE_VDUP<"8", 0b1, 0b0>;
1735+
1736+
class MVEIntSingleSrc<string iname, string suffix, bits<2> size,
1737+
list<dag> pattern=[]>
1738+
: MVE_p<(outs MQPR:$Qd), (ins MQPR:$Qm), NoItinerary,
1739+
iname, suffix, "$Qd, $Qm", vpred_r, "", pattern> {
1740+
bits<4> Qd;
1741+
bits<4> Qm;
1742+
1743+
let Inst{22} = Qd{3};
1744+
let Inst{19-18} = size{1-0};
1745+
let Inst{15-13} = Qd{2-0};
1746+
let Inst{5} = Qm{3};
1747+
let Inst{3-1} = Qm{2-0};
1748+
}
1749+
1750+
class MVE_VCLSCLZ<string iname, string suffix, bits<2> size,
1751+
bit count_zeroes, list<dag> pattern=[]>
1752+
: MVEIntSingleSrc<iname, suffix, size, pattern> {
1753+
1754+
let Inst{28} = 0b1;
1755+
let Inst{25-23} = 0b111;
1756+
let Inst{21-20} = 0b11;
1757+
let Inst{17-16} = 0b00;
1758+
let Inst{12-8} = 0b00100;
1759+
let Inst{7} = count_zeroes;
1760+
let Inst{6} = 0b1;
1761+
let Inst{4} = 0b0;
1762+
let Inst{0} = 0b0;
1763+
}
1764+
1765+
def MVE_VCLSs8 : MVE_VCLSCLZ<"vcls", "s8", 0b00, 0b0>;
1766+
def MVE_VCLSs16 : MVE_VCLSCLZ<"vcls", "s16", 0b01, 0b0>;
1767+
def MVE_VCLSs32 : MVE_VCLSCLZ<"vcls", "s32", 0b10, 0b0>;
1768+
1769+
def MVE_VCLZs8 : MVE_VCLSCLZ<"vclz", "i8", 0b00, 0b1>;
1770+
def MVE_VCLZs16 : MVE_VCLSCLZ<"vclz", "i16", 0b01, 0b1>;
1771+
def MVE_VCLZs32 : MVE_VCLSCLZ<"vclz", "i32", 0b10, 0b1>;
1772+
1773+
class MVE_VABSNEG_int<string iname, string suffix, bits<2> size, bit negate,
1774+
list<dag> pattern=[]>
1775+
: MVEIntSingleSrc<iname, suffix, size, pattern> {
1776+
1777+
let Inst{28} = 0b1;
1778+
let Inst{25-23} = 0b111;
1779+
let Inst{21-20} = 0b11;
1780+
let Inst{17-16} = 0b01;
1781+
let Inst{12-8} = 0b00011;
1782+
let Inst{7} = negate;
1783+
let Inst{6} = 0b1;
1784+
let Inst{4} = 0b0;
1785+
let Inst{0} = 0b0;
1786+
}
1787+
1788+
def MVE_VABSs8 : MVE_VABSNEG_int<"vabs", "s8", 0b00, 0b0>;
1789+
def MVE_VABSs16 : MVE_VABSNEG_int<"vabs", "s16", 0b01, 0b0>;
1790+
def MVE_VABSs32 : MVE_VABSNEG_int<"vabs", "s32", 0b10, 0b0>;
1791+
1792+
def MVE_VNEGs8 : MVE_VABSNEG_int<"vneg", "s8", 0b00, 0b1>;
1793+
def MVE_VNEGs16 : MVE_VABSNEG_int<"vneg", "s16", 0b01, 0b1>;
1794+
def MVE_VNEGs32 : MVE_VABSNEG_int<"vneg", "s32", 0b10, 0b1>;
1795+
1796+
class MVE_VQABSNEG<string iname, string suffix, bits<2> size,
1797+
bit negate, list<dag> pattern=[]>
1798+
: MVEIntSingleSrc<iname, suffix, size, pattern> {
1799+
1800+
let Inst{28} = 0b1;
1801+
let Inst{25-23} = 0b111;
1802+
let Inst{21-20} = 0b11;
1803+
let Inst{17-16} = 0b00;
1804+
let Inst{12-8} = 0b00111;
1805+
let Inst{7} = negate;
1806+
let Inst{6} = 0b1;
1807+
let Inst{4} = 0b0;
1808+
let Inst{0} = 0b0;
1809+
}
1810+
1811+
def MVE_VQABSs8 : MVE_VQABSNEG<"vqabs", "s8", 0b00, 0b0>;
1812+
def MVE_VQABSs16 : MVE_VQABSNEG<"vqabs", "s16", 0b01, 0b0>;
1813+
def MVE_VQABSs32 : MVE_VQABSNEG<"vqabs", "s32", 0b10, 0b0>;
1814+
1815+
def MVE_VQNEGs8 : MVE_VQABSNEG<"vqneg", "s8", 0b00, 0b1>;
1816+
def MVE_VQNEGs16 : MVE_VQABSNEG<"vqneg", "s16", 0b01, 0b1>;
1817+
def MVE_VQNEGs32 : MVE_VQABSNEG<"vqneg", "s32", 0b10, 0b1>;
1818+
1819+
class MVE_mod_imm<string iname, string suffix, bits<4> cmode, bit op,
1820+
dag iops, list<dag> pattern=[]>
1821+
: MVE_p<(outs MQPR:$Qd), iops, NoItinerary, iname, suffix, "$Qd, $imm",
1822+
vpred_r, "", pattern> {
1823+
bits<13> imm;
1824+
bits<4> Qd;
1825+
1826+
let Inst{28} = imm{7};
1827+
let Inst{25-23} = 0b111;
1828+
let Inst{22} = Qd{3};
1829+
let Inst{21-19} = 0b000;
1830+
let Inst{18-16} = imm{6-4};
1831+
let Inst{15-13} = Qd{2-0};
1832+
let Inst{12} = 0b0;
1833+
let Inst{11-8} = cmode{3-0};
1834+
let Inst{7-6} = 0b01;
1835+
let Inst{5} = op;
1836+
let Inst{4} = 0b1;
1837+
let Inst{3-0} = imm{3-0};
1838+
1839+
let DecoderMethod = "DecodeMVEModImmInstruction";
1840+
}
1841+
1842+
let isReMaterializable = 1 in {
1843+
let isAsCheapAsAMove = 1 in {
1844+
def MVE_VMOVimmi8 : MVE_mod_imm<"vmov", "i8", {1,1,1,0}, 0b0, (ins nImmSplatI8:$imm)>;
1845+
def MVE_VMOVimmi16 : MVE_mod_imm<"vmov", "i16", {1,0,?,0}, 0b0, (ins nImmSplatI16:$imm)> {
1846+
let Inst{9} = imm{9};
1847+
}
1848+
def MVE_VMOVimmi32 : MVE_mod_imm<"vmov", "i32", {?,?,?,?}, 0b0, (ins nImmVMOVI32:$imm)> {
1849+
let Inst{11-8} = imm{11-8};
1850+
}
1851+
def MVE_VMOVimmi64 : MVE_mod_imm<"vmov", "i64", {1,1,1,0}, 0b1, (ins nImmSplatI64:$imm)>;
1852+
def MVE_VMOVimmf32 : MVE_mod_imm<"vmov", "f32", {1,1,1,1}, 0b0, (ins nImmVMOVF32:$imm)>;
1853+
} // let isAsCheapAsAMove = 1
1854+
1855+
def MVE_VMVNimmi16 : MVE_mod_imm<"vmvn", "i16", {1,0,?,0}, 0b1, (ins nImmSplatI16:$imm)> {
1856+
let Inst{9} = imm{9};
1857+
}
1858+
def MVE_VMVNimmi32 : MVE_mod_imm<"vmvn", "i32", {?,?,?,?}, 0b1, (ins nImmVMOVI32:$imm)> {
1859+
let Inst{11-8} = imm{11-8};
1860+
}
1861+
} // let isReMaterializable = 1
1862+
1863+
class MVE_VMINMAXA<string iname, string suffix, bits<2> size,
1864+
bit bit_12, list<dag> pattern=[]>
1865+
: MVE_p<(outs MQPR:$Qd), (ins MQPR:$Qd_src, MQPR:$Qm),
1866+
NoItinerary, iname, suffix, "$Qd, $Qm", vpred_n, "$Qd = $Qd_src",
1867+
pattern> {
1868+
bits<4> Qd;
1869+
bits<4> Qm;
1870+
1871+
let Inst{28} = 0b0;
1872+
let Inst{25-23} = 0b100;
1873+
let Inst{22} = Qd{3};
1874+
let Inst{21-20} = 0b11;
1875+
let Inst{19-18} = size;
1876+
let Inst{17-16} = 0b11;
1877+
let Inst{15-13} = Qd{2-0};
1878+
let Inst{12} = bit_12;
1879+
let Inst{11-6} = 0b111010;
1880+
let Inst{5} = Qm{3};
1881+
let Inst{4} = 0b0;
1882+
let Inst{3-1} = Qm{2-0};
1883+
let Inst{0} = 0b1;
1884+
}
1885+
1886+
def MVE_VMAXAs8 : MVE_VMINMAXA<"vmaxa", "s8", 0b00, 0b0>;
1887+
def MVE_VMAXAs16 : MVE_VMINMAXA<"vmaxa", "s16", 0b01, 0b0>;
1888+
def MVE_VMAXAs32 : MVE_VMINMAXA<"vmaxa", "s32", 0b10, 0b0>;
1889+
1890+
def MVE_VMINAs8 : MVE_VMINMAXA<"vmina", "s8", 0b00, 0b1>;
1891+
def MVE_VMINAs16 : MVE_VMINMAXA<"vmina", "s16", 0b01, 0b1>;
1892+
def MVE_VMINAs32 : MVE_VMINMAXA<"vmina", "s32", 0b10, 0b1>;
1893+
1894+
// end of MVE Integer instructions
1895+
15241896
class MVE_VPT<string suffix, bits<2> size, dag iops, string asm, list<dag> pattern=[]>
15251897
: MVE_MI<(outs ), iops, NoItinerary, !strconcat("vpt", "${Mk}", ".", suffix), asm, "", pattern> {
15261898
bits<3> fc;

‎llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -5962,7 +5962,9 @@ StringRef ARMAsmParser::splitMnemonic(StringRef Mnemonic,
59625962
!(hasMVE() &&
59635963
(Mnemonic == "vmine" ||
59645964
Mnemonic == "vshle" || Mnemonic == "vshlt" || Mnemonic == "vshllt" ||
5965-
Mnemonic == "vmvne" || Mnemonic == "vorne"))) {
5965+
Mnemonic == "vmvne" || Mnemonic == "vorne" ||
5966+
Mnemonic == "vnege" || Mnemonic == "vnegt" ||
5967+
Mnemonic.startswith("vq")))) {
59665968
unsigned CC = ARMCondCodeFromString(Mnemonic.substr(Mnemonic.size()-2));
59675969
if (CC != ~0U) {
59685970
Mnemonic = Mnemonic.slice(0, Mnemonic.size() - 2);

‎llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp

+31
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,8 @@ static DecodeStatus DecodeVLD4DupInstruction(MCInst &Inst, unsigned Val,
310310
uint64_t Address, const void *Decoder);
311311
static DecodeStatus DecodeNEONModImmInstruction(MCInst &Inst,unsigned Val,
312312
uint64_t Address, const void *Decoder);
313+
static DecodeStatus DecodeMVEModImmInstruction(MCInst &Inst,unsigned Val,
314+
uint64_t Address, const void *Decoder);
313315
static DecodeStatus DecodeVSHLMaxInstruction(MCInst &Inst, unsigned Val,
314316
uint64_t Address, const void *Decoder);
315317
static DecodeStatus DecodeShiftRight8Imm(MCInst &Inst, unsigned Val,
@@ -3422,6 +3424,35 @@ DecodeNEONModImmInstruction(MCInst &Inst, unsigned Insn,
34223424
return S;
34233425
}
34243426

3427+
static DecodeStatus
3428+
DecodeMVEModImmInstruction(MCInst &Inst, unsigned Insn,
3429+
uint64_t Address, const void *Decoder) {
3430+
DecodeStatus S = MCDisassembler::Success;
3431+
3432+
unsigned Qd = ((fieldFromInstruction(Insn, 22, 1) << 3) |
3433+
fieldFromInstruction(Insn, 13, 3));
3434+
unsigned cmode = fieldFromInstruction(Insn, 8, 4);
3435+
unsigned imm = fieldFromInstruction(Insn, 0, 4);
3436+
imm |= fieldFromInstruction(Insn, 16, 3) << 4;
3437+
imm |= fieldFromInstruction(Insn, 28, 1) << 7;
3438+
imm |= cmode << 8;
3439+
imm |= fieldFromInstruction(Insn, 5, 1) << 12;
3440+
3441+
if (cmode == 0xF && Inst.getOpcode() == ARM::MVE_VMVNimmi32)
3442+
return MCDisassembler::Fail;
3443+
3444+
if (!Check(S, DecodeMQPRRegisterClass(Inst, Qd, Address, Decoder)))
3445+
return MCDisassembler::Fail;
3446+
3447+
Inst.addOperand(MCOperand::createImm(imm));
3448+
3449+
Inst.addOperand(MCOperand::createImm(ARMVCC::None));
3450+
Inst.addOperand(MCOperand::createReg(0));
3451+
Inst.addOperand(MCOperand::createImm(0));
3452+
3453+
return S;
3454+
}
3455+
34253456
static DecodeStatus DecodeVSHLMaxInstruction(MCInst &Inst, unsigned Insn,
34263457
uint64_t Address, const void *Decoder) {
34273458
DecodeStatus S = MCDisassembler::Success;

‎llvm/test/MC/ARM/mve-integer.s

+320
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,320 @@
1+
# RUN: not llvm-mc -triple=thumbv8.1m.main-none-eabi -mattr=+mve -show-encoding %s 2>%t \
2+
# RUN: | FileCheck --check-prefix=CHECK %s
3+
# RUN: FileCheck --check-prefix=ERROR %s < %t
4+
5+
# CHECK: vmov.i32 q0, #0x1bff @ encoding: [0x81,0xef,0x5b,0x0c]
6+
vmov.i32 q0, #0x1bff
7+
8+
# CHECK: vmov.i16 q0, #0x5c @ encoding: [0x85,0xef,0x5c,0x08]
9+
vmov.i16 q0, #0x5c
10+
11+
# CHECK: vmov.i8 q0, #0x4c @ encoding: [0x84,0xef,0x5c,0x0e]
12+
vmov.i8 q0, #0x4c
13+
14+
# CHECK: vmov.f32 q0, #-3.625000e+00 @ encoding: [0x80,0xff,0x5d,0x0f]
15+
vmov.f32 q0, #-3.625000e+00
16+
17+
# CHECK: vmov.f32 q0, #1.250000e-01 @ encoding: [0x84,0xef,0x50,0x0f]
18+
vmov.f32 q0, #0.125
19+
20+
# CHECK: vmov.f32 q0, #1.328125e-01 @ encoding: [0x84,0xef,0x51,0x0f]
21+
vmov.f32 q0, #0.1328125
22+
23+
# CHECK: vmov.f32 q0, #3.100000e+01 @ encoding: [0x83,0xef,0x5f,0x0f]
24+
vmov.f32 q0, #31.0
25+
26+
# CHECK: vmov.f32 s16, s1 @ encoding: [0xb0,0xee,0x60,0x8a]
27+
vmov.f32 s16, s1
28+
29+
# CHECK: vmov.f64 d0, d1 @ encoding: [0xb0,0xee,0x41,0x0b]
30+
vmov.f64 d0, d1
31+
32+
# CHECK: vmov.i64 q0, #0xff0000ffffffffff @ encoding: [0x81,0xff,0x7f,0x0e]
33+
vmov.i64 q0, #0xff0000ffffffffff
34+
35+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
36+
vmov.i32 q0, #0xabcd
37+
38+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
39+
vmov.i16 q0, #0xabcd
40+
41+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
42+
vmov.i32 q0, #0xabffffff
43+
44+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
45+
vmov.i32 q0, #0xabffffff
46+
47+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
48+
vmov.f32 q0, #0.0625
49+
50+
# ERROR: [[@LINE+1]]:14: error: invalid operand for instruction
51+
vmov.f32 q0, #33.0
52+
53+
# CHECK: vmul.i8 q0, q0, q3 @ encoding: [0x00,0xef,0x56,0x09]
54+
vmul.i8 q0, q0, q3
55+
56+
# CHECK: vmul.i16 q6, q0, q3 @ encoding: [0x10,0xef,0x56,0xc9]
57+
vmul.i16 q6, q0, q3
58+
59+
# CHECK: vmul.i32 q7, q3, q6 @ encoding: [0x26,0xef,0x5c,0xe9]
60+
vmul.i32 q7, q3, q6
61+
62+
# CHECK: vqrdmulh.s8 q0, q5, q5 @ encoding: [0x0a,0xff,0x4a,0x0b]
63+
vqrdmulh.s8 q0, q5, q5
64+
65+
# CHECK: vqrdmulh.s16 q1, q4, q2 @ encoding: [0x18,0xff,0x44,0x2b]
66+
vqrdmulh.s16 q1, q4, q2
67+
68+
# CHECK: vqrdmulh.s32 q0, q5, q0 @ encoding: [0x2a,0xff,0x40,0x0b]
69+
vqrdmulh.s32 q0, q5, q0
70+
71+
# CHECK: vqdmulh.s8 q0, q4, q5 @ encoding: [0x08,0xef,0x4a,0x0b]
72+
vqdmulh.s8 q0, q4, q5
73+
74+
# CHECK: vqdmulh.s16 q6, q4, q0 @ encoding: [0x18,0xef,0x40,0xcb]
75+
vqdmulh.s16 q6, q4, q0
76+
77+
# CHECK: vqdmulh.s32 q5, q0, q6 @ encoding: [0x20,0xef,0x4c,0xab]
78+
vqdmulh.s32 q5, q0, q6
79+
80+
# CHECK: vsub.i8 q3, q2, q5 @ encoding: [0x04,0xff,0x4a,0x68]
81+
vsub.i8 q3, q2, q5
82+
83+
# CHECK: vsub.i16 q0, q3, q6 @ encoding: [0x16,0xff,0x4c,0x08]
84+
vsub.i16 q0, q3, q6
85+
86+
# CHECK: vsub.i32 q0, q0, q6 @ encoding: [0x20,0xff,0x4c,0x08]
87+
vsub.i32 q0, q0, q6
88+
89+
# CHECK: vadd.i8 q0, q2, q2 @ encoding: [0x04,0xef,0x44,0x08]
90+
vadd.i8 q0, q2, q2
91+
92+
# CHECK: vadd.i16 q2, q2, q1 @ encoding: [0x14,0xef,0x42,0x48]
93+
vadd.i16 q2, q2, q1
94+
95+
# CHECK: vadd.i32 q0, q0, q6 @ encoding: [0x20,0xef,0x4c,0x08]
96+
vadd.i32 q0, q0, q6
97+
98+
# CHECK: vqsub.s8 q1, q6, q0 @ encoding: [0x0c,0xef,0x50,0x22]
99+
vqsub.s8 q1, q6, q0
100+
101+
# CHECK: vqsub.s16 q0, q6, q1 @ encoding: [0x1c,0xef,0x52,0x02]
102+
vqsub.s16 q0, q6, q1
103+
104+
# CHECK: vqsub.s32 q0, q0, q5 @ encoding: [0x20,0xef,0x5a,0x02]
105+
vqsub.s32 q0, q0, q5
106+
107+
# CHECK: vqsub.u8 q0, q2, q6 @ encoding: [0x04,0xff,0x5c,0x02]
108+
vqsub.u8 q0, q2, q6
109+
110+
# CHECK: vqsub.u16 q0, q7, q1 @ encoding: [0x1e,0xff,0x52,0x02]
111+
vqsub.u16 q0, q7, q1
112+
113+
# CHECK: vqsub.u32 q1, q4, q7 @ encoding: [0x28,0xff,0x5e,0x22]
114+
vqsub.u32 q1, q4, q7
115+
116+
# CHECK: vqadd.s8 q0, q1, q2 @ encoding: [0x02,0xef,0x54,0x00]
117+
vqadd.s8 q0, q1, q2
118+
119+
# CHECK: vqadd.s8 q0, q4, q6 @ encoding: [0x08,0xef,0x5c,0x00]
120+
vqadd.s8 q0, q4, q6
121+
122+
# CHECK: vqadd.s16 q0, q5, q5 @ encoding: [0x1a,0xef,0x5a,0x00]
123+
vqadd.s16 q0, q5, q5
124+
125+
# CHECK: vqadd.s32 q0, q0, q4 @ encoding: [0x20,0xef,0x58,0x00]
126+
vqadd.s32 q0, q0, q4
127+
128+
# CHECK: vqadd.u8 q0, q4, q2 @ encoding: [0x08,0xff,0x54,0x00]
129+
vqadd.u8 q0, q4, q2
130+
131+
# CHECK: vqadd.u16 q4, q6, q6 @ encoding: [0x1c,0xff,0x5c,0x80]
132+
vqadd.u16 q4, q6, q6
133+
134+
# CHECK: vqadd.u32 q0, q1, q2 @ encoding: [0x22,0xff,0x54,0x00]
135+
vqadd.u32 q0, q1, q2
136+
137+
# CHECK: vabd.s8 q0, q0, q2 @ encoding: [0x00,0xef,0x44,0x07]
138+
vabd.s8 q0, q0, q2
139+
140+
# CHECK: vabd.s16 q1, q5, q4 @ encoding: [0x1a,0xef,0x48,0x27]
141+
vabd.s16 q1, q5, q4
142+
143+
# CHECK: vabd.s32 q2, q3, q2 @ encoding: [0x26,0xef,0x44,0x47]
144+
vabd.s32 q2, q3, q2
145+
146+
# CHECK: vabd.u8 q1, q6, q4 @ encoding: [0x0c,0xff,0x48,0x27]
147+
vabd.u8 q1, q6, q4
148+
149+
# CHECK: vabd.u16 q0, q6, q2 @ encoding: [0x1c,0xff,0x44,0x07]
150+
vabd.u16 q0, q6, q2
151+
152+
# CHECK: vabd.u32 q0, q7, q4 @ encoding: [0x2e,0xff,0x48,0x07]
153+
vabd.u32 q0, q7, q4
154+
155+
# CHECK: vrhadd.s8 q0, q1, q1 @ encoding: [0x02,0xef,0x42,0x01]
156+
vrhadd.s8 q0, q1, q1
157+
158+
# CHECK: vrhadd.s16 q0, q1, q0 @ encoding: [0x12,0xef,0x40,0x01]
159+
vrhadd.s16 q0, q1, q0
160+
161+
# CHECK: vrhadd.s32 q0, q4, q1 @ encoding: [0x28,0xef,0x42,0x01]
162+
vrhadd.s32 q0, q4, q1
163+
164+
# CHECK: vrhadd.u8 q1, q0, q6 @ encoding: [0x00,0xff,0x4c,0x21]
165+
vrhadd.u8 q1, q0, q6
166+
167+
# CHECK: vrhadd.u16 q2, q2, q5 @ encoding: [0x14,0xff,0x4a,0x41]
168+
vrhadd.u16 q2, q2, q5
169+
170+
# CHECK: vrhadd.u32 q2, q3, q0 @ encoding: [0x26,0xff,0x40,0x41]
171+
vrhadd.u32 q2, q3, q0
172+
173+
# CHECK: vhsub.s8 q0, q0, q2 @ encoding: [0x00,0xef,0x44,0x02]
174+
vhsub.s8 q0, q0, q2
175+
176+
# CHECK: vhsub.s16 q1, q3, q1 @ encoding: [0x16,0xef,0x42,0x22]
177+
vhsub.s16 q1, q3, q1
178+
179+
# CHECK: vhsub.s32 q0, q2, q5 @ encoding: [0x24,0xef,0x4a,0x02]
180+
vhsub.s32 q0, q2, q5
181+
182+
# CHECK: vhsub.u8 q0, q4, q2 @ encoding: [0x08,0xff,0x44,0x02]
183+
vhsub.u8 q0, q4, q2
184+
185+
# CHECK: vhsub.u16 q0, q7, q5 @ encoding: [0x1e,0xff,0x4a,0x02]
186+
vhsub.u16 q0, q7, q5
187+
188+
# CHECK: vhsub.u32 q2, q6, q4 @ encoding: [0x2c,0xff,0x48,0x42]
189+
vhsub.u32 q2, q6, q4
190+
191+
# CHECK: vhadd.s8 q0, q7, q0 @ encoding: [0x0e,0xef,0x40,0x00]
192+
vhadd.s8 q0, q7, q0
193+
194+
# CHECK: vhadd.s16 q4, q0, q2 @ encoding: [0x10,0xef,0x44,0x80]
195+
vhadd.s16 q4, q0, q2
196+
197+
# CHECK: vhadd.s32 q0, q3, q1 @ encoding: [0x26,0xef,0x42,0x00]
198+
vhadd.s32 q0, q3, q1
199+
200+
# CHECK: vhadd.u8 q3, q0, q3 @ encoding: [0x00,0xff,0x46,0x60]
201+
vhadd.u8 q3, q0, q3
202+
203+
# CHECK: vhadd.u16 q0, q1, q3 @ encoding: [0x12,0xff,0x46,0x00]
204+
vhadd.u16 q0, q1, q3
205+
206+
# CHECK: vhadd.u32 q0, q1, q3 @ encoding: [0x22,0xff,0x46,0x00]
207+
vhadd.u32 q0, q1, q3
208+
209+
# CHECK: vdup.8 q6, r8 @ encoding: [0xec,0xee,0x10,0x8b]
210+
vdup.8 q6, r8
211+
212+
# CHECK: vdup.16 q7, lr @ encoding: [0xae,0xee,0x30,0xeb]
213+
vdup.16 q7, lr
214+
215+
# CHECK: vdup.32 q1, r9 @ encoding: [0xa2,0xee,0x10,0x9b]
216+
vdup.32 q1, r9
217+
218+
# CHECK: vpte.i8 eq, q0, q0
219+
# CHECK: vdupt.16 q0, r1 @ encoding: [0xa0,0xee,0x30,0x1b]
220+
# CHECK: vdupe.16 q0, r1 @ encoding: [0xa0,0xee,0x30,0x1b]
221+
vpte.i8 eq, q0, q0
222+
vdupt.16 q0, r1
223+
vdupe.16 q0, r1
224+
225+
# CHECK: vcls.s8 q2, q1 @ encoding: [0xb0,0xff,0x42,0x44]
226+
vcls.s8 q2, q1
227+
228+
# CHECK: vcls.s16 q0, q4 @ encoding: [0xb4,0xff,0x48,0x04]
229+
vcls.s16 q0, q4
230+
231+
# CHECK: vcls.s32 q0, q0 @ encoding: [0xb8,0xff,0x40,0x04]
232+
vcls.s32 q0, q0
233+
234+
# CHECK: vclz.i8 q0, q7 @ encoding: [0xb0,0xff,0xce,0x04]
235+
vclz.i8 q0, q7
236+
237+
# CHECK: vclz.i16 q4, q7 @ encoding: [0xb4,0xff,0xce,0x84]
238+
vclz.i16 q4, q7
239+
240+
# CHECK: vclz.i32 q7, q5 @ encoding: [0xb8,0xff,0xca,0xe4]
241+
vclz.i32 q7, q5
242+
243+
# CHECK: vneg.s8 q1, q0 @ encoding: [0xb1,0xff,0xc0,0x23]
244+
vneg.s8 q1, q0
245+
246+
# CHECK: vneg.s16 q0, q1 @ encoding: [0xb5,0xff,0xc2,0x03]
247+
vneg.s16 q0, q1
248+
249+
# CHECK: vneg.s32 q7, q2 @ encoding: [0xb9,0xff,0xc4,0xe3]
250+
vneg.s32 q7, q2
251+
252+
# CHECK: vabs.s8 q1, q1 @ encoding: [0xb1,0xff,0x42,0x23]
253+
vabs.s8 q1, q1
254+
255+
# CHECK: vabs.s16 q0, q2 @ encoding: [0xb5,0xff,0x44,0x03]
256+
vabs.s16 q0, q2
257+
258+
# CHECK: vabs.s32 q0, q7 @ encoding: [0xb9,0xff,0x4e,0x03]
259+
vabs.s32 q0, q7
260+
261+
# CHECK: vqneg.s8 q0, q0 @ encoding: [0xb0,0xff,0xc0,0x07]
262+
vqneg.s8 q0, q0
263+
264+
# CHECK: vqneg.s16 q6, q2 @ encoding: [0xb4,0xff,0xc4,0xc7]
265+
vqneg.s16 q6, q2
266+
267+
# CHECK: vqneg.s32 q7, q2 @ encoding: [0xb8,0xff,0xc4,0xe7]
268+
vqneg.s32 q7, q2
269+
270+
# CHECK: vqabs.s8 q2, q4 @ encoding: [0xb0,0xff,0x48,0x47]
271+
vqabs.s8 q2, q4
272+
273+
# CHECK: vqabs.s16 q0, q2 @ encoding: [0xb4,0xff,0x44,0x07]
274+
vqabs.s16 q0, q2
275+
276+
# CHECK: vqabs.s32 q0, q5 @ encoding: [0xb8,0xff,0x4a,0x07]
277+
vqabs.s32 q0, q5
278+
279+
vpste
280+
vnegt.s8 q0, q1
281+
vnege.s8 q0, q1
282+
# CHECK: vpste @ encoding: [0x71,0xfe,0x4d,0x8f]
283+
# CHECK: vnegt.s8 q0, q1 @ encoding: [0xb1,0xff,0xc2,0x03]
284+
# CHECK: vnege.s8 q0, q1 @ encoding: [0xb1,0xff,0xc2,0x03]
285+
286+
vpst
287+
vqaddt.s16 q0, q1, q2
288+
# CHECK: vpst @ encoding: [0x71,0xfe,0x4d,0x0f]
289+
# CHECK: vqaddt.s16 q0, q1, q2 @ encoding: [0x12,0xef,0x54,0x00]
290+
291+
vpste
292+
vqnegt.s8 q0, q1
293+
vqnege.s16 q0, q1
294+
# CHECK: vpste @ encoding: [0x71,0xfe,0x4d,0x8f]
295+
# CHECK: vqnegt.s8 q0, q1 @ encoding: [0xb0,0xff,0xc2,0x07]
296+
# CHECK: vqnege.s16 q0, q1 @ encoding: [0xb4,0xff,0xc2,0x07]
297+
298+
# CHECK: vmina.s8 q1, q7 @ encoding: [0x33,0xee,0x8f,0x3e]
299+
# CHECK-NOFP: vmina.s8 q1, q7 @ encoding: [0x33,0xee,0x8f,0x3e]
300+
vmina.s8 q1, q7
301+
302+
# CHECK: vmina.s16 q1, q4 @ encoding: [0x37,0xee,0x89,0x3e]
303+
# CHECK-NOFP: vmina.s16 q1, q4 @ encoding: [0x37,0xee,0x89,0x3e]
304+
vmina.s16 q1, q4
305+
306+
# CHECK: vmina.s32 q0, q7 @ encoding: [0x3b,0xee,0x8f,0x1e]
307+
# CHECK-NOFP: vmina.s32 q0, q7 @ encoding: [0x3b,0xee,0x8f,0x1e]
308+
vmina.s32 q0, q7
309+
310+
# CHECK: vmaxa.s8 q0, q7 @ encoding: [0x33,0xee,0x8f,0x0e]
311+
# CHECK-NOFP: vmaxa.s8 q0, q7 @ encoding: [0x33,0xee,0x8f,0x0e]
312+
vmaxa.s8 q0, q7
313+
314+
# CHECK: vmaxa.s16 q1, q0 @ encoding: [0x37,0xee,0x81,0x2e]
315+
# CHECK-NOFP: vmaxa.s16 q1, q0 @ encoding: [0x37,0xee,0x81,0x2e]
316+
vmaxa.s16 q1, q0
317+
318+
# CHECK: vmaxa.s32 q1, q0 @ encoding: [0x3b,0xee,0x81,0x2e]
319+
# CHECK-NOFP: vmaxa.s32 q1, q0 @ encoding: [0x3b,0xee,0x81,0x2e]
320+
vmaxa.s32 q1, q0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,401 @@
1+
# RUN: not llvm-mc -disassemble -triple=thumbv8.1m.main-none-eabi -mattr=+mve.fp,+fp64 -show-encoding %s 2>%t | FileCheck %s
2+
# RUN: FileCheck --check-prefix=ERROR < %t %s
3+
# RUN: not llvm-mc -disassemble -triple=thumbv8.1m.main-none-eabi -show-encoding %s &> %t
4+
# RUN: FileCheck --check-prefix=CHECK-NOMVE < %t %s
5+
6+
# CHECK: vmvn.i32 q0, #0x35 @ encoding: [0x83,0xef,0x75,0x00]
7+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
8+
[0x83,0xef,0x75,0x00]
9+
10+
# CHECK: vmvn.i32 q0, #0x3500 @ encoding: [0x83,0xef,0x75,0x02]
11+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
12+
[0x83,0xef,0x75,0x02]
13+
14+
# CHECK: vmvn.i32 q0, #0x350000 @ encoding: [0x83,0xef,0x75,0x04]
15+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
16+
[0x83,0xef,0x75,0x04]
17+
18+
# CHECK: vmvn.i32 q0, #0x35000000 @ encoding: [0x83,0xef,0x75,0x06]
19+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
20+
[0x83,0xef,0x75,0x06]
21+
22+
# CHECK: vmvn.i16 q0, #0x35 @ encoding: [0x83,0xef,0x75,0x08]
23+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
24+
[0x83,0xef,0x75,0x08]
25+
26+
# CHECK: vmvn.i16 q0, #0x3500 @ encoding: [0x83,0xef,0x75,0x0a]
27+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
28+
[0x83,0xef,0x75,0x0a]
29+
30+
# CHECK: vmvn.i32 q0, #0x35ff @ encoding: [0x83,0xef,0x75,0x0c]
31+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
32+
[0x83,0xef,0x75,0x0c]
33+
34+
# CHECK: vmvn.i32 q0, #0x35ffff @ encoding: [0x83,0xef,0x75,0x0d]
35+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
36+
[0x83,0xef,0x75,0x0d]
37+
38+
# CHECK: vmov.i64 q0, #0xffff00ff00ff @ encoding: [0x83,0xef,0x75,0x0e]
39+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
40+
[0x83,0xef,0x75,0x0e]
41+
42+
# ERROR: [[@LINE+2]]:2: warning: invalid instruction encoding
43+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
44+
[0x83,0xef,0x75,0x0f]
45+
46+
# CHECK: vmov.i32 q0, #0x1bff @ encoding: [0x81,0xef,0x5b,0x0c]
47+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
48+
[0x81,0xef,0x5b,0x0c]
49+
50+
# ERROR: [[@LINE+1]]:2: warning: invalid instruction encoding
51+
[0xc0,0xef,0x50,0x00]
52+
53+
# CHECK: vmov.i16 q0, #0x5c @ encoding: [0x85,0xef,0x5c,0x08]
54+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
55+
[0x85,0xef,0x5c,0x08]
56+
57+
# CHECK: vmov.i8 q0, #0x4c @ encoding: [0x84,0xef,0x5c,0x0e]
58+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
59+
[0x84,0xef,0x5c,0x0e]
60+
61+
# CHECK: vmov.f32 q0, #-3.625000e+00 @ encoding: [0x80,0xff,0x5d,0x0f]
62+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
63+
[0x80,0xff,0x5d,0x0f]
64+
65+
# CHECK: vmov.f32 q0, #1.000000e+00 @ encoding: [0x87,0xef,0x50,0x0f]
66+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
67+
[0x87,0xef,0x50,0x0f]
68+
69+
# CHECK: vmov.f32 s16, s1 @ encoding: [0xb0,0xee,0x60,0x8a]
70+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
71+
[0xb0,0xee,0x60,0x8a]
72+
73+
# CHECK: vmov.f64 d0, d1 @ encoding: [0xb0,0xee,0x41,0x0b]
74+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
75+
[0xb0,0xee,0x41,0x0b]
76+
77+
# CHECK: vmov.i64 q0, #0xff0000ffffffffff @ encoding: [0x81,0xff,0x7f,0x0e]
78+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
79+
[0x81,0xff,0x7f,0x0e]
80+
81+
# CHECK: vmul.i8 q0, q0, q3 @ encoding: [0x00,0xef,0x56,0x09]
82+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
83+
[0x00,0xef,0x56,0x09]
84+
85+
# CHECK: vmul.i16 q6, q0, q3 @ encoding: [0x10,0xef,0x56,0xc9]
86+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
87+
[0x10,0xef,0x56,0xc9]
88+
89+
# CHECK: vmul.i32 q7, q3, q6 @ encoding: [0x26,0xef,0x5c,0xe9]
90+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
91+
[0x26,0xef,0x5c,0xe9]
92+
93+
# CHECK: vqrdmulh.s8 q0, q5, q5 @ encoding: [0x0a,0xff,0x4a,0x0b]
94+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
95+
[0x0a,0xff,0x4a,0x0b]
96+
97+
# CHECK: vqrdmulh.s16 q1, q4, q2 @ encoding: [0x18,0xff,0x44,0x2b]
98+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
99+
[0x18,0xff,0x44,0x2b]
100+
101+
# CHECK: vqrdmulh.s32 q0, q5, q0 @ encoding: [0x2a,0xff,0x40,0x0b]
102+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
103+
[0x2a,0xff,0x40,0x0b]
104+
105+
# CHECK: vqdmulh.s8 q0, q4, q5 @ encoding: [0x08,0xef,0x4a,0x0b]
106+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
107+
[0x08,0xef,0x4a,0x0b]
108+
109+
# CHECK: vqdmulh.s16 q6, q4, q0 @ encoding: [0x18,0xef,0x40,0xcb]
110+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
111+
[0x18,0xef,0x40,0xcb]
112+
113+
# CHECK: vqdmulh.s32 q5, q0, q6 @ encoding: [0x20,0xef,0x4c,0xab]
114+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
115+
[0x20,0xef,0x4c,0xab]
116+
117+
# CHECK: vsub.i8 q3, q2, q5 @ encoding: [0x04,0xff,0x4a,0x68]
118+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
119+
[0x04,0xff,0x4a,0x68]
120+
121+
# CHECK: vsub.i16 q0, q3, q6 @ encoding: [0x16,0xff,0x4c,0x08]
122+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
123+
[0x16,0xff,0x4c,0x08]
124+
125+
# CHECK: vsub.i32 q0, q0, q6 @ encoding: [0x20,0xff,0x4c,0x08]
126+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
127+
[0x20,0xff,0x4c,0x08]
128+
129+
# CHECK: vadd.i8 q0, q2, q2 @ encoding: [0x04,0xef,0x44,0x08]
130+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
131+
[0x04,0xef,0x44,0x08]
132+
133+
# CHECK: vadd.i16 q2, q2, q1 @ encoding: [0x14,0xef,0x42,0x48]
134+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
135+
[0x14,0xef,0x42,0x48]
136+
137+
# CHECK: vadd.i32 q0, q0, q6 @ encoding: [0x20,0xef,0x4c,0x08]
138+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
139+
[0x20,0xef,0x4c,0x08]
140+
141+
# CHECK: vqsub.s8 q1, q6, q0 @ encoding: [0x0c,0xef,0x50,0x22]
142+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
143+
[0x0c,0xef,0x50,0x22]
144+
145+
# CHECK: vqsub.s16 q0, q6, q1 @ encoding: [0x1c,0xef,0x52,0x02]
146+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
147+
[0x1c,0xef,0x52,0x02]
148+
149+
# CHECK: vqsub.s32 q0, q0, q5 @ encoding: [0x20,0xef,0x5a,0x02]
150+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
151+
[0x20,0xef,0x5a,0x02]
152+
153+
# CHECK: vqsub.u8 q0, q2, q6 @ encoding: [0x04,0xff,0x5c,0x02]
154+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
155+
[0x04,0xff,0x5c,0x02]
156+
157+
# CHECK: vqsub.u16 q0, q7, q1 @ encoding: [0x1e,0xff,0x52,0x02]
158+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
159+
[0x1e,0xff,0x52,0x02]
160+
161+
# CHECK: vqsub.u32 q1, q4, q7 @ encoding: [0x28,0xff,0x5e,0x22]
162+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
163+
[0x28,0xff,0x5e,0x22]
164+
165+
# CHECK: vqadd.s8 q0, q4, q6 @ encoding: [0x08,0xef,0x5c,0x00]
166+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
167+
[0x08,0xef,0x5c,0x00]
168+
169+
# CHECK: vqadd.s16 q0, q5, q5 @ encoding: [0x1a,0xef,0x5a,0x00]
170+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
171+
[0x1a,0xef,0x5a,0x00]
172+
173+
# CHECK: vqadd.s32 q0, q0, q4 @ encoding: [0x20,0xef,0x58,0x00]
174+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
175+
[0x20,0xef,0x58,0x00]
176+
177+
# CHECK: vqadd.u8 q0, q4, q2 @ encoding: [0x08,0xff,0x54,0x00]
178+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
179+
[0x08,0xff,0x54,0x00]
180+
181+
# CHECK: vqadd.u16 q4, q6, q6 @ encoding: [0x1c,0xff,0x5c,0x80]
182+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
183+
[0x1c,0xff,0x5c,0x80]
184+
185+
# CHECK: vqadd.u32 q0, q1, q2 @ encoding: [0x22,0xff,0x54,0x00]
186+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
187+
[0x22,0xff,0x54,0x00]
188+
189+
# CHECK: vabd.s8 q0, q0, q2 @ encoding: [0x00,0xef,0x44,0x07]
190+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
191+
[0x00,0xef,0x44,0x07]
192+
193+
# CHECK: vabd.s16 q1, q5, q4 @ encoding: [0x1a,0xef,0x48,0x27]
194+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
195+
[0x1a,0xef,0x48,0x27]
196+
197+
# CHECK: vabd.s32 q2, q3, q2 @ encoding: [0x26,0xef,0x44,0x47]
198+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
199+
[0x26,0xef,0x44,0x47]
200+
201+
# CHECK: vabd.u8 q1, q6, q4 @ encoding: [0x0c,0xff,0x48,0x27]
202+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
203+
[0x0c,0xff,0x48,0x27]
204+
205+
# CHECK: vabd.u16 q0, q6, q2 @ encoding: [0x1c,0xff,0x44,0x07]
206+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
207+
[0x1c,0xff,0x44,0x07]
208+
209+
# CHECK: vabd.u32 q0, q7, q4 @ encoding: [0x2e,0xff,0x48,0x07]
210+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
211+
[0x2e,0xff,0x48,0x07]
212+
213+
# CHECK: vrhadd.s8 q0, q1, q1 @ encoding: [0x02,0xef,0x42,0x01]
214+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
215+
[0x02,0xef,0x42,0x01]
216+
217+
# CHECK: vrhadd.s16 q0, q1, q0 @ encoding: [0x12,0xef,0x40,0x01]
218+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
219+
[0x12,0xef,0x40,0x01]
220+
221+
# CHECK: vrhadd.s32 q0, q4, q1 @ encoding: [0x28,0xef,0x42,0x01]
222+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
223+
[0x28,0xef,0x42,0x01]
224+
225+
# CHECK: vrhadd.u8 q1, q0, q6 @ encoding: [0x00,0xff,0x4c,0x21]
226+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
227+
[0x00,0xff,0x4c,0x21]
228+
229+
# CHECK: vrhadd.u16 q2, q2, q5 @ encoding: [0x14,0xff,0x4a,0x41]
230+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
231+
[0x14,0xff,0x4a,0x41]
232+
233+
# CHECK: vrhadd.u32 q2, q3, q0 @ encoding: [0x26,0xff,0x40,0x41]
234+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
235+
[0x26,0xff,0x40,0x41]
236+
237+
# CHECK: vhsub.s8 q0, q0, q2 @ encoding: [0x00,0xef,0x44,0x02]
238+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
239+
[0x00,0xef,0x44,0x02]
240+
241+
# CHECK: vhsub.s16 q1, q3, q1 @ encoding: [0x16,0xef,0x42,0x22]
242+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
243+
[0x16,0xef,0x42,0x22]
244+
245+
# CHECK: vhsub.s32 q0, q2, q5 @ encoding: [0x24,0xef,0x4a,0x02]
246+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
247+
[0x24,0xef,0x4a,0x02]
248+
249+
# CHECK: vhsub.u8 q0, q4, q2 @ encoding: [0x08,0xff,0x44,0x02]
250+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
251+
[0x08,0xff,0x44,0x02]
252+
253+
# CHECK: vhsub.u16 q0, q7, q5 @ encoding: [0x1e,0xff,0x4a,0x02]
254+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
255+
[0x1e,0xff,0x4a,0x02]
256+
257+
# CHECK: vhsub.u32 q2, q6, q4 @ encoding: [0x2c,0xff,0x48,0x42]
258+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
259+
[0x2c,0xff,0x48,0x42]
260+
261+
# CHECK: vhadd.s8 q0, q7, q0 @ encoding: [0x0e,0xef,0x40,0x00]
262+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
263+
[0x0e,0xef,0x40,0x00]
264+
265+
# CHECK: vhadd.s16 q4, q0, q2 @ encoding: [0x10,0xef,0x44,0x80]
266+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
267+
[0x10,0xef,0x44,0x80]
268+
269+
# CHECK: vhadd.s32 q0, q3, q1 @ encoding: [0x26,0xef,0x42,0x00]
270+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
271+
[0x26,0xef,0x42,0x00]
272+
273+
# CHECK: vhadd.u8 q3, q0, q3 @ encoding: [0x00,0xff,0x46,0x60]
274+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
275+
[0x00,0xff,0x46,0x60]
276+
277+
# CHECK: vhadd.u16 q0, q1, q3 @ encoding: [0x12,0xff,0x46,0x00]
278+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
279+
[0x12,0xff,0x46,0x00]
280+
281+
# CHECK: vhadd.u32 q0, q1, q3 @ encoding: [0x22,0xff,0x46,0x00]
282+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
283+
[0x22,0xff,0x46,0x00]
284+
285+
# CHECK: vdup.8 q6, r8 @ encoding: [0xec,0xee,0x10,0x8b]
286+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
287+
[0xec,0xee,0x10,0x8b]
288+
289+
# CHECK: vdup.16 q7, lr @ encoding: [0xae,0xee,0x30,0xeb]
290+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
291+
[0xae,0xee,0x30,0xeb]
292+
293+
# CHECK: vdup.32 q1, r9 @ encoding: [0xa2,0xee,0x10,0x9b]
294+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
295+
[0xa2,0xee,0x10,0x9b]
296+
297+
# CHECK: vpte.i8 eq, q0, q0 @ encoding: [0x41,0xfe,0x00,0x8f]
298+
# CHECK-NOMVE: [[@LINE+5]]:2: warning: invalid instruction encoding
299+
# CHECK: vdupt.16 q0, r1 @ encoding: [0xa0,0xee,0x30,0x1b]
300+
# CHECK-NOMVE: [[@LINE+4]]:2: warning: invalid instruction encoding
301+
# CHECK: vdupe.16 q0, r1 @ encoding: [0xa0,0xee,0x30,0x1b]
302+
# CHECK-NOMVE: [[@LINE+3]]:2: warning: invalid instruction encoding
303+
[0x41,0xfe,0x00,0x8f]
304+
[0xa0,0xee,0x30,0x1b]
305+
[0xa0,0xee,0x30,0x1b]
306+
307+
# CHECK: vcls.s8 q2, q1 @ encoding: [0xb0,0xff,0x42,0x44]
308+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
309+
[0xb0,0xff,0x42,0x44]
310+
311+
# CHECK: vcls.s16 q0, q4 @ encoding: [0xb4,0xff,0x48,0x04]
312+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
313+
[0xb4,0xff,0x48,0x04]
314+
315+
# CHECK: vcls.s32 q0, q0 @ encoding: [0xb8,0xff,0x40,0x04]
316+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
317+
[0xb8,0xff,0x40,0x04]
318+
319+
# CHECK: vclz.i8 q0, q7 @ encoding: [0xb0,0xff,0xce,0x04]
320+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
321+
[0xb0,0xff,0xce,0x04]
322+
323+
# CHECK: vclz.i16 q4, q7 @ encoding: [0xb4,0xff,0xce,0x84]
324+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
325+
[0xb4,0xff,0xce,0x84]
326+
327+
# CHECK: vclz.i32 q7, q5 @ encoding: [0xb8,0xff,0xca,0xe4]
328+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
329+
[0xb8,0xff,0xca,0xe4]
330+
331+
# CHECK: vneg.s8 q1, q0 @ encoding: [0xb1,0xff,0xc0,0x23]
332+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
333+
[0xb1,0xff,0xc0,0x23]
334+
335+
# CHECK: vneg.s16 q0, q1 @ encoding: [0xb5,0xff,0xc2,0x03]
336+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
337+
[0xb5,0xff,0xc2,0x03]
338+
339+
# CHECK: vneg.s32 q7, q2 @ encoding: [0xb9,0xff,0xc4,0xe3]
340+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
341+
[0xb9,0xff,0xc4,0xe3]
342+
343+
# CHECK: vabs.s8 q1, q1 @ encoding: [0xb1,0xff,0x42,0x23]
344+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
345+
[0xb1,0xff,0x42,0x23]
346+
347+
# CHECK: vabs.s16 q0, q2 @ encoding: [0xb5,0xff,0x44,0x03]
348+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
349+
[0xb5,0xff,0x44,0x03]
350+
351+
# CHECK: vabs.s32 q0, q7 @ encoding: [0xb9,0xff,0x4e,0x03]
352+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
353+
[0xb9,0xff,0x4e,0x03]
354+
355+
# CHECK: vqneg.s8 q0, q0 @ encoding: [0xb0,0xff,0xc0,0x07]
356+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
357+
[0xb0,0xff,0xc0,0x07]
358+
359+
# CHECK: vqneg.s16 q6, q2 @ encoding: [0xb4,0xff,0xc4,0xc7]
360+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
361+
[0xb4,0xff,0xc4,0xc7]
362+
363+
# CHECK: vqneg.s32 q7, q2 @ encoding: [0xb8,0xff,0xc4,0xe7]
364+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
365+
[0xb8,0xff,0xc4,0xe7]
366+
367+
# CHECK: vqabs.s8 q2, q4 @ encoding: [0xb0,0xff,0x48,0x47]
368+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
369+
[0xb0,0xff,0x48,0x47]
370+
371+
# CHECK: vqabs.s16 q0, q2 @ encoding: [0xb4,0xff,0x44,0x07]
372+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
373+
[0xb4,0xff,0x44,0x07]
374+
375+
# CHECK: vqabs.s32 q0, q5 @ encoding: [0xb8,0xff,0x4a,0x07]
376+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
377+
[0xb8,0xff,0x4a,0x07]
378+
379+
# CHECK: vmina.s8 q1, q7 @ encoding: [0x33,0xee,0x8f,0x3e]
380+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
381+
[0x33,0xee,0x8f,0x3e]
382+
383+
# CHECK: vmina.s16 q1, q4 @ encoding: [0x37,0xee,0x89,0x3e]
384+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
385+
[0x37,0xee,0x89,0x3e]
386+
387+
# CHECK: vmina.s32 q0, q7 @ encoding: [0x3b,0xee,0x8f,0x1e]
388+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
389+
[0x3b,0xee,0x8f,0x1e]
390+
391+
# CHECK: vmaxa.s8 q0, q7 @ encoding: [0x33,0xee,0x8f,0x0e]
392+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
393+
[0x33,0xee,0x8f,0x0e]
394+
395+
# CHECK: vmaxa.s16 q1, q0 @ encoding: [0x37,0xee,0x81,0x2e]
396+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
397+
[0x37,0xee,0x81,0x2e]
398+
399+
# CHECK: vmaxa.s32 q1, q0 @ encoding: [0x3b,0xee,0x81,0x2e]
400+
# CHECK-NOMVE: [[@LINE+1]]:2: warning: invalid instruction encoding
401+
[0x3b,0xee,0x81,0x2e]

0 commit comments

Comments
 (0)
Please sign in to comment.