[sve2] Update CPUFeaturesAuditor
Update CPUFeaturesAuditor for SVE2, including marking the bit permutation
instructions appropriately.
Change-Id: I138a367f9adbcfb546f42733d4f14af092f559aa
diff --git a/src/aarch64/cpu-features-auditor-aarch64.cc b/src/aarch64/cpu-features-auditor-aarch64.cc
index 55380f9..990d614 100644
--- a/src/aarch64/cpu-features-auditor-aarch64.cc
+++ b/src/aarch64/cpu-features-auditor-aarch64.cc
@@ -1361,7 +1361,308 @@
if ((form_to_visitor_.count(form) > 0) && form_to_visitor_[form]) {
form_to_visitor_[form](this, instr);
} else {
- VisitUnimplemented(instr);
+ RecordInstructionFeaturesScope scope(this);
+ std::map<const std::string, const CPUFeatures> features = {
+ {"adclb_z_zzz", CPUFeatures::kSVE2},
+ {"adclt_z_zzz", CPUFeatures::kSVE2},
+ {"addhnb_z_zz", CPUFeatures::kSVE2},
+ {"addhnt_z_zz", CPUFeatures::kSVE2},
+ {"addp_z_p_zz", CPUFeatures::kSVE2},
+ {"bcax_z_zzz", CPUFeatures::kSVE2},
+ {"bdep_z_zz", CPUFeatures(CPUFeatures::kSVE2, CPUFeatures::kSVEBitPerm)},
+ {"bext_z_zz", CPUFeatures(CPUFeatures::kSVE2, CPUFeatures::kSVEBitPerm)},
+ {"bgrp_z_zz", CPUFeatures(CPUFeatures::kSVE2, CPUFeatures::kSVEBitPerm)},
+ {"bsl1n_z_zzz", CPUFeatures::kSVE2},
+ {"bsl2n_z_zzz", CPUFeatures::kSVE2},
+ {"bsl_z_zzz", CPUFeatures::kSVE2},
+ {"cadd_z_zz", CPUFeatures::kSVE2},
+ {"cdot_z_zzz", CPUFeatures::kSVE2},
+ {"cdot_z_zzzi_d", CPUFeatures::kSVE2},
+ {"cdot_z_zzzi_s", CPUFeatures::kSVE2},
+ {"cmla_z_zzz", CPUFeatures::kSVE2},
+ {"cmla_z_zzzi_h", CPUFeatures::kSVE2},
+ {"cmla_z_zzzi_s", CPUFeatures::kSVE2},
+ {"eor3_z_zzz", CPUFeatures::kSVE2},
+ {"eorbt_z_zz", CPUFeatures::kSVE2},
+ {"eortb_z_zz", CPUFeatures::kSVE2},
+ {"ext_z_zi_con", CPUFeatures::kSVE2},
+ {"faddp_z_p_zz", CPUFeatures::kSVE2},
+ {"fcvtlt_z_p_z_h2s", CPUFeatures::kSVE2},
+ {"fcvtlt_z_p_z_s2d", CPUFeatures::kSVE2},
+ {"fcvtnt_z_p_z_d2s", CPUFeatures::kSVE2},
+ {"fcvtnt_z_p_z_s2h", CPUFeatures::kSVE2},
+ {"fcvtx_z_p_z_d2s", CPUFeatures::kSVE2},
+ {"fcvtxnt_z_p_z_d2s", CPUFeatures::kSVE2},
+ {"flogb_z_p_z", CPUFeatures::kSVE2},
+ {"fmaxnmp_z_p_zz", CPUFeatures::kSVE2},
+ {"fmaxp_z_p_zz", CPUFeatures::kSVE2},
+ {"fminnmp_z_p_zz", CPUFeatures::kSVE2},
+ {"fminp_z_p_zz", CPUFeatures::kSVE2},
+ {"fmlalb_z_zzz", CPUFeatures::kSVE2},
+ {"fmlalb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"fmlalt_z_zzz", CPUFeatures::kSVE2},
+ {"fmlalt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"fmlslb_z_zzz", CPUFeatures::kSVE2},
+ {"fmlslb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"fmlslt_z_zzz", CPUFeatures::kSVE2},
+ {"fmlslt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"histcnt_z_p_zz", CPUFeatures::kSVE2},
+ {"histseg_z_zz", CPUFeatures::kSVE2},
+ {"ldnt1b_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1b_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1d_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1h_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1h_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1sb_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1sb_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1sh_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1sh_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1sw_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1w_z_p_ar_d_64_unscaled",
+ CPUFeatures::kSVE2},
+ {"ldnt1w_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"match_p_p_zz", CPUFeatures::kSVE2},
+ {"mla_z_zzzi_d", CPUFeatures::kSVE2},
+ {"mla_z_zzzi_h", CPUFeatures::kSVE2},
+ {"mla_z_zzzi_s", CPUFeatures::kSVE2},
+ {"mls_z_zzzi_d", CPUFeatures::kSVE2},
+ {"mls_z_zzzi_h", CPUFeatures::kSVE2},
+ {"mls_z_zzzi_s", CPUFeatures::kSVE2},
+ {"mul_z_zz", CPUFeatures::kSVE2},
+ {"mul_z_zzi_d", CPUFeatures::kSVE2},
+ {"mul_z_zzi_h", CPUFeatures::kSVE2},
+ {"mul_z_zzi_s", CPUFeatures::kSVE2},
+ {"nbsl_z_zzz", CPUFeatures::kSVE2},
+ {"nmatch_p_p_zz", CPUFeatures::kSVE2},
+ {"pmul_z_zz", CPUFeatures::kSVE2},
+ {"pmullb_z_zz", CPUFeatures::kSVE2},
+ {"pmullt_z_zz", CPUFeatures::kSVE2},
+ {"raddhnb_z_zz", CPUFeatures::kSVE2},
+ {"raddhnt_z_zz", CPUFeatures::kSVE2},
+ {"rshrnb_z_zi", CPUFeatures::kSVE2},
+ {"rshrnt_z_zi", CPUFeatures::kSVE2},
+ {"rsubhnb_z_zz", CPUFeatures::kSVE2},
+ {"rsubhnt_z_zz", CPUFeatures::kSVE2},
+ {"saba_z_zzz", CPUFeatures::kSVE2},
+ {"sabalb_z_zzz", CPUFeatures::kSVE2},
+ {"sabalt_z_zzz", CPUFeatures::kSVE2},
+ {"sabdlb_z_zz", CPUFeatures::kSVE2},
+ {"sabdlt_z_zz", CPUFeatures::kSVE2},
+ {"sadalp_z_p_z", CPUFeatures::kSVE2},
+ {"saddlb_z_zz", CPUFeatures::kSVE2},
+ {"saddlbt_z_zz", CPUFeatures::kSVE2},
+ {"saddlt_z_zz", CPUFeatures::kSVE2},
+ {"saddwb_z_zz", CPUFeatures::kSVE2},
+ {"saddwt_z_zz", CPUFeatures::kSVE2},
+ {"sbclb_z_zzz", CPUFeatures::kSVE2},
+ {"sbclt_z_zzz", CPUFeatures::kSVE2},
+ {"shadd_z_p_zz", CPUFeatures::kSVE2},
+ {"shrnb_z_zi", CPUFeatures::kSVE2},
+ {"shrnt_z_zi", CPUFeatures::kSVE2},
+ {"shsub_z_p_zz", CPUFeatures::kSVE2},
+ {"shsubr_z_p_zz", CPUFeatures::kSVE2},
+ {"sli_z_zzi", CPUFeatures::kSVE2},
+ {"smaxp_z_p_zz", CPUFeatures::kSVE2},
+ {"sminp_z_p_zz", CPUFeatures::kSVE2},
+ {"smlalb_z_zzz", CPUFeatures::kSVE2},
+ {"smlalb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"smlalb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"smlalt_z_zzz", CPUFeatures::kSVE2},
+ {"smlalt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"smlalt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"smlslb_z_zzz", CPUFeatures::kSVE2},
+ {"smlslb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"smlslb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"smlslt_z_zzz", CPUFeatures::kSVE2},
+ {"smlslt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"smlslt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"smulh_z_zz", CPUFeatures::kSVE2},
+ {"smullb_z_zz", CPUFeatures::kSVE2},
+ {"smullb_z_zzi_d", CPUFeatures::kSVE2},
+ {"smullb_z_zzi_s", CPUFeatures::kSVE2},
+ {"smullt_z_zz", CPUFeatures::kSVE2},
+ {"smullt_z_zzi_d", CPUFeatures::kSVE2},
+ {"smullt_z_zzi_s", CPUFeatures::kSVE2},
+ {"splice_z_p_zz_con", CPUFeatures::kSVE2},
+ {"sqabs_z_p_z", CPUFeatures::kSVE2},
+ {"sqadd_z_p_zz", CPUFeatures::kSVE2},
+ {"sqcadd_z_zz", CPUFeatures::kSVE2},
+ {"sqdmlalb_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlalb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqdmlalb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqdmlalbt_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlalt_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlalt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqdmlalt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqdmlslb_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlslb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqdmlslb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqdmlslbt_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlslt_z_zzz", CPUFeatures::kSVE2},
+ {"sqdmlslt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqdmlslt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqdmulh_z_zz", CPUFeatures::kSVE2},
+ {"sqdmulh_z_zzi_d", CPUFeatures::kSVE2},
+ {"sqdmulh_z_zzi_h", CPUFeatures::kSVE2},
+ {"sqdmulh_z_zzi_s", CPUFeatures::kSVE2},
+ {"sqdmullb_z_zz", CPUFeatures::kSVE2},
+ {"sqdmullb_z_zzi_d", CPUFeatures::kSVE2},
+ {"sqdmullb_z_zzi_s", CPUFeatures::kSVE2},
+ {"sqdmullt_z_zz", CPUFeatures::kSVE2},
+ {"sqdmullt_z_zzi_d", CPUFeatures::kSVE2},
+ {"sqdmullt_z_zzi_s", CPUFeatures::kSVE2},
+ {"sqneg_z_p_z", CPUFeatures::kSVE2},
+ {"sqrdcmlah_z_zzz", CPUFeatures::kSVE2},
+ {"sqrdcmlah_z_zzzi_h", CPUFeatures::kSVE2},
+ {"sqrdcmlah_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqrdmlah_z_zzz", CPUFeatures::kSVE2},
+ {"sqrdmlah_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqrdmlah_z_zzzi_h", CPUFeatures::kSVE2},
+ {"sqrdmlah_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqrdmlsh_z_zzz", CPUFeatures::kSVE2},
+ {"sqrdmlsh_z_zzzi_d", CPUFeatures::kSVE2},
+ {"sqrdmlsh_z_zzzi_h", CPUFeatures::kSVE2},
+ {"sqrdmlsh_z_zzzi_s", CPUFeatures::kSVE2},
+ {"sqrdmulh_z_zz", CPUFeatures::kSVE2},
+ {"sqrdmulh_z_zzi_d", CPUFeatures::kSVE2},
+ {"sqrdmulh_z_zzi_h", CPUFeatures::kSVE2},
+ {"sqrdmulh_z_zzi_s", CPUFeatures::kSVE2},
+ {"sqrshl_z_p_zz", CPUFeatures::kSVE2},
+ {"sqrshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"sqrshrnb_z_zi", CPUFeatures::kSVE2},
+ {"sqrshrnt_z_zi", CPUFeatures::kSVE2},
+ {"sqrshrunb_z_zi", CPUFeatures::kSVE2},
+ {"sqrshrunt_z_zi", CPUFeatures::kSVE2},
+ {"sqshl_z_p_zi", CPUFeatures::kSVE2},
+ {"sqshl_z_p_zz", CPUFeatures::kSVE2},
+ {"sqshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"sqshlu_z_p_zi", CPUFeatures::kSVE2},
+ {"sqshrnb_z_zi", CPUFeatures::kSVE2},
+ {"sqshrnt_z_zi", CPUFeatures::kSVE2},
+ {"sqshrunb_z_zi", CPUFeatures::kSVE2},
+ {"sqshrunt_z_zi", CPUFeatures::kSVE2},
+ {"sqsub_z_p_zz", CPUFeatures::kSVE2},
+ {"sqsubr_z_p_zz", CPUFeatures::kSVE2},
+ {"sqxtnb_z_zz", CPUFeatures::kSVE2},
+ {"sqxtnt_z_zz", CPUFeatures::kSVE2},
+ {"sqxtunb_z_zz", CPUFeatures::kSVE2},
+ {"sqxtunt_z_zz", CPUFeatures::kSVE2},
+ {"srhadd_z_p_zz", CPUFeatures::kSVE2},
+ {"sri_z_zzi", CPUFeatures::kSVE2},
+ {"srshl_z_p_zz", CPUFeatures::kSVE2},
+ {"srshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"srshr_z_p_zi", CPUFeatures::kSVE2},
+ {"srsra_z_zi", CPUFeatures::kSVE2},
+ {"sshllb_z_zi", CPUFeatures::kSVE2},
+ {"sshllt_z_zi", CPUFeatures::kSVE2},
+ {"ssra_z_zi", CPUFeatures::kSVE2},
+ {"ssublb_z_zz", CPUFeatures::kSVE2},
+ {"ssublbt_z_zz", CPUFeatures::kSVE2},
+ {"ssublt_z_zz", CPUFeatures::kSVE2},
+ {"ssubltb_z_zz", CPUFeatures::kSVE2},
+ {"ssubwb_z_zz", CPUFeatures::kSVE2},
+ {"ssubwt_z_zz", CPUFeatures::kSVE2},
+ {"stnt1b_z_p_ar_d_64_unscaled", CPUFeatures::kSVE2},
+ {"stnt1b_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"stnt1d_z_p_ar_d_64_unscaled", CPUFeatures::kSVE2},
+ {"stnt1h_z_p_ar_d_64_unscaled", CPUFeatures::kSVE2},
+ {"stnt1h_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"stnt1w_z_p_ar_d_64_unscaled", CPUFeatures::kSVE2},
+ {"stnt1w_z_p_ar_s_x32_unscaled",
+ CPUFeatures::kSVE2},
+ {"subhnb_z_zz", CPUFeatures::kSVE2},
+ {"subhnt_z_zz", CPUFeatures::kSVE2},
+ {"suqadd_z_p_zz", CPUFeatures::kSVE2},
+ {"tbl_z_zz_2", CPUFeatures::kSVE2},
+ {"tbx_z_zz", CPUFeatures::kSVE2},
+ {"uaba_z_zzz", CPUFeatures::kSVE2},
+ {"uabalb_z_zzz", CPUFeatures::kSVE2},
+ {"uabalt_z_zzz", CPUFeatures::kSVE2},
+ {"uabdlb_z_zz", CPUFeatures::kSVE2},
+ {"uabdlt_z_zz", CPUFeatures::kSVE2},
+ {"uadalp_z_p_z", CPUFeatures::kSVE2},
+ {"uaddlb_z_zz", CPUFeatures::kSVE2},
+ {"uaddlt_z_zz", CPUFeatures::kSVE2},
+ {"uaddwb_z_zz", CPUFeatures::kSVE2},
+ {"uaddwt_z_zz", CPUFeatures::kSVE2},
+ {"uhadd_z_p_zz", CPUFeatures::kSVE2},
+ {"uhsub_z_p_zz", CPUFeatures::kSVE2},
+ {"uhsubr_z_p_zz", CPUFeatures::kSVE2},
+ {"umaxp_z_p_zz", CPUFeatures::kSVE2},
+ {"uminp_z_p_zz", CPUFeatures::kSVE2},
+ {"umlalb_z_zzz", CPUFeatures::kSVE2},
+ {"umlalb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"umlalb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"umlalt_z_zzz", CPUFeatures::kSVE2},
+ {"umlalt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"umlalt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"umlslb_z_zzz", CPUFeatures::kSVE2},
+ {"umlslb_z_zzzi_d", CPUFeatures::kSVE2},
+ {"umlslb_z_zzzi_s", CPUFeatures::kSVE2},
+ {"umlslt_z_zzz", CPUFeatures::kSVE2},
+ {"umlslt_z_zzzi_d", CPUFeatures::kSVE2},
+ {"umlslt_z_zzzi_s", CPUFeatures::kSVE2},
+ {"umulh_z_zz", CPUFeatures::kSVE2},
+ {"umullb_z_zz", CPUFeatures::kSVE2},
+ {"umullb_z_zzi_d", CPUFeatures::kSVE2},
+ {"umullb_z_zzi_s", CPUFeatures::kSVE2},
+ {"umullt_z_zz", CPUFeatures::kSVE2},
+ {"umullt_z_zzi_d", CPUFeatures::kSVE2},
+ {"umullt_z_zzi_s", CPUFeatures::kSVE2},
+ {"uqadd_z_p_zz", CPUFeatures::kSVE2},
+ {"uqrshl_z_p_zz", CPUFeatures::kSVE2},
+ {"uqrshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"uqrshrnb_z_zi", CPUFeatures::kSVE2},
+ {"uqrshrnt_z_zi", CPUFeatures::kSVE2},
+ {"uqshl_z_p_zi", CPUFeatures::kSVE2},
+ {"uqshl_z_p_zz", CPUFeatures::kSVE2},
+ {"uqshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"uqshrnb_z_zi", CPUFeatures::kSVE2},
+ {"uqshrnt_z_zi", CPUFeatures::kSVE2},
+ {"uqsub_z_p_zz", CPUFeatures::kSVE2},
+ {"uqsubr_z_p_zz", CPUFeatures::kSVE2},
+ {"uqxtnb_z_zz", CPUFeatures::kSVE2},
+ {"uqxtnt_z_zz", CPUFeatures::kSVE2},
+ {"urecpe_z_p_z", CPUFeatures::kSVE2},
+ {"urhadd_z_p_zz", CPUFeatures::kSVE2},
+ {"urshl_z_p_zz", CPUFeatures::kSVE2},
+ {"urshlr_z_p_zz", CPUFeatures::kSVE2},
+ {"urshr_z_p_zi", CPUFeatures::kSVE2},
+ {"ursqrte_z_p_z", CPUFeatures::kSVE2},
+ {"ursra_z_zi", CPUFeatures::kSVE2},
+ {"ushllb_z_zi", CPUFeatures::kSVE2},
+ {"ushllt_z_zi", CPUFeatures::kSVE2},
+ {"usqadd_z_p_zz", CPUFeatures::kSVE2},
+ {"usra_z_zi", CPUFeatures::kSVE2},
+ {"usublb_z_zz", CPUFeatures::kSVE2},
+ {"usublt_z_zz", CPUFeatures::kSVE2},
+ {"usubwb_z_zz", CPUFeatures::kSVE2},
+ {"usubwt_z_zz", CPUFeatures::kSVE2},
+ {"whilege_p_p_rr", CPUFeatures::kSVE2},
+ {"whilegt_p_p_rr", CPUFeatures::kSVE2},
+ {"whilehi_p_p_rr", CPUFeatures::kSVE2},
+ {"whilehs_p_p_rr", CPUFeatures::kSVE2},
+ {"whilerw_p_rr", CPUFeatures::kSVE2},
+ {"whilewr_p_rr", CPUFeatures::kSVE2},
+ {"xar_z_zzi", CPUFeatures::kSVE2},
+ };
+
+ if (features.count(form) > 0) {
+ scope.Record(features[form]);
+ }
}
}