target/arm: Expand DO_ZPZ in translate-sve.c
Prepare for adding zeroing instructions for some of these. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20260604234852.573178-5-richard.henderson@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Richard Henderson committed
Jun 4, 2026 at 16:48 UTC
5859b55f75e1d1ee1c24a5f2be62a9a2625298e7
1 file changed
+68
-18
target/arm/tcg/translate-sve.c
+68
-18
@@ -776,24 +776,74 @@ TRANS_FEAT(SEL_zpzz, aa64_sme_or_sve, do_sel_z, a->rd, a->rn, a->rm, a->pg, a->e
776
*** SVE Integer Arithmetic - Unary Predicated Group
777
*/
778
779
-#define DO_ZPZ(NAME, FEAT, name) \
780
- static gen_helper_gvec_3 * const name##_fns[4] = { \
781
- gen_helper_##name##_b, gen_helper_##name##_h, \
782
- gen_helper_##name##_s, gen_helper_##name##_d, \
783
- }; \
784
- TRANS_FEAT(NAME, FEAT, gen_gvec_ool_arg_zpz, name##_fns[a->esz], a, 0)
785
-
786
-DO_ZPZ(CLS_m, aa64_sme_or_sve, sve_cls)
787
-DO_ZPZ(CLZ_m, aa64_sme_or_sve, sve_clz)
788
-DO_ZPZ(CNT_zpz_m, aa64_sme_or_sve, sve_cnt_zpz)
789
-DO_ZPZ(CNOT_m, aa64_sme_or_sve, sve_cnot)
790
-DO_ZPZ(NOT_zpz_m, aa64_sme_or_sve, sve_not_zpz)
791
-DO_ZPZ(ABS_m, aa64_sme_or_sve, sve_abs)
792
-DO_ZPZ(NEG_m, aa64_sme_or_sve, sve_neg)
793
-DO_ZPZ(RBIT_m, aa64_sme_or_sve, sve_rbit)
794
-DO_ZPZ(ORQV, aa64_sme2p1_or_sve2p1, sve2p1_orqv)
795
-DO_ZPZ(EORQV, aa64_sme2p1_or_sve2p1, sve2p1_eorqv)
796
-DO_ZPZ(ANDQV, aa64_sme2p1_or_sve2p1, sve2p1_andqv)
779
+static gen_helper_gvec_3 * const sve_cls_fns[4] = {
780
+ gen_helper_sve_cls_b, gen_helper_sve_cls_h,
781
+ gen_helper_sve_cls_s, gen_helper_sve_cls_d,
782
+};
783
+TRANS_FEAT(CLS_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_cls_fns[a->esz], a, 0)
784
+
785
+static gen_helper_gvec_3 * const sve_clz_fns[4] = {
786
+ gen_helper_sve_clz_b, gen_helper_sve_clz_h,
787
+ gen_helper_sve_clz_s, gen_helper_sve_clz_d,
788
+};
789
+TRANS_FEAT(CLZ_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_clz_fns[a->esz], a, 0)
790
+
791
+static gen_helper_gvec_3 * const sve_cnt_zpz_fns[4] = {
792
+ gen_helper_sve_cnt_zpz_b, gen_helper_sve_cnt_zpz_h,
793
+ gen_helper_sve_cnt_zpz_s, gen_helper_sve_cnt_zpz_d,
794
+};
795
+TRANS_FEAT(CNT_zpz_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_cnt_zpz_fns[a->esz], a, 0)
796
+
797
+static gen_helper_gvec_3 * const sve_cnot_fns[4] = {
798
+ gen_helper_sve_cnot_b, gen_helper_sve_cnot_h,
799
+ gen_helper_sve_cnot_s, gen_helper_sve_cnot_d,
800
+};
801
+TRANS_FEAT(CNOT_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_cnot_fns[a->esz], a, 0)
802
+
803
+static gen_helper_gvec_3 * const sve_not_zpz_fns[4] = {
804
+ gen_helper_sve_not_zpz_b, gen_helper_sve_not_zpz_h,
805
+ gen_helper_sve_not_zpz_s, gen_helper_sve_not_zpz_d,
806
+};
807
+TRANS_FEAT(NOT_zpz_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_not_zpz_fns[a->esz], a, 0)
808
+
809
+static gen_helper_gvec_3 * const sve_abs_fns[4] = {
810
+ gen_helper_sve_abs_b, gen_helper_sve_abs_h,
811
+ gen_helper_sve_abs_s, gen_helper_sve_abs_d,
812
+};
813
+TRANS_FEAT(ABS_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_abs_fns[a->esz], a, 0)
814
+
815
+static gen_helper_gvec_3 * const sve_neg_fns[4] = {
816
+ gen_helper_sve_neg_b, gen_helper_sve_neg_h,
817
+ gen_helper_sve_neg_s, gen_helper_sve_neg_d,
818
+};
819
+TRANS_FEAT(NEG_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_neg_fns[a->esz], a, 0)
820
+
821
+static gen_helper_gvec_3 * const sve_rbit_fns[4] = {
822
+ gen_helper_sve_rbit_b, gen_helper_sve_rbit_h,
823
+ gen_helper_sve_rbit_s, gen_helper_sve_rbit_d,
824
+};
825
+TRANS_FEAT(RBIT_m, aa64_sme_or_sve, gen_gvec_ool_arg_zpz, sve_rbit_fns[a->esz], a, 0)
826
+
827
+static gen_helper_gvec_3 * const sve2p1_orqv_fns[4] = {
828
+ gen_helper_sve2p1_orqv_b, gen_helper_sve2p1_orqv_h,
829
+ gen_helper_sve2p1_orqv_s, gen_helper_sve2p1_orqv_d,
830
+};
831
+TRANS_FEAT(ORQV, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zpz,
832
+ sve2p1_orqv_fns[a->esz], a, 0)
833
+
834
+static gen_helper_gvec_3 * const sve2p1_eorqv_fns[4] = {
835
+ gen_helper_sve2p1_eorqv_b, gen_helper_sve2p1_eorqv_h,
836
+ gen_helper_sve2p1_eorqv_s, gen_helper_sve2p1_eorqv_d,
837
+};
838
+TRANS_FEAT(EORQV, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zpz,
839
+ sve2p1_eorqv_fns[a->esz], a, 0)
840
+
841
+static gen_helper_gvec_3 * const sve2p1_andqv_fns[4] = {
842
+ gen_helper_sve2p1_andqv_b, gen_helper_sve2p1_andqv_h,
843
+ gen_helper_sve2p1_andqv_s, gen_helper_sve2p1_andqv_d,
844
+};
845
+TRANS_FEAT(ANDQV, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zpz,
846
+ sve2p1_andqv_fns[a->esz], a, 0)
847
848
static gen_helper_gvec_3 * const fabs_fns[4] = {
849
NULL, gen_helper_sve_fabs_h,