@@ -4092,7 +4092,7 @@ let Predicates = [HasSVE2SHA3] in {
4092
4092
defm RAX1_ZZZ_D : sve2_crypto_cons_bin_op<0b1, "rax1", ZPR64, int_aarch64_sve_rax1, nxv2i64>;
4093
4093
} // End HasSVE2SHA3
4094
4094
4095
- let Predicates = [HasSVEBitPerm, HasNonStreamingSVE2_or_SSVE_BitPerm ] in {
4095
+ let Predicates = [HasSVEBitPerm, HasNonStreamingSVEBitPerm_or_SSVE_BitPerm ] in {
4096
4096
// SVE2 bitwise permute
4097
4097
defm BEXT_ZZZ : sve2_misc_bitwise<0b1100, "bext", int_aarch64_sve_bext_x>;
4098
4098
defm BDEP_ZZZ : sve2_misc_bitwise<0b1101, "bdep", int_aarch64_sve_bdep_x>;
@@ -4154,18 +4154,29 @@ defm UDOT_ZZZ_HtoS : sve2p1_two_way_dot_vv<"udot", 0b1, int_aarch64_sve_udot_x2
4154
4154
defm SDOT_ZZZI_HtoS : sve2p1_two_way_dot_vvi<"sdot", 0b0, int_aarch64_sve_sdot_lane_x2>;
4155
4155
defm UDOT_ZZZI_HtoS : sve2p1_two_way_dot_vvi<"udot", 0b1, int_aarch64_sve_udot_lane_x2>;
4156
4156
4157
- defm CNTP_XCI : sve2p1_pcount_pn<"cntp", 0b000>;
4158
- defm PEXT_PCI : sve2p1_pred_as_ctr_to_mask<"pext", int_aarch64_sve_pext>;
4159
- defm PEXT_2PCI : sve2p1_pred_as_ctr_to_mask_pair<"pext">;
4160
- defm PTRUE_C : sve2p1_ptrue_pn<"ptrue">;
4161
-
4162
4157
defm SQCVTN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"sqcvtn", 0b00, int_aarch64_sve_sqcvtn_x2>;
4163
4158
defm UQCVTN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"uqcvtn", 0b01, int_aarch64_sve_uqcvtn_x2>;
4164
4159
defm SQCVTUN_Z2Z_StoH : sve2p1_multi_vec_extract_narrow<"sqcvtun", 0b10, int_aarch64_sve_sqcvtun_x2>;
4165
4160
defm SQRSHRN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"sqrshrn", 0b101, int_aarch64_sve_sqrshrn_x2>;
4166
4161
defm UQRSHRN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"uqrshrn", 0b111, int_aarch64_sve_uqrshrn_x2>;
4167
4162
defm SQRSHRUN_Z2ZI_StoH : sve2p1_multi_vec_shift_narrow<"sqrshrun", 0b001, int_aarch64_sve_sqrshrun_x2>;
4168
4163
4164
+ defm WHILEGE_2PXX : sve2p1_int_while_rr_pair<"whilege", 0b000>;
4165
+ defm WHILEGT_2PXX : sve2p1_int_while_rr_pair<"whilegt", 0b001>;
4166
+ defm WHILELT_2PXX : sve2p1_int_while_rr_pair<"whilelt", 0b010>;
4167
+ defm WHILELE_2PXX : sve2p1_int_while_rr_pair<"whilele", 0b011>;
4168
+ defm WHILEHS_2PXX : sve2p1_int_while_rr_pair<"whilehs", 0b100>;
4169
+ defm WHILEHI_2PXX : sve2p1_int_while_rr_pair<"whilehi", 0b101>;
4170
+ defm WHILELO_2PXX : sve2p1_int_while_rr_pair<"whilelo", 0b110>;
4171
+ defm WHILELS_2PXX : sve2p1_int_while_rr_pair<"whilels", 0b111>;
4172
+ } // End HasSVE2p1_or_SME2
4173
+
4174
+ let Predicates = [HasSVE2p1_or_StreamingSME2] in {
4175
+ defm CNTP_XCI : sve2p1_pcount_pn<"cntp", 0b000>;
4176
+ defm PEXT_PCI : sve2p1_pred_as_ctr_to_mask<"pext", int_aarch64_sve_pext>;
4177
+ defm PEXT_2PCI : sve2p1_pred_as_ctr_to_mask_pair<"pext">;
4178
+ defm PTRUE_C : sve2p1_ptrue_pn<"ptrue">;
4179
+
4169
4180
// Load to two registers
4170
4181
defm LD1B_2Z : sve2p1_mem_cld_ss_2z<"ld1b", 0b00, 0b0, ZZ_b_mul_r, GPR64shifted8, ZZ_b_strided_and_contiguous>;
4171
4182
defm LD1H_2Z : sve2p1_mem_cld_ss_2z<"ld1h", 0b01, 0b0, ZZ_h_mul_r, GPR64shifted16, ZZ_h_strided_and_contiguous>;
@@ -4289,14 +4300,6 @@ defm : store_pn_x4<nxv8bf16, int_aarch64_sve_stnt1_pn_x4, STNT1H_4Z_IMM>;
4289
4300
defm : store_pn_x4<nxv4f32, int_aarch64_sve_stnt1_pn_x4, STNT1W_4Z_IMM>;
4290
4301
defm : store_pn_x4<nxv2f64, int_aarch64_sve_stnt1_pn_x4, STNT1D_4Z_IMM>;
4291
4302
4292
- defm WHILEGE_2PXX : sve2p1_int_while_rr_pair<"whilege", 0b000>;
4293
- defm WHILEGT_2PXX : sve2p1_int_while_rr_pair<"whilegt", 0b001>;
4294
- defm WHILELT_2PXX : sve2p1_int_while_rr_pair<"whilelt", 0b010>;
4295
- defm WHILELE_2PXX : sve2p1_int_while_rr_pair<"whilele", 0b011>;
4296
- defm WHILEHS_2PXX : sve2p1_int_while_rr_pair<"whilehs", 0b100>;
4297
- defm WHILEHI_2PXX : sve2p1_int_while_rr_pair<"whilehi", 0b101>;
4298
- defm WHILELO_2PXX : sve2p1_int_while_rr_pair<"whilelo", 0b110>;
4299
- defm WHILELS_2PXX : sve2p1_int_while_rr_pair<"whilels", 0b111>;
4300
4303
defm WHILEGE_CXX : sve2p1_int_while_rr_pn<"whilege", 0b000>;
4301
4304
defm WHILEGT_CXX : sve2p1_int_while_rr_pn<"whilegt", 0b001>;
4302
4305
defm WHILELT_CXX : sve2p1_int_while_rr_pn<"whilelt", 0b010>;
@@ -4305,7 +4308,7 @@ defm WHILEHS_CXX : sve2p1_int_while_rr_pn<"whilehs", 0b100>;
4305
4308
defm WHILEHI_CXX : sve2p1_int_while_rr_pn<"whilehi", 0b101>;
4306
4309
defm WHILELO_CXX : sve2p1_int_while_rr_pn<"whilelo", 0b110>;
4307
4310
defm WHILELS_CXX : sve2p1_int_while_rr_pn<"whilels", 0b111>;
4308
- } // End HasSVE2p1_or_SME2
4311
+ } // End HasSVE2p1_or_StreamingSME2
4309
4312
4310
4313
let Predicates = [HasSVE_or_SME] in {
4311
4314
@@ -4510,7 +4513,7 @@ let Predicates = [HasNonStreamingSVE2p2_or_SME2p2] in {
4510
4513
//===----------------------------------------------------------------------===//
4511
4514
// SVE2 FP8 instructions
4512
4515
//===----------------------------------------------------------------------===//
4513
- let Predicates = [HasSVE2_or_SME2 , HasFP8] in {
4516
+ let Predicates = [HasNonStreamingSVE2_or_SME2 , HasFP8] in {
4514
4517
// FP8 upconvert
4515
4518
defm F1CVT_ZZ : sve2_fp8_cvt_single<0b0, 0b00, "f1cvt", nxv8f16, int_aarch64_sve_fp8_cvt1>;
4516
4519
defm F2CVT_ZZ : sve2_fp8_cvt_single<0b0, 0b01, "f2cvt", nxv8f16, int_aarch64_sve_fp8_cvt2>;
@@ -4527,15 +4530,15 @@ defm FCVTNB_Z2Z_StoB : sve2_fp8_down_cvt_single<0b01, "fcvtnb", ZZ_s_mul_r, nxv4
4527
4530
defm BFCVTN_Z2Z_HtoB : sve2_fp8_down_cvt_single<0b10, "bfcvtn", ZZ_h_mul_r, nxv8bf16, int_aarch64_sve_fp8_cvtn>;
4528
4531
4529
4532
defm FCVTNT_Z2Z_StoB : sve2_fp8_down_cvt_single_top<0b11, "fcvtnt", ZZ_s_mul_r, nxv4f32, int_aarch64_sve_fp8_cvtnt>;
4530
- } // End HasSVE2_or_SME2 , HasFP8
4533
+ } // End HasNonStreamingSVE2_or_SME2 , HasFP8
4531
4534
4532
- let Predicates = [HasSVE2_or_SME2 , HasFAMINMAX] in {
4535
+ let Predicates = [HasNonStreamingSVE2_or_SME2 , HasFAMINMAX] in {
4533
4536
defm FAMIN_ZPmZ : sve_fp_2op_p_zds<0b1111, "famin", "FAMIN_ZPZZ", int_aarch64_sve_famin, DestructiveBinaryComm>;
4534
4537
defm FAMAX_ZPmZ : sve_fp_2op_p_zds<0b1110, "famax", "FAMAX_ZPZZ", int_aarch64_sve_famax, DestructiveBinaryComm>;
4535
4538
4536
4539
defm FAMAX_ZPZZ : sve_fp_bin_pred_hfd<AArch64famax_p>;
4537
4540
defm FAMIN_ZPZZ : sve_fp_bin_pred_hfd<AArch64famin_p>;
4538
- } // End HasSVE2_or_SME2 , HasFAMINMAX
4541
+ } // End HasNonStreamingSVE2_or_SME2 , HasFAMINMAX
4539
4542
4540
4543
let Predicates = [HasSSVE_FP8FMA] in {
4541
4544
// FP8 Widening Multiply-Add Long - Indexed Group
@@ -4579,14 +4582,14 @@ defm FDOT_ZZZI_BtoS : sve2_fp8_dot_indexed_s<"fdot", int_aarch64_sve_fp8_fdot_la
4579
4582
defm FDOT_ZZZ_BtoS : sve_fp8_dot<0b1, ZPR32, "fdot", nxv4f32, int_aarch64_sve_fp8_fdot>;
4580
4583
}
4581
4584
4582
- let Predicates = [HasSVE2_or_SME2 , HasLUT] in {
4585
+ let Predicates = [HasNonStreamingSVE2_or_SME2 , HasLUT] in {
4583
4586
// LUTI2
4584
4587
defm LUTI2_ZZZI : sve2_luti2_vector_index<"luti2">;
4585
4588
// LUTI4
4586
4589
defm LUTI4_ZZZI : sve2_luti4_vector_index<"luti4">;
4587
4590
// LUTI4 (two contiguous registers)
4588
4591
defm LUTI4_Z2ZZI : sve2_luti4_vector_vg2_index<"luti4">;
4589
- } // End HasSVE2_or_SME2 , HasLUT
4592
+ } // End HasNonStreamingSVE2_or_SME2 , HasLUT
4590
4593
4591
4594
//===----------------------------------------------------------------------===//
4592
4595
// Checked Pointer Arithmetic (FEAT_CPA)
0 commit comments