@samitouri / QOSamiQemu / commits / 5859b55f75

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,