Lines Matching full:a

13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 * You should have received a copy of the GNU Lesser General Public
44 /* Resolve tile.size[rs+imm] to a host pointer. */
57 * Round the vector index down to a multiple of vec_mod if necessary. in get_tile_rowcol()
60 * several times in a loop with an increasing offset. We rely on in get_tile_rowcol()
62 * [rs + offset] to be a multiple of vec_mod. The pseudocode usually in get_tile_rowcol()
71 /* Prepare a power-of-two modulo via extraction of @len bits. */ in get_tile_rowcol()
128 /* Resolve ZArray[rs+imm] to a host pointer. */
137 * Resolve tile.size[0] to a host pointer.
151 static bool trans_ZERO(DisasContext *s, arg_ZERO *a) in trans_ZERO() argument
157 gen_helper_sme_zero(tcg_env, tcg_constant_i32(a->imm), in trans_ZERO()
163 static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_zt0 *a) in trans_ZERO_zt0() argument
176 static bool trans_ZERO_za(DisasContext *s, arg_ZERO_za *a) in trans_ZERO_za() argument
183 int vstride = svl / a->ngrp; in trans_ZERO_za()
184 TCGv_ptr t_za = get_zarray(s, a->rv, a->off, a->ngrp, a->nvec); in trans_ZERO_za()
186 for (int r = 0; r < a->ngrp; ++r) { in trans_ZERO_za()
187 for (int i = 0; i < a->nvec; ++i) { in trans_ZERO_za()
196 static bool do_mova_tile(DisasContext *s, arg_mova_p *a, bool to_vec) in do_mova_tile() argument
222 t_za = get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, 1, 0, a->v); in do_mova_tile()
223 t_zr = vec_full_reg_ptr(s, a->zr); in do_mova_tile()
224 t_pg = pred_full_reg_ptr(s, a->pg); in do_mova_tile()
229 if (a->v) { in do_mova_tile()
232 zc_fns[a->esz](t_zr, t_za, t_pg, t_desc); in do_mova_tile()
234 cz_fns[a->esz](t_za, t_zr, t_pg, t_desc); in do_mova_tile()
239 h_fns[a->esz](t_zr, t_za, t_zr, t_pg, t_desc); in do_mova_tile()
241 h_fns[a->esz](t_za, t_zr, t_za, t_pg, t_desc); in do_mova_tile()
247 TRANS_FEAT(MOVA_tz, aa64_sme, do_mova_tile, a, false) in TRANS_FEAT() argument
248 TRANS_FEAT(MOVA_zt, aa64_sme, do_mova_tile, a, true) in TRANS_FEAT()
250 static bool do_mova_tile_n(DisasContext *s, arg_mova_t *a, int n, in TRANS_FEAT()
267 int svl, bytes_per_op = n << a->esz; in TRANS_FEAT()
279 assert(a->esz <= MO_64 + zero); in TRANS_FEAT()
296 if (a->v) { in TRANS_FEAT()
300 TCGv_ptr t_zr = vec_full_reg_ptr(s, a->zr * n + i); in TRANS_FEAT()
301 t_za = get_tile_rowcol(s, a->esz, a->rs, a->za, in TRANS_FEAT()
302 a->off * n + i, 1, n, a->v); in TRANS_FEAT()
304 zc_z_fns[a->esz](t_zr, t_za, t_desc); in TRANS_FEAT()
306 zc_fns[a->esz](t_zr, t_za, t_desc); in TRANS_FEAT()
308 cz_fns[a->esz](t_za, t_zr, t_desc); in TRANS_FEAT()
313 int o_zr = vec_full_reg_offset(s, a->zr * n + i); in TRANS_FEAT()
314 t_za = get_tile_rowcol(s, a->esz, a->rs, a->za, in TRANS_FEAT()
315 a->off * n + i, 1, n, a->v); in TRANS_FEAT()
329 TRANS_FEAT(MOVA_tz2, aa64_sme2, do_mova_tile_n, a, 2, false, false)
330 TRANS_FEAT(MOVA_tz4, aa64_sme2, do_mova_tile_n, a, 4, false, false)
331 TRANS_FEAT(MOVA_zt2, aa64_sme2, do_mova_tile_n, a, 2, true, false)
332 TRANS_FEAT(MOVA_zt4, aa64_sme2, do_mova_tile_n, a, 4, true, false)
334 TRANS_FEAT(MOVAZ_zt, aa64_sme2p1, do_mova_tile_n, a, 1, true, true)
335 TRANS_FEAT(MOVAZ_zt2, aa64_sme2p1, do_mova_tile_n, a, 2, true, true)
336 TRANS_FEAT(MOVAZ_zt4, aa64_sme2p1, do_mova_tile_n, a, 4, true, true)
338 static bool do_mova_array_n(DisasContext *s, arg_mova_a *a, int n, in do_mova_array_n() argument
349 t_za = get_zarray(s, a->rv, a->off, n, 0); in do_mova_array_n()
353 int o_zr = vec_full_reg_offset(s, a->zr * n + i); in do_mova_array_n()
367 TRANS_FEAT(MOVA_az2, aa64_sme2, do_mova_array_n, a, 2, false, false)
368 TRANS_FEAT(MOVA_az4, aa64_sme2, do_mova_array_n, a, 4, false, false)
369 TRANS_FEAT(MOVA_za2, aa64_sme2, do_mova_array_n, a, 2, true, false)
370 TRANS_FEAT(MOVA_za4, aa64_sme2, do_mova_array_n, a, 4, true, false)
372 TRANS_FEAT(MOVAZ_za2, aa64_sme2p1, do_mova_array_n, a, 2, true, true)
373 TRANS_FEAT(MOVAZ_za4, aa64_sme2p1, do_mova_array_n, a, 4, true, true)
375 static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, in do_movt() argument
379 func(cpu_reg(s, a->rt), tcg_env, in do_movt()
380 offsetof(CPUARMState, za_state.zt0) + a->off * 8); in do_movt()
385 TRANS_FEAT(MOVT_rzt, aa64_sme2, do_movt, a, tcg_gen_ld_i64) in TRANS_FEAT() argument
386 TRANS_FEAT(MOVT_ztr, aa64_sme2, do_movt, a, tcg_gen_st_i64) in TRANS_FEAT()
388 static bool trans_LDST1(DisasContext *s, arg_LDST1 *a) in TRANS_FEAT()
429 t_za = get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, 1, 0, a->v); in TRANS_FEAT()
430 t_pg = pred_full_reg_ptr(s, a->pg); in TRANS_FEAT()
433 tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), a->esz); in TRANS_FEAT()
434 tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn)); in TRANS_FEAT()
440 desc = make_svemte_desc(s, streaming_vec_reg_size(s), 1, a->esz, a->st, 0); in TRANS_FEAT()
442 fns[a->esz][be][a->v][mte][a->st](tcg_env, t_za, t_pg, addr, in TRANS_FEAT()
449 static bool do_ldst_r(DisasContext *s, arg_ldstr *a, GenLdStR *fn) in do_ldst_r() argument
453 int imm = a->imm; in do_ldst_r()
454 TCGv_ptr base = get_zarray(s, a->rv, imm, 1, 0); in do_ldst_r()
456 fn(s, base, 0, svl, a->rn, imm * svl, in do_ldst_r()
462 TRANS_FEAT(LDR, aa64_sme, do_ldst_r, a, gen_sve_ldr) in TRANS_FEAT() argument
463 TRANS_FEAT(STR, aa64_sme, do_ldst_r, a, gen_sve_str) in TRANS_FEAT()
465 static bool do_ldst_zt0(DisasContext *s, arg_ldstzt0 *a, GenLdStR *fn) in TRANS_FEAT()
469 sizeof_field(CPUARMState, za_state.zt0), a->rn, 0, in TRANS_FEAT()
475 TRANS_FEAT(LDR_zt0, aa64_sme2, do_ldst_zt0, a, gen_sve_ldr) in TRANS_FEAT() argument
476 TRANS_FEAT(STR_zt0, aa64_sme2, do_ldst_zt0, a, gen_sve_str) in TRANS_FEAT()
478 static bool do_adda(DisasContext *s, arg_adda *a, MemOp esz, in TRANS_FEAT()
489 za = get_tile(s, esz, a->zad); in TRANS_FEAT()
490 zn = vec_full_reg_ptr(s, a->zn); in TRANS_FEAT()
491 pn = pred_full_reg_ptr(s, a->pn); in TRANS_FEAT()
492 pm = pred_full_reg_ptr(s, a->pm); in TRANS_FEAT()
498 TRANS_FEAT(ADDHA_s, aa64_sme, do_adda, a, MO_32, gen_helper_sme_addha_s) in TRANS_FEAT() argument
499 TRANS_FEAT(ADDVA_s, aa64_sme, do_adda, a, MO_32, gen_helper_sme_addva_s) in TRANS_FEAT()
500 TRANS_FEAT(ADDHA_d, aa64_sme_i16i64, do_adda, a, MO_64, gen_helper_sme_addha_d) in TRANS_FEAT()
501 TRANS_FEAT(ADDVA_d, aa64_sme_i16i64, do_adda, a, MO_64, gen_helper_sme_addva_d) in TRANS_FEAT()
503 static bool do_outprod(DisasContext *s, arg_op *a, MemOp esz, in TRANS_FEAT()
507 uint32_t desc = simd_desc(svl, svl, a->sub); in TRANS_FEAT()
514 za = get_tile(s, esz, a->zad); in TRANS_FEAT()
515 zn = vec_full_reg_ptr(s, a->zn); in TRANS_FEAT()
516 zm = vec_full_reg_ptr(s, a->zm); in TRANS_FEAT()
517 pn = pred_full_reg_ptr(s, a->pn); in TRANS_FEAT()
518 pm = pred_full_reg_ptr(s, a->pm); in TRANS_FEAT()
524 static bool do_outprod_fpst(DisasContext *s, arg_op *a, MemOp esz, in do_outprod_fpst() argument
536 za = get_tile(s, esz, a->zad); in do_outprod_fpst()
537 zn = vec_full_reg_ptr(s, a->zn); in do_outprod_fpst()
538 zm = vec_full_reg_ptr(s, a->zm); in do_outprod_fpst()
539 pn = pred_full_reg_ptr(s, a->pn); in do_outprod_fpst()
540 pm = pred_full_reg_ptr(s, a->pm); in do_outprod_fpst()
547 static bool do_outprod_env(DisasContext *s, arg_op *a, MemOp esz, in do_outprod_env() argument
558 za = get_tile(s, esz, a->zad); in do_outprod_env()
559 zn = vec_full_reg_ptr(s, a->zn); in do_outprod_env()
560 zm = vec_full_reg_ptr(s, a->zm); in do_outprod_env()
561 pn = pred_full_reg_ptr(s, a->pn); in do_outprod_env()
562 pm = pred_full_reg_ptr(s, a->pm); in do_outprod_env()
568 TRANS_FEAT(FMOPA_w_h, aa64_sme, do_outprod_env, a, MO_32,
569 !a->sub ? gen_helper_sme_fmopa_w_h
572 TRANS_FEAT(FMOPA_h, aa64_sme_f16f16, do_outprod_fpst, a, MO_16, FPST_ZA_F16,
573 !a->sub ? gen_helper_sme_fmopa_h
576 TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, MO_32, FPST_ZA,
577 !a->sub ? gen_helper_sme_fmopa_s
580 TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, MO_64, FPST_ZA,
581 !a->sub ? gen_helper_sme_fmopa_d
585 TRANS_FEAT(BFMOPA, aa64_sme_b16b16, do_outprod_fpst, a, MO_16, FPST_ZA,
586 !a->sub ? gen_helper_sme_bfmopa
590 TRANS_FEAT(BFMOPA_w, aa64_sme, do_outprod_env, a, MO_32,
591 !a->sub ? gen_helper_sme_bfmopa_w
595 TRANS_FEAT(SMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_smopa_s) in TRANS_FEAT() argument
596 TRANS_FEAT(UMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_umopa_s) in TRANS_FEAT()
597 TRANS_FEAT(SUMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_sumopa_s) in TRANS_FEAT()
598 TRANS_FEAT(USMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_usmopa_s) in TRANS_FEAT()
600 TRANS_FEAT(SMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_smopa_d) in TRANS_FEAT()
601 TRANS_FEAT(UMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_umopa_d) in TRANS_FEAT()
602 TRANS_FEAT(SUMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_sumopa_d) in TRANS_FEAT()
603 TRANS_FEAT(USMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_usmopa_d) in TRANS_FEAT()
605 TRANS_FEAT(BMOPA, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_bmopa_s) in TRANS_FEAT()
606 TRANS_FEAT(SMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_smopa2_s) in TRANS_FEAT()
607 TRANS_FEAT(UMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_umopa2_s) in TRANS_FEAT()
609 static bool do_z2z_n1(DisasContext *s, arg_z2z_en *a, GVecGen3Fn *fn) in TRANS_FEAT()
618 esz = a->esz; in TRANS_FEAT()
619 n = a->n; in TRANS_FEAT()
620 dn = a->zdn; in TRANS_FEAT()
621 mofs = vec_full_reg_offset(s, a->zm); in TRANS_FEAT()
660 TRANS_FEAT(ADD_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_add) in TRANS_FEAT() argument
661 TRANS_FEAT(SMAX_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_smax) in TRANS_FEAT()
662 TRANS_FEAT(SMIN_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_smin) in TRANS_FEAT()
663 TRANS_FEAT(UMAX_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_umax) in TRANS_FEAT()
664 TRANS_FEAT(UMIN_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_umin) in TRANS_FEAT()
665 TRANS_FEAT(SRSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2_srshl) in TRANS_FEAT()
666 TRANS_FEAT(URSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2_urshl) in TRANS_FEAT()
667 TRANS_FEAT(SQDMULH_n1, aa64_sme2, do_z2z_n1, a, gen_gvec_sve2_sqdmulh) in TRANS_FEAT()
669 static bool do_z2z_nn(DisasContext *s, arg_z2z_en *a, GVecGen3Fn *fn) in TRANS_FEAT()
677 esz = a->esz; in TRANS_FEAT()
678 n = a->n; in TRANS_FEAT()
679 dn = a->zdn; in TRANS_FEAT()
680 dm = a->zm; in TRANS_FEAT()
692 TRANS_FEAT(SMAX_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_smax) in TRANS_FEAT() argument
693 TRANS_FEAT(SMIN_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_smin) in TRANS_FEAT()
694 TRANS_FEAT(UMAX_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_umax) in TRANS_FEAT()
695 TRANS_FEAT(UMIN_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_umin) in TRANS_FEAT()
696 TRANS_FEAT(SRSHL_nn, aa64_sme2, do_z2z_nn, a, gen_sme2_srshl) in TRANS_FEAT()
697 TRANS_FEAT(URSHL_nn, aa64_sme2, do_z2z_nn, a, gen_sme2_urshl) in TRANS_FEAT()
698 TRANS_FEAT(SQDMULH_nn, aa64_sme2, do_z2z_nn, a, gen_gvec_sve2_sqdmulh) in TRANS_FEAT()
700 static bool do_z2z_n1_fpst(DisasContext *s, arg_z2z_en *a, in TRANS_FEAT()
703 int esz = a->esz, n, dn, vsz, mofs; in TRANS_FEAT()
718 n = a->n; in TRANS_FEAT()
719 dn = a->zdn; in TRANS_FEAT()
720 mofs = vec_full_reg_offset(s, a->zm); in TRANS_FEAT()
737 static bool do_z2z_nn_fpst(DisasContext *s, arg_z2z_en *a, in do_z2z_nn_fpst() argument
740 int esz = a->esz, n, dn, dm, vsz; in do_z2z_nn_fpst()
753 n = a->n; in do_z2z_nn_fpst()
754 dn = a->zdn; in do_z2z_nn_fpst()
755 dm = a->zm; in do_z2z_nn_fpst()
777 TRANS_FEAT(FMAX_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmax[s->fpcr_ah])
778 TRANS_FEAT(FMAX_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmax[s->fpcr_ah])
790 TRANS_FEAT(FMIN_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmin[s->fpcr_ah])
791 TRANS_FEAT(FMIN_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmin[s->fpcr_ah])
799 TRANS_FEAT(FMAXNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmaxnm)
800 TRANS_FEAT(FMAXNM_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmaxnm)
808 TRANS_FEAT(FMINNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fminnm) in TRANS_FEAT() argument
809 TRANS_FEAT(FMINNM_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fminnm) in TRANS_FEAT()
812 static bool do_azz_n1(DisasContext *s, arg_azz_n *a, int esz, in TRANS_FEAT()
822 n = a->n; in TRANS_FEAT()
823 t_za = get_zarray(s, a->rv, a->off, n, 0); in TRANS_FEAT()
824 o_zm = vec_full_reg_offset(s, a->zm); in TRANS_FEAT()
829 int o_zn = vec_full_reg_offset(s, (a->zn + i) % 32); in TRANS_FEAT()
836 TRANS_FEAT(ADD_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_32, tcg_gen_gvec_add_var) in TRANS_FEAT() argument
837 TRANS_FEAT(SUB_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_32, tcg_gen_gvec_sub_var) in TRANS_FEAT()
838 TRANS_FEAT(ADD_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gvec_add_var) in TRANS_FEAT()
839 TRANS_FEAT(SUB_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gvec_sub_var) in TRANS_FEAT()
842 static bool do_azz_nn(DisasContext *s, arg_azz_n *a, int esz, in TRANS_FEAT()
852 n = a->n; in TRANS_FEAT()
853 t_za = get_zarray(s, a->rv, a->off, n, 1); in TRANS_FEAT()
858 int o_zn = vec_full_reg_offset(s, a->zn + i); in TRANS_FEAT()
859 int o_zm = vec_full_reg_offset(s, a->zm + i); in TRANS_FEAT()
866 TRANS_FEAT(ADD_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_32, tcg_gen_gvec_add_var) in TRANS_FEAT() argument
867 TRANS_FEAT(SUB_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_32, tcg_gen_gvec_sub_var) in TRANS_FEAT()
868 TRANS_FEAT(ADD_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gvec_add_var) in TRANS_FEAT()
869 TRANS_FEAT(SUB_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gvec_sub_var) in TRANS_FEAT()
872 static bool do_aaz(DisasContext *s, arg_az_n *a, int esz, GVecGen3FnVar *fn) in TRANS_FEAT()
881 n = a->n; in TRANS_FEAT()
882 t_za = get_zarray(s, a->rv, a->off, n, 0); in TRANS_FEAT()
887 int o_zm = vec_full_reg_offset(s, a->zm + i); in TRANS_FEAT()
894 TRANS_FEAT(ADD_aaz_s, aa64_sme2, do_aaz, a, MO_32, tcg_gen_gvec_add_var) in TRANS_FEAT() argument
895 TRANS_FEAT(SUB_aaz_s, aa64_sme2, do_aaz, a, MO_32, tcg_gen_gvec_sub_var) in TRANS_FEAT()
896 TRANS_FEAT(ADD_aaz_d, aa64_sme2_i16i64, do_aaz, a, MO_64, tcg_gen_gvec_add_var) in TRANS_FEAT()
897 TRANS_FEAT(SUB_aaz_d, aa64_sme2_i16i64, do_aaz, a, MO_64, tcg_gen_gvec_sub_var) in TRANS_FEAT()
990 static bool do_fmlal(DisasContext *s, arg_azz_n *a, bool sub, bool multi) in do_fmlal() argument
992 return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in do_fmlal()
997 TRANS_FEAT(FMLAL_n1, aa64_sme2, do_fmlal, a, false, false) in TRANS_FEAT() argument
998 TRANS_FEAT(FMLSL_n1, aa64_sme2, do_fmlal, a, true, false) in TRANS_FEAT()
999 TRANS_FEAT(FMLAL_nn, aa64_sme2, do_fmlal, a, false, true) in TRANS_FEAT()
1000 TRANS_FEAT(FMLSL_nn, aa64_sme2, do_fmlal, a, true, true) in TRANS_FEAT()
1002 static bool do_fmlal_nx(DisasContext *s, arg_azx_n *a, bool sub) in TRANS_FEAT()
1004 return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1005 (a->idx << 3) | (1 << 2) | sub, 1, in TRANS_FEAT()
1009 TRANS_FEAT(FMLAL_nx, aa64_sme2, do_fmlal_nx, a, false) in TRANS_FEAT() argument
1010 TRANS_FEAT(FMLSL_nx, aa64_sme2, do_fmlal_nx, a, true) in TRANS_FEAT()
1012 static bool do_bfmlal(DisasContext *s, arg_azz_n *a, bool sub, bool multi) in TRANS_FEAT()
1014 return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1021 TRANS_FEAT(BFMLAL_n1, aa64_sme2, do_bfmlal, a, false, false) in TRANS_FEAT() argument
1022 TRANS_FEAT(BFMLSL_n1, aa64_sme2, do_bfmlal, a, true, false) in TRANS_FEAT()
1023 TRANS_FEAT(BFMLAL_nn, aa64_sme2, do_bfmlal, a, false, true) in TRANS_FEAT()
1024 TRANS_FEAT(BFMLSL_nn, aa64_sme2, do_bfmlal, a, true, true) in TRANS_FEAT()
1026 static bool do_bfmlal_nx(DisasContext *s, arg_azx_n *a, bool sub) in TRANS_FEAT()
1028 return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1029 a->idx << 1, 0, false, FPST_ZA, in TRANS_FEAT()
1035 TRANS_FEAT(BFMLAL_nx, aa64_sme2, do_bfmlal_nx, a, false) in TRANS_FEAT() argument
1036 TRANS_FEAT(BFMLSL_nx, aa64_sme2, do_bfmlal_nx, a, true) in TRANS_FEAT()
1038 static bool do_fdot(DisasContext *s, arg_azz_n *a, bool multi) in TRANS_FEAT()
1040 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, 1, 0, in TRANS_FEAT()
1044 TRANS_FEAT(FDOT_n1, aa64_sme2, do_fdot, a, false) in TRANS_FEAT() argument
1045 TRANS_FEAT(FDOT_nn, aa64_sme2, do_fdot, a, true) in TRANS_FEAT()
1047 static bool do_fdot_nx(DisasContext *s, arg_azx_n *a) in TRANS_FEAT()
1049 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1050 a->idx | (1 << 2), 0, false, FPST_ENV, in TRANS_FEAT()
1054 TRANS_FEAT(FDOT_nx, aa64_sme2, do_fdot_nx, a) in TRANS_FEAT() argument
1056 static bool do_bfdot(DisasContext *s, arg_azz_n *a, bool multi) in TRANS_FEAT()
1058 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, 0, 0, in TRANS_FEAT()
1062 TRANS_FEAT(BFDOT_n1, aa64_sme2, do_bfdot, a, false) in TRANS_FEAT() argument
1063 TRANS_FEAT(BFDOT_nn, aa64_sme2, do_bfdot, a, true) in TRANS_FEAT()
1065 static bool do_bfdot_nx(DisasContext *s, arg_azx_n *a) in TRANS_FEAT()
1067 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, a->idx, 0, in TRANS_FEAT()
1071 TRANS_FEAT(BFDOT_nx, aa64_sme2, do_bfdot_nx, a) in TRANS_FEAT() argument
1073 static bool do_vdot(DisasContext *s, arg_azx_n *a, gen_helper_gvec_4_ptr *fn) in TRANS_FEAT()
1078 TCGv_ptr t_za = get_zarray(s, a->rv, a->off, 2, 1); in TRANS_FEAT()
1079 TCGv_ptr t_zn = vec_full_reg_ptr(s, a->zn); in TRANS_FEAT()
1080 TCGv_ptr t_zm = vec_full_reg_ptr(s, a->zm); in TRANS_FEAT()
1085 int desc = simd_desc(svl, svl, a->idx | (i << 2)); in TRANS_FEAT()
1094 TRANS_FEAT(FVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_fvdot_idx_h) in TRANS_FEAT() argument
1095 TRANS_FEAT(BFVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_bfvdot_idx) in TRANS_FEAT()
1097 static bool do_fmla(DisasContext *s, arg_azz_n *a, bool multi, in TRANS_FEAT()
1100 return do_azz_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1104 TRANS_FEAT(FMLA_n1_h, aa64_sme_f16f16, do_fmla, a, false, FPST_ZA_F16, in TRANS_FEAT() argument
1106 TRANS_FEAT(FMLS_n1_h, aa64_sme_f16f16, do_fmla, a, false, FPST_ZA_F16, in TRANS_FEAT()
1108 TRANS_FEAT(FMLA_nn_h, aa64_sme_f16f16, do_fmla, a, true, FPST_ZA_F16, in TRANS_FEAT()
1110 TRANS_FEAT(FMLS_nn_h, aa64_sme_f16f16, do_fmla, a, true, FPST_ZA_F16, in TRANS_FEAT()
1113 TRANS_FEAT(FMLA_n1_s, aa64_sme2, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1115 TRANS_FEAT(FMLS_n1_s, aa64_sme2, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1117 TRANS_FEAT(FMLA_nn_s, aa64_sme2, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1119 TRANS_FEAT(FMLS_nn_s, aa64_sme2, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1122 TRANS_FEAT(FMLA_n1_d, aa64_sme2_f64f64, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1124 TRANS_FEAT(FMLS_n1_d, aa64_sme2_f64f64, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1126 TRANS_FEAT(FMLA_nn_d, aa64_sme2_f64f64, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1128 TRANS_FEAT(FMLS_nn_d, aa64_sme2_f64f64, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1131 TRANS_FEAT(BFMLA_n1, aa64_sme_b16b16, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1133 TRANS_FEAT(BFMLS_n1, aa64_sme_b16b16, do_fmla, a, false, FPST_ZA, in TRANS_FEAT()
1135 TRANS_FEAT(BFMLA_nn, aa64_sme_b16b16, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1137 TRANS_FEAT(BFMLS_nn, aa64_sme_b16b16, do_fmla, a, true, FPST_ZA, in TRANS_FEAT()
1140 static bool do_fmla_nx(DisasContext *s, arg_azx_n *a, in TRANS_FEAT()
1143 return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1144 a->idx, 0, false, fpst, fn); in TRANS_FEAT()
1147 TRANS_FEAT(FMLA_nx_h, aa64_sme_f16f16, do_fmla_nx, a, FPST_ZA_F16, in TRANS_FEAT() argument
1149 TRANS_FEAT(FMLS_nx_h, aa64_sme_f16f16, do_fmla_nx, a, FPST_ZA_F16, in TRANS_FEAT()
1151 TRANS_FEAT(FMLA_nx_s, aa64_sme2, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1153 TRANS_FEAT(FMLS_nx_s, aa64_sme2, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1155 TRANS_FEAT(FMLA_nx_d, aa64_sme2_f64f64, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1157 TRANS_FEAT(FMLS_nx_d, aa64_sme2_f64f64, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1160 TRANS_FEAT(BFMLA_nx, aa64_sme_b16b16, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1162 TRANS_FEAT(BFMLS_nx, aa64_sme_b16b16, do_fmla_nx, a, FPST_ZA, in TRANS_FEAT()
1165 static bool do_faddsub(DisasContext *s, arg_az_n *a, ARMFPStatusFlavour fpst, in TRANS_FEAT()
1170 int n = a->n; in TRANS_FEAT()
1171 int zm = a->zm; in TRANS_FEAT()
1173 TCGv_ptr t_za = get_zarray(s, a->rv, a->off, n, 0); in TRANS_FEAT()
1189 TRANS_FEAT(FADD_nn_h, aa64_sme_f16f16, do_faddsub, a, in TRANS_FEAT() argument
1191 TRANS_FEAT(FSUB_nn_h, aa64_sme_f16f16, do_faddsub, a, in TRANS_FEAT()
1194 TRANS_FEAT(FADD_nn_s, aa64_sme2, do_faddsub, a, in TRANS_FEAT()
1196 TRANS_FEAT(FSUB_nn_s, aa64_sme2, do_faddsub, a, in TRANS_FEAT()
1199 TRANS_FEAT(FADD_nn_d, aa64_sme2_f64f64, do_faddsub, a, in TRANS_FEAT()
1201 TRANS_FEAT(FSUB_nn_d, aa64_sme2_f64f64, do_faddsub, a, in TRANS_FEAT()
1204 TRANS_FEAT(BFADD_nn, aa64_sme_b16b16, do_faddsub, a, in TRANS_FEAT()
1206 TRANS_FEAT(BFSUB_nn, aa64_sme_b16b16, do_faddsub, a, in TRANS_FEAT()
1249 static bool do_dot(DisasContext *s, arg_azz_n *a, bool multi, in do_dot() argument
1252 return do_azz_acc(s, a->n, 1, a->rv, a->off, a->zn, a->zm, in do_dot()
1257 TCGv_ptr a, TCGv_i32 desc) in gen_helper_gvec_sudot_4b() argument
1259 gen_helper_gvec_usdot_4b(d, m, n, a, desc); in gen_helper_gvec_sudot_4b()
1262 TRANS_FEAT(USDOT_n1, aa64_sme2, do_dot, a, false, gen_helper_gvec_usdot_4b) in TRANS_FEAT() argument
1263 TRANS_FEAT(SUDOT_n1, aa64_sme2, do_dot, a, false, gen_helper_gvec_sudot_4b) in TRANS_FEAT()
1264 TRANS_FEAT(SDOT_n1_2h, aa64_sme2, do_dot, a, false, gen_helper_gvec_sdot_2h) in TRANS_FEAT()
1265 TRANS_FEAT(UDOT_n1_2h, aa64_sme2, do_dot, a, false, gen_helper_gvec_udot_2h) in TRANS_FEAT()
1266 TRANS_FEAT(SDOT_n1_4b, aa64_sme2, do_dot, a, false, gen_helper_gvec_sdot_4b) in TRANS_FEAT()
1267 TRANS_FEAT(UDOT_n1_4b, aa64_sme2, do_dot, a, false, gen_helper_gvec_udot_4b) in TRANS_FEAT()
1268 TRANS_FEAT(SDOT_n1_4h, aa64_sme2_i16i64, do_dot, a, false, gen_helper_gvec_sdot_4h) in TRANS_FEAT()
1269 TRANS_FEAT(UDOT_n1_4h, aa64_sme2_i16i64, do_dot, a, false, gen_helper_gvec_udot_4h) in TRANS_FEAT()
1271 TRANS_FEAT(USDOT_nn, aa64_sme2, do_dot, a, true, gen_helper_gvec_usdot_4b) in TRANS_FEAT()
1272 TRANS_FEAT(SDOT_nn_2h, aa64_sme2, do_dot, a, true, gen_helper_gvec_sdot_2h) in TRANS_FEAT()
1273 TRANS_FEAT(UDOT_nn_2h, aa64_sme2, do_dot, a, true, gen_helper_gvec_udot_2h) in TRANS_FEAT()
1274 TRANS_FEAT(SDOT_nn_4b, aa64_sme2, do_dot, a, true, gen_helper_gvec_sdot_4b) in TRANS_FEAT()
1275 TRANS_FEAT(UDOT_nn_4b, aa64_sme2, do_dot, a, true, gen_helper_gvec_udot_4b) in TRANS_FEAT()
1276 TRANS_FEAT(SDOT_nn_4h, aa64_sme2_i16i64, do_dot, a, true, gen_helper_gvec_sdot_4h) in TRANS_FEAT()
1277 TRANS_FEAT(UDOT_nn_4h, aa64_sme2_i16i64, do_dot, a, true, gen_helper_gvec_udot_4h) in TRANS_FEAT()
1279 static bool do_dot_nx(DisasContext *s, arg_azx_n *a, gen_helper_gvec_4 *fn) in TRANS_FEAT()
1281 return do_azz_acc(s, a->n, 1, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1282 a->idx, 0, false, fn); in TRANS_FEAT()
1285 TRANS_FEAT(USDOT_nx, aa64_sme2, do_dot_nx, a, gen_helper_gvec_usdot_idx_4b) in TRANS_FEAT() argument
1286 TRANS_FEAT(SUDOT_nx, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sudot_idx_4b) in TRANS_FEAT()
1287 TRANS_FEAT(SDOT_nx_2h, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sdot_idx_2h) in TRANS_FEAT()
1288 TRANS_FEAT(UDOT_nx_2h, aa64_sme2, do_dot_nx, a, gen_helper_gvec_udot_idx_2h) in TRANS_FEAT()
1289 TRANS_FEAT(SDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sdot_idx_4b) in TRANS_FEAT()
1290 TRANS_FEAT(UDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_helper_gvec_udot_idx_4b) in TRANS_FEAT()
1291 TRANS_FEAT(SDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_sdot_idx_4h) in TRANS_FEAT()
1292 TRANS_FEAT(UDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_udot_idx_4h) in TRANS_FEAT()
1294 static bool do_vdot_nx(DisasContext *s, arg_azx_n *a, gen_helper_gvec_3 *fn) in TRANS_FEAT()
1298 fn(get_zarray(s, a->rv, a->off, a->n, 0), in TRANS_FEAT()
1299 vec_full_reg_ptr(s, a->zn), in TRANS_FEAT()
1300 vec_full_reg_ptr(s, a->zm), in TRANS_FEAT()
1301 tcg_constant_i32(simd_desc(svl, svl, a->idx))); in TRANS_FEAT()
1306 TRANS_FEAT(SVDOT_nx_2h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_idx_2h) in TRANS_FEAT() argument
1307 TRANS_FEAT(SVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_idx_4b) in TRANS_FEAT()
1308 TRANS_FEAT(SVDOT_nx_4h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_idx_4h) in TRANS_FEAT()
1310 TRANS_FEAT(UVDOT_nx_2h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_idx_2h) in TRANS_FEAT()
1311 TRANS_FEAT(UVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_idx_4b) in TRANS_FEAT()
1312 TRANS_FEAT(UVDOT_nx_4h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_idx_4h) in TRANS_FEAT()
1314 TRANS_FEAT(SUVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_suvdot_idx_4b) in TRANS_FEAT()
1315 TRANS_FEAT(USVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_usvdot_idx_4b) in TRANS_FEAT()
1317 static bool do_smlal(DisasContext *s, arg_azz_n *a, bool multi, in TRANS_FEAT()
1320 return do_azz_acc(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1324 TRANS_FEAT(SMLAL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_smlal_zzzw_s) in TRANS_FEAT() argument
1325 TRANS_FEAT(SMLSL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_smlsl_zzzw_s) in TRANS_FEAT()
1326 TRANS_FEAT(UMLAL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_umlal_zzzw_s) in TRANS_FEAT()
1327 TRANS_FEAT(UMLSL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_umlsl_zzzw_s) in TRANS_FEAT()
1329 TRANS_FEAT(SMLAL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_smlal_zzzw_s) in TRANS_FEAT()
1330 TRANS_FEAT(SMLSL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_smlsl_zzzw_s) in TRANS_FEAT()
1331 TRANS_FEAT(UMLAL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_umlal_zzzw_s) in TRANS_FEAT()
1332 TRANS_FEAT(UMLSL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_umlsl_zzzw_s) in TRANS_FEAT()
1334 static bool do_smlal_nx(DisasContext *s, arg_azx_n *a, in TRANS_FEAT()
1337 return do_azz_acc(s, a->n, 2, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1338 a->idx << 1, 0, false, fn); in TRANS_FEAT()
1341 TRANS_FEAT(SMLAL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_smlal_idx_s) in TRANS_FEAT() argument
1342 TRANS_FEAT(SMLSL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_smlsl_idx_s) in TRANS_FEAT()
1343 TRANS_FEAT(UMLAL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_umlal_idx_s) in TRANS_FEAT()
1344 TRANS_FEAT(UMLSL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_umlsl_idx_s) in TRANS_FEAT()
1346 static bool do_smlall(DisasContext *s, arg_azz_n *a, bool multi, in TRANS_FEAT()
1349 return do_azz_acc(s, a->n, 4, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1354 TCGv_ptr a, TCGv_i32 desc) in gen_helper_sme2_sumlall_s() argument
1356 gen_helper_sme2_usmlall_s(d, m, n, a, desc); in gen_helper_sme2_sumlall_s()
1359 TRANS_FEAT(SMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_smlall_s) in TRANS_FEAT() argument
1360 TRANS_FEAT(SMLSLL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_smlsll_s) in TRANS_FEAT()
1361 TRANS_FEAT(UMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_umlall_s) in TRANS_FEAT()
1362 TRANS_FEAT(UMLSLL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_umlsll_s) in TRANS_FEAT()
1363 TRANS_FEAT(USMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_usmlall_s) in TRANS_FEAT()
1364 TRANS_FEAT(SUMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_sumlall_s) in TRANS_FEAT()
1366 TRANS_FEAT(SMLALL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_sme2_smlall_d) in TRANS_FEAT()
1367 TRANS_FEAT(SMLSLL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_sme2_smlsll_d) in TRANS_FEAT()
1368 TRANS_FEAT(UMLALL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_sme2_umlall_d) in TRANS_FEAT()
1369 TRANS_FEAT(UMLSLL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_sme2_umlsll_d) in TRANS_FEAT()
1371 TRANS_FEAT(SMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_smlall_s) in TRANS_FEAT()
1372 TRANS_FEAT(SMLSLL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_smlsll_s) in TRANS_FEAT()
1373 TRANS_FEAT(UMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_umlall_s) in TRANS_FEAT()
1374 TRANS_FEAT(UMLSLL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_umlsll_s) in TRANS_FEAT()
1375 TRANS_FEAT(USMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_usmlall_s) in TRANS_FEAT()
1377 TRANS_FEAT(SMLALL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_sme2_smlall_d) in TRANS_FEAT()
1378 TRANS_FEAT(SMLSLL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_sme2_smlsll_d) in TRANS_FEAT()
1379 TRANS_FEAT(UMLALL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_sme2_umlall_d) in TRANS_FEAT()
1380 TRANS_FEAT(UMLSLL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_sme2_umlsll_d) in TRANS_FEAT()
1382 static bool do_smlall_nx(DisasContext *s, arg_azx_n *a, in TRANS_FEAT()
1385 return do_azz_acc(s, a->n, 4, a->rv, a->off, a->zn, a->zm, in TRANS_FEAT()
1386 a->idx << 2, 0, false, fn); in TRANS_FEAT()
1389 TRANS_FEAT(SMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_smlall_idx_s) in TRANS_FEAT() argument
1390 TRANS_FEAT(SMLSLL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_smlsll_idx_s) in TRANS_FEAT()
1391 TRANS_FEAT(UMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_umlall_idx_s) in TRANS_FEAT()
1392 TRANS_FEAT(UMLSLL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_umlsll_idx_s) in TRANS_FEAT()
1393 TRANS_FEAT(USMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_usmlall_idx_s) in TRANS_FEAT()
1394 TRANS_FEAT(SUMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_sumlall_idx_s) in TRANS_FEAT()
1396 TRANS_FEAT(SMLALL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2_smlall_idx_d) in TRANS_FEAT()
1397 TRANS_FEAT(SMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2_smlsll_idx_d) in TRANS_FEAT()
1398 TRANS_FEAT(UMLALL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2_umlall_idx_d) in TRANS_FEAT()
1399 TRANS_FEAT(UMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2_umlsll_idx_d) in TRANS_FEAT()
1401 static bool do_zz_fpst(DisasContext *s, arg_zz_n *a, int data, in TRANS_FEAT()
1408 for (int i = 0, n = a->n; i < n; ++i) { in TRANS_FEAT()
1409 tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, a->zd + i), in TRANS_FEAT()
1410 vec_full_reg_offset(s, a->zn + i), in TRANS_FEAT()
1417 TRANS_FEAT(BFCVT, aa64_sme2, do_zz_fpst, a, 0,
1419 TRANS_FEAT(BFCVTN, aa64_sme2, do_zz_fpst, a, 0,
1421 TRANS_FEAT(FCVT_n, aa64_sme2, do_zz_fpst, a, 0,
1423 TRANS_FEAT(FCVTN, aa64_sme2, do_zz_fpst, a, 0,
1426 TRANS_FEAT(FCVT_w, aa64_sme_f16f16, do_zz_fpst, a, 0,
1428 TRANS_FEAT(FCVTL, aa64_sme_f16f16, do_zz_fpst, a, 0,
1431 TRANS_FEAT(FCVTZS, aa64_sme2, do_zz_fpst, a, 0,
1433 TRANS_FEAT(FCVTZU, aa64_sme2, do_zz_fpst, a, 0,
1436 TRANS_FEAT(SCVTF, aa64_sme2, do_zz_fpst, a, 0,
1438 TRANS_FEAT(UCVTF, aa64_sme2, do_zz_fpst, a, 0,
1441 TRANS_FEAT(FRINTN, aa64_sme2, do_zz_fpst, a, float_round_nearest_even, in TRANS_FEAT() argument
1443 TRANS_FEAT(FRINTP, aa64_sme2, do_zz_fpst, a, float_round_up, in TRANS_FEAT()
1445 TRANS_FEAT(FRINTM, aa64_sme2, do_zz_fpst, a, float_round_down, in TRANS_FEAT()
1447 TRANS_FEAT(FRINTA, aa64_sme2, do_zz_fpst, a, float_round_ties_away, in TRANS_FEAT()
1450 static bool do_zz(DisasContext *s, arg_zz_n *a, int data, in TRANS_FEAT()
1456 for (int i = 0, n = a->n; i < n; ++i) { in TRANS_FEAT()
1457 tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd + i), in TRANS_FEAT()
1458 vec_full_reg_offset(s, a->zn + i), in TRANS_FEAT()
1465 TRANS_FEAT(SQCVT_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_sh)
1466 TRANS_FEAT(UQCVT_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_sh)
1467 TRANS_FEAT(SQCVTU_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_sh)
1469 TRANS_FEAT(SQCVT_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_sb)
1470 TRANS_FEAT(UQCVT_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_sb)
1471 TRANS_FEAT(SQCVTU_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_sb)
1473 TRANS_FEAT(SQCVT_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_dh)
1474 TRANS_FEAT(UQCVT_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_dh)
1475 TRANS_FEAT(SQCVTU_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_dh)
1477 TRANS_FEAT(SQCVTN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtn_sb)
1478 TRANS_FEAT(UQCVTN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvtn_sb)
1479 TRANS_FEAT(SQCVTUN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtun_sb)
1481 TRANS_FEAT(SQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtn_dh)
1482 TRANS_FEAT(UQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvtn_dh)
1483 TRANS_FEAT(SQCVTUN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtun_dh)
1485 TRANS_FEAT(SUNPK_2bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_bh)
1486 TRANS_FEAT(SUNPK_2hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_hs)
1487 TRANS_FEAT(SUNPK_2sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_sd)
1489 TRANS_FEAT(SUNPK_4bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_bh)
1490 TRANS_FEAT(SUNPK_4hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_hs)
1491 TRANS_FEAT(SUNPK_4sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_sd)
1493 TRANS_FEAT(UUNPK_2bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_bh)
1494 TRANS_FEAT(UUNPK_2hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_hs)
1495 TRANS_FEAT(UUNPK_2sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_sd)
1497 TRANS_FEAT(UUNPK_4bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_bh)
1498 TRANS_FEAT(UUNPK_4hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_hs)
1499 TRANS_FEAT(UUNPK_4sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_sd)
1501 static bool do_zipuzp_4(DisasContext *s, arg_zz_e *a, in do_zipuzp_4() argument
1504 int bytes_per_op = 4 << a->esz; in do_zipuzp_4()
1514 tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd), in do_zipuzp_4()
1515 vec_full_reg_offset(s, a->zn), in do_zipuzp_4()
1516 svl, svl, 0, fn[a->esz]); in do_zipuzp_4()
1529 TRANS_FEAT(ZIP_4, aa64_sme2, do_zipuzp_4, a, zip4_fns)
1538 TRANS_FEAT(UZP_4, aa64_sme2, do_zipuzp_4, a, uzp4_fns) in TRANS_FEAT() argument
1540 static bool do_zz_rshr(DisasContext *s, arg_rshr *a, gen_helper_gvec_2 *fn) in TRANS_FEAT()
1544 tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd), in TRANS_FEAT()
1545 vec_full_reg_offset(s, a->zn), in TRANS_FEAT()
1546 vl, vl, a->shift, fn); in TRANS_FEAT()
1551 TRANS_FEAT(SQRSHR_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_sh) in TRANS_FEAT() argument
1552 TRANS_FEAT(UQRSHR_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_sh) in TRANS_FEAT()
1553 TRANS_FEAT(SQRSHRU_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_sh) in TRANS_FEAT()
1555 TRANS_FEAT(SQRSHR_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_sb) in TRANS_FEAT()
1556 TRANS_FEAT(SQRSHR_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_dh) in TRANS_FEAT()
1557 TRANS_FEAT(UQRSHR_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_sb) in TRANS_FEAT()
1558 TRANS_FEAT(UQRSHR_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_dh) in TRANS_FEAT()
1559 TRANS_FEAT(SQRSHRU_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_sb) in TRANS_FEAT()
1560 TRANS_FEAT(SQRSHRU_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_dh) in TRANS_FEAT()
1562 TRANS_FEAT(SQRSHRN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme2_sqrshrn_sh) in TRANS_FEAT()
1563 TRANS_FEAT(UQRSHRN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme2_uqrshrn_sh) in TRANS_FEAT()
1564 TRANS_FEAT(SQRSHRUN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme2_sqrshrun_sh) in TRANS_FEAT()
1566 TRANS_FEAT(SQRSHRN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrn_sb) in TRANS_FEAT()
1567 TRANS_FEAT(SQRSHRN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrn_dh) in TRANS_FEAT()
1568 TRANS_FEAT(UQRSHRN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshrn_sb) in TRANS_FEAT()
1569 TRANS_FEAT(UQRSHRN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshrn_dh) in TRANS_FEAT()
1570 TRANS_FEAT(SQRSHRUN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun_sb) in TRANS_FEAT()
1571 TRANS_FEAT(SQRSHRUN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun_dh) in TRANS_FEAT()
1573 static bool do_zipuzp_2(DisasContext *s, arg_zzz_e *a, in TRANS_FEAT()
1576 int bytes_per_op = 2 << a->esz; in TRANS_FEAT()
1586 tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->zd), in TRANS_FEAT()
1587 vec_full_reg_offset(s, a->zn), in TRANS_FEAT()
1588 vec_full_reg_offset(s, a->zm), in TRANS_FEAT()
1589 svl, svl, 0, fn[a->esz]); in TRANS_FEAT()
1602 TRANS_FEAT(ZIP_2, aa64_sme2, do_zipuzp_2, a, zip2_fns)
1611 TRANS_FEAT(UZP_2, aa64_sme2, do_zipuzp_2, a, uzp2_fns) in TRANS_FEAT() argument
1613 static bool trans_FCLAMP(DisasContext *s, arg_zzz_en *a) in TRANS_FEAT()
1628 if (a->esz == MO_8 && !dc_isar_feature(aa64_sme_b16b16, s)) { in TRANS_FEAT()
1635 fpst = fpstatus_ptr(a->esz == MO_16 ? FPST_A64_F16 : FPST_A64); in TRANS_FEAT()
1638 tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->zd), in TRANS_FEAT()
1639 vec_full_reg_offset(s, a->zn), in TRANS_FEAT()
1640 vec_full_reg_offset(s, a->zm), in TRANS_FEAT()
1641 fpst, vl, vl, a->n, fn[a->esz]); in TRANS_FEAT()
1645 static bool do_clamp(DisasContext *s, arg_zzz_en *a, in do_clamp() argument
1658 * Clamp is just a min+max, easily supported by most host in do_clamp()
1660 * translate-sve.c for a single output. in do_clamp()
1665 tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->zd), in do_clamp()
1666 vec_full_reg_offset(s, a->zn), in do_clamp()
1667 vec_full_reg_offset(s, a->zm), in do_clamp()
1668 vl, vl, a->n, fn[a->esz]); in do_clamp()
1678 TRANS(SCLAMP, do_clamp, a, sclamp_fns)
1686 TRANS(UCLAMP, do_clamp, a, uclamp_fns) in TRANS() argument
1688 static bool trans_SEL(DisasContext *s, arg_SEL *a) in TRANS()
1701 uint32_t desc = simd_desc(svl, svl, a->n); in TRANS()
1707 tcg_gen_addi_ptr(t_d, tcg_env, vec_full_reg_offset(s, a->zd)); in TRANS()
1708 tcg_gen_addi_ptr(t_n, tcg_env, vec_full_reg_offset(s, a->zn)); in TRANS()
1709 tcg_gen_addi_ptr(t_m, tcg_env, vec_full_reg_offset(s, a->zm)); in TRANS()
1711 tcg_gen_ld16u_i32(png, tcg_env, pred_full_reg_offset(s, a->pg) in TRANS()
1714 fns[a->esz](t_d, t_n, t_m, png, tcg_constant_i32(desc)); in TRANS()
1719 static bool do_lut(DisasContext *s, arg_lut *a, in do_lut() argument
1724 tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, a->zd), in do_lut()
1725 vec_full_reg_offset(s, a->zn), in do_lut()
1726 tcg_env, svl, svl, strided | (a->idx << 1), fn); in do_lut()
1731 TRANS_FEAT(LUTI2_c_1b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1b, false) in TRANS_FEAT() argument
1732 TRANS_FEAT(LUTI2_c_1h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1h, false) in TRANS_FEAT()
1733 TRANS_FEAT(LUTI2_c_1s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1s, false) in TRANS_FEAT()
1735 TRANS_FEAT(LUTI2_c_2b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2b, false) in TRANS_FEAT()
1736 TRANS_FEAT(LUTI2_c_2h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2h, false) in TRANS_FEAT()
1737 TRANS_FEAT(LUTI2_c_2s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2s, false) in TRANS_FEAT()
1739 TRANS_FEAT(LUTI2_c_4b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4b, false) in TRANS_FEAT()
1740 TRANS_FEAT(LUTI2_c_4h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4h, false) in TRANS_FEAT()
1741 TRANS_FEAT(LUTI2_c_4s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4s, false) in TRANS_FEAT()
1743 TRANS_FEAT(LUTI4_c_1b, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1b, false) in TRANS_FEAT()
1744 TRANS_FEAT(LUTI4_c_1h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1h, false) in TRANS_FEAT()
1745 TRANS_FEAT(LUTI4_c_1s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1s, false) in TRANS_FEAT()
1747 TRANS_FEAT(LUTI4_c_2b, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2b, false) in TRANS_FEAT()
1748 TRANS_FEAT(LUTI4_c_2h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2h, false) in TRANS_FEAT()
1749 TRANS_FEAT(LUTI4_c_2s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2s, false) in TRANS_FEAT()
1751 TRANS_FEAT(LUTI4_c_4h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_4h, false) in TRANS_FEAT()
1752 TRANS_FEAT(LUTI4_c_4s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_4s, false) in TRANS_FEAT()
1754 static bool do_lut_s4(DisasContext *s, arg_lut *a, gen_helper_gvec_2_ptr *fn) in TRANS_FEAT()
1756 return !(a->zd & 0b01100) && do_lut(s, a, fn, true); in TRANS_FEAT()
1759 static bool do_lut_s8(DisasContext *s, arg_lut *a, gen_helper_gvec_2_ptr *fn) in do_lut_s8() argument
1761 return !(a->zd & 0b01000) && do_lut(s, a, fn, true); in do_lut_s8()
1764 TRANS_FEAT(LUTI2_s_2b, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti2_2b)
1765 TRANS_FEAT(LUTI2_s_2h, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti2_2h)
1767 TRANS_FEAT(LUTI2_s_4b, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti2_4b)
1768 TRANS_FEAT(LUTI2_s_4h, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti2_4h)
1770 TRANS_FEAT(LUTI4_s_2b, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti4_2b)
1771 TRANS_FEAT(LUTI4_s_2h, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti4_2h)
1773 TRANS_FEAT(LUTI4_s_4h, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti4_4h)