Lines Matching refs:asm
356 class sve_int_ptrue<bits<2> sz8_64, bits<3> opc, string asm, PPRRegOp pprty,
359 asm, "\t$Pd, $pattern",
381 multiclass sve_int_ptrue<bits<3> opc, string asm, SDPatternOperator op> {
382 def _B : sve_int_ptrue<0b00, opc, asm, PPR8, nxv16i1, op>;
383 def _H : sve_int_ptrue<0b01, opc, asm, PPR16, nxv8i1, op>;
384 def _S : sve_int_ptrue<0b10, opc, asm, PPR32, nxv4i1, op>;
385 def _D : sve_int_ptrue<0b11, opc, asm, PPR64, nxv2i1, op>;
387 def : InstAlias<asm # "\t$Pd",
389 def : InstAlias<asm # "\t$Pd",
391 def : InstAlias<asm # "\t$Pd",
393 def : InstAlias<asm # "\t$Pd",
734 class sve_int_pfalse<bits<6> opc, string asm>
736 asm, "\t$Pd",
754 multiclass sve_int_pfalse<bits<6> opc, string asm> {
755 def NAME : sve_int_pfalse<opc, asm>;
764 class sve_int_ptest<bits<6> opc, string asm, SDPatternOperator op>
766 asm, "\t$Pg, $Pn",
786 multiclass sve_int_ptest<bits<6> opc, string asm, SDPatternOperator op,
788 def NAME : sve_int_ptest<opc, asm, op>;
797 class sve_int_pfirst_next<bits<2> sz8_64, bits<5> opc, string asm,
800 asm, "\t$Pdn, $Pg, $_Pdn",
822 multiclass sve_int_pfirst<bits<5> opc, string asm, SDPatternOperator op> {
823 def _B : sve_int_pfirst_next<0b01, opc, asm, PPR8>;
828 multiclass sve_int_pnext<bits<5> opc, string asm, SDPatternOperator op> {
829 def _B : sve_int_pfirst_next<0b00, opc, asm, PPR8>;
830 def _H : sve_int_pfirst_next<0b01, opc, asm, PPR16>;
831 def _S : sve_int_pfirst_next<0b10, opc, asm, PPR32>;
832 def _D : sve_int_pfirst_next<0b11, opc, asm, PPR64>;
844 class sve_int_count_r<bits<2> sz8_64, bits<5> opc, string asm,
847 asm, "\t$Rdn, $Pg",
863 !strconcat(asm, "\t$Rdn, $Pg, $_Rdn"),
864 !strconcat(asm, "\t$Rdn, $Pg"));
869 multiclass sve_int_count_r_s32<bits<5> opc, string asm,
871 def _B : sve_int_count_r<0b00, opc, asm, GPR64z, PPR8, GPR64as32>;
872 def _H : sve_int_count_r<0b01, opc, asm, GPR64z, PPR16, GPR64as32>;
873 def _S : sve_int_count_r<0b10, opc, asm, GPR64z, PPR32, GPR64as32>;
874 def _D : sve_int_count_r<0b11, opc, asm, GPR64z, PPR64, GPR64as32>;
897 multiclass sve_int_count_r_u32<bits<5> opc, string asm,
899 def _B : sve_int_count_r<0b00, opc, asm, GPR32z, PPR8, GPR32z>;
900 def _H : sve_int_count_r<0b01, opc, asm, GPR32z, PPR16, GPR32z>;
901 def _S : sve_int_count_r<0b10, opc, asm, GPR32z, PPR32, GPR32z>;
902 def _D : sve_int_count_r<0b11, opc, asm, GPR32z, PPR64, GPR32z>;
914 multiclass sve_int_count_r_x64<bits<5> opc, string asm,
917 def _B : sve_int_count_r<0b00, opc, asm, GPR64z, PPR8, GPR64z>;
918 def _H : sve_int_count_r<0b01, opc, asm, GPR64z, PPR16, GPR64z>;
919 def _S : sve_int_count_r<0b10, opc, asm, GPR64z, PPR32, GPR64z>;
920 def _D : sve_int_count_r<0b11, opc, asm, GPR64z, PPR64, GPR64z>;
988 class sve_int_count_v<bits<2> sz8_64, bits<5> opc, string asm,
991 asm, "\t$Zdn, $Pm",
1011 multiclass sve_int_count_v<bits<5> opc, string asm,
1013 def _H : sve_int_count_v<0b01, opc, asm, ZPR16, PPR16>;
1014 def _S : sve_int_count_v<0b10, opc, asm, ZPR32, PPR32>;
1015 def _D : sve_int_count_v<0b11, opc, asm, ZPR64, PPR64>;
1021 def : InstAlias<asm # "\t$Zdn, $Pm",
1023 def : InstAlias<asm # "\t$Zdn, $Pm",
1025 def : InstAlias<asm # "\t$Zdn, $Pm",
1029 class sve_int_pcount_pred<bits<2> sz8_64, bits<4> opc, string asm,
1032 asm, "\t$Rd, $Pg, $Pn",
1051 multiclass sve_int_pcount_pred<bits<4> opc, string asm,
1053 def _B : sve_int_pcount_pred<0b00, opc, asm, PPR8>;
1054 def _H : sve_int_pcount_pred<0b01, opc, asm, PPR16>;
1055 def _S : sve_int_pcount_pred<0b10, opc, asm, PPR32>;
1056 def _D : sve_int_pcount_pred<0b11, opc, asm, PPR64>;
1068 class sve_int_count<bits<3> opc, string asm>
1070 asm, "\t$Rd, $pattern, mul $imm4",
1090 multiclass sve_int_count<bits<3> opc, string asm, SDPatternOperator op> {
1091 def NAME : sve_int_count<opc, asm>;
1093 def : InstAlias<asm # "\t$Rd, $pattern",
1095 def : InstAlias<asm # "\t$Rd",
1108 class sve_int_countvlv<bits<5> opc, string asm, ZPRRegOp zprty>
1110 asm, "\t$Zdn, $pattern, mul $imm4",
1132 multiclass sve_int_countvlv<bits<5> opc, string asm, ZPRRegOp zprty,
1135 def NAME : sve_int_countvlv<opc, asm, zprty>;
1137 def : InstAlias<asm # "\t$Zdn, $pattern",
1139 def : InstAlias<asm # "\t$Zdn",
1146 class sve_int_pred_pattern_a<bits<3> opc, string asm>
1148 asm, "\t$Rdn, $pattern, mul $imm4",
1167 multiclass sve_int_pred_pattern_a<bits<3> opc, string asm,
1171 def NAME : sve_int_pred_pattern_a<opc, asm>;
1173 def : InstAlias<asm # "\t$Rdn, $pattern",
1175 def : InstAlias<asm # "\t$Rdn",
1206 class sve_int_pred_pattern_b<bits<5> opc, string asm, RegisterOperand dt,
1209 asm, "\t$Rdn, $pattern, mul $imm4",
1227 !strconcat(asm, "\t$Rdn, $_Rdn, $pattern, mul $imm4"),
1228 !strconcat(asm, "\t$Rdn, $pattern, mul $imm4"));
1234 multiclass sve_int_pred_pattern_b_s32<bits<5> opc, string asm,
1236 def NAME : sve_int_pred_pattern_b<opc, asm, GPR64z, GPR64as32>;
1238 def : InstAlias<asm # "\t$Rd, $Rn, $pattern",
1240 def : InstAlias<asm # "\t$Rd, $Rn",
1252 multiclass sve_int_pred_pattern_b_u32<bits<5> opc, string asm,
1254 def NAME : sve_int_pred_pattern_b<opc, asm, GPR32z, GPR32z>;
1256 def : InstAlias<asm # "\t$Rdn, $pattern",
1258 def : InstAlias<asm # "\t$Rdn",
1265 multiclass sve_int_pred_pattern_b_x64<bits<5> opc, string asm,
1267 def NAME : sve_int_pred_pattern_b<opc, asm, GPR64z, GPR64z>;
1269 def : InstAlias<asm # "\t$Rdn, $pattern",
1271 def : InstAlias<asm # "\t$Rdn",
1283 class sve_int_perm_dup_r<bits<2> sz8_64, string asm, ZPRRegOp zprty,
1287 asm, "\t$Zd, $Rn",
1301 multiclass sve_int_perm_dup_r<string asm, SDPatternOperator op> {
1302 def _B : sve_int_perm_dup_r<0b00, asm, ZPR8, nxv16i8, GPR32sp, op>;
1303 def _H : sve_int_perm_dup_r<0b01, asm, ZPR16, nxv8i16, GPR32sp, op>;
1304 def _S : sve_int_perm_dup_r<0b10, asm, ZPR32, nxv4i32, GPR32sp, op>;
1305 def _D : sve_int_perm_dup_r<0b11, asm, ZPR64, nxv2i64, GPR64sp, op>;
1317 class sve_int_perm_dup_i<bits<5> tsz, Operand immtype, string asm,
1320 asm, "\t$Zd, $Zn$idx",
1337 multiclass sve_int_perm_dup_i<string asm> {
1338 def _B : sve_int_perm_dup_i<{?,?,?,?,1}, sve_elm_idx_extdup_b, asm, ZPR8> {
1342 def _H : sve_int_perm_dup_i<{?,?,?,1,0}, sve_elm_idx_extdup_h, asm, ZPR16> {
1346 def _S : sve_int_perm_dup_i<{?,?,1,0,0}, sve_elm_idx_extdup_s, asm, ZPR32> {
1350 def _D : sve_int_perm_dup_i<{?,1,0,0,0}, sve_elm_idx_extdup_d, asm, ZPR64> {
1354 def _Q : sve_int_perm_dup_i<{1,0,0,0,0}, sve_elm_idx_extdup_q, asm, ZPR128> {
1421 class sve_int_perm_tbl<bits<2> sz8_64, bits<2> opc, string asm, ZPRRegOp zprty,
1424 asm, "\t$Zd, $Zn, $Zm",
1443 multiclass sve_int_perm_tbl<string asm, SDPatternOperator op> {
1444 def _B : sve_int_perm_tbl<0b00, 0b10, asm, ZPR8, Z_b>;
1445 def _H : sve_int_perm_tbl<0b01, 0b10, asm, ZPR16, Z_h>;
1446 def _S : sve_int_perm_tbl<0b10, 0b10, asm, ZPR32, Z_s>;
1447 def _D : sve_int_perm_tbl<0b11, 0b10, asm, ZPR64, Z_d>;
1449 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
1451 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
1453 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
1455 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
1470 multiclass sve2_int_perm_tbl<string asm, SDPatternOperator op> {
1471 def _B : sve_int_perm_tbl<0b00, 0b01, asm, ZPR8, ZZ_b>;
1472 def _H : sve_int_perm_tbl<0b01, 0b01, asm, ZPR16, ZZ_h>;
1473 def _S : sve_int_perm_tbl<0b10, 0b01, asm, ZPR32, ZZ_s>;
1474 def _D : sve_int_perm_tbl<0b11, 0b01, asm, ZPR64, ZZ_d>;
1517 class sve2_int_perm_tbx<bits<2> sz8_64, bits<2> opc, string asm, ZPRRegOp zprty>
1519 asm, "\t$Zd, $Zn, $Zm",
1539 multiclass sve2_int_perm_tbx<string asm, bits<2> opc, SDPatternOperator op> {
1540 def _B : sve2_int_perm_tbx<0b00, opc, asm, ZPR8>;
1541 def _H : sve2_int_perm_tbx<0b01, opc, asm, ZPR16>;
1542 def _S : sve2_int_perm_tbx<0b10, opc, asm, ZPR32>;
1543 def _D : sve2_int_perm_tbx<0b11, opc, asm, ZPR64>;
1557 class sve_int_perm_reverse_z<bits<2> sz8_64, string asm, ZPRRegOp zprty>
1559 asm, "\t$Zd, $Zn",
1573 multiclass sve_int_perm_reverse_z<string asm, SDPatternOperator op> {
1574 def _B : sve_int_perm_reverse_z<0b00, asm, ZPR8>;
1575 def _H : sve_int_perm_reverse_z<0b01, asm, ZPR16>;
1576 def _S : sve_int_perm_reverse_z<0b10, asm, ZPR32>;
1577 def _D : sve_int_perm_reverse_z<0b11, asm, ZPR64>;
1596 class sve_int_perm_reverse_p<bits<2> sz8_64, string asm, PPRRegOp pprty,
1599 asm, "\t$Pd, $Pn",
1614 multiclass sve_int_perm_reverse_p<string asm, SDPatternOperator ir_op,
1618 def _B : sve_int_perm_reverse_p<0b00, asm, PPR8, ir_op>;
1619 def _H : sve_int_perm_reverse_p<0b01, asm, PPR16, op_b16>;
1620 def _S : sve_int_perm_reverse_p<0b10, asm, PPR32, op_b32>;
1621 def _D : sve_int_perm_reverse_p<0b11, asm, PPR64, op_b64>;
1628 class sve_int_perm_unpk<bits<2> sz16_64, bits<2> opc, string asm,
1631 asm, "\t$Zd, $Zn",
1646 multiclass sve_int_perm_unpk<bits<2> opc, string asm, SDPatternOperator op> {
1647 def _H : sve_int_perm_unpk<0b01, opc, asm, ZPR16, ZPR8>;
1648 def _S : sve_int_perm_unpk<0b10, opc, asm, ZPR32, ZPR16>;
1649 def _D : sve_int_perm_unpk<0b11, opc, asm, ZPR64, ZPR32>;
1656 class sve_int_perm_insrs<bits<2> sz8_64, string asm, ZPRRegOp zprty,
1659 asm, "\t$Zdn, $Rm",
1675 multiclass sve_int_perm_insrs<string asm, SDPatternOperator op> {
1676 def _B : sve_int_perm_insrs<0b00, asm, ZPR8, GPR32>;
1677 def _H : sve_int_perm_insrs<0b01, asm, ZPR16, GPR32>;
1678 def _S : sve_int_perm_insrs<0b10, asm, ZPR32, GPR32>;
1679 def _D : sve_int_perm_insrs<0b11, asm, ZPR64, GPR64>;
1687 class sve_int_perm_insrv<bits<2> sz8_64, string asm, ZPRRegOp zprty,
1690 asm, "\t$Zdn, $Vm",
1706 multiclass sve_int_perm_insrv<string asm, SDPatternOperator op> {
1707 def _B : sve_int_perm_insrv<0b00, asm, ZPR8, FPR8asZPR>;
1708 def _H : sve_int_perm_insrv<0b01, asm, ZPR16, FPR16asZPR>;
1709 def _S : sve_int_perm_insrv<0b10, asm, ZPR32, FPR32asZPR>;
1710 def _D : sve_int_perm_insrv<0b11, asm, ZPR64, FPR64asZPR>;
1738 class sve_int_perm_extract_i<string asm>
1740 asm, "\t$Zdn, $_Zdn, $Zm, $imm8",
1758 multiclass sve_int_perm_extract_i<string asm, SDPatternOperator op> {
1759 def NAME : sve_int_perm_extract_i<asm>;
1765 class sve2_int_perm_extract_i_cons<string asm>
1767 asm, "\t$Zd, $Zn, $imm8",
1786 class sve_int_sel_vvv<bits<2> sz8_64, string asm, ZPRRegOp zprty>
1788 asm, "\t$Zd, $Pg, $Zn, $Zm",
1807 multiclass sve_int_sel_vvv<string asm, SDPatternOperator op> {
1808 def _B : sve_int_sel_vvv<0b00, asm, ZPR8>;
1809 def _H : sve_int_sel_vvv<0b01, asm, ZPR16>;
1810 def _S : sve_int_sel_vvv<0b10, asm, ZPR32>;
1811 def _D : sve_int_sel_vvv<0b11, asm, ZPR64>;
1842 class sve_int_pred_log<bits<4> opc, string asm>
1844 asm, "\t$Pd, $Pg/z, $Pn, $Pm",
1864 !strconcat(asm, "\t$Pd, $Pg, $Pn, $Pm"),
1865 !strconcat(asm, "\t$Pd, $Pg/z, $Pn, $Pm"));
1871 multiclass sve_int_pred_log<bits<4> opc, string asm, SDPatternOperator op,
1873 def NAME : sve_int_pred_log<opc, asm>;
1895 multiclass sve_int_pred_log_v2<bits<4> opc, string asm, SDPatternOperator op,
1897 sve_int_pred_log<opc, asm, op> {
1915 class sve_int_log_imm<bits<2> opc, string asm>
1917 asm, "\t$Zdn, $_Zdn, $imms13",
1934 multiclass sve_int_log_imm<bits<2> opc, string asm, string alias, SDPatternOperator op> {
1935 def NAME : sve_int_log_imm<opc, asm>;
1942 def : InstAlias<asm # "\t$Zdn, $Zdn, $imm",
1944 def : InstAlias<asm # "\t$Zdn, $Zdn, $imm",
1946 def : InstAlias<asm # "\t$Zdn, $Zdn, $imm",
1966 class sve_int_dup_mask_imm<string asm>
1968 asm, "\t$Zd, $imms",
1983 multiclass sve_int_dup_mask_imm<string asm> {
1984 def NAME : sve_int_dup_mask_imm<asm>;
2014 class sve_int_bin_cons_arit_0<bits<2> sz8_64, bits<3> opc, string asm,
2017 asm, "\t$Zd, $Zn, $Zm",
2034 multiclass sve_int_bin_cons_arit_0<bits<3> opc, string asm, SDPatternOperator op> {
2035 def _B : sve_int_bin_cons_arit_0<0b00, opc, asm, ZPR8>;
2036 def _H : sve_int_bin_cons_arit_0<0b01, opc, asm, ZPR16>;
2037 def _S : sve_int_bin_cons_arit_0<0b10, opc, asm, ZPR32>;
2038 def _D : sve_int_bin_cons_arit_0<0b11, opc, asm, ZPR64>;
2050 class sve_fp_2op_i_p_zds<bits<2> sz, bits<3> opc, string asm,
2054 asm, "\t$Zdn, $Pg/m, $_Zdn, $i1",
2077 multiclass sve_fp_2op_i_p_zds<bits<3> opc, string asm, string Ps, Operand imm_ty, FPImmLeaf A, FPIm…
2079 def _H : SVEPseudo2Instr<Ps # _H, 1>, sve_fp_2op_i_p_zds<0b01, opc, asm, ZPR16, imm_ty>;
2080 def _S : SVEPseudo2Instr<Ps # _S, 1>, sve_fp_2op_i_p_zds<0b10, opc, asm, ZPR32, imm_ty>;
2081 def _D : SVEPseudo2Instr<Ps # _D, 1>, sve_fp_2op_i_p_zds<0b11, opc, asm, ZPR64, imm_ty>;
2092 class sve_fp_2op_p_zds<bits<2> sz, bits<4> opc, string asm,
2095 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm",
2117 multiclass sve2p1_bf_2op_p_zds<bits<4> opc, string asm, string Ps,
2121 def NAME : sve_fp_2op_p_zds<0b00, opc, asm, ZPR16>,
2140 multiclass sve_fp_2op_p_zds<bits<4> opc, string asm, string Ps,
2144 def _H : sve_fp_2op_p_zds<0b01, opc, asm, ZPR16>,
2146 def _S : sve_fp_2op_p_zds<0b10, opc, asm, ZPR32>,
2148 def _D : sve_fp_2op_p_zds<0b11, opc, asm, ZPR64>,
2157 multiclass sve_fp_2op_p_zds_fscale<bits<4> opc, string asm,
2159 def _H : sve_fp_2op_p_zds<0b01, opc, asm, ZPR16>;
2160 def _S : sve_fp_2op_p_zds<0b10, opc, asm, ZPR32>;
2161 def _D : sve_fp_2op_p_zds<0b11, opc, asm, ZPR64>;
2178 class sve_fp_ftmad<bits<2> sz, string asm, ZPRRegOp zprty>
2180 asm, "\t$Zdn, $_Zdn, $Zm, $imm3",
2201 multiclass sve_fp_ftmad<string asm, SDPatternOperator op> {
2202 def _H : sve_fp_ftmad<0b01, asm, ZPR16>;
2203 def _S : sve_fp_ftmad<0b10, asm, ZPR32>;
2204 def _D : sve_fp_ftmad<0b11, asm, ZPR64>;
2252 class sve_fp_3op_u_zd<bits<2> sz, bits<3> opc, string asm, ZPRRegOp zprty>
2254 asm, "\t$Zd, $Zn, $Zm",
2273 multiclass sve_fp_3op_u_zd<bits<3> opc, string asm, SDPatternOperator op> {
2274 def _H : sve_fp_3op_u_zd<0b01, opc, asm, ZPR16>;
2275 def _S : sve_fp_3op_u_zd<0b10, opc, asm, ZPR32>;
2276 def _D : sve_fp_3op_u_zd<0b11, opc, asm, ZPR64>;
2283 multiclass sve2p1_bf_3op_u_zd<bits<3> opc, string asm, SDPatternOperator op> {
2284 def NAME : sve_fp_3op_u_zd<0b00, opc, asm, ZPR16>;
2289 multiclass sve_fp_3op_u_zd_ftsmul<bits<3> opc, string asm, SDPatternOperator op> {
2290 def _H : sve_fp_3op_u_zd<0b01, opc, asm, ZPR16>;
2291 def _S : sve_fp_3op_u_zd<0b10, opc, asm, ZPR32>;
2292 def _D : sve_fp_3op_u_zd<0b11, opc, asm, ZPR64>;
2303 class sve_fp_3op_p_zds_a<bits<2> sz, bits<2> opc, string asm, ZPRRegOp zprty>
2305 asm, "\t$Zda, $Pg/m, $Zn, $Zm",
2329 multiclass sve_fp_3op_p_zds_a<bits<2> opc, string asm, string Ps,
2332 def _H : sve_fp_3op_p_zds_a<0b01, opc, asm, ZPR16>,
2334 def _S : sve_fp_3op_p_zds_a<0b10, opc, asm, ZPR32>,
2336 def _D : sve_fp_3op_p_zds_a<0b11, opc, asm, ZPR64>,
2347 multiclass sve_fp_3op_p_zds_a_bf<bits<2> opc, string asm, string Ps,
2349 def NAME : sve_fp_3op_p_zds_a<0b00, opc, asm, ZPR16>,
2355 class sve_fp_3op_p_zds_b<bits<2> sz, bits<2> opc, string asm,
2358 asm, "\t$Zdn, $Pg/m, $Zm, $Za",
2382 multiclass sve_fp_3op_p_zds_b<bits<2> opc, string asm, SDPatternOperator op,
2384 def _H : sve_fp_3op_p_zds_b<0b01, opc, asm, ZPR16>,
2386 def _S : sve_fp_3op_p_zds_b<0b10, opc, asm, ZPR32>,
2388 def _D : sve_fp_3op_p_zds_b<0b11, opc, asm, ZPR64>,
2400 class sve_fp_fma_by_indexed_elem<bits<2> sz, bits<2> opc, string asm,
2404 asm, "\t$Zda, $Zn, $Zm$iop", "", []>, Sched<[]> {
2422 multiclass sve2p1_fp_bfma_by_indexed_elem<string asm, bits<2> opc, SDPatternOperator op> {
2423 def NAME : sve_fp_fma_by_indexed_elem<{0, ?}, opc, asm, ZPR16, ZPR3b16,
2435 multiclass sve_fp_fma_by_indexed_elem<bits<2> opc, string asm,
2437 def _H : sve_fp_fma_by_indexed_elem<{0, ?}, opc, asm, ZPR16, ZPR3b16, VectorIndexH32b> {
2444 def _S : sve_fp_fma_by_indexed_elem<0b10, opc, asm, ZPR32, ZPR3b32, VectorIndexS32b> {
2450 def _D : sve_fp_fma_by_indexed_elem<0b11, opc, asm, ZPR64, ZPR4b64, VectorIndexD32b> {
2470 class sve_fp_fmul_by_indexed_elem<bits<2> sz, bit o2, string asm, ZPRRegOp zprty,
2473 asm, "\t$Zd, $Zn, $Zm$iop", "", []>, Sched<[]> {
2489 multiclass sve2p1_fp_bfmul_by_indexed_elem<string asm, SDPatternOperator ir_intrinsic> {
2490 def NAME : sve_fp_fmul_by_indexed_elem<{0, ?}, 0b1, asm, ZPR16, ZPR3b16, VectorIndexH32b> {
2501 multiclass sve_fp_fmul_by_indexed_elem<string asm, SDPatternOperator op> {
2502 def _H : sve_fp_fmul_by_indexed_elem<{0, ?}, 0b0, asm, ZPR16, ZPR3b16, VectorIndexH32b> {
2509 def _S : sve_fp_fmul_by_indexed_elem<0b10, 0b0, asm, ZPR32, ZPR3b32, VectorIndexS32b> {
2515 def _D : sve_fp_fmul_by_indexed_elem<0b11, 0b0, asm, ZPR64, ZPR4b64, VectorIndexD32b> {
2534 class sve_fp_fcmla<bits<2> sz, string asm, ZPRRegOp zprty>
2537 asm, "\t$Zda, $Pg/m, $Zn, $Zm, $imm",
2561 multiclass sve_fp_fcmla<string asm, SDPatternOperator op> {
2562 def _H : sve_fp_fcmla<0b01, asm, ZPR16>;
2563 def _S : sve_fp_fcmla<0b10, asm, ZPR32>;
2564 def _D : sve_fp_fcmla<0b11, asm, ZPR64>;
2578 class sve_fp_fcmla_by_indexed_elem<bits<2> sz, string asm,
2583 asm, "\t$Zda, $Zn, $Zm$iop, $imm",
2603 multiclass sve_fp_fcmla_by_indexed_elem<string asm, SDPatternOperator op> {
2604 def _H : sve_fp_fcmla_by_indexed_elem<0b10, asm, ZPR16, ZPR3b16, VectorIndexS32b> {
2610 def _S : sve_fp_fcmla_by_indexed_elem<0b11, asm, ZPR32, ZPR4b32, VectorIndexD32b> {
2627 class sve_fp_fcadd<bits<2> sz, string asm, ZPRRegOp zprty>
2630 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm, $imm",
2653 multiclass sve_fp_fcadd<string asm, SDPatternOperator op> {
2654 def _H : sve_fp_fcadd<0b01, asm, ZPR16>;
2655 def _S : sve_fp_fcadd<0b10, asm, ZPR32>;
2656 def _D : sve_fp_fcadd<0b11, asm, ZPR64>;
2670 class sve2_fp_convert_precision<bits<4> opc, string asm,
2673 asm, "\t$Zd, $Pg/m, $Zn",
2693 multiclass sve2_fp_convert_down_narrow<string asm, string op> {
2694 def _StoH : sve2_fp_convert_precision<0b1000, asm, ZPR16, ZPR32>;
2695 def _DtoS : sve2_fp_convert_precision<0b1110, asm, ZPR32, ZPR64>;
2701 multiclass sve2_fp_convert_up_long<string asm, string op> {
2702 def _HtoS : sve2_fp_convert_precision<0b1001, asm, ZPR32, ZPR16>;
2703 def _StoD : sve2_fp_convert_precision<0b1111, asm, ZPR64, ZPR32>;
2709 multiclass sve2_fp_convert_down_odd_rounding_top<string asm, string op> {
2710 def _DtoS : sve2_fp_convert_precision<0b0010, asm, ZPR32, ZPR64>;
2719 class sve2_fp_pairwise_pred<bits<2> sz, bits<3> opc, string asm,
2722 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm",
2744 multiclass sve2_fp_pairwise_pred<bits<3> opc, string asm,
2746 def _H : sve2_fp_pairwise_pred<0b01, opc, asm, ZPR16>;
2747 def _S : sve2_fp_pairwise_pred<0b10, opc, asm, ZPR32>;
2748 def _D : sve2_fp_pairwise_pred<0b11, opc, asm, ZPR64>;
2759 class sve2_fp_mla_long_by_indexed_elem<bits<3> opc, string asm>
2762 asm, "\t$Zda, $Zn, $Zm$iop",
2789 multiclass sve2_fp_mla_long_by_indexed_elem<bits<3> opc, string asm,
2792 def NAME : sve2_fp_mla_long_by_indexed_elem<opc, asm>;
2800 class sve2_fp_mla_long<bits<3> opc, string asm>
2802 asm, "\t$Zda, $Zn, $Zm",
2826 multiclass sve2_fp_mla_long<bits<3> opc, string asm, ValueType OutVT,
2828 def NAME : sve2_fp_mla_long<opc, asm>;
2836 class sve_int_arith_vl<bit opc, string asm, bit streaming_sve = 0b0>
2838 asm, "\t$Rd, $Rn, $imm6",
2857 class sve_int_read_vl_a<bit op, bits<5> opc2, string asm, bit streaming_sve = 0b0>
2859 asm, "\t$Rd, $imm6",
2882 class sve_int_perm_bin_perm_zz<bits<3> opc, bits<2> sz8_64, string asm,
2885 asm, "\t$Zd, $Zn, $Zm",
2903 multiclass sve_int_perm_bin_perm_zz<bits<3> opc, string asm,
2905 def _B : sve_int_perm_bin_perm_zz<opc, 0b00, asm, ZPR8>;
2906 def _H : sve_int_perm_bin_perm_zz<opc, 0b01, asm, ZPR16>;
2907 def _S : sve_int_perm_bin_perm_zz<opc, 0b10, asm, ZPR32>;
2908 def _D : sve_int_perm_bin_perm_zz<opc, 0b11, asm, ZPR64>;
2929 class sve_fp_2op_p_zd<bits<7> opc, string asm, RegisterOperand i_zprtype,
2932 asm, "\t$Zd, $Pg/m, $Zn",
2954 multiclass sve_fp_2op_p_zd<bits<7> opc, string asm,
2960 def NAME : sve_fp_2op_p_zd<opc, asm, i_zprtype, o_zprtype, Sz>,
2976 multiclass sve_fp_2op_p_zdr<bits<7> opc, string asm,
2982 def NAME : sve_fp_2op_p_zd<opc, asm, i_zprtype, o_zprtype, Sz>,
2996 multiclass sve_fp_2op_p_zd_HSD<bits<5> opc, string asm, SDPatternOperator op> {
2997 def _H : sve_fp_2op_p_zd<{ 0b01, opc }, asm, ZPR16, ZPR16, ElementSizeH>,
2999 def _S : sve_fp_2op_p_zd<{ 0b10, opc }, asm, ZPR32, ZPR32, ElementSizeS>,
3001 def _D : sve_fp_2op_p_zd<{ 0b11, opc }, asm, ZPR64, ZPR64, ElementSizeD>,
3023 multiclass sve2_fp_flogb<string asm, string Ps, SDPatternOperator op> {
3024 def _H : sve_fp_2op_p_zd<0b0011010, asm, ZPR16, ZPR16, ElementSizeH>,
3026 def _S : sve_fp_2op_p_zd<0b0011100, asm, ZPR32, ZPR32, ElementSizeS>,
3028 def _D : sve_fp_2op_p_zd<0b0011110, asm, ZPR64, ZPR64, ElementSizeD>,
3046 multiclass sve2_fp_convert_down_odd_rounding<string asm, string op> {
3047 def _DtoS : sve_fp_2op_p_zd<0b0001010, asm, ZPR64, ZPR32, ElementSizeD>;
3055 class sve_fp_2op_u_zd<bits<2> sz, bits<3> opc, string asm,
3058 asm, "\t$Zd, $Zn",
3075 multiclass sve_fp_2op_u_zd<bits<3> opc, string asm, SDPatternOperator op> {
3076 def _H : sve_fp_2op_u_zd<0b01, opc, asm, ZPR16>;
3077 def _S : sve_fp_2op_u_zd<0b10, opc, asm, ZPR32>;
3078 def _D : sve_fp_2op_u_zd<0b11, opc, asm, ZPR64>;
3090 string asm, ZPRRegOp zprty>
3092 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm", "", []>, Sched<[]> {
3112 multiclass sve_int_bin_pred_log<bits<3> opc, string asm, string Ps,
3116 def _B : sve_int_bin_pred_arit_log<0b00, 0b11, opc, asm, ZPR8>,
3118 def _H : sve_int_bin_pred_arit_log<0b01, 0b11, opc, asm, ZPR16>,
3120 def _S : sve_int_bin_pred_arit_log<0b10, 0b11, opc, asm, ZPR32>,
3122 def _D : sve_int_bin_pred_arit_log<0b11, 0b11, opc, asm, ZPR64>,
3132 multiclass sve_int_bin_pred_arit_0<bits<3> opc, string asm, string Ps,
3137 def _B : sve_int_bin_pred_arit_log<0b00, 0b00, opc, asm, ZPR8>,
3139 def _H : sve_int_bin_pred_arit_log<0b01, 0b00, opc, asm, ZPR16>,
3141 def _S : sve_int_bin_pred_arit_log<0b10, 0b00, opc, asm, ZPR32>,
3143 def _D : sve_int_bin_pred_arit_log<0b11, 0b00, opc, asm, ZPR64>,
3153 multiclass sve_int_bin_pred_arit_1<bits<3> opc, string asm, string Ps,
3157 def _B : sve_int_bin_pred_arit_log<0b00, 0b01, opc, asm, ZPR8>,
3159 def _H : sve_int_bin_pred_arit_log<0b01, 0b01, opc, asm, ZPR16>,
3161 def _S : sve_int_bin_pred_arit_log<0b10, 0b01, opc, asm, ZPR32>,
3163 def _D : sve_int_bin_pred_arit_log<0b11, 0b01, opc, asm, ZPR64>,
3173 multiclass sve_int_bin_pred_arit_2<bits<3> opc, string asm, string Ps,
3177 def _B : sve_int_bin_pred_arit_log<0b00, 0b10, opc, asm, ZPR8>,
3179 def _H : sve_int_bin_pred_arit_log<0b01, 0b10, opc, asm, ZPR16>,
3181 def _S : sve_int_bin_pred_arit_log<0b10, 0b10, opc, asm, ZPR32>,
3183 def _D : sve_int_bin_pred_arit_log<0b11, 0b10, opc, asm, ZPR64>,
3194 multiclass sve_int_bin_pred_arit_2_div<bits<3> opc, string asm, string Ps,
3199 def _S : sve_int_bin_pred_arit_log<0b10, 0b10, opc, asm, ZPR32>,
3201 def _D : sve_int_bin_pred_arit_log<0b11, 0b10, opc, asm, ZPR64>,
3213 class sve_int_mladdsub_vvv_pred<bits<2> sz8_64, bits<1> opc, string asm,
3216 asm, "\t$Zdn, $Pg/m, $Zm, $Za",
3239 multiclass sve_int_mladdsub_vvv_pred<bits<1> opc, string asm, SDPatternOperator op,
3241 def _B : sve_int_mladdsub_vvv_pred<0b00, opc, asm, ZPR8>,
3243 def _H : sve_int_mladdsub_vvv_pred<0b01, opc, asm, ZPR16>,
3245 def _S : sve_int_mladdsub_vvv_pred<0b10, opc, asm, ZPR32>,
3247 def _D : sve_int_mladdsub_vvv_pred<0b11, opc, asm, ZPR64>,
3256 class sve_int_mlas_vvv_pred<bits<2> sz8_64, bits<1> opc, string asm,
3259 asm, "\t$Zda, $Pg/m, $Zn, $Zm",
3282 multiclass sve_int_mlas_vvv_pred<bits<1> opc, string asm, SDPatternOperator op,
3284 def _B : sve_int_mlas_vvv_pred<0b00, opc, asm, ZPR8>,
3286 def _H : sve_int_mlas_vvv_pred<0b01, opc, asm, ZPR16>,
3288 def _S : sve_int_mlas_vvv_pred<0b10, opc, asm, ZPR32>,
3290 def _D : sve_int_mlas_vvv_pred<0b11, opc, asm, ZPR64>,
3318 class sve2_int_mla<bits<2> sz, bits<5> opc, string asm,
3321 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
3340 multiclass sve2_int_mla<bit S, string asm, SDPatternOperator op> {
3341 def _B : sve2_int_mla<0b00, { 0b1110, S }, asm, ZPR8, ZPR8>;
3342 def _H : sve2_int_mla<0b01, { 0b1110, S }, asm, ZPR16, ZPR16>;
3343 def _S : sve2_int_mla<0b10, { 0b1110, S }, asm, ZPR32, ZPR32>;
3344 def _D : sve2_int_mla<0b11, { 0b1110, S }, asm, ZPR64, ZPR64>;
3352 multiclass sve2_int_mla_long<bits<5> opc, string asm, SDPatternOperator op> {
3353 def _H : sve2_int_mla<0b01, opc, asm, ZPR16, ZPR8>;
3354 def _S : sve2_int_mla<0b10, opc, asm, ZPR32, ZPR16>;
3355 def _D : sve2_int_mla<0b11, opc, asm, ZPR64, ZPR32>;
3366 class sve2_int_mla_by_indexed_elem<bits<2> sz, bits<6> opc, string asm,
3370 asm, "\t$Zda, $Zn, $Zm$iop", "", []>, Sched<[]> {
3386 multiclass sve2_int_mla_by_indexed_elem<bits<2> opc, bit S, string asm,
3388 …def _H : sve2_int_mla_by_indexed_elem<{0, ?}, { 0b000, opc, S }, asm, ZPR16, ZPR16, ZPR3b16, Vecto…
3395 …def _S : sve2_int_mla_by_indexed_elem<0b10, { 0b000, opc, S }, asm, ZPR32, ZPR32, ZPR3b32, VectorI…
3401 …def _D : sve2_int_mla_by_indexed_elem<0b11, { 0b000, opc, S }, asm, ZPR64, ZPR64, ZPR4b64, VectorI…
3417 multiclass sve2_int_mla_long_by_indexed_elem<bits<4> opc, string asm,
3420 asm, ZPR32, ZPR16, ZPR3b16, VectorIndexH32b> {
3428 asm, ZPR64, ZPR32, ZPR4b32, VectorIndexS32b> {
3444 class sve_intx_dot<bit sz, bit U, string asm, ZPRRegOp zprty1,
3446 : I<(outs zprty1:$Zda), (ins zprty1:$_Zda, zprty2:$Zn, zprty2:$Zm), asm,
3465 multiclass sve_intx_dot<bit opc, string asm, SDPatternOperator op> {
3466 def _S : sve_intx_dot<0b0, opc, asm, ZPR32, ZPR8>;
3467 def _D : sve_intx_dot<0b1, opc, asm, ZPR64, ZPR16>;
3477 class sve_intx_dot_by_indexed_elem<bit sz, bit U, string asm,
3481 asm, "\t$Zda, $Zn, $Zm$iop",
3498 multiclass sve_intx_dot_by_indexed_elem<bit opc, string asm,
3500 def _S : sve_intx_dot_by_indexed_elem<0b0, opc, asm, ZPR32, ZPR8, ZPR3b8, VectorIndexS32b_timm> {
3506 …def _D : sve_intx_dot_by_indexed_elem<0b1, opc, asm, ZPR64, ZPR16, ZPR4b16, VectorIndexD32b_timm> {
3521 class sve2_complex_int_arith<bits<2> sz, bits<4> opc, string asm,
3525 asm, "\t$Zda, $Zn, $Zm, $rot", "", []>, Sched<[]> {
3545 multiclass sve2_cintx_dot<string asm, SDPatternOperator op> {
3546 def _S : sve2_complex_int_arith<0b10, 0b0001, asm, ZPR32, ZPR8>;
3547 def _D : sve2_complex_int_arith<0b11, 0b0001, asm, ZPR64, ZPR16>;
3561 multiclass sve2_int_cmla<bit opc, string asm, SDPatternOperator op> {
3562 def _B : sve2_complex_int_arith<0b00, { 0b001, opc }, asm, ZPR8, ZPR8>;
3563 def _H : sve2_complex_int_arith<0b01, { 0b001, opc }, asm, ZPR16, ZPR16>;
3564 def _S : sve2_complex_int_arith<0b10, { 0b001, opc }, asm, ZPR32, ZPR32>;
3565 def _D : sve2_complex_int_arith<0b11, { 0b001, opc }, asm, ZPR64, ZPR64>;
3577 class sve2_complex_int_arith_indexed<bits<2> sz, bits<4> opc, string asm,
3582 asm, "\t$Zda, $Zn, $Zm$iop, $rot", "", []>, Sched<[]> {
3600 multiclass sve2_cintx_dot_by_indexed_elem<string asm, SDPatternOperator op> {
3601 def _S : sve2_complex_int_arith_indexed<0b10, 0b0100, asm, ZPR32, ZPR8, ZPR3b8, VectorIndexS32b> {
3607 …def _D : sve2_complex_int_arith_indexed<0b11, 0b0100, asm, ZPR64, ZPR16, ZPR4b16, VectorIndexD32b>…
3626 multiclass sve2_cmla_by_indexed_elem<bit opc, string asm,
3628 …def _H : sve2_complex_int_arith_indexed<0b10, { 0b011, opc }, asm, ZPR16, ZPR16, ZPR3b16, VectorIn…
3634 …def _S : sve2_complex_int_arith_indexed<0b11, { 0b011, opc }, asm, ZPR32, ZPR32, ZPR4b32, VectorIn…
3654 class sve2_int_mul<bits<2> sz, bits<3> opc, string asm, ZPRRegOp zprty>
3656 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
3672 multiclass sve2_int_mul<bits<3> opc, string asm, SDPatternOperator op> {
3673 def _B : sve2_int_mul<0b00, opc, asm, ZPR8>;
3674 def _H : sve2_int_mul<0b01, opc, asm, ZPR16>;
3675 def _S : sve2_int_mul<0b10, opc, asm, ZPR32>;
3676 def _D : sve2_int_mul<0b11, opc, asm, ZPR64>;
3684 multiclass sve2_int_mul_single<bits<3> opc, string asm, SDPatternOperator op> {
3685 def _B : sve2_int_mul<0b00, opc, asm, ZPR8>;
3694 class sve2_int_mul_by_indexed_elem<bits<2> sz, bits<4> opc, string asm,
3698 asm, "\t$Zd, $Zn, $Zm$iop", "", []>, Sched<[]> {
3712 multiclass sve2_int_mul_by_indexed_elem<bits<4> opc, string asm,
3714 def _H : sve2_int_mul_by_indexed_elem<{0, ?}, opc, asm, ZPR16, ZPR16, ZPR3b16, VectorIndexH32b> {
3721 def _S : sve2_int_mul_by_indexed_elem<0b10, opc, asm, ZPR32, ZPR32, ZPR3b32, VectorIndexS32b> {
3727 def _D : sve2_int_mul_by_indexed_elem<0b11, opc, asm, ZPR64, ZPR64, ZPR4b64, VectorIndexD32b> {
3739 multiclass sve2_int_mul_long_by_indexed_elem<bits<3> opc, string asm,
3741 def _S : sve2_int_mul_by_indexed_elem<0b10, { opc{2-1}, ?, opc{0} }, asm,
3749 def _D : sve2_int_mul_by_indexed_elem<0b11, { opc{2-1}, ?, opc{0} }, asm,
3766 class sve2_int_arith_pred<bits<2> sz, bits<6> opc, string asm,
3769 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm", "", []>, Sched<[]> {
3789 multiclass sve2_int_arith_pred<bits<6> opc, string asm, SDPatternOperator op,
3794 def _B : sve2_int_arith_pred<0b00, opc, asm, ZPR8>,
3796 def _H : sve2_int_arith_pred<0b01, opc, asm, ZPR16>,
3798 def _S : sve2_int_arith_pred<0b10, opc, asm, ZPR32>,
3800 def _D : sve2_int_arith_pred<0b11, opc, asm, ZPR64>,
3810 class sve2_int_sadd_long_accum_pairwise<bits<2> sz, bit U, string asm,
3813 asm, "\t$Zda, $Pg/m, $Zn", "", []>, Sched<[]> {
3832 multiclass sve2_int_sadd_long_accum_pairwise<bit U, string asm, SDPatternOperator op> {
3833 def _H : sve2_int_sadd_long_accum_pairwise<0b01, U, asm, ZPR16, ZPR8>;
3834 def _S : sve2_int_sadd_long_accum_pairwise<0b10, U, asm, ZPR32, ZPR16>;
3835 def _D : sve2_int_sadd_long_accum_pairwise<0b11, U, asm, ZPR64, ZPR32>;
3843 string asm, ZPRRegOp zprty>
3845 asm, "\t$Zd, $Pg/m, $Zn",
3868 multiclass sve2_int_un_pred_arit_s<bits<3> opc, string asm,
3870 def _S : sve2_int_un_pred_arit<0b10, opc{2}, opc{1-0}, asm, ZPR32>,
3880 multiclass sve2_int_un_pred_arit<bits<3> opc, string asm, SDPatternOperator op> {
3881 def _B : sve2_int_un_pred_arit<0b00, opc{2}, opc{1-0}, asm, ZPR8>,
3883 def _H : sve2_int_un_pred_arit<0b01, opc{2}, opc{1-0}, asm, ZPR16>,
3885 def _S : sve2_int_un_pred_arit<0b10, opc{2}, opc{1-0}, asm, ZPR32>,
3887 def _D : sve2_int_un_pred_arit<0b11, opc{2}, opc{1-0}, asm, ZPR64>,
3910 class sve2_wide_int_arith<bits<2> sz, bits<5> opc, string asm,
3913 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
3929 multiclass sve2_wide_int_arith_long<bits<5> opc, string asm,
3931 def _H : sve2_wide_int_arith<0b01, opc, asm, ZPR16, ZPR8, ZPR8>;
3932 def _S : sve2_wide_int_arith<0b10, opc, asm, ZPR32, ZPR16, ZPR16>;
3933 def _D : sve2_wide_int_arith<0b11, opc, asm, ZPR64, ZPR32, ZPR32>;
3940 multiclass sve2_wide_int_arith_wide<bits<3> opc, string asm,
3942 def _H : sve2_wide_int_arith<0b01, { 0b10, opc }, asm, ZPR16, ZPR16, ZPR8>;
3943 def _S : sve2_wide_int_arith<0b10, { 0b10, opc }, asm, ZPR32, ZPR32, ZPR16>;
3944 def _D : sve2_wide_int_arith<0b11, { 0b10, opc }, asm, ZPR64, ZPR64, ZPR32>;
3951 multiclass sve2_wide_int_arith_pmul<bits<2> sz, bits<5> opc, string asm,
3953 def NAME : sve2_wide_int_arith<sz, opc, asm, ZPR128, ZPR64, ZPR64>;
3961 multiclass sve2_pmul_long<bits<1> opc, string asm, SDPatternOperator op> {
3962 def _H : sve2_wide_int_arith<0b01, {0b1101, opc}, asm, ZPR16, ZPR8, ZPR8>;
3963 def _D : sve2_wide_int_arith<0b11, {0b1101, opc}, asm, ZPR64, ZPR32, ZPR32>;
3976 class sve2_misc<bits<2> sz, bits<4> opc, string asm,
3979 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
3995 multiclass sve2_misc_bitwise<bits<4> opc, string asm, SDPatternOperator op> {
3996 def _B : sve2_misc<0b00, opc, asm, ZPR8, ZPR8>;
3997 def _H : sve2_misc<0b01, opc, asm, ZPR16, ZPR16>;
3998 def _S : sve2_misc<0b10, opc, asm, ZPR32, ZPR32>;
3999 def _D : sve2_misc<0b11, opc, asm, ZPR64, ZPR64>;
4007 multiclass sve2_misc_int_addsub_long_interleaved<bits<2> opc, string asm,
4009 def _H : sve2_misc<0b01, { 0b00, opc }, asm, ZPR16, ZPR8>;
4010 def _S : sve2_misc<0b10, { 0b00, opc }, asm, ZPR32, ZPR16>;
4011 def _D : sve2_misc<0b11, { 0b00, opc }, asm, ZPR64, ZPR32>;
4018 class sve2_bitwise_xor_interleaved<bits<2> sz, bits<1> opc, string asm,
4021 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
4040 multiclass sve2_bitwise_xor_interleaved<bit opc, string asm,
4042 def _B : sve2_bitwise_xor_interleaved<0b00, opc, asm, ZPR8, ZPR8>;
4043 def _H : sve2_bitwise_xor_interleaved<0b01, opc, asm, ZPR16, ZPR16>;
4044 def _S : sve2_bitwise_xor_interleaved<0b10, opc, asm, ZPR32, ZPR32>;
4045 def _D : sve2_bitwise_xor_interleaved<0b11, opc, asm, ZPR64, ZPR64>;
4053 class sve2_bitwise_shift_left_long<bits<3> tsz8_64, bits<2> opc, string asm,
4057 asm, "\t$Zd, $Zn, $imm",
4075 multiclass sve2_bitwise_shift_left_long<bits<2> opc, string asm,
4077 def _H : sve2_bitwise_shift_left_long<{0,0,1}, opc, asm,
4079 def _S : sve2_bitwise_shift_left_long<{0,1,?}, opc, asm,
4083 def _D : sve2_bitwise_shift_left_long<{1,?,?}, opc, asm,
4096 class sve2_int_bin_shift_imm<bits<4> tsz8_64, bit opc, string asm,
4099 asm, "\t$Zd, $Zn, $imm",
4118 multiclass sve2_int_bin_shift_imm_left<bit opc, string asm,
4120 def _B : sve2_int_bin_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftL8>;
4121 def _H : sve2_int_bin_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftL16> {
4124 def _S : sve2_int_bin_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftL32> {
4127 def _D : sve2_int_bin_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftL64> {
4138 multiclass sve2_int_bin_shift_imm_right<bit opc, string asm,
4140 def _B : sve2_int_bin_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftR8>;
4141 def _H : sve2_int_bin_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftR16> {
4144 def _S : sve2_int_bin_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftR32> {
4147 def _D : sve2_int_bin_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftR64> {
4158 class sve2_int_bin_accum_shift_imm<bits<4> tsz8_64, bits<2> opc, string asm,
4161 asm, "\t$Zda, $Zn, $imm",
4182 multiclass sve2_int_bin_accum_shift_imm_right<bits<2> opc, string asm,
4185 def _B : sve2_int_bin_accum_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftR8>;
4186 def _H : sve2_int_bin_accum_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftR16> {
4189 def _S : sve2_int_bin_accum_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftR32> {
4192 def _D : sve2_int_bin_accum_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftR64> {
4208 class sve2_int_cadd<bits<2> sz, bit opc, string asm, ZPRRegOp zprty>
4210 asm, "\t$Zdn, $_Zdn, $Zm, $rot", "", []>, Sched<[]> {
4229 multiclass sve2_int_cadd<bit opc, string asm, SDPatternOperator op> {
4230 def _B : sve2_int_cadd<0b00, opc, asm, ZPR8>;
4231 def _H : sve2_int_cadd<0b01, opc, asm, ZPR16>;
4232 def _S : sve2_int_cadd<0b10, opc, asm, ZPR32>;
4233 def _D : sve2_int_cadd<0b11, opc, asm, ZPR64>;
4241 class sve2_int_absdiff_accum<bits<2> sz, bits<4> opc, string asm,
4244 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
4263 multiclass sve2_int_absdiff_accum<bit opc, string asm, SDPatternOperator op> {
4264 def _B : sve2_int_absdiff_accum<0b00, { 0b111, opc }, asm, ZPR8, ZPR8>;
4265 def _H : sve2_int_absdiff_accum<0b01, { 0b111, opc }, asm, ZPR16, ZPR16>;
4266 def _S : sve2_int_absdiff_accum<0b10, { 0b111, opc }, asm, ZPR32, ZPR32>;
4267 def _D : sve2_int_absdiff_accum<0b11, { 0b111, opc }, asm, ZPR64, ZPR64>;
4275 multiclass sve2_int_absdiff_accum_long<bits<2> opc, string asm,
4277 def _H : sve2_int_absdiff_accum<0b01, { 0b00, opc }, asm, ZPR16, ZPR8>;
4278 def _S : sve2_int_absdiff_accum<0b10, { 0b00, opc }, asm, ZPR32, ZPR16>;
4279 def _D : sve2_int_absdiff_accum<0b11, { 0b00, opc }, asm, ZPR64, ZPR32>;
4286 multiclass sve2_int_addsub_long_carry<bits<2> opc, string asm,
4288 def _S : sve2_int_absdiff_accum<{ opc{1}, 0b0 }, { 0b010, opc{0} }, asm,
4290 def _D : sve2_int_absdiff_accum<{ opc{1}, 0b1 }, { 0b010, opc{0} }, asm,
4302 string asm, ZPRRegOp zprty1,
4305 asm, "\t$Zd, $Zn, $imm",
4324 multiclass sve2_int_bin_shift_imm_right_narrow_bottom<bits<3> opc, string asm,
4326 def _B : sve2_int_bin_shift_imm_narrow_bottom<{0,0,1}, opc, asm, ZPR8, ZPR16,
4328 def _H : sve2_int_bin_shift_imm_narrow_bottom<{0,1,?}, opc, asm, ZPR16, ZPR32,
4332 def _S : sve2_int_bin_shift_imm_narrow_bottom<{1,?,?}, opc, asm, ZPR32, ZPR64,
4342 string asm, ZPRRegOp zprty1,
4345 asm, "\t$Zd, $Zn, $imm",
4365 multiclass sve2_int_bin_shift_imm_right_narrow_top<bits<3> opc, string asm,
4367 def _B : sve2_int_bin_shift_imm_narrow_top<{0,0,1}, opc, asm, ZPR8, ZPR16,
4369 def _H : sve2_int_bin_shift_imm_narrow_top<{0,1,?}, opc, asm, ZPR16, ZPR32,
4373 def _S : sve2_int_bin_shift_imm_narrow_top<{1,?,?}, opc, asm, ZPR32, ZPR64,
4382 class sve2_int_addsub_narrow_high_bottom<bits<2> sz, bits<2> opc, string asm,
4385 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
4402 multiclass sve2_int_addsub_narrow_high_bottom<bits<2> opc, string asm,
4404 def _B : sve2_int_addsub_narrow_high_bottom<0b01, opc, asm, ZPR8, ZPR16>;
4405 def _H : sve2_int_addsub_narrow_high_bottom<0b10, opc, asm, ZPR16, ZPR32>;
4406 def _S : sve2_int_addsub_narrow_high_bottom<0b11, opc, asm, ZPR32, ZPR64>;
4413 class sve2_int_addsub_narrow_high_top<bits<2> sz, bits<2> opc, string asm,
4416 asm, "\t$Zd, $Zn, $Zm", "", []>, Sched<[]> {
4434 multiclass sve2_int_addsub_narrow_high_top<bits<2> opc, string asm,
4436 def _B : sve2_int_addsub_narrow_high_top<0b01, opc, asm, ZPR8, ZPR16>;
4437 def _H : sve2_int_addsub_narrow_high_top<0b10, opc, asm, ZPR16, ZPR32>;
4438 def _S : sve2_int_addsub_narrow_high_top<0b11, opc, asm, ZPR32, ZPR64>;
4445 class sve2_int_sat_extract_narrow_bottom<bits<3> tsz8_64, bits<2> opc, string asm,
4448 asm, "\t$Zd, $Zn", "", []>, Sched<[]> {
4464 multiclass sve2_int_sat_extract_narrow_bottom<bits<2> opc, string asm,
4466 def _B : sve2_int_sat_extract_narrow_bottom<0b001, opc, asm, ZPR8, ZPR16>;
4467 def _H : sve2_int_sat_extract_narrow_bottom<0b010, opc, asm, ZPR16, ZPR32>;
4468 def _S : sve2_int_sat_extract_narrow_bottom<0b100, opc, asm, ZPR32, ZPR64>;
4475 class sve2_int_sat_extract_narrow_top<bits<3> tsz8_64, bits<2> opc, string asm,
4478 asm, "\t$Zd, $Zn", "", []>, Sched<[]> {
4495 multiclass sve2_int_sat_extract_narrow_top<bits<2> opc, string asm,
4497 def _B : sve2_int_sat_extract_narrow_top<0b001, opc, asm, ZPR8, ZPR16>;
4498 def _H : sve2_int_sat_extract_narrow_top<0b010, opc, asm, ZPR16, ZPR32>;
4499 def _S : sve2_int_sat_extract_narrow_top<0b100, opc, asm, ZPR32, ZPR64>;
4511 string asm, ZPRRegOp zprty>
4513 asm, "\t$Zd, $Pg/m, $Zn",
4535 multiclass sve_int_un_pred_arit_0<bits<3> opc, string asm,
4537 def _B : sve_int_un_pred_arit<0b00, { opc, 0b0 }, asm, ZPR8>,
4539 def _H : sve_int_un_pred_arit<0b01, { opc, 0b0 }, asm, ZPR16>,
4541 def _S : sve_int_un_pred_arit<0b10, { opc, 0b0 }, asm, ZPR32>,
4543 def _D : sve_int_un_pred_arit<0b11, { opc, 0b0 }, asm, ZPR64>,
4562 multiclass sve_int_un_pred_arit_0_h<bits<3> opc, string asm,
4564 def _H : sve_int_un_pred_arit<0b01, { opc, 0b0 }, asm, ZPR16>,
4566 def _S : sve_int_un_pred_arit<0b10, { opc, 0b0 }, asm, ZPR32>,
4568 def _D : sve_int_un_pred_arit<0b11, { opc, 0b0 }, asm, ZPR64>,
4584 multiclass sve_int_un_pred_arit_0_w<bits<3> opc, string asm,
4586 def _S : sve_int_un_pred_arit<0b10, { opc, 0b0 }, asm, ZPR32>,
4588 def _D : sve_int_un_pred_arit<0b11, { opc, 0b0 }, asm, ZPR64>,
4601 multiclass sve_int_un_pred_arit_0_d<bits<3> opc, string asm,
4603 def _D : sve_int_un_pred_arit<0b11, { opc, 0b0 }, asm, ZPR64>,
4613 multiclass sve_int_un_pred_arit_1<bits<3> opc, string asm,
4615 def _B : sve_int_un_pred_arit<0b00, { opc, 0b1 }, asm, ZPR8>,
4617 def _H : sve_int_un_pred_arit<0b01, { opc, 0b1 }, asm, ZPR16>,
4619 def _S : sve_int_un_pred_arit<0b10, { opc, 0b1 }, asm, ZPR32>,
4621 def _D : sve_int_un_pred_arit<0b11, { opc, 0b1 }, asm, ZPR64>,
4640 multiclass sve_int_un_pred_arit_1_fp<bits<3> opc, string asm, SDPatternOperator op> {
4641 def _H : sve_int_un_pred_arit<0b01, { opc, 0b1 }, asm, ZPR16>,
4643 def _S : sve_int_un_pred_arit<0b10, { opc, 0b1 }, asm, ZPR32>,
4645 def _D : sve_int_un_pred_arit<0b11, { opc, 0b1 }, asm, ZPR64>,
4670 class sve_int_dup_imm<bits<2> sz8_64, string asm,
4673 asm, "\t$Zd, $imm",
4690 multiclass sve_int_dup_imm<string asm> {
4691 def _B : sve_int_dup_imm<0b00, asm, ZPR8, cpy_imm8_opt_lsl_i8>;
4692 def _H : sve_int_dup_imm<0b01, asm, ZPR16, cpy_imm8_opt_lsl_i16>;
4693 def _S : sve_int_dup_imm<0b10, asm, ZPR32, cpy_imm8_opt_lsl_i32>;
4694 def _D : sve_int_dup_imm<0b11, asm, ZPR64, cpy_imm8_opt_lsl_i64>;
4714 string asm, ZPRRegOp zprty>
4716 asm, "\t$Zd, $imm8",
4733 multiclass sve_int_dup_fpimm<string asm> {
4734 def _H : sve_int_dup_fpimm<0b01, fpimm16, asm, ZPR16>;
4735 def _S : sve_int_dup_fpimm<0b10, fpimm32, asm, ZPR32>;
4736 def _D : sve_int_dup_fpimm<0b11, fpimm64, asm, ZPR64>;
4746 class sve_int_arith_imm0<bits<2> sz8_64, bits<3> opc, string asm,
4749 asm, "\t$Zdn, $_Zdn, $imm",
4769 multiclass sve_int_arith_imm0<bits<3> opc, string asm, SDPatternOperator op> {
4770 def _B : sve_int_arith_imm0<0b00, opc, asm, ZPR8, addsub_imm8_opt_lsl_i8>;
4771 def _H : sve_int_arith_imm0<0b01, opc, asm, ZPR16, addsub_imm8_opt_lsl_i16>;
4772 def _S : sve_int_arith_imm0<0b10, opc, asm, ZPR32, addsub_imm8_opt_lsl_i32>;
4773 def _D : sve_int_arith_imm0<0b11, opc, asm, ZPR64, addsub_imm8_opt_lsl_i64>;
4781 multiclass sve_int_arith_imm0_ssat<bits<3> opc, string asm, SDPatternOperator op,
4783 def _B : sve_int_arith_imm0<0b00, opc, asm, ZPR8, addsub_imm8_opt_lsl_i8>;
4784 def _H : sve_int_arith_imm0<0b01, opc, asm, ZPR16, addsub_imm8_opt_lsl_i16>;
4785 def _S : sve_int_arith_imm0<0b10, opc, asm, ZPR32, addsub_imm8_opt_lsl_i32>;
4786 def _D : sve_int_arith_imm0<0b11, opc, asm, ZPR64, addsub_imm8_opt_lsl_i64>;
4799 class sve_int_arith_imm<bits<2> sz8_64, bits<6> opc, string asm,
4802 asm, "\t$Zdn, $_Zdn, $imm",
4820 multiclass sve_int_arith_imm1<bits<2> opc, string asm, SDPatternOperator op> {
4821 def _B : sve_int_arith_imm<0b00, { 0b1010, opc }, asm, ZPR8, simm8_32b>;
4822 def _H : sve_int_arith_imm<0b01, { 0b1010, opc }, asm, ZPR16, simm8_32b>;
4823 def _S : sve_int_arith_imm<0b10, { 0b1010, opc }, asm, ZPR32, simm8_32b>;
4824 def _D : sve_int_arith_imm<0b11, { 0b1010, opc }, asm, ZPR64, simm8_32b>;
4832 multiclass sve_int_arith_imm1_unsigned<bits<2> opc, string asm, SDPatternOperator op> {
4833 def _B : sve_int_arith_imm<0b00, { 0b1010, opc }, asm, ZPR8, imm0_255>;
4834 def _H : sve_int_arith_imm<0b01, { 0b1010, opc }, asm, ZPR16, imm0_255>;
4835 def _S : sve_int_arith_imm<0b10, { 0b1010, opc }, asm, ZPR32, imm0_255>;
4836 def _D : sve_int_arith_imm<0b11, { 0b1010, opc }, asm, ZPR64, imm0_255>;
4844 multiclass sve_int_arith_imm2<string asm, SDPatternOperator op> {
4845 def _B : sve_int_arith_imm<0b00, 0b110000, asm, ZPR8, simm8_32b>;
4846 def _H : sve_int_arith_imm<0b01, 0b110000, asm, ZPR16, simm8_32b>;
4847 def _S : sve_int_arith_imm<0b10, 0b110000, asm, ZPR32, simm8_32b>;
4848 def _D : sve_int_arith_imm<0b11, 0b110000, asm, ZPR64, simm8_32b>;
4860 class sve_int_bin_cons_log<bits<2> opc, string asm>
4862 asm, "\t$Zd, $Zn, $Zm",
4879 multiclass sve_int_bin_cons_log<bits<2> opc, string asm, SDPatternOperator op> {
4880 def NAME : sve_int_bin_cons_log<opc, asm>;
4887 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
4889 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
4891 def : InstAlias<asm # "\t$Zd, $Zn, $Zm",
4895 class sve2_int_bitwise_ternary_op_d<bits<3> opc, string asm>
4897 asm, "\t$Zdn, $_Zdn, $Zm, $Zk",
4918 multiclass sve2_int_bitwise_ternary_op<bits<3> opc, string asm,
4920 def NAME : sve2_int_bitwise_ternary_op_d<opc, asm>;
4922 def : InstAlias<asm # "\t$Zdn, $Zdn, $Zm, $Zk",
4924 def : InstAlias<asm # "\t$Zdn, $Zdn, $Zm, $Zk",
4926 def : InstAlias<asm # "\t$Zdn, $Zdn, $Zm, $Zk",
4935 class sve2_int_rotate_right_imm<bits<4> tsz8_64, string asm,
4938 asm, "\t$Zdn, $_Zdn, $Zm, $imm",
4959 multiclass sve2_int_rotate_right_imm<string asm, SDPatternOperator op> {
4960 def _B : sve2_int_rotate_right_imm<{0,0,0,1}, asm, ZPR8, vecshiftR8>;
4961 def _H : sve2_int_rotate_right_imm<{0,0,1,?}, asm, ZPR16, vecshiftR16> {
4964 def _S : sve2_int_rotate_right_imm<{0,1,?,?}, asm, ZPR32, vecshiftR32> {
4967 def _D : sve2_int_rotate_right_imm<{1,?,?,?}, asm, ZPR64, vecshiftR64> {
4983 string asm, ZPRRegOp zprty>
4985 asm, "\t$Zd, $Pg/m, $imm8",
5005 multiclass sve_int_dup_fpimm_pred<string asm> {
5006 def _H : sve_int_dup_fpimm_pred<0b01, fpimm16, asm, ZPR16>;
5007 def _S : sve_int_dup_fpimm_pred<0b10, fpimm32, asm, ZPR32>;
5008 def _D : sve_int_dup_fpimm_pred<0b11, fpimm64, asm, ZPR64>;
5018 class sve_int_dup_imm_pred<bits<2> sz8_64, bit m, string asm,
5021 asm, "\t$Zd, $Pg"#pred_qual#", $imm",
5042 bits<2> sz8_64, string asm, ZPRRegOp zprty, imm8_opt_lsl cpyimm,
5045 def NAME : sve_int_dup_imm_pred<sz8_64, 1, asm, zprty, "/m",
5055 multiclass sve_int_dup_imm_pred_merge<string asm> {
5056 defm _B : sve_int_dup_imm_pred_merge_inst<0b00, asm, ZPR8, cpy_imm8_opt_lsl_i8,
5058 defm _H : sve_int_dup_imm_pred_merge_inst<0b01, asm, ZPR16, cpy_imm8_opt_lsl_i16,
5060 defm _S : sve_int_dup_imm_pred_merge_inst<0b10, asm, ZPR32, cpy_imm8_opt_lsl_i32,
5062 defm _D : sve_int_dup_imm_pred_merge_inst<0b11, asm, ZPR64, cpy_imm8_opt_lsl_i64,
5087 bits<2> sz8_64, string asm, ZPRRegOp zprty, imm8_opt_lsl cpyimm,
5089 def NAME : sve_int_dup_imm_pred<sz8_64, 0, asm, zprty, "/z",
5105 multiclass sve_int_dup_imm_pred_zero<string asm> {
5106 defm _B : sve_int_dup_imm_pred_zero_inst<0b00, asm, ZPR8, cpy_imm8_opt_lsl_i8,
5108 defm _H : sve_int_dup_imm_pred_zero_inst<0b01, asm, ZPR16, cpy_imm8_opt_lsl_i16,
5110 defm _S : sve_int_dup_imm_pred_zero_inst<0b10, asm, ZPR32, cpy_imm8_opt_lsl_i32,
5112 defm _D : sve_int_dup_imm_pred_zero_inst<0b11, asm, ZPR64, cpy_imm8_opt_lsl_i64,
5120 class sve_int_cmp<bit cmp_1, bits<2> sz8_64, bits<3> opc, string asm,
5123 asm, "\t$Pd, $Pg/z, $Zn, $Zm",
5172 multiclass sve_int_cmp_0<bits<3> opc, string asm, CondCode cc, CondCode invcc> {
5173 def _B : sve_int_cmp<0b0, 0b00, opc, asm, PPR8, ZPR8, ZPR8>;
5174 def _H : sve_int_cmp<0b0, 0b01, opc, asm, PPR16, ZPR16, ZPR16>;
5175 def _S : sve_int_cmp<0b0, 0b10, opc, asm, PPR32, ZPR32, ZPR32>;
5176 def _D : sve_int_cmp<0b0, 0b11, opc, asm, PPR64, ZPR64, ZPR64>;
5184 multiclass sve_int_cmp_0_wide<bits<3> opc, string asm, SDPatternOperator op> {
5185 def _B : sve_int_cmp<0b0, 0b00, opc, asm, PPR8, ZPR8, ZPR64>;
5186 def _H : sve_int_cmp<0b0, 0b01, opc, asm, PPR16, ZPR16, ZPR64>;
5187 def _S : sve_int_cmp<0b0, 0b10, opc, asm, PPR32, ZPR32, ZPR64>;
5194 multiclass sve_int_cmp_1_wide<bits<3> opc, string asm, SDPatternOperator op> {
5195 def _B : sve_int_cmp<0b1, 0b00, opc, asm, PPR8, ZPR8, ZPR64>;
5196 def _H : sve_int_cmp<0b1, 0b01, opc, asm, PPR16, ZPR16, ZPR64>;
5197 def _S : sve_int_cmp<0b1, 0b10, opc, asm, PPR32, ZPR32, ZPR64>;
5209 class sve_int_scmp_vi<bits<2> sz8_64, bits<3> opc, string asm, PPRRegOp pprty,
5213 asm, "\t$Pd, $Pg/z, $Zn, $imm5",
5265 multiclass sve_int_scmp_vi<bits<3> opc, string asm, CondCode cc, CondCode commuted_cc> {
5266 def _B : sve_int_scmp_vi<0b00, opc, asm, PPR8, ZPR8, simm5_32b>;
5267 def _H : sve_int_scmp_vi<0b01, opc, asm, PPR16, ZPR16, simm5_32b>;
5268 def _S : sve_int_scmp_vi<0b10, opc, asm, PPR32, ZPR32, simm5_32b>;
5269 def _D : sve_int_scmp_vi<0b11, opc, asm, PPR64, ZPR64, simm5_64b>;
5286 class sve_int_ucmp_vi<bits<2> sz8_64, bits<2> opc, string asm, PPRRegOp pprty,
5289 asm, "\t$Pd, $Pg/z, $Zn, $imm7",
5312 multiclass sve_int_ucmp_vi<bits<2> opc, string asm, CondCode cc,
5314 def _B : sve_int_ucmp_vi<0b00, opc, asm, PPR8, ZPR8, imm0_127>;
5315 def _H : sve_int_ucmp_vi<0b01, opc, asm, PPR16, ZPR16, imm0_127>;
5316 def _S : sve_int_ucmp_vi<0b10, opc, asm, PPR32, ZPR32, imm0_127>;
5317 def _D : sve_int_ucmp_vi<0b11, opc, asm, PPR64, ZPR64, imm0_127_64b>;
5334 class sve_int_cterm<bit sz, bit opc, string asm, RegisterClass rt>
5336 asm, "\t$Rn, $Rm",
5354 class sve_int_while_rr<bits<2> sz8_64, bits<4> opc, string asm,
5357 asm, "\t$Pd, $Rn, $Rm",
5378 multiclass sve_int_while4_rr<bits<3> opc, string asm, SDPatternOperator op,
5380 def _B : sve_int_while_rr<0b00, { 0, opc }, asm, GPR32, PPR8>;
5381 def _H : sve_int_while_rr<0b01, { 0, opc }, asm, GPR32, PPR16>;
5382 def _S : sve_int_while_rr<0b10, { 0, opc }, asm, GPR32, PPR32>;
5383 def _D : sve_int_while_rr<0b11, { 0, opc }, asm, GPR32, PPR64>;
5400 multiclass sve_int_while8_rr<bits<3> opc, string asm, SDPatternOperator op,
5402 def _B : sve_int_while_rr<0b00, { 1, opc }, asm, GPR64, PPR8>;
5403 def _H : sve_int_while_rr<0b01, { 1, opc }, asm, GPR64, PPR16>;
5404 def _S : sve_int_while_rr<0b10, { 1, opc }, asm, GPR64, PPR32>;
5405 def _D : sve_int_while_rr<0b11, { 1, opc }, asm, GPR64, PPR64>;
5422 class sve2_int_while_rr<bits<2> sz8_64, bits<1> rw, string asm,
5425 asm, "\t$Pd, $Rn, $Rm",
5445 multiclass sve2_int_while_rr<bits<1> rw, string asm, string op> {
5446 def _B : sve2_int_while_rr<0b00, rw, asm, PPR8>;
5447 def _H : sve2_int_while_rr<0b01, rw, asm, PPR16>;
5448 def _S : sve2_int_while_rr<0b10, rw, asm, PPR32>;
5449 def _D : sve2_int_while_rr<0b11, rw, asm, PPR64>;
5461 class sve_fp_fast_red<bits<2> sz, bits<3> opc, string asm,
5464 asm, "\t$Vd, $Pg, $Zn",
5483 multiclass sve_fp_fast_red<bits<3> opc, string asm, SDPatternOperator op> {
5484 def _H : sve_fp_fast_red<0b01, opc, asm, ZPR16, FPR16asZPR>;
5485 def _S : sve_fp_fast_red<0b10, opc, asm, ZPR32, FPR32asZPR>;
5486 def _D : sve_fp_fast_red<0b11, opc, asm, ZPR64, FPR64asZPR>;
5500 class sve_fp_2op_p_vd<bits<2> sz, bits<3> opc, string asm,
5503 asm, "\t$Vdn, $Pg, $_Vdn, $Zm",
5524 multiclass sve_fp_2op_p_vd<bits<3> opc, string asm, SDPatternOperator op> {
5525 def _H : sve_fp_2op_p_vd<0b01, opc, asm, ZPR16, FPR16asZPR>;
5526 def _S : sve_fp_2op_p_vd<0b10, opc, asm, ZPR32, FPR32asZPR>;
5527 def _D : sve_fp_2op_p_vd<0b11, opc, asm, ZPR64, FPR64asZPR>;
5541 class sve_fp_3op_p_pd<bits<2> sz, bits<3> opc, string asm, PPRRegOp pprty,
5544 asm, "\t$Pd, $Pg/z, $Zn, $Zm",
5567 multiclass sve_fp_3op_p_pd<bits<3> opc, string asm, SDPatternOperator op> {
5568 def _H : sve_fp_3op_p_pd<0b01, opc, asm, PPR16, ZPR16>;
5569 def _S : sve_fp_3op_p_pd<0b10, opc, asm, PPR32, ZPR32>;
5570 def _D : sve_fp_3op_p_pd<0b11, opc, asm, PPR64, ZPR64>;
5577 multiclass sve_fp_3op_p_pd_cc<bits<3> opc, string asm,
5580 def _H : sve_fp_3op_p_pd<0b01, opc, asm, PPR16, ZPR16>;
5581 def _S : sve_fp_3op_p_pd<0b10, opc, asm, PPR32, ZPR32>;
5582 def _D : sve_fp_3op_p_pd<0b11, opc, asm, PPR64, ZPR64>;
5603 class sve_fp_2op_p_pd<bits<2> sz, bits<3> opc, string asm, PPRRegOp pprty,
5606 asm, "\t$Pd, $Pg/z, $Zn, #0.0",
5626 multiclass sve_fp_2op_p_pd<bits<3> opc, string asm,
5629 def _H : sve_fp_2op_p_pd<0b01, opc, asm, PPR16, ZPR16>;
5630 def _S : sve_fp_2op_p_pd<0b10, opc, asm, PPR32, ZPR32>;
5631 def _D : sve_fp_2op_p_pd<0b11, opc, asm, PPR64, ZPR64>;
5661 class sve_int_index_ii<bits<2> sz8_64, string asm, ZPRRegOp zprty,
5664 asm, "\t$Zd, $imm5, $imm5b",
5682 multiclass sve_int_index_ii<string asm> {
5683 def _B : sve_int_index_ii<0b00, asm, ZPR8, simm5_8b>;
5684 def _H : sve_int_index_ii<0b01, asm, ZPR16, simm5_16b>;
5685 def _S : sve_int_index_ii<0b10, asm, ZPR32, simm5_32b>;
5686 def _D : sve_int_index_ii<0b11, asm, ZPR64, simm5_64b>;
5708 class sve_int_index_ir<bits<2> sz8_64, string asm, ZPRRegOp zprty,
5711 asm, "\t$Zd, $imm5, $Rm",
5727 multiclass sve_int_index_ir<string asm, SDPatternOperator mulop, SDPatternOperator muloneuseop> {
5728 def _B : sve_int_index_ir<0b00, asm, ZPR8, GPR32, simm5_8b>;
5729 def _H : sve_int_index_ir<0b01, asm, ZPR16, GPR32, simm5_16b>;
5730 def _S : sve_int_index_ir<0b10, asm, ZPR32, GPR32, simm5_32b>;
5731 def _D : sve_int_index_ir<0b11, asm, ZPR64, GPR64, simm5_64b>;
5777 class sve_int_index_ri<bits<2> sz8_64, string asm, ZPRRegOp zprty,
5780 asm, "\t$Zd, $Rn, $imm5",
5796 multiclass sve_int_index_ri<string asm> {
5797 def _B : sve_int_index_ri<0b00, asm, ZPR8, GPR32, simm5_8b>;
5798 def _H : sve_int_index_ri<0b01, asm, ZPR16, GPR32, simm5_16b>;
5799 def _S : sve_int_index_ri<0b10, asm, ZPR32, GPR32, simm5_32b>;
5800 def _D : sve_int_index_ri<0b11, asm, ZPR64, GPR64, simm5_64b>;
5813 class sve_int_index_rr<bits<2> sz8_64, string asm, ZPRRegOp zprty,
5816 asm, "\t$Zd, $Rn, $Rm",
5832 multiclass sve_int_index_rr<string asm, SDPatternOperator mulop> {
5833 def _B : sve_int_index_rr<0b00, asm, ZPR8, GPR32>;
5834 def _H : sve_int_index_rr<0b01, asm, ZPR16, GPR32>;
5835 def _S : sve_int_index_rr<0b10, asm, ZPR32, GPR32>;
5836 def _D : sve_int_index_rr<0b11, asm, ZPR64, GPR64>;
5865 class sve_int_bin_pred_shift_imm<bits<4> tsz8_64, bits<4> opc, string asm,
5868 asm, "\t$Zdn, $Pg/m, $_Zdn, $imm",
5890 multiclass sve_int_bin_pred_shift_imm_left<bits<4> opc, string asm, string Ps,
5893 sve_int_bin_pred_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftL8>;
5895 sve_int_bin_pred_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftL16> {
5899 sve_int_bin_pred_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftL32> {
5903 sve_int_bin_pred_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftL64> {
5915 multiclass sve_int_bin_pred_shift_imm_left_dup<bits<4> opc, string asm,
5917 : sve_int_bin_pred_shift_imm_left<opc, asm, Ps, null_frag> {
5936 multiclass sve_int_bin_pred_shift_imm_right<bits<4> opc, string asm, string Ps,
5939 sve_int_bin_pred_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftR8>;
5941 sve_int_bin_pred_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftR16> {
5945 sve_int_bin_pred_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftR32> {
5949 sve_int_bin_pred_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftR64> {
5961 multiclass sve_int_bin_pred_shift_imm_right_dup<bits<4> opc, string asm,
5963 : sve_int_bin_pred_shift_imm_right<opc, asm, Ps, null_frag> {
5983 string asm, ZPRRegOp zprty, ZPRRegOp zprty2>
5985 asm, "\t$Zdn, $Pg/m, $_Zdn, $Zm",
6007 multiclass sve_int_bin_pred_shift<bits<3> opc, string asm, string Ps,
6010 def _B : sve_int_bin_pred_shift<0b00, 0b0, opc, asm, ZPR8, ZPR8>,
6012 def _H : sve_int_bin_pred_shift<0b01, 0b0, opc, asm, ZPR16, ZPR16>,
6014 def _S : sve_int_bin_pred_shift<0b10, 0b0, opc, asm, ZPR32, ZPR32>,
6016 def _D : sve_int_bin_pred_shift<0b11, 0b0, opc, asm, ZPR64, ZPR64>,
6051 multiclass sve_int_bin_pred_shift_wide<bits<3> opc, string asm,
6053 def _B : sve_int_bin_pred_shift<0b00, 0b1, opc, asm, ZPR8, ZPR64>;
6054 def _H : sve_int_bin_pred_shift<0b01, 0b1, opc, asm, ZPR16, ZPR64>;
6055 def _S : sve_int_bin_pred_shift<0b10, 0b1, opc, asm, ZPR32, ZPR64>;
6066 class sve_int_bin_cons_shift_wide<bits<2> sz8_64, bits<2> opc, string asm,
6069 asm, "\t$Zd, $Zn, $Zm",
6087 multiclass sve_int_bin_cons_shift_wide<bits<2> opc, string asm, SDPatternOperator op> {
6088 def _B : sve_int_bin_cons_shift_wide<0b00, opc, asm, ZPR8>;
6089 def _H : sve_int_bin_cons_shift_wide<0b01, opc, asm, ZPR16>;
6090 def _S : sve_int_bin_cons_shift_wide<0b10, opc, asm, ZPR32>;
6097 class sve_int_bin_cons_shift_imm<bits<4> tsz8_64, bits<2> opc, string asm,
6100 asm, "\t$Zd, $Zn, $imm",
6119 multiclass sve_int_bin_cons_shift_imm_left<bits<2> opc, string asm,
6121 def _B : sve_int_bin_cons_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftL8>;
6122 def _H : sve_int_bin_cons_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftL16> {
6125 def _S : sve_int_bin_cons_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftL32> {
6128 def _D : sve_int_bin_cons_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftL64> {
6139 multiclass sve_int_bin_cons_shift_imm_right<bits<2> opc, string asm,
6141 def _B : sve_int_bin_cons_shift_imm<{0,0,0,1}, opc, asm, ZPR8, vecshiftR8>;
6142 def _H : sve_int_bin_cons_shift_imm<{0,0,1,?}, opc, asm, ZPR16, vecshiftR16> {
6145 def _S : sve_int_bin_cons_shift_imm<{0,1,?,?}, opc, asm, ZPR32, vecshiftR32> {
6148 def _D : sve_int_bin_cons_shift_imm<{1,?,?,?}, opc, asm, ZPR64, vecshiftR64> {
6163 class sve_mem_cst_si<bits<2> msz, bits<2> esz, string asm,
6166 asm, "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6187 multiclass sve_mem_cst_si<bits<2> msz, bits<2> esz, string asm,
6190 def NAME : sve_mem_cst_si<msz, esz, asm, listty>;
6192 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6194 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6196 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6201 string asm, Operand immtype>
6203 asm, "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6225 string asm, Operand immtype> {
6226 def NAME : sve_mem_est_si<sz, nregs, VecList, asm, immtype>;
6228 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6235 string asm, Operand immtype>
6237 asm, "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6257 string asm, Operand immtype> {
6258 def NAME : sve_mem_128b_est_si<nregs, VecList, asm, immtype>;
6260 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6266 string asm, RegisterOperand gprty>
6268 asm, "\t$Zt, $Pg, [$Rn, $Rm]",
6291 string asm, RegisterOperand gprty>
6293 asm, "\t$Zt, $Pg, [$Rn, $Rm]",
6313 class sve_mem_cst_ss_base<bits<4> dtype, string asm,
6316 asm, "\t$Zt, $Pg, [$Rn, $Rm]",
6335 multiclass sve_mem_cst_ss<bits<4> dtype, string asm,
6338 def NAME : sve_mem_cst_ss_base<dtype, asm, listty, gprty>;
6340 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Rm]",
6344 class sve_mem_cstnt_si<bits<2> msz, string asm, RegisterOperand VecList>
6346 asm, "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6366 multiclass sve_mem_cstnt_si<bits<2> msz, string asm, RegisterOperand listty,
6368 def NAME : sve_mem_cstnt_si<msz, asm, listty>;
6370 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6372 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $imm4, mul vl]",
6374 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn]",
6378 class sve_mem_cstnt_ss_base<bits<2> msz, string asm, RegisterOperand listty,
6381 asm, "\t$Zt, $Pg, [$Rn, $Rm]",
6401 multiclass sve_mem_cstnt_ss<bits<2> msz, string asm, RegisterOperand listty,
6403 def NAME : sve_mem_cstnt_ss_base<msz, asm, listty, gprty>;
6405 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Rm]",
6409 class sve2_mem_sstnt_vs_base<bits<3> opc, string asm,
6412 asm, "\t$Zt, $Pg, [$Zn, $Rm]",
6432 multiclass sve2_mem_sstnt_vs_32_ptrs<bits<3> opc, string asm,
6435 def NAME : sve2_mem_sstnt_vs_base<opc, asm, Z_s, ZPR32>;
6437 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn, $Rm]",
6439 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6441 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6448 multiclass sve2_mem_sstnt_vs_64_ptrs<bits<3> opc, string asm,
6451 def NAME : sve2_mem_sstnt_vs_base<opc, asm, Z_d, ZPR64>;
6453 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn, $Rm]",
6455 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6457 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6464 class sve_mem_sst_sv<bits<3> opc, bit xs, bit scaled, string asm,
6467 asm, "\t$Zt, $Pg, [$Rn, $Zm]",
6489 multiclass sve_mem_32b_sst_sv_32_scaled<bits<3> opc, string asm,
6495 def _UXTW_SCALED : sve_mem_sst_sv<opc, 0, 1, asm, Z_s, uxtw_opnd>;
6496 def _SXTW_SCALED : sve_mem_sst_sv<opc, 1, 1, asm, Z_s, sxtw_opnd>;
6498 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6500 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6509 multiclass sve_mem_64b_sst_sv_32_scaled<bits<3> opc, string asm,
6515 def _UXTW_SCALED : sve_mem_sst_sv<opc, 0, 1, asm, Z_d, uxtw_opnd>;
6516 def _SXTW_SCALED : sve_mem_sst_sv<opc, 1, 1, asm, Z_d, sxtw_opnd>;
6518 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6520 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6529 multiclass sve_mem_64b_sst_sv_32_unscaled<bits<3> opc, string asm,
6535 def _UXTW : sve_mem_sst_sv<opc, 0, 0, asm, Z_d, uxtw_opnd>;
6536 def _SXTW : sve_mem_sst_sv<opc, 1, 0, asm, Z_d, sxtw_opnd>;
6538 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6540 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6549 multiclass sve_mem_32b_sst_sv_32_unscaled<bits<3> opc, string asm,
6555 def _UXTW : sve_mem_sst_sv<opc, 0, 0, asm, Z_s, uxtw_opnd>;
6556 def _SXTW : sve_mem_sst_sv<opc, 1, 0, asm, Z_s, sxtw_opnd>;
6558 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6560 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6569 class sve_mem_sst_sv2<bits<2> msz, bit scaled, string asm,
6572 asm, "\t$Zt, $Pg, [$Rn, $Zm]",
6593 multiclass sve_mem_sst_sv_64_scaled<bits<2> msz, string asm,
6597 def _SCALED : sve_mem_sst_sv2<msz, 1, asm, zprext>;
6599 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6606 multiclass sve_mem_sst_sv_64_unscaled<bits<2> msz, string asm,
6609 def NAME : sve_mem_sst_sv2<msz, 0, asm, ZPR64ExtLSL8>;
6611 def : InstAlias<asm # "\t$Zt, $Pg, [$Rn, $Zm]",
6618 class sve_mem_sst_vi<bits<3> opc, string asm, ZPRRegOp zprty,
6621 asm, "\t$Zt, $Pg, [$Zn, $imm5]",
6642 multiclass sve_mem_32b_sst_vi_ptrs<bits<3> opc, string asm,
6646 def _IMM : sve_mem_sst_vi<opc, asm, ZPR32, Z_s, imm_ty>;
6648 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6650 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn, $imm5]",
6652 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6659 multiclass sve_mem_64b_sst_vi_ptrs<bits<3> opc, string asm,
6663 def _IMM : sve_mem_sst_vi<opc, asm, ZPR64, Z_d, imm_ty>;
6665 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6667 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn, $imm5]",
6669 def : InstAlias<asm # "\t$Zt, $Pg, [$Zn]",
6676 class sve_mem_z_spill<string asm>
6678 asm, "\t$Zt, [$Rn, $imm9, mul vl]",
6695 multiclass sve_mem_z_spill<string asm> {
6696 def NAME : sve_mem_z_spill<asm>;
6698 def : InstAlias<asm # "\t$Zt, [$Rn]",
6702 class sve_mem_p_spill<string asm>
6704 asm, "\t$Pt, [$Rn, $imm9, mul vl]",
6722 multiclass sve_mem_p_spill<string asm> {
6723 def NAME : sve_mem_p_spill<asm>;
6725 def : InstAlias<asm # "\t$Pt, [$Rn]",
6733 class sve_int_perm_bin_perm_pp<bits<3> opc, bits<2> sz8_64, string asm,
6736 asm, "\t$Pd, $Pn, $Pm",
6756 multiclass sve_int_perm_bin_perm_pp<bits<3> opc, string asm,
6761 def _B : sve_int_perm_bin_perm_pp<opc, 0b00, asm, PPR8, ir_op>;
6762 def _H : sve_int_perm_bin_perm_pp<opc, 0b01, asm, PPR16, op_b16>;
6763 def _S : sve_int_perm_bin_perm_pp<opc, 0b10, asm, PPR32, op_b32>;
6764 def _D : sve_int_perm_bin_perm_pp<opc, 0b11, asm, PPR64, op_b64>;
6771 class sve_int_perm_punpk<bit opc, string asm>
6773 asm, "\t$Pd, $Pn",
6788 multiclass sve_int_perm_punpk<bit opc, string asm, SDPatternOperator op> {
6789 def NAME : sve_int_perm_punpk<opc, asm>;
6796 class sve_int_rdffr_pred<bit s, string asm, SDPatternOperator op = null_frag>
6798 asm, "\t$Pd, $Pg/z",
6815 class sve_int_rdffr_unpred<string asm, SDPatternOperator op> : I<
6817 asm, "\t$Pd",
6828 class sve_int_wrffr<string asm, SDPatternOperator op>
6830 asm, "\t$Pn",
6842 class sve_int_setffr<string asm, SDPatternOperator op>
6844 asm, "",
6857 class sve_int_perm_clast_rz<bits<2> sz8_64, bit ab, string asm,
6860 asm, "\t$Rdn, $Pg, $_Rdn, $Zm",
6879 multiclass sve_int_perm_clast_rz<bit ab, string asm, SDPatternOperator op> {
6880 def _B : sve_int_perm_clast_rz<0b00, ab, asm, ZPR8, GPR32>;
6881 def _H : sve_int_perm_clast_rz<0b01, ab, asm, ZPR16, GPR32>;
6882 def _S : sve_int_perm_clast_rz<0b10, ab, asm, ZPR32, GPR32>;
6883 def _D : sve_int_perm_clast_rz<0b11, ab, asm, ZPR64, GPR64>;
6891 class sve_int_perm_clast_vz<bits<2> sz8_64, bit ab, string asm,
6894 asm, "\t$Vdn, $Pg, $_Vdn, $Zm",
6913 multiclass sve_int_perm_clast_vz<bit ab, string asm, SDPatternOperator op> {
6914 def _B : sve_int_perm_clast_vz<0b00, ab, asm, ZPR8, FPR8>;
6915 def _H : sve_int_perm_clast_vz<0b01, ab, asm, ZPR16, FPR16>;
6916 def _S : sve_int_perm_clast_vz<0b10, ab, asm, ZPR32, FPR32>;
6917 def _D : sve_int_perm_clast_vz<0b11, ab, asm, ZPR64, FPR64>;
6926 class sve_int_perm_clast_zz<bits<2> sz8_64, bit ab, string asm,
6929 asm, "\t$Zdn, $Pg, $_Zdn, $Zm",
6950 multiclass sve_int_perm_clast_zz<bit ab, string asm, SDPatternOperator op> {
6951 def _B : sve_int_perm_clast_zz<0b00, ab, asm, ZPR8>;
6952 def _H : sve_int_perm_clast_zz<0b01, ab, asm, ZPR16>;
6953 def _S : sve_int_perm_clast_zz<0b10, ab, asm, ZPR32>;
6954 def _D : sve_int_perm_clast_zz<0b11, ab, asm, ZPR64>;
6968 class sve_int_perm_last_r<bits<2> sz8_64, bit ab, string asm,
6971 asm, "\t$Rd, $Pg, $Zn",
6989 multiclass sve_int_perm_last_r<bit ab, string asm, SDPatternOperator op> {
6990 def _B : sve_int_perm_last_r<0b00, ab, asm, ZPR8, GPR32>;
6991 def _H : sve_int_perm_last_r<0b01, ab, asm, ZPR16, GPR32>;
6992 def _S : sve_int_perm_last_r<0b10, ab, asm, ZPR32, GPR32>;
6993 def _D : sve_int_perm_last_r<0b11, ab, asm, ZPR64, GPR64>;
7001 class sve_int_perm_last_v<bits<2> sz8_64, bit ab, string asm,
7004 asm, "\t$Vd, $Pg, $Zn",
7022 multiclass sve_int_perm_last_v<bit ab, string asm, SDPatternOperator op> {
7023 def _B : sve_int_perm_last_v<0b00, ab, asm, ZPR8, FPR8>;
7024 def _H : sve_int_perm_last_v<0b01, ab, asm, ZPR16, FPR16>;
7025 def _S : sve_int_perm_last_v<0b10, ab, asm, ZPR32, FPR32>;
7026 def _D : sve_int_perm_last_v<0b11, ab, asm, ZPR64, FPR64>;
7036 class sve_int_perm_splice<bits<2> sz8_64, string asm, ZPRRegOp zprty>
7038 asm, "\t$Zdn, $Pg, $_Zdn, $Zm",
7057 multiclass sve_int_perm_splice<string asm, SDPatternOperator op> {
7058 def _B : sve_int_perm_splice<0b00, asm, ZPR8>;
7059 def _H : sve_int_perm_splice<0b01, asm, ZPR16>;
7060 def _S : sve_int_perm_splice<0b10, asm, ZPR32>;
7061 def _D : sve_int_perm_splice<0b11, asm, ZPR64>;
7076 class sve2_int_perm_splice_cons<bits<2> sz8_64, string asm,
7079 asm, "\t$Zd, $Pg, $Zn",
7095 multiclass sve2_int_perm_splice_cons<string asm> {
7096 def _B : sve2_int_perm_splice_cons<0b00, asm, ZPR8, ZZ_b>;
7097 def _H : sve2_int_perm_splice_cons<0b01, asm, ZPR16, ZZ_h>;
7098 def _S : sve2_int_perm_splice_cons<0b10, asm, ZPR32, ZZ_s>;
7099 def _D : sve2_int_perm_splice_cons<0b11, asm, ZPR64, ZZ_d>;
7102 class sve_int_perm_rev<bits<2> sz8_64, bits<2> opc, string asm,
7105 asm, "\t$Zd, $Pg/m, $Zn",
7126 multiclass sve_int_perm_rev_rbit<string asm, SDPatternOperator op> {
7127 def _B : sve_int_perm_rev<0b00, 0b11, asm, ZPR8>;
7128 def _H : sve_int_perm_rev<0b01, 0b11, asm, ZPR16>;
7129 def _S : sve_int_perm_rev<0b10, 0b11, asm, ZPR32>;
7130 def _D : sve_int_perm_rev<0b11, 0b11, asm, ZPR64>;
7138 multiclass sve_int_perm_rev_revb<string asm, SDPatternOperator op> {
7139 def _H : sve_int_perm_rev<0b01, 0b00, asm, ZPR16>;
7140 def _S : sve_int_perm_rev<0b10, 0b00, asm, ZPR32>;
7141 def _D : sve_int_perm_rev<0b11, 0b00, asm, ZPR64>;
7148 multiclass sve_int_perm_rev_revh<string asm, SDPatternOperator op> {
7149 def _S : sve_int_perm_rev<0b10, 0b01, asm, ZPR32>;
7150 def _D : sve_int_perm_rev<0b11, 0b01, asm, ZPR64>;
7156 multiclass sve_int_perm_rev_revw<string asm, SDPatternOperator op> {
7157 def _D : sve_int_perm_rev<0b11, 0b10, asm, ZPR64>;
7162 class sve_int_perm_cpy_r<bits<2> sz8_64, string asm, ZPRRegOp zprty,
7165 asm, "\t$Zd, $Pg/m, $Rn",
7184 multiclass sve_int_perm_cpy_r<string asm, SDPatternOperator op> {
7185 def _B : sve_int_perm_cpy_r<0b00, asm, ZPR8, GPR32sp>;
7186 def _H : sve_int_perm_cpy_r<0b01, asm, ZPR16, GPR32sp>;
7187 def _S : sve_int_perm_cpy_r<0b10, asm, ZPR32, GPR32sp>;
7188 def _D : sve_int_perm_cpy_r<0b11, asm, ZPR64, GPR64sp>;
7209 class sve_int_perm_cpy_v<bits<2> sz8_64, string asm, ZPRRegOp zprty,
7212 asm, "\t$Zd, $Pg/m, $Vn",
7231 multiclass sve_int_perm_cpy_v<string asm, SDPatternOperator op> {
7232 def _B : sve_int_perm_cpy_v<0b00, asm, ZPR8, FPR8>;
7233 def _H : sve_int_perm_cpy_v<0b01, asm, ZPR16, FPR16>;
7234 def _S : sve_int_perm_cpy_v<0b10, asm, ZPR32, FPR32>;
7235 def _D : sve_int_perm_cpy_v<0b11, asm, ZPR64, FPR64>;
7263 class sve_int_perm_compact<bit sz, string asm, ZPRRegOp zprty>
7265 asm, "\t$Zd, $Pg, $Zn",
7281 multiclass sve_int_perm_compact<string asm, SDPatternOperator op> {
7282 def _S : sve_int_perm_compact<0b0, asm, ZPR32>;
7283 def _D : sve_int_perm_compact<0b1, asm, ZPR64>;
7295 class sve_mem_cld_si_base<bits<4> dtype, bit nf, string asm,
7298 asm, "\t$Zt, $Pg/z, [$Rn, $imm4, mul vl]",
7320 multiclass sve_mem_cld_si_base<bits<4> dtype, bit nf, string asm,
7322 def NAME : sve_mem_cld_si_base<dtype, nf, asm, listty>;
7324 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7326 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $imm4, mul vl]",
7328 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7332 multiclass sve_mem_cld_si<bits<4> dtype, string asm, RegisterOperand listty,
7334 : sve_mem_cld_si_base<dtype, 0, asm, listty, zprty>;
7336 multiclass sve_mem_cldnf_si<bits<4> dtype, string asm, RegisterOperand listty,
7338 : sve_mem_cld_si_base<dtype, 1, asm, listty, zprty>;
7340 class sve_mem_cldnt_si_base<bits<2> msz, string asm, RegisterOperand VecList>
7342 asm, "\t$Zt, $Pg/z, [$Rn, $imm4, mul vl]",
7362 multiclass sve_mem_cldnt_si<bits<2> msz, string asm, RegisterOperand listty,
7364 def NAME : sve_mem_cldnt_si_base<msz, asm, listty>;
7366 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7368 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $imm4, mul vl]",
7370 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7374 class sve_mem_cldnt_ss_base<bits<2> msz, string asm, RegisterOperand VecList,
7377 asm, "\t$Zt, $Pg/z, [$Rn, $Rm]",
7397 multiclass sve_mem_cldnt_ss<bits<2> msz, string asm, RegisterOperand listty,
7399 def NAME : sve_mem_cldnt_ss_base<msz, asm, listty, gprty>;
7401 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Rm]",
7405 class sve_mem_ldqr_si<bits<2> sz, string asm, RegisterOperand VecList>
7407 asm, "\t$Zt, $Pg/z, [$Rn, $imm4]", "", []>, Sched<[]> {
7425 multiclass sve_mem_ldqr_si<bits<2> sz, string asm, RegisterOperand listty,
7427 def NAME : sve_mem_ldqr_si<sz, asm, listty>;
7428 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7430 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7432 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $imm4]",
7436 class sve_mem_ldqr_ss<bits<2> sz, string asm, RegisterOperand VecList,
7439 asm, "\t$Zt, $Pg/z, [$Rn, $Rm]", "", []>, Sched<[]> {
7457 multiclass sve_mem_ldqr_ss<bits<2> sz, string asm, RegisterOperand listty,
7459 def NAME : sve_mem_ldqr_ss<sz, asm, listty, gprty>;
7461 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Rm]",
7465 class sve_mem_ld_dup<bits<2> dtypeh, bits<2> dtypel, string asm,
7468 asm, "\t$Zt, $Pg/z, [$Rn, $imm6]",
7489 multiclass sve_mem_ld_dup<bits<2> dtypeh, bits<2> dtypel, string asm,
7491 def NAME : sve_mem_ld_dup<dtypeh, dtypel, asm, zlistty, immtype>;
7493 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7495 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $imm6]",
7497 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7501 class sve_mem_cld_ss_base<bits<4> dtype, bit ff, dag iops, string asm,
7504 asm, "\t$Zt, $Pg/z, [$Rn, $Rm]",
7526 multiclass sve_mem_cld_ss<bits<4> dtype, string asm, RegisterOperand listty,
7529 asm, listty>;
7531 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Rm]",
7535 multiclass sve_mem_cldff_ss<bits<4> dtype, string asm, RegisterOperand listty,
7537 def NAME : sve_mem_cld_ss_base<dtype, 1, (ins PPR3bAny:$Pg, GPR64sp:$Rn, gprty:$Rm), asm, listty>;
7539 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Rm]",
7542 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7545 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7550 string asm, Operand immtype>
7552 asm, "\t$Zt, $Pg/z, [$Rn, $imm4, mul vl]",
7574 string asm, Operand immtype> {
7575 def NAME : sve_mem_eld_si<sz, nregs, VecList, asm, immtype>;
7577 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
7583 string asm, RegisterOperand gprty>
7585 asm, "\t$Zt, $Pg/z, [$Rn, $Rm]",
7613 class sve_mem_32b_gld_sv<bits<4> opc, bit xs, bit scaled, string asm,
7616 asm, "\t$Zt, $Pg/z, [$Rn, $Zm]",
7641 multiclass sve_mem_32b_gld_sv_32_scaled<bits<4> opc, string asm,
7647 def _UXTW_SCALED : sve_mem_32b_gld_sv<opc, 0, 1, asm, uxtw_opnd>;
7648 def _SXTW_SCALED : sve_mem_32b_gld_sv<opc, 1, 1, asm, sxtw_opnd>;
7650 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
7652 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
7661 multiclass sve_mem_32b_gld_vs_32_unscaled<bits<4> opc, string asm,
7667 def _UXTW : sve_mem_32b_gld_sv<opc, 0, 0, asm, uxtw_opnd>;
7668 def _SXTW : sve_mem_32b_gld_sv<opc, 1, 0, asm, sxtw_opnd>;
7670 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
7672 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
7682 class sve_mem_32b_gld_vi<bits<4> opc, string asm, Operand imm_ty>
7684 asm, "\t$Zt, $Pg/z, [$Zn, $imm5]",
7708 multiclass sve_mem_32b_gld_vi_32_ptrs<bits<4> opc, string asm, Operand imm_ty,
7710 def _IMM : sve_mem_32b_gld_vi<opc, asm, imm_ty>;
7712 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7714 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn, $imm5]",
7716 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7723 class sve_mem_prfm_si<bits<2> msz, string asm>
7725 asm, "\t$prfop, $Pg, [$Rn, $imm6, mul vl]",
7744 multiclass sve_mem_prfm_si<bits<2> msz, string asm> {
7745 def NAME : sve_mem_prfm_si<msz, asm>;
7747 def : InstAlias<asm # "\t$prfop, $Pg, [$Rn]",
7751 class sve_mem_prfm_ss<bits<3> opc, string asm, RegisterOperand gprty>
7753 asm, "\t$prfop, $Pg, [$Rn, $Rm]",
7775 class sve_mem_32b_prfm_sv<bits<2> msz, bit xs, string asm,
7778 asm, "\t$prfop, $Pg, [$Rn, $Zm]",
7799 multiclass sve_mem_32b_prfm_sv_scaled<bits<2> msz, string asm,
7804 def _UXTW_SCALED : sve_mem_32b_prfm_sv<msz, 0, asm, uxtw_opnd>;
7805 def _SXTW_SCALED : sve_mem_32b_prfm_sv<msz, 1, asm, sxtw_opnd>;
7814 class sve_mem_32b_prfm_vi<bits<2> msz, string asm, Operand imm_ty>
7816 asm, "\t$prfop, $Pg, [$Zn, $imm5]",
7836 multiclass sve_mem_32b_prfm_vi<bits<2> msz, string asm, Operand imm_ty, SDPatternOperator op> {
7837 def NAME : sve_mem_32b_prfm_vi<msz, asm, imm_ty>;
7839 def : InstAlias<asm # "\t$prfop, $Pg, [$Zn]",
7846 class sve_mem_z_fill<string asm>
7848 asm, "\t$Zt, [$Rn, $imm9, mul vl]",
7865 multiclass sve_mem_z_fill<string asm> {
7866 def NAME : sve_mem_z_fill<asm>;
7868 def : InstAlias<asm # "\t$Zt, [$Rn]",
7872 class sve_mem_p_fill<string asm>
7874 asm, "\t$Pt, [$Rn, $imm9, mul vl]",
7892 multiclass sve_mem_p_fill<string asm> {
7893 def NAME : sve_mem_p_fill<asm>;
7895 def : InstAlias<asm # "\t$Pt, [$Rn]",
7899 class sve2_mem_gldnt_vs_base<bits<5> opc, dag iops, string asm,
7902 asm, "\t$Zt, $Pg/z, [$Zn, $Rm]",
7925 multiclass sve2_mem_gldnt_vs_32_ptrs<bits<5> opc, string asm,
7928 def NAME : sve2_mem_gldnt_vs_base<opc, (ins PPR3bAny:$Pg, ZPR32:$Zn, GPR64:$Rm), asm, Z_s>;
7930 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn, $Rm]",
7932 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7934 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7941 multiclass sve2_mem_gldnt_vs_64_ptrs<bits<5> opc, string asm,
7944 def NAME : sve2_mem_gldnt_vs_base<opc, (ins PPR3bAny:$Pg, ZPR64:$Zn, GPR64:$Rm), asm, Z_d>;
7946 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn, $Rm]",
7948 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7950 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
7964 class sve_mem_64b_gld_sv<bits<4> opc, bit xs, bit scaled, bit lsl, string asm,
7967 asm, "\t$Zt, $Pg/z, [$Rn, $Zm]",
7992 multiclass sve_mem_64b_gld_sv_32_scaled<bits<4> opc, string asm,
7998 def _UXTW_SCALED : sve_mem_64b_gld_sv<opc, 0, 1, 0, asm, uxtw_opnd>;
7999 def _SXTW_SCALED : sve_mem_64b_gld_sv<opc, 1, 1, 0, asm, sxtw_opnd>;
8001 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8003 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8012 multiclass sve_mem_64b_gld_vs_32_unscaled<bits<4> opc, string asm,
8018 def _UXTW : sve_mem_64b_gld_sv<opc, 0, 0, 0, asm, uxtw_opnd>;
8019 def _SXTW : sve_mem_64b_gld_sv<opc, 1, 0, 0, asm, sxtw_opnd>;
8021 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8023 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8032 multiclass sve_mem_64b_gld_sv2_64_scaled<bits<4> opc, string asm,
8035 def _SCALED : sve_mem_64b_gld_sv<opc, 1, 1, 1, asm, zprext>;
8037 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8044 multiclass sve_mem_64b_gld_vs2_64_unscaled<bits<4> opc, string asm,
8046 def NAME : sve_mem_64b_gld_sv<opc, 1, 0, 1, asm, ZPR64ExtLSL8>;
8048 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Zm]",
8055 class sve_mem_64b_gld_vi<bits<4> opc, string asm, Operand imm_ty>
8057 asm, "\t$Zt, $Pg/z, [$Zn, $imm5]",
8080 multiclass sve_mem_64b_gld_vi_64_ptrs<bits<4> opc, string asm, Operand imm_ty,
8082 def _IMM : sve_mem_64b_gld_vi<opc, asm, imm_ty>;
8084 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
8086 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn, $imm5]",
8088 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Zn]",
8096 class sve_mem_64b_prfm_sv<bits<2> msz, bit xs, bit lsl, string asm,
8099 asm, "\t$prfop, $Pg, [$Rn, $Zm]",
8120 multiclass sve_mem_64b_prfm_sv_ext_scaled<bits<2> msz, string asm,
8125 def _UXTW_SCALED : sve_mem_64b_prfm_sv<msz, 0, 0, asm, uxtw_opnd>;
8126 def _SXTW_SCALED : sve_mem_64b_prfm_sv<msz, 1, 0, asm, sxtw_opnd>;
8136 multiclass sve_mem_64b_prfm_sv_lsl_scaled<bits<2> msz, string asm,
8138 def NAME : sve_mem_64b_prfm_sv<msz, 1, 1, asm, zprext>;
8145 class sve_mem_64b_prfm_vi<bits<2> msz, string asm, Operand imm_ty>
8147 asm, "\t$prfop, $Pg, [$Zn, $imm5]",
8167 multiclass sve_mem_64b_prfm_vi<bits<2> msz, string asm, Operand imm_ty, SDPatternOperator op> {
8168 def NAME : sve_mem_64b_prfm_vi<msz, asm, imm_ty>;
8170 def : InstAlias<asm # "\t$prfop, $Pg, [$Zn]",
8181 class sve_int_bin_cons_misc_0_a<bits<2> opc, bits<2> msz, string asm,
8184 asm, "\t$Zd, [$Zn, $Zm]",
8202 multiclass sve_int_bin_cons_misc_0_a_uxtw<bits<2> opc, string asm> {
8203 def _0 : sve_int_bin_cons_misc_0_a<opc, 0b00, asm, ZPR64, ZPR64ExtUXTW8>;
8204 def _1 : sve_int_bin_cons_misc_0_a<opc, 0b01, asm, ZPR64, ZPR64ExtUXTW16>;
8205 def _2 : sve_int_bin_cons_misc_0_a<opc, 0b10, asm, ZPR64, ZPR64ExtUXTW32>;
8206 def _3 : sve_int_bin_cons_misc_0_a<opc, 0b11, asm, ZPR64, ZPR64ExtUXTW64>;
8209 multiclass sve_int_bin_cons_misc_0_a_sxtw<bits<2> opc, string asm> {
8210 def _0 : sve_int_bin_cons_misc_0_a<opc, 0b00, asm, ZPR64, ZPR64ExtSXTW8>;
8211 def _1 : sve_int_bin_cons_misc_0_a<opc, 0b01, asm, ZPR64, ZPR64ExtSXTW16>;
8212 def _2 : sve_int_bin_cons_misc_0_a<opc, 0b10, asm, ZPR64, ZPR64ExtSXTW32>;
8213 def _3 : sve_int_bin_cons_misc_0_a<opc, 0b11, asm, ZPR64, ZPR64ExtSXTW64>;
8216 multiclass sve_int_bin_cons_misc_0_a_32_lsl<bits<2> opc, string asm> {
8217 def _0 : sve_int_bin_cons_misc_0_a<opc, 0b00, asm, ZPR32, ZPR32ExtLSL8>;
8218 def _1 : sve_int_bin_cons_misc_0_a<opc, 0b01, asm, ZPR32, ZPR32ExtLSL16>;
8219 def _2 : sve_int_bin_cons_misc_0_a<opc, 0b10, asm, ZPR32, ZPR32ExtLSL32>;
8220 def _3 : sve_int_bin_cons_misc_0_a<opc, 0b11, asm, ZPR32, ZPR32ExtLSL64>;
8223 multiclass sve_int_bin_cons_misc_0_a_64_lsl<bits<2> opc, string asm> {
8224 def _0 : sve_int_bin_cons_misc_0_a<opc, 0b00, asm, ZPR64, ZPR64ExtLSL8>;
8225 def _1 : sve_int_bin_cons_misc_0_a<opc, 0b01, asm, ZPR64, ZPR64ExtLSL16>;
8226 def _2 : sve_int_bin_cons_misc_0_a<opc, 0b10, asm, ZPR64, ZPR64ExtLSL32>;
8227 def _3 : sve_int_bin_cons_misc_0_a<opc, 0b11, asm, ZPR64, ZPR64ExtLSL64>;
8234 class sve_int_bin_cons_misc_0_b<bits<2> sz, string asm, ZPRRegOp zprty>
8236 asm, "\t$Zd, $Zn, $Zm",
8253 multiclass sve_int_bin_cons_misc_0_b<string asm, SDPatternOperator op> {
8254 def _H : sve_int_bin_cons_misc_0_b<0b01, asm, ZPR16>;
8255 def _S : sve_int_bin_cons_misc_0_b<0b10, asm, ZPR32>;
8256 def _D : sve_int_bin_cons_misc_0_b<0b11, asm, ZPR64>;
8263 class sve_int_bin_cons_misc_0_c<bits<8> opc, string asm, ZPRRegOp zprty>
8265 asm, "\t$Zd, $Zn",
8282 multiclass sve_int_bin_cons_misc_0_c_fexpa<string asm, SDPatternOperator op> {
8283 def _H : sve_int_bin_cons_misc_0_c<0b01000000, asm, ZPR16>;
8284 def _S : sve_int_bin_cons_misc_0_c<0b10000000, asm, ZPR32>;
8285 def _D : sve_int_bin_cons_misc_0_c<0b11000000, asm, ZPR64>;
8296 class sve_int_reduce<bits<2> sz8_32, bits<2> fmt, bits<3> opc, string asm,
8299 asm, "\t$Vd, $Pg, $Zn",
8318 multiclass sve_int_reduce_0_saddv<bits<3> opc, string asm,
8320 def _B : sve_int_reduce<0b00, 0b00, opc, asm, ZPR8, FPR64asZPR>;
8321 def _H : sve_int_reduce<0b01, 0b00, opc, asm, ZPR16, FPR64asZPR>;
8322 def _S : sve_int_reduce<0b10, 0b00, opc, asm, ZPR32, FPR64asZPR>;
8329 multiclass sve_int_reduce_0_uaddv<bits<3> opc, string asm,
8331 def _B : sve_int_reduce<0b00, 0b00, opc, asm, ZPR8, FPR64asZPR>;
8332 def _H : sve_int_reduce<0b01, 0b00, opc, asm, ZPR16, FPR64asZPR>;
8333 def _S : sve_int_reduce<0b10, 0b00, opc, asm, ZPR32, FPR64asZPR>;
8334 def _D : sve_int_reduce<0b11, 0b00, opc, asm, ZPR64, FPR64asZPR>;
8342 multiclass sve_int_reduce_1<bits<3> opc, string asm,
8344 def _B : sve_int_reduce<0b00, 0b01, opc, asm, ZPR8, FPR8asZPR>;
8345 def _H : sve_int_reduce<0b01, 0b01, opc, asm, ZPR16, FPR16asZPR>;
8346 def _S : sve_int_reduce<0b10, 0b01, opc, asm, ZPR32, FPR32asZPR>;
8347 def _D : sve_int_reduce<0b11, 0b01, opc, asm, ZPR64, FPR64asZPR>;
8355 multiclass sve_int_reduce_2<bits<3> opc, string asm,
8357 def _B : sve_int_reduce<0b00, 0b11, opc, asm, ZPR8, FPR8asZPR>;
8358 def _H : sve_int_reduce<0b01, 0b11, opc, asm, ZPR16, FPR16asZPR>;
8359 def _S : sve_int_reduce<0b10, 0b11, opc, asm, ZPR32, FPR32asZPR>;
8360 def _D : sve_int_reduce<0b11, 0b11, opc, asm, ZPR64, FPR64asZPR>;
8368 class sve_int_movprfx_pred<bits<2> sz8_32, bits<3> opc, string asm,
8371 asm, "\t$Zd, $Pg"#pg_suffix#", $Zn",
8390 multiclass sve_int_movprfx_pred_merge<bits<3> opc, string asm> {
8392 def _B : sve_int_movprfx_pred<0b00, opc, asm, ZPR8, "/m",
8394 def _H : sve_int_movprfx_pred<0b01, opc, asm, ZPR16, "/m",
8396 def _S : sve_int_movprfx_pred<0b10, opc, asm, ZPR32, "/m",
8398 def _D : sve_int_movprfx_pred<0b11, opc, asm, ZPR64, "/m",
8403 multiclass sve_int_movprfx_pred_zero<bits<3> opc, string asm> {
8404 def _B : sve_int_movprfx_pred<0b00, opc, asm, ZPR8, "/z",
8406 def _H : sve_int_movprfx_pred<0b01, opc, asm, ZPR16, "/z",
8408 def _S : sve_int_movprfx_pred<0b10, opc, asm, ZPR32, "/z",
8410 def _D : sve_int_movprfx_pred<0b11, opc, asm, ZPR64, "/z",
8418 class sve_int_brkp<bits<2> opc, string asm>
8420 asm, "\t$Pd, $Pg/z, $Pn, $Pm",
8443 multiclass sve_int_brkp<bits<2> opc, string asm, SDPatternOperator op> {
8444 def NAME : sve_int_brkp<opc, asm>;
8454 class sve_int_brkn<bit S, string asm>
8456 asm, "\t$Pdm, $Pg/z, $Pn, $_Pdm",
8477 multiclass sve_int_brkn<bits<1> opc, string asm, SDPatternOperator op> {
8478 def NAME : sve_int_brkn<opc, asm>;
8483 class sve_int_break<bits<3> opc, string asm, string suffix, dag iops>
8485 asm, "\t$Pd, $Pg"#suffix#", $Pn",
8505 multiclass sve_int_break_m<bits<3> opc, string asm, SDPatternOperator op> {
8506 def NAME : sve_int_break<opc, asm, "/m", (ins PPR8:$_Pd, PPRAny:$Pg, PPR8:$Pn)>;
8511 multiclass sve_int_break_z<bits<3> opc, string asm, SDPatternOperator op> {
8512 def NAME : sve_int_break<opc, asm, "/z", (ins PPRAny:$Pg, PPR8:$Pn)>;
8521 class sve2_char_match<bit sz, bit opc, string asm,
8524 asm, "\t$Pd, $Pg/z, $Zn, $Zm",
8547 multiclass sve2_char_match<bit opc, string asm, SDPatternOperator op> {
8548 def _B : sve2_char_match<0b0, opc, asm, PPR8, ZPR8>;
8549 def _H : sve2_char_match<0b1, opc, asm, PPR16, ZPR16>;
8559 class sve2_hist_gen_segment<string asm, SDPatternOperator op>
8561 asm, "\t$Zd, $Zn, $Zm",
8580 class sve2_hist_gen_vector<bit sz, string asm, ZPRRegOp zprty>
8582 asm, "\t$Zd, $Pg/z, $Zn, $Zm",
8601 multiclass sve2_hist_gen_vector<string asm, SDPatternOperator op> {
8602 def _S : sve2_hist_gen_vector<0b0, asm, ZPR32>;
8603 def _D : sve2_hist_gen_vector<0b1, asm, ZPR64>;
8613 class sve2_crypto_cons_bin_op<bit opc, string asm, ZPRRegOp zprty>
8615 asm, "\t$Zd, $Zn, $Zm",
8631 multiclass sve2_crypto_cons_bin_op<bit opc, string asm, ZPRRegOp zprty,
8633 def NAME : sve2_crypto_cons_bin_op<opc, asm, zprty>;
8637 class sve2_crypto_des_bin_op<bits<2> opc, string asm, ZPRRegOp zprty>
8639 asm, "\t$Zdn, $_Zdn, $Zm",
8655 multiclass sve2_crypto_des_bin_op<bits<2> opc, string asm, ZPRRegOp zprty,
8657 def NAME : sve2_crypto_des_bin_op<opc, asm, zprty>;
8661 class sve2_crypto_unary_op<bit opc, string asm, ZPRRegOp zprty>
8663 asm, "\t$Zdn, $_Zdn",
8676 multiclass sve2_crypto_unary_op<bit opc, string asm, SDPatternOperator op> {
8677 def NAME : sve2_crypto_unary_op<opc, asm, ZPR8>;
8685 class sve_float_dot<bit bf, bit o2, ZPRRegOp dst_ty, ZPRRegOp src_ty, string asm>
8687 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
8707 string asm, ValueType InVT, SDPatternOperator op> {
8708 def NAME : sve_float_dot<bf, o2, dst_ty, src_ty, asm>;
8713 ZPRRegOp src2_ty, Operand iop_ty, string asm>
8715 asm, "\t$Zda, $Zn, $Zm$iop", "", []>, Sched<[]> {
8734 ZPRRegOp src2_ty, string asm, ValueType InVT,
8736 def NAME : sve_float_dot_indexed<bf, ZPR32, src1_ty, src2_ty, VectorIndexS32b, asm> {
8744 class sve_bfloat_matmul<string asm>
8746 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
8763 multiclass sve_bfloat_matmul<string asm, SDPatternOperator op> {
8764 def NAME : sve_bfloat_matmul<asm>;
8768 class sve_bfloat_convert<bit N, string asm>
8770 asm, "\t$Zd, $Pg/m, $Zn", "", []>, Sched<[]> {
8788 multiclass sve_bfloat_convert<bit N, string asm, SDPatternOperator op> {
8789 def NAME : sve_bfloat_convert<N, asm>;
8797 class sve_int_matmul<bits<2> uns, string asm>
8798 : I<(outs ZPR32:$Zda), (ins ZPR32:$_Zda, ZPR8:$Zn, ZPR8:$Zm), asm,
8817 multiclass sve_int_matmul<bits<2> uns, string asm, SDPatternOperator op> {
8818 def NAME : sve_int_matmul<uns, asm>;
8827 class sve_int_dot_mixed<string asm>
8828 : I<(outs ZPR32:$Zda), (ins ZPR32:$_Zda, ZPR8:$Zn, ZPR8:$Zm), asm,
8845 multiclass sve_int_dot_mixed<string asm, SDPatternOperator op> {
8846 def NAME : sve_int_dot_mixed<asm>;
8855 class sve_int_dot_mixed_indexed<bit U, string asm>
8857 asm, "\t$Zda, $Zn, $Zm$idx", "", []>, Sched<[]> {
8876 multiclass sve_int_dot_mixed_indexed<bit U, string asm, SDPatternOperator op> {
8877 def NAME : sve_int_dot_mixed_indexed<U, asm>;
8886 class sve_fp_matrix_mla<bit sz, string asm, ZPRRegOp zprty>
8888 asm, "\t$Zda, $Zn, $Zm", "", []>, Sched<[]> {
8907 multiclass sve_fp_matrix_mla<bit sz, string asm, ZPRRegOp zprty, SDPatternOperator op, ValueType vt…
8908 def NAME : sve_fp_matrix_mla<sz, asm, zprty>;
8917 class sve_mem_ldor_si<bits<2> sz, string asm, RegisterOperand VecList>
8919 asm, "\t$Zt, $Pg/z, [$Rn, $imm4]", "", []>, Sched<[]> {
8937 multiclass sve_mem_ldor_si<bits<2> sz, string asm, RegisterOperand listty,
8939 def NAME : sve_mem_ldor_si<sz, asm, listty>;
8940 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
8942 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn]",
8944 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $imm4]",
8957 class sve_mem_ldor_ss<bits<2> sz, string asm, RegisterOperand VecList,
8960 asm, "\t$Zt, $Pg/z, [$Rn, $Rm]", "", []>, Sched<[]> {
8978 multiclass sve_mem_ldor_ss<bits<2> sz, string asm, RegisterOperand listty,
8981 def NAME : sve_mem_ldor_ss<sz, asm, listty, gprty>;
8983 def : InstAlias<asm # "\t$Zt, $Pg/z, [$Rn, $Rm]",
8994 class sve_int_perm_bin_perm_128_zz<bits<2> opc, bit P, string asm>
8996 asm, "\t$Zd, $Zn, $Zm",
9013 multiclass sve_int_perm_bin_perm_128_zz<bits<2> opc, bit P, string asm, SDPatternOperator op> {
9014 def NAME : sve_int_perm_bin_perm_128_zz<opc, P, asm>;
9124 class sve2p1_fclamp<string asm, bits<2> sz, ZPRRegOp zpr_ty>
9126 asm, "\t$Zd, $Zn, $Zm", "", []>,
9145 multiclass sve2p1_fclamp<string asm, SDPatternOperator op> {
9146 def _H : sve2p1_fclamp<asm, 0b01, ZPR16>;
9147 def _S : sve2p1_fclamp<asm, 0b10, ZPR32>;
9148 def _D : sve2p1_fclamp<asm, 0b11, ZPR64>;
9155 multiclass sve2p1_bfclamp<string asm, SDPatternOperator op> {
9156 def NAME : sve2p1_fclamp<asm, 0b00, ZPR16>;
10377 class sve_int_mad_cpa<string asm>
10379 asm, "\t$Zdn, $Zm, $Za", "", []>, Sched<[]> {
10398 class sve_int_mla_cpa<string asm>
10399 : sve2_int_mla<0b11, 0b10100, asm, ZPR64, ZPR64> {