xref: /openbmc/qemu/target/loongarch/disas.c (revision d5e5563c)
1aae1746cSSong Gao /* SPDX-License-Identifier: GPL-2.0-or-later */
2aae1746cSSong Gao /*
3aae1746cSSong Gao  * QEMU LoongArch Disassembler
4aae1746cSSong Gao  *
5aae1746cSSong Gao  * Copyright (c) 2021 Loongson Technology Corporation Limited.
6aae1746cSSong Gao  */
7aae1746cSSong Gao 
8aae1746cSSong Gao #include "qemu/osdep.h"
9aae1746cSSong Gao #include "disas/dis-asm.h"
10aae1746cSSong Gao #include "qemu/bitops.h"
115b1dedfeSXiaojuan Yang #include "cpu-csr.h"
12aae1746cSSong Gao 
13aae1746cSSong Gao typedef struct {
14aae1746cSSong Gao     disassemble_info *info;
15aae1746cSSong Gao     uint64_t pc;
16aae1746cSSong Gao     uint32_t insn;
17aae1746cSSong Gao } DisasContext;
18aae1746cSSong Gao 
19aae1746cSSong Gao static inline int plus_1(DisasContext *ctx, int x)
20aae1746cSSong Gao {
21aae1746cSSong Gao     return x + 1;
22aae1746cSSong Gao }
23aae1746cSSong Gao 
24aae1746cSSong Gao static inline int shl_2(DisasContext *ctx, int x)
25aae1746cSSong Gao {
26aae1746cSSong Gao     return x << 2;
27aae1746cSSong Gao }
28aae1746cSSong Gao 
295b1dedfeSXiaojuan Yang #define CSR_NAME(REG) \
305b1dedfeSXiaojuan Yang     [LOONGARCH_CSR_##REG] = (#REG)
315b1dedfeSXiaojuan Yang 
325b1dedfeSXiaojuan Yang static const char * const csr_names[] = {
335b1dedfeSXiaojuan Yang     CSR_NAME(CRMD),
345b1dedfeSXiaojuan Yang     CSR_NAME(PRMD),
355b1dedfeSXiaojuan Yang     CSR_NAME(EUEN),
365b1dedfeSXiaojuan Yang     CSR_NAME(MISC),
375b1dedfeSXiaojuan Yang     CSR_NAME(ECFG),
385b1dedfeSXiaojuan Yang     CSR_NAME(ESTAT),
395b1dedfeSXiaojuan Yang     CSR_NAME(ERA),
405b1dedfeSXiaojuan Yang     CSR_NAME(BADV),
415b1dedfeSXiaojuan Yang     CSR_NAME(BADI),
425b1dedfeSXiaojuan Yang     CSR_NAME(EENTRY),
435b1dedfeSXiaojuan Yang     CSR_NAME(TLBIDX),
445b1dedfeSXiaojuan Yang     CSR_NAME(TLBEHI),
455b1dedfeSXiaojuan Yang     CSR_NAME(TLBELO0),
465b1dedfeSXiaojuan Yang     CSR_NAME(TLBELO1),
475b1dedfeSXiaojuan Yang     CSR_NAME(ASID),
485b1dedfeSXiaojuan Yang     CSR_NAME(PGDL),
495b1dedfeSXiaojuan Yang     CSR_NAME(PGDH),
505b1dedfeSXiaojuan Yang     CSR_NAME(PGD),
515b1dedfeSXiaojuan Yang     CSR_NAME(PWCL),
525b1dedfeSXiaojuan Yang     CSR_NAME(PWCH),
535b1dedfeSXiaojuan Yang     CSR_NAME(STLBPS),
545b1dedfeSXiaojuan Yang     CSR_NAME(RVACFG),
555b1dedfeSXiaojuan Yang     CSR_NAME(CPUID),
565b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG1),
575b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG2),
585b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG3),
595b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(0)),
605b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(1)),
615b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(2)),
625b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(3)),
635b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(4)),
645b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(5)),
655b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(6)),
665b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(7)),
675b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(8)),
685b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(9)),
695b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(10)),
705b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(11)),
715b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(12)),
725b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(13)),
735b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(14)),
745b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(15)),
755b1dedfeSXiaojuan Yang     CSR_NAME(TID),
765b1dedfeSXiaojuan Yang     CSR_NAME(TCFG),
775b1dedfeSXiaojuan Yang     CSR_NAME(TVAL),
785b1dedfeSXiaojuan Yang     CSR_NAME(CNTC),
795b1dedfeSXiaojuan Yang     CSR_NAME(TICLR),
805b1dedfeSXiaojuan Yang     CSR_NAME(LLBCTL),
815b1dedfeSXiaojuan Yang     CSR_NAME(IMPCTL1),
825b1dedfeSXiaojuan Yang     CSR_NAME(IMPCTL2),
835b1dedfeSXiaojuan Yang     CSR_NAME(TLBRENTRY),
845b1dedfeSXiaojuan Yang     CSR_NAME(TLBRBADV),
855b1dedfeSXiaojuan Yang     CSR_NAME(TLBRERA),
865b1dedfeSXiaojuan Yang     CSR_NAME(TLBRSAVE),
875b1dedfeSXiaojuan Yang     CSR_NAME(TLBRELO0),
885b1dedfeSXiaojuan Yang     CSR_NAME(TLBRELO1),
895b1dedfeSXiaojuan Yang     CSR_NAME(TLBREHI),
905b1dedfeSXiaojuan Yang     CSR_NAME(TLBRPRMD),
915b1dedfeSXiaojuan Yang     CSR_NAME(MERRCTL),
925b1dedfeSXiaojuan Yang     CSR_NAME(MERRINFO1),
935b1dedfeSXiaojuan Yang     CSR_NAME(MERRINFO2),
945b1dedfeSXiaojuan Yang     CSR_NAME(MERRENTRY),
955b1dedfeSXiaojuan Yang     CSR_NAME(MERRERA),
965b1dedfeSXiaojuan Yang     CSR_NAME(MERRSAVE),
975b1dedfeSXiaojuan Yang     CSR_NAME(CTAG),
985b1dedfeSXiaojuan Yang     CSR_NAME(DMW(0)),
995b1dedfeSXiaojuan Yang     CSR_NAME(DMW(1)),
1005b1dedfeSXiaojuan Yang     CSR_NAME(DMW(2)),
1015b1dedfeSXiaojuan Yang     CSR_NAME(DMW(3)),
1025b1dedfeSXiaojuan Yang     CSR_NAME(DBG),
1035b1dedfeSXiaojuan Yang     CSR_NAME(DERA),
1045b1dedfeSXiaojuan Yang     CSR_NAME(DSAVE),
1055b1dedfeSXiaojuan Yang };
1065b1dedfeSXiaojuan Yang 
1075b1dedfeSXiaojuan Yang static const char *get_csr_name(unsigned num)
1085b1dedfeSXiaojuan Yang {
1095b1dedfeSXiaojuan Yang     return ((num < ARRAY_SIZE(csr_names)) && (csr_names[num] != NULL)) ?
1105b1dedfeSXiaojuan Yang            csr_names[num] : "Undefined CSR";
1115b1dedfeSXiaojuan Yang }
1125b1dedfeSXiaojuan Yang 
113aae1746cSSong Gao #define output(C, INSN, FMT, ...)                                   \
114aae1746cSSong Gao {                                                                   \
115aae1746cSSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %-9s\t" FMT, \
116aae1746cSSong Gao                             (C)->insn, INSN, ##__VA_ARGS__);        \
117aae1746cSSong Gao }
118aae1746cSSong Gao 
119aae1746cSSong Gao #include "decode-insns.c.inc"
120aae1746cSSong Gao 
121aae1746cSSong Gao int print_insn_loongarch(bfd_vma memaddr, struct disassemble_info *info)
122aae1746cSSong Gao {
123aae1746cSSong Gao     bfd_byte buffer[4];
124aae1746cSSong Gao     uint32_t insn;
125aae1746cSSong Gao     int status;
126aae1746cSSong Gao 
127aae1746cSSong Gao     status = (*info->read_memory_func)(memaddr, buffer, 4, info);
128aae1746cSSong Gao     if (status != 0) {
129aae1746cSSong Gao         (*info->memory_error_func)(status, memaddr, info);
130aae1746cSSong Gao         return -1;
131aae1746cSSong Gao     }
132aae1746cSSong Gao     insn = bfd_getl32(buffer);
133aae1746cSSong Gao     DisasContext ctx = {
134aae1746cSSong Gao         .info = info,
135aae1746cSSong Gao         .pc = memaddr,
136aae1746cSSong Gao         .insn = insn
137aae1746cSSong Gao     };
138aae1746cSSong Gao 
139aae1746cSSong Gao     if (!decode(&ctx, insn)) {
140aae1746cSSong Gao         output(&ctx, "illegal", "");
141aae1746cSSong Gao     }
142aae1746cSSong Gao     return 4;
143aae1746cSSong Gao }
144aae1746cSSong Gao 
145aae1746cSSong Gao static void output_r_i(DisasContext *ctx, arg_r_i *a, const char *mnemonic)
146aae1746cSSong Gao {
147aae1746cSSong Gao     output(ctx, mnemonic, "r%d, %d", a->rd, a->imm);
148aae1746cSSong Gao }
149aae1746cSSong Gao 
150aae1746cSSong Gao static void output_rrr(DisasContext *ctx, arg_rrr *a, const char *mnemonic)
151aae1746cSSong Gao {
152aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, r%d", a->rd, a->rj, a->rk);
153aae1746cSSong Gao }
154aae1746cSSong Gao 
155aae1746cSSong Gao static void output_rr_i(DisasContext *ctx, arg_rr_i *a, const char *mnemonic)
156aae1746cSSong Gao {
157aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d", a->rd, a->rj, a->imm);
158aae1746cSSong Gao }
159aae1746cSSong Gao 
160aae1746cSSong Gao static void output_rrr_sa(DisasContext *ctx, arg_rrr_sa *a,
161aae1746cSSong Gao                           const char *mnemonic)
162aae1746cSSong Gao {
163aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, r%d, %d", a->rd, a->rj, a->rk, a->sa);
164aae1746cSSong Gao }
165aae1746cSSong Gao 
166aae1746cSSong Gao static void output_rr(DisasContext *ctx, arg_rr *a, const char *mnemonic)
167aae1746cSSong Gao {
168aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d", a->rd, a->rj);
169aae1746cSSong Gao }
170aae1746cSSong Gao 
171aae1746cSSong Gao static void output_rr_ms_ls(DisasContext *ctx, arg_rr_ms_ls *a,
172aae1746cSSong Gao                           const char *mnemonic)
173aae1746cSSong Gao {
174aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d, %d", a->rd, a->rj, a->ms, a->ls);
175aae1746cSSong Gao }
176aae1746cSSong Gao 
177aae1746cSSong Gao static void output_hint_r_i(DisasContext *ctx, arg_hint_r_i *a,
178aae1746cSSong Gao                             const char *mnemonic)
179aae1746cSSong Gao {
180aae1746cSSong Gao     output(ctx, mnemonic, "%d, r%d, %d", a->hint, a->rj, a->imm);
181aae1746cSSong Gao }
182aae1746cSSong Gao 
183aae1746cSSong Gao static void output_i(DisasContext *ctx, arg_i *a, const char *mnemonic)
184aae1746cSSong Gao {
185aae1746cSSong Gao     output(ctx, mnemonic, "%d", a->imm);
186aae1746cSSong Gao }
187aae1746cSSong Gao 
188aae1746cSSong Gao static void output_rr_jk(DisasContext *ctx, arg_rr_jk *a,
189aae1746cSSong Gao                          const char *mnemonic)
190aae1746cSSong Gao {
191aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d", a->rj, a->rk);
192aae1746cSSong Gao }
193aae1746cSSong Gao 
194aae1746cSSong Gao static void output_ff(DisasContext *ctx, arg_ff *a, const char *mnemonic)
195aae1746cSSong Gao {
196aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d", a->fd, a->fj);
197aae1746cSSong Gao }
198aae1746cSSong Gao 
199aae1746cSSong Gao static void output_fff(DisasContext *ctx, arg_fff *a, const char *mnemonic)
200aae1746cSSong Gao {
201aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d", a->fd, a->fj, a->fk);
202aae1746cSSong Gao }
203aae1746cSSong Gao 
204aae1746cSSong Gao static void output_ffff(DisasContext *ctx, arg_ffff *a, const char *mnemonic)
205aae1746cSSong Gao {
206aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d, f%d", a->fd, a->fj, a->fk, a->fa);
207aae1746cSSong Gao }
208aae1746cSSong Gao 
209aae1746cSSong Gao static void output_fffc(DisasContext *ctx, arg_fffc *a, const char *mnemonic)
210aae1746cSSong Gao {
211aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d, %d", a->fd, a->fj, a->fk, a->ca);
212aae1746cSSong Gao }
213aae1746cSSong Gao 
214aae1746cSSong Gao static void output_fr(DisasContext *ctx, arg_fr *a, const char *mnemonic)
215aae1746cSSong Gao {
216aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d", a->fd, a->rj);
217aae1746cSSong Gao }
218aae1746cSSong Gao 
219aae1746cSSong Gao static void output_rf(DisasContext *ctx, arg_rf *a, const char *mnemonic)
220aae1746cSSong Gao {
221aae1746cSSong Gao     output(ctx, mnemonic, "r%d, f%d", a->rd, a->fj);
222aae1746cSSong Gao }
223aae1746cSSong Gao 
224aae1746cSSong Gao static void output_fcsrd_r(DisasContext *ctx, arg_fcsrd_r *a,
225aae1746cSSong Gao                            const char *mnemonic)
226aae1746cSSong Gao {
227aae1746cSSong Gao     output(ctx, mnemonic, "fcsr%d, r%d", a->fcsrd, a->rj);
228aae1746cSSong Gao }
229aae1746cSSong Gao 
230aae1746cSSong Gao static void output_r_fcsrs(DisasContext *ctx, arg_r_fcsrs *a,
231aae1746cSSong Gao                            const char *mnemonic)
232aae1746cSSong Gao {
233aae1746cSSong Gao     output(ctx, mnemonic, "r%d, fcsr%d", a->rd, a->fcsrs);
234aae1746cSSong Gao }
235aae1746cSSong Gao 
236aae1746cSSong Gao static void output_cf(DisasContext *ctx, arg_cf *a, const char *mnemonic)
237aae1746cSSong Gao {
238aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, f%d", a->cd, a->fj);
239aae1746cSSong Gao }
240aae1746cSSong Gao 
241aae1746cSSong Gao static void output_fc(DisasContext *ctx, arg_fc *a, const char *mnemonic)
242aae1746cSSong Gao {
243aae1746cSSong Gao     output(ctx, mnemonic, "f%d, fcc%d", a->fd, a->cj);
244aae1746cSSong Gao }
245aae1746cSSong Gao 
246aae1746cSSong Gao static void output_cr(DisasContext *ctx, arg_cr *a, const char *mnemonic)
247aae1746cSSong Gao {
248aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, r%d", a->cd, a->rj);
249aae1746cSSong Gao }
250aae1746cSSong Gao 
251aae1746cSSong Gao static void output_rc(DisasContext *ctx, arg_rc *a, const char *mnemonic)
252aae1746cSSong Gao {
253aae1746cSSong Gao     output(ctx, mnemonic, "r%d, fcc%d", a->rd, a->cj);
254aae1746cSSong Gao }
255aae1746cSSong Gao 
256aae1746cSSong Gao static void output_frr(DisasContext *ctx, arg_frr *a, const char *mnemonic)
257aae1746cSSong Gao {
258aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d, r%d", a->fd, a->rj, a->rk);
259aae1746cSSong Gao }
260aae1746cSSong Gao 
261aae1746cSSong Gao static void output_fr_i(DisasContext *ctx, arg_fr_i *a, const char *mnemonic)
262aae1746cSSong Gao {
263aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d, %d", a->fd, a->rj, a->imm);
264aae1746cSSong Gao }
265aae1746cSSong Gao 
266aae1746cSSong Gao static void output_r_offs(DisasContext *ctx, arg_r_offs *a,
267aae1746cSSong Gao                           const char *mnemonic)
268aae1746cSSong Gao {
269aae1746cSSong Gao     output(ctx, mnemonic, "r%d, %d # 0x%" PRIx64, a->rj, a->offs,
270aae1746cSSong Gao            ctx->pc + a->offs);
271aae1746cSSong Gao }
272aae1746cSSong Gao 
273aae1746cSSong Gao static void output_c_offs(DisasContext *ctx, arg_c_offs *a,
274aae1746cSSong Gao                           const char *mnemonic)
275aae1746cSSong Gao {
276aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, %d # 0x%" PRIx64, a->cj, a->offs,
277aae1746cSSong Gao            ctx->pc + a->offs);
278aae1746cSSong Gao }
279aae1746cSSong Gao 
280aae1746cSSong Gao static void output_offs(DisasContext *ctx, arg_offs *a,
281aae1746cSSong Gao                         const char *mnemonic)
282aae1746cSSong Gao {
283aae1746cSSong Gao     output(ctx, mnemonic, "%d # 0x%" PRIx64, a->offs, ctx->pc + a->offs);
284aae1746cSSong Gao }
285aae1746cSSong Gao 
286aae1746cSSong Gao static void output_rr_offs(DisasContext *ctx, arg_rr_offs *a,
287aae1746cSSong Gao                            const char *mnemonic)
288aae1746cSSong Gao {
289aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d # 0x%" PRIx64, a->rj,
290aae1746cSSong Gao            a->rd, a->offs, ctx->pc + a->offs);
291aae1746cSSong Gao }
292aae1746cSSong Gao 
2935b1dedfeSXiaojuan Yang static void output_r_csr(DisasContext *ctx, arg_r_csr *a,
2945b1dedfeSXiaojuan Yang                          const char *mnemonic)
2955b1dedfeSXiaojuan Yang {
2965b1dedfeSXiaojuan Yang     output(ctx, mnemonic, "r%d, %d # %s", a->rd, a->csr, get_csr_name(a->csr));
2975b1dedfeSXiaojuan Yang }
2985b1dedfeSXiaojuan Yang 
2995b1dedfeSXiaojuan Yang static void output_rr_csr(DisasContext *ctx, arg_rr_csr *a,
3005b1dedfeSXiaojuan Yang                           const char *mnemonic)
3015b1dedfeSXiaojuan Yang {
3025b1dedfeSXiaojuan Yang     output(ctx, mnemonic, "r%d, r%d, %d # %s",
3035b1dedfeSXiaojuan Yang            a->rd, a->rj, a->csr, get_csr_name(a->csr));
3045b1dedfeSXiaojuan Yang }
3055b1dedfeSXiaojuan Yang 
306fcbbeb8eSXiaojuan Yang static void output_empty(DisasContext *ctx, arg_empty *a,
307fcbbeb8eSXiaojuan Yang                          const char *mnemonic)
308fcbbeb8eSXiaojuan Yang {
309fcbbeb8eSXiaojuan Yang     output(ctx, mnemonic, "");
310fcbbeb8eSXiaojuan Yang }
311fcbbeb8eSXiaojuan Yang 
312fcbbeb8eSXiaojuan Yang static void output_i_rr(DisasContext *ctx, arg_i_rr *a, const char *mnemonic)
313fcbbeb8eSXiaojuan Yang {
314fcbbeb8eSXiaojuan Yang     output(ctx, mnemonic, "%d, r%d, r%d", a->imm, a->rj, a->rk);
315fcbbeb8eSXiaojuan Yang }
316fcbbeb8eSXiaojuan Yang 
317d2cba6f7SXiaojuan Yang static void output_cop_r_i(DisasContext *ctx, arg_cop_r_i *a,
318d2cba6f7SXiaojuan Yang                            const char *mnemonic)
319d2cba6f7SXiaojuan Yang {
320d2cba6f7SXiaojuan Yang     output(ctx, mnemonic, "%d, r%d, %d", a->cop, a->rj, a->imm);
321d2cba6f7SXiaojuan Yang }
322d2cba6f7SXiaojuan Yang 
323d2cba6f7SXiaojuan Yang static void output_j_i(DisasContext *ctx, arg_j_i *a, const char *mnemonic)
324d2cba6f7SXiaojuan Yang {
325d2cba6f7SXiaojuan Yang     output(ctx, mnemonic, "r%d, %d", a->rj, a->imm);
326d2cba6f7SXiaojuan Yang }
327d2cba6f7SXiaojuan Yang 
328aae1746cSSong Gao #define INSN(insn, type)                                    \
329aae1746cSSong Gao static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
330aae1746cSSong Gao {                                                           \
331aae1746cSSong Gao     output_##type(ctx, a, #insn);                           \
332aae1746cSSong Gao     return true;                                            \
333aae1746cSSong Gao }
334aae1746cSSong Gao 
335aae1746cSSong Gao INSN(clo_w,        rr)
336aae1746cSSong Gao INSN(clz_w,        rr)
337aae1746cSSong Gao INSN(cto_w,        rr)
338aae1746cSSong Gao INSN(ctz_w,        rr)
339aae1746cSSong Gao INSN(clo_d,        rr)
340aae1746cSSong Gao INSN(clz_d,        rr)
341aae1746cSSong Gao INSN(cto_d,        rr)
342aae1746cSSong Gao INSN(ctz_d,        rr)
343aae1746cSSong Gao INSN(revb_2h,      rr)
344aae1746cSSong Gao INSN(revb_4h,      rr)
345aae1746cSSong Gao INSN(revb_2w,      rr)
346aae1746cSSong Gao INSN(revb_d,       rr)
347aae1746cSSong Gao INSN(revh_2w,      rr)
348aae1746cSSong Gao INSN(revh_d,       rr)
349aae1746cSSong Gao INSN(bitrev_4b,    rr)
350aae1746cSSong Gao INSN(bitrev_8b,    rr)
351aae1746cSSong Gao INSN(bitrev_w,     rr)
352aae1746cSSong Gao INSN(bitrev_d,     rr)
353aae1746cSSong Gao INSN(ext_w_h,      rr)
354aae1746cSSong Gao INSN(ext_w_b,      rr)
355f9bf5074SXiaojuan Yang INSN(rdtimel_w,    rr)
356f9bf5074SXiaojuan Yang INSN(rdtimeh_w,    rr)
357f9bf5074SXiaojuan Yang INSN(rdtime_d,     rr)
358aae1746cSSong Gao INSN(cpucfg,       rr)
359aae1746cSSong Gao INSN(asrtle_d,     rr_jk)
360aae1746cSSong Gao INSN(asrtgt_d,     rr_jk)
361aae1746cSSong Gao INSN(alsl_w,       rrr_sa)
362aae1746cSSong Gao INSN(alsl_wu,      rrr_sa)
363aae1746cSSong Gao INSN(bytepick_w,   rrr_sa)
364aae1746cSSong Gao INSN(bytepick_d,   rrr_sa)
365aae1746cSSong Gao INSN(add_w,        rrr)
366aae1746cSSong Gao INSN(add_d,        rrr)
367aae1746cSSong Gao INSN(sub_w,        rrr)
368aae1746cSSong Gao INSN(sub_d,        rrr)
369aae1746cSSong Gao INSN(slt,          rrr)
370aae1746cSSong Gao INSN(sltu,         rrr)
371aae1746cSSong Gao INSN(maskeqz,      rrr)
372aae1746cSSong Gao INSN(masknez,      rrr)
373aae1746cSSong Gao INSN(nor,          rrr)
374aae1746cSSong Gao INSN(and,          rrr)
375aae1746cSSong Gao INSN(or,           rrr)
376aae1746cSSong Gao INSN(xor,          rrr)
377aae1746cSSong Gao INSN(orn,          rrr)
378aae1746cSSong Gao INSN(andn,         rrr)
379aae1746cSSong Gao INSN(sll_w,        rrr)
380aae1746cSSong Gao INSN(srl_w,        rrr)
381aae1746cSSong Gao INSN(sra_w,        rrr)
382aae1746cSSong Gao INSN(sll_d,        rrr)
383aae1746cSSong Gao INSN(srl_d,        rrr)
384aae1746cSSong Gao INSN(sra_d,        rrr)
385aae1746cSSong Gao INSN(rotr_w,       rrr)
386aae1746cSSong Gao INSN(rotr_d,       rrr)
387aae1746cSSong Gao INSN(mul_w,        rrr)
388aae1746cSSong Gao INSN(mulh_w,       rrr)
389aae1746cSSong Gao INSN(mulh_wu,      rrr)
390aae1746cSSong Gao INSN(mul_d,        rrr)
391aae1746cSSong Gao INSN(mulh_d,       rrr)
392aae1746cSSong Gao INSN(mulh_du,      rrr)
393aae1746cSSong Gao INSN(mulw_d_w,     rrr)
394aae1746cSSong Gao INSN(mulw_d_wu,    rrr)
395aae1746cSSong Gao INSN(div_w,        rrr)
396aae1746cSSong Gao INSN(mod_w,        rrr)
397aae1746cSSong Gao INSN(div_wu,       rrr)
398aae1746cSSong Gao INSN(mod_wu,       rrr)
399aae1746cSSong Gao INSN(div_d,        rrr)
400aae1746cSSong Gao INSN(mod_d,        rrr)
401aae1746cSSong Gao INSN(div_du,       rrr)
402aae1746cSSong Gao INSN(mod_du,       rrr)
403aae1746cSSong Gao INSN(crc_w_b_w,    rrr)
404aae1746cSSong Gao INSN(crc_w_h_w,    rrr)
405aae1746cSSong Gao INSN(crc_w_w_w,    rrr)
406aae1746cSSong Gao INSN(crc_w_d_w,    rrr)
407aae1746cSSong Gao INSN(crcc_w_b_w,   rrr)
408aae1746cSSong Gao INSN(crcc_w_h_w,   rrr)
409aae1746cSSong Gao INSN(crcc_w_w_w,   rrr)
410aae1746cSSong Gao INSN(crcc_w_d_w,   rrr)
411aae1746cSSong Gao INSN(break,        i)
412aae1746cSSong Gao INSN(syscall,      i)
413aae1746cSSong Gao INSN(alsl_d,       rrr_sa)
414aae1746cSSong Gao INSN(slli_w,       rr_i)
415aae1746cSSong Gao INSN(slli_d,       rr_i)
416aae1746cSSong Gao INSN(srli_w,       rr_i)
417aae1746cSSong Gao INSN(srli_d,       rr_i)
418aae1746cSSong Gao INSN(srai_w,       rr_i)
419aae1746cSSong Gao INSN(srai_d,       rr_i)
420aae1746cSSong Gao INSN(rotri_w,      rr_i)
421aae1746cSSong Gao INSN(rotri_d,      rr_i)
422aae1746cSSong Gao INSN(bstrins_w,    rr_ms_ls)
423aae1746cSSong Gao INSN(bstrpick_w,   rr_ms_ls)
424aae1746cSSong Gao INSN(bstrins_d,    rr_ms_ls)
425aae1746cSSong Gao INSN(bstrpick_d,   rr_ms_ls)
426aae1746cSSong Gao INSN(fadd_s,       fff)
427aae1746cSSong Gao INSN(fadd_d,       fff)
428aae1746cSSong Gao INSN(fsub_s,       fff)
429aae1746cSSong Gao INSN(fsub_d,       fff)
430aae1746cSSong Gao INSN(fmul_s,       fff)
431aae1746cSSong Gao INSN(fmul_d,       fff)
432aae1746cSSong Gao INSN(fdiv_s,       fff)
433aae1746cSSong Gao INSN(fdiv_d,       fff)
434aae1746cSSong Gao INSN(fmax_s,       fff)
435aae1746cSSong Gao INSN(fmax_d,       fff)
436aae1746cSSong Gao INSN(fmin_s,       fff)
437aae1746cSSong Gao INSN(fmin_d,       fff)
438aae1746cSSong Gao INSN(fmaxa_s,      fff)
439aae1746cSSong Gao INSN(fmaxa_d,      fff)
440aae1746cSSong Gao INSN(fmina_s,      fff)
441aae1746cSSong Gao INSN(fmina_d,      fff)
442aae1746cSSong Gao INSN(fscaleb_s,    fff)
443aae1746cSSong Gao INSN(fscaleb_d,    fff)
444aae1746cSSong Gao INSN(fcopysign_s,  fff)
445aae1746cSSong Gao INSN(fcopysign_d,  fff)
446aae1746cSSong Gao INSN(fabs_s,       ff)
447aae1746cSSong Gao INSN(fabs_d,       ff)
448aae1746cSSong Gao INSN(fneg_s,       ff)
449aae1746cSSong Gao INSN(fneg_d,       ff)
450aae1746cSSong Gao INSN(flogb_s,      ff)
451aae1746cSSong Gao INSN(flogb_d,      ff)
452aae1746cSSong Gao INSN(fclass_s,     ff)
453aae1746cSSong Gao INSN(fclass_d,     ff)
454aae1746cSSong Gao INSN(fsqrt_s,      ff)
455aae1746cSSong Gao INSN(fsqrt_d,      ff)
456aae1746cSSong Gao INSN(frecip_s,     ff)
457aae1746cSSong Gao INSN(frecip_d,     ff)
458aae1746cSSong Gao INSN(frsqrt_s,     ff)
459aae1746cSSong Gao INSN(frsqrt_d,     ff)
460aae1746cSSong Gao INSN(fmov_s,       ff)
461aae1746cSSong Gao INSN(fmov_d,       ff)
462aae1746cSSong Gao INSN(movgr2fr_w,   fr)
463aae1746cSSong Gao INSN(movgr2fr_d,   fr)
464aae1746cSSong Gao INSN(movgr2frh_w,  fr)
465aae1746cSSong Gao INSN(movfr2gr_s,   rf)
466aae1746cSSong Gao INSN(movfr2gr_d,   rf)
467aae1746cSSong Gao INSN(movfrh2gr_s,  rf)
468aae1746cSSong Gao INSN(movgr2fcsr,   fcsrd_r)
469aae1746cSSong Gao INSN(movfcsr2gr,   r_fcsrs)
470aae1746cSSong Gao INSN(movfr2cf,     cf)
471aae1746cSSong Gao INSN(movcf2fr,     fc)
472aae1746cSSong Gao INSN(movgr2cf,     cr)
473aae1746cSSong Gao INSN(movcf2gr,     rc)
474aae1746cSSong Gao INSN(fcvt_s_d,     ff)
475aae1746cSSong Gao INSN(fcvt_d_s,     ff)
476aae1746cSSong Gao INSN(ftintrm_w_s,  ff)
477aae1746cSSong Gao INSN(ftintrm_w_d,  ff)
478aae1746cSSong Gao INSN(ftintrm_l_s,  ff)
479aae1746cSSong Gao INSN(ftintrm_l_d,  ff)
480aae1746cSSong Gao INSN(ftintrp_w_s,  ff)
481aae1746cSSong Gao INSN(ftintrp_w_d,  ff)
482aae1746cSSong Gao INSN(ftintrp_l_s,  ff)
483aae1746cSSong Gao INSN(ftintrp_l_d,  ff)
484aae1746cSSong Gao INSN(ftintrz_w_s,  ff)
485aae1746cSSong Gao INSN(ftintrz_w_d,  ff)
486aae1746cSSong Gao INSN(ftintrz_l_s,  ff)
487aae1746cSSong Gao INSN(ftintrz_l_d,  ff)
488aae1746cSSong Gao INSN(ftintrne_w_s, ff)
489aae1746cSSong Gao INSN(ftintrne_w_d, ff)
490aae1746cSSong Gao INSN(ftintrne_l_s, ff)
491aae1746cSSong Gao INSN(ftintrne_l_d, ff)
492aae1746cSSong Gao INSN(ftint_w_s,    ff)
493aae1746cSSong Gao INSN(ftint_w_d,    ff)
494aae1746cSSong Gao INSN(ftint_l_s,    ff)
495aae1746cSSong Gao INSN(ftint_l_d,    ff)
496aae1746cSSong Gao INSN(ffint_s_w,    ff)
497aae1746cSSong Gao INSN(ffint_s_l,    ff)
498aae1746cSSong Gao INSN(ffint_d_w,    ff)
499aae1746cSSong Gao INSN(ffint_d_l,    ff)
500aae1746cSSong Gao INSN(frint_s,      ff)
501aae1746cSSong Gao INSN(frint_d,      ff)
502aae1746cSSong Gao INSN(slti,         rr_i)
503aae1746cSSong Gao INSN(sltui,        rr_i)
504aae1746cSSong Gao INSN(addi_w,       rr_i)
505aae1746cSSong Gao INSN(addi_d,       rr_i)
506aae1746cSSong Gao INSN(lu52i_d,      rr_i)
507aae1746cSSong Gao INSN(andi,         rr_i)
508aae1746cSSong Gao INSN(ori,          rr_i)
509aae1746cSSong Gao INSN(xori,         rr_i)
510aae1746cSSong Gao INSN(fmadd_s,      ffff)
511aae1746cSSong Gao INSN(fmadd_d,      ffff)
512aae1746cSSong Gao INSN(fmsub_s,      ffff)
513aae1746cSSong Gao INSN(fmsub_d,      ffff)
514aae1746cSSong Gao INSN(fnmadd_s,     ffff)
515aae1746cSSong Gao INSN(fnmadd_d,     ffff)
516aae1746cSSong Gao INSN(fnmsub_s,     ffff)
517aae1746cSSong Gao INSN(fnmsub_d,     ffff)
518aae1746cSSong Gao INSN(fsel,         fffc)
519aae1746cSSong Gao INSN(addu16i_d,    rr_i)
520aae1746cSSong Gao INSN(lu12i_w,      r_i)
521aae1746cSSong Gao INSN(lu32i_d,      r_i)
522aae1746cSSong Gao INSN(ll_w,         rr_i)
523aae1746cSSong Gao INSN(sc_w,         rr_i)
524aae1746cSSong Gao INSN(ll_d,         rr_i)
525aae1746cSSong Gao INSN(sc_d,         rr_i)
526aae1746cSSong Gao INSN(ldptr_w,      rr_i)
527aae1746cSSong Gao INSN(stptr_w,      rr_i)
528aae1746cSSong Gao INSN(ldptr_d,      rr_i)
529aae1746cSSong Gao INSN(stptr_d,      rr_i)
530aae1746cSSong Gao INSN(ld_b,         rr_i)
531aae1746cSSong Gao INSN(ld_h,         rr_i)
532aae1746cSSong Gao INSN(ld_w,         rr_i)
533aae1746cSSong Gao INSN(ld_d,         rr_i)
534aae1746cSSong Gao INSN(st_b,         rr_i)
535aae1746cSSong Gao INSN(st_h,         rr_i)
536aae1746cSSong Gao INSN(st_w,         rr_i)
537aae1746cSSong Gao INSN(st_d,         rr_i)
538aae1746cSSong Gao INSN(ld_bu,        rr_i)
539aae1746cSSong Gao INSN(ld_hu,        rr_i)
540aae1746cSSong Gao INSN(ld_wu,        rr_i)
541aae1746cSSong Gao INSN(preld,        hint_r_i)
542aae1746cSSong Gao INSN(fld_s,        fr_i)
543aae1746cSSong Gao INSN(fst_s,        fr_i)
544aae1746cSSong Gao INSN(fld_d,        fr_i)
545aae1746cSSong Gao INSN(fst_d,        fr_i)
546aae1746cSSong Gao INSN(ldx_b,        rrr)
547aae1746cSSong Gao INSN(ldx_h,        rrr)
548aae1746cSSong Gao INSN(ldx_w,        rrr)
549aae1746cSSong Gao INSN(ldx_d,        rrr)
550aae1746cSSong Gao INSN(stx_b,        rrr)
551aae1746cSSong Gao INSN(stx_h,        rrr)
552aae1746cSSong Gao INSN(stx_w,        rrr)
553aae1746cSSong Gao INSN(stx_d,        rrr)
554aae1746cSSong Gao INSN(ldx_bu,       rrr)
555aae1746cSSong Gao INSN(ldx_hu,       rrr)
556aae1746cSSong Gao INSN(ldx_wu,       rrr)
557aae1746cSSong Gao INSN(fldx_s,       frr)
558aae1746cSSong Gao INSN(fldx_d,       frr)
559aae1746cSSong Gao INSN(fstx_s,       frr)
560aae1746cSSong Gao INSN(fstx_d,       frr)
561aae1746cSSong Gao INSN(amswap_w,     rrr)
562aae1746cSSong Gao INSN(amswap_d,     rrr)
563aae1746cSSong Gao INSN(amadd_w,      rrr)
564aae1746cSSong Gao INSN(amadd_d,      rrr)
565aae1746cSSong Gao INSN(amand_w,      rrr)
566aae1746cSSong Gao INSN(amand_d,      rrr)
567aae1746cSSong Gao INSN(amor_w,       rrr)
568aae1746cSSong Gao INSN(amor_d,       rrr)
569aae1746cSSong Gao INSN(amxor_w,      rrr)
570aae1746cSSong Gao INSN(amxor_d,      rrr)
571aae1746cSSong Gao INSN(ammax_w,      rrr)
572aae1746cSSong Gao INSN(ammax_d,      rrr)
573aae1746cSSong Gao INSN(ammin_w,      rrr)
574aae1746cSSong Gao INSN(ammin_d,      rrr)
575aae1746cSSong Gao INSN(ammax_wu,     rrr)
576aae1746cSSong Gao INSN(ammax_du,     rrr)
577aae1746cSSong Gao INSN(ammin_wu,     rrr)
578aae1746cSSong Gao INSN(ammin_du,     rrr)
579aae1746cSSong Gao INSN(amswap_db_w,  rrr)
580aae1746cSSong Gao INSN(amswap_db_d,  rrr)
581aae1746cSSong Gao INSN(amadd_db_w,   rrr)
582aae1746cSSong Gao INSN(amadd_db_d,   rrr)
583aae1746cSSong Gao INSN(amand_db_w,   rrr)
584aae1746cSSong Gao INSN(amand_db_d,   rrr)
585aae1746cSSong Gao INSN(amor_db_w,    rrr)
586aae1746cSSong Gao INSN(amor_db_d,    rrr)
587aae1746cSSong Gao INSN(amxor_db_w,   rrr)
588aae1746cSSong Gao INSN(amxor_db_d,   rrr)
589aae1746cSSong Gao INSN(ammax_db_w,   rrr)
590aae1746cSSong Gao INSN(ammax_db_d,   rrr)
591aae1746cSSong Gao INSN(ammin_db_w,   rrr)
592aae1746cSSong Gao INSN(ammin_db_d,   rrr)
593aae1746cSSong Gao INSN(ammax_db_wu,  rrr)
594aae1746cSSong Gao INSN(ammax_db_du,  rrr)
595aae1746cSSong Gao INSN(ammin_db_wu,  rrr)
596aae1746cSSong Gao INSN(ammin_db_du,  rrr)
597aae1746cSSong Gao INSN(dbar,         i)
598aae1746cSSong Gao INSN(ibar,         i)
599aae1746cSSong Gao INSN(fldgt_s,      frr)
600aae1746cSSong Gao INSN(fldgt_d,      frr)
601aae1746cSSong Gao INSN(fldle_s,      frr)
602aae1746cSSong Gao INSN(fldle_d,      frr)
603aae1746cSSong Gao INSN(fstgt_s,      frr)
604aae1746cSSong Gao INSN(fstgt_d,      frr)
605aae1746cSSong Gao INSN(fstle_s,      frr)
606aae1746cSSong Gao INSN(fstle_d,      frr)
607aae1746cSSong Gao INSN(ldgt_b,       rrr)
608aae1746cSSong Gao INSN(ldgt_h,       rrr)
609aae1746cSSong Gao INSN(ldgt_w,       rrr)
610aae1746cSSong Gao INSN(ldgt_d,       rrr)
611aae1746cSSong Gao INSN(ldle_b,       rrr)
612aae1746cSSong Gao INSN(ldle_h,       rrr)
613aae1746cSSong Gao INSN(ldle_w,       rrr)
614aae1746cSSong Gao INSN(ldle_d,       rrr)
615aae1746cSSong Gao INSN(stgt_b,       rrr)
616aae1746cSSong Gao INSN(stgt_h,       rrr)
617aae1746cSSong Gao INSN(stgt_w,       rrr)
618aae1746cSSong Gao INSN(stgt_d,       rrr)
619aae1746cSSong Gao INSN(stle_b,       rrr)
620aae1746cSSong Gao INSN(stle_h,       rrr)
621aae1746cSSong Gao INSN(stle_w,       rrr)
622aae1746cSSong Gao INSN(stle_d,       rrr)
623aae1746cSSong Gao INSN(beqz,         r_offs)
624aae1746cSSong Gao INSN(bnez,         r_offs)
625aae1746cSSong Gao INSN(bceqz,        c_offs)
626aae1746cSSong Gao INSN(bcnez,        c_offs)
627c2b618a8SRichard Henderson INSN(jirl,         rr_i)
628aae1746cSSong Gao INSN(b,            offs)
629aae1746cSSong Gao INSN(bl,           offs)
630aae1746cSSong Gao INSN(beq,          rr_offs)
631aae1746cSSong Gao INSN(bne,          rr_offs)
632aae1746cSSong Gao INSN(blt,          rr_offs)
633aae1746cSSong Gao INSN(bge,          rr_offs)
634aae1746cSSong Gao INSN(bltu,         rr_offs)
635aae1746cSSong Gao INSN(bgeu,         rr_offs)
6365b1dedfeSXiaojuan Yang INSN(csrrd,        r_csr)
6375b1dedfeSXiaojuan Yang INSN(csrwr,        r_csr)
6385b1dedfeSXiaojuan Yang INSN(csrxchg,      rr_csr)
639f84a2aacSXiaojuan Yang INSN(iocsrrd_b,    rr)
640f84a2aacSXiaojuan Yang INSN(iocsrrd_h,    rr)
641f84a2aacSXiaojuan Yang INSN(iocsrrd_w,    rr)
642f84a2aacSXiaojuan Yang INSN(iocsrrd_d,    rr)
643f84a2aacSXiaojuan Yang INSN(iocsrwr_b,    rr)
644f84a2aacSXiaojuan Yang INSN(iocsrwr_h,    rr)
645f84a2aacSXiaojuan Yang INSN(iocsrwr_w,    rr)
646f84a2aacSXiaojuan Yang INSN(iocsrwr_d,    rr)
647fcbbeb8eSXiaojuan Yang INSN(tlbsrch,      empty)
648fcbbeb8eSXiaojuan Yang INSN(tlbrd,        empty)
649fcbbeb8eSXiaojuan Yang INSN(tlbwr,        empty)
650fcbbeb8eSXiaojuan Yang INSN(tlbfill,      empty)
651fcbbeb8eSXiaojuan Yang INSN(tlbclr,       empty)
652fcbbeb8eSXiaojuan Yang INSN(tlbflush,     empty)
653fcbbeb8eSXiaojuan Yang INSN(invtlb,       i_rr)
654d2cba6f7SXiaojuan Yang INSN(cacop,        cop_r_i)
655d2cba6f7SXiaojuan Yang INSN(lddir,        rr_i)
656d2cba6f7SXiaojuan Yang INSN(ldpte,        j_i)
657d2cba6f7SXiaojuan Yang INSN(ertn,         empty)
658d2cba6f7SXiaojuan Yang INSN(idle,         i)
659d2cba6f7SXiaojuan Yang INSN(dbcl,         i)
660aae1746cSSong Gao 
661aae1746cSSong Gao #define output_fcmp(C, PREFIX, SUFFIX)                                         \
662aae1746cSSong Gao {                                                                              \
663aae1746cSSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %s%s\tfcc%d, f%d, f%d", \
664aae1746cSSong Gao                             (C)->insn, PREFIX, SUFFIX, a->cd,                  \
665aae1746cSSong Gao                             a->fj, a->fk);                                     \
666aae1746cSSong Gao }
667aae1746cSSong Gao 
668aae1746cSSong Gao static bool output_cff_fcond(DisasContext *ctx, arg_cff_fcond * a,
669aae1746cSSong Gao                                const char *suffix)
670aae1746cSSong Gao {
671aae1746cSSong Gao     bool ret = true;
672aae1746cSSong Gao     switch (a->fcond) {
673aae1746cSSong Gao     case 0x0:
674aae1746cSSong Gao         output_fcmp(ctx, "fcmp_caf_", suffix);
675aae1746cSSong Gao         break;
676aae1746cSSong Gao     case 0x1:
677aae1746cSSong Gao         output_fcmp(ctx, "fcmp_saf_", suffix);
678aae1746cSSong Gao         break;
679aae1746cSSong Gao     case 0x2:
680aae1746cSSong Gao         output_fcmp(ctx, "fcmp_clt_", suffix);
681aae1746cSSong Gao         break;
682aae1746cSSong Gao     case 0x3:
683aae1746cSSong Gao         output_fcmp(ctx, "fcmp_slt_", suffix);
684aae1746cSSong Gao         break;
685aae1746cSSong Gao     case 0x4:
686aae1746cSSong Gao         output_fcmp(ctx, "fcmp_ceq_", suffix);
687aae1746cSSong Gao         break;
688aae1746cSSong Gao     case 0x5:
689aae1746cSSong Gao         output_fcmp(ctx, "fcmp_seq_", suffix);
690aae1746cSSong Gao         break;
691aae1746cSSong Gao     case 0x6:
692aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cle_", suffix);
693aae1746cSSong Gao         break;
694aae1746cSSong Gao     case 0x7:
695aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sle_", suffix);
696aae1746cSSong Gao         break;
697aae1746cSSong Gao     case 0x8:
698aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cun_", suffix);
699aae1746cSSong Gao         break;
700aae1746cSSong Gao     case 0x9:
701aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sun_", suffix);
702aae1746cSSong Gao         break;
703aae1746cSSong Gao     case 0xA:
704aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cult_", suffix);
705aae1746cSSong Gao         break;
706aae1746cSSong Gao     case 0xB:
707aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sult_", suffix);
708aae1746cSSong Gao         break;
709aae1746cSSong Gao     case 0xC:
710aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cueq_", suffix);
711aae1746cSSong Gao         break;
712aae1746cSSong Gao     case 0xD:
713aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sueq_", suffix);
714aae1746cSSong Gao         break;
715aae1746cSSong Gao     case 0xE:
716aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cule_", suffix);
717aae1746cSSong Gao         break;
718aae1746cSSong Gao     case 0xF:
719aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sule_", suffix);
720aae1746cSSong Gao         break;
721aae1746cSSong Gao     case 0x10:
722aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cne_", suffix);
723aae1746cSSong Gao         break;
724aae1746cSSong Gao     case 0x11:
725aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sne_", suffix);
726aae1746cSSong Gao         break;
727aae1746cSSong Gao     case 0x14:
728aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cor_", suffix);
729aae1746cSSong Gao         break;
730aae1746cSSong Gao     case 0x15:
731aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sor_", suffix);
732aae1746cSSong Gao         break;
733aae1746cSSong Gao     case 0x18:
734aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cune_", suffix);
735aae1746cSSong Gao         break;
736aae1746cSSong Gao     case 0x19:
737aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sune_", suffix);
738aae1746cSSong Gao         break;
739aae1746cSSong Gao     default:
740aae1746cSSong Gao         ret = false;
741aae1746cSSong Gao     }
742aae1746cSSong Gao     return ret;
743aae1746cSSong Gao }
744aae1746cSSong Gao 
745aae1746cSSong Gao #define FCMP_INSN(suffix)                               \
746aae1746cSSong Gao static bool trans_fcmp_cond_##suffix(DisasContext *ctx, \
747aae1746cSSong Gao                                      arg_cff_fcond * a) \
748aae1746cSSong Gao {                                                       \
749aae1746cSSong Gao     return output_cff_fcond(ctx, a, #suffix);           \
750aae1746cSSong Gao }
751aae1746cSSong Gao 
752aae1746cSSong Gao FCMP_INSN(s)
753aae1746cSSong Gao FCMP_INSN(d)
75469c9a5cfSRichard Henderson 
75569c9a5cfSRichard Henderson #define PCADD_INSN(name)                                        \
75669c9a5cfSRichard Henderson static bool trans_##name(DisasContext *ctx, arg_##name *a)      \
75769c9a5cfSRichard Henderson {                                                               \
75869c9a5cfSRichard Henderson     output(ctx, #name, "r%d, %d # 0x%" PRIx64,                  \
75969c9a5cfSRichard Henderson            a->rd, a->imm, gen_##name(ctx->pc, a->imm));         \
76069c9a5cfSRichard Henderson     return true;                                                \
76169c9a5cfSRichard Henderson }
76269c9a5cfSRichard Henderson 
76369c9a5cfSRichard Henderson static uint64_t gen_pcaddi(uint64_t pc, int imm)
76469c9a5cfSRichard Henderson {
76569c9a5cfSRichard Henderson     return pc + (imm << 2);
76669c9a5cfSRichard Henderson }
76769c9a5cfSRichard Henderson 
76869c9a5cfSRichard Henderson static uint64_t gen_pcalau12i(uint64_t pc, int imm)
76969c9a5cfSRichard Henderson {
77069c9a5cfSRichard Henderson     return (pc + (imm << 12)) & ~0xfff;
77169c9a5cfSRichard Henderson }
77269c9a5cfSRichard Henderson 
77369c9a5cfSRichard Henderson static uint64_t gen_pcaddu12i(uint64_t pc, int imm)
77469c9a5cfSRichard Henderson {
77569c9a5cfSRichard Henderson     return pc + (imm << 12);
77669c9a5cfSRichard Henderson }
77769c9a5cfSRichard Henderson 
77869c9a5cfSRichard Henderson static uint64_t gen_pcaddu18i(uint64_t pc, int imm)
77969c9a5cfSRichard Henderson {
78069c9a5cfSRichard Henderson     return pc + ((uint64_t)(imm) << 18);
78169c9a5cfSRichard Henderson }
78269c9a5cfSRichard Henderson 
78369c9a5cfSRichard Henderson PCADD_INSN(pcaddi)
78469c9a5cfSRichard Henderson PCADD_INSN(pcalau12i)
78569c9a5cfSRichard Henderson PCADD_INSN(pcaddu12i)
78669c9a5cfSRichard Henderson PCADD_INSN(pcaddu18i)
78757b4f1acSSong Gao 
78857b4f1acSSong Gao #define INSN_LSX(insn, type)                                \
78957b4f1acSSong Gao static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
79057b4f1acSSong Gao {                                                           \
79157b4f1acSSong Gao     output_##type(ctx, a, #insn);                           \
79257b4f1acSSong Gao     return true;                                            \
79357b4f1acSSong Gao }
79457b4f1acSSong Gao 
795d0dfa19aSSong Gao static void output_cv(DisasContext *ctx, arg_cv *a,
796d0dfa19aSSong Gao                         const char *mnemonic)
797d0dfa19aSSong Gao {
798d0dfa19aSSong Gao     output(ctx, mnemonic, "fcc%d, v%d", a->cd, a->vj);
799d0dfa19aSSong Gao }
800d0dfa19aSSong Gao 
80157b4f1acSSong Gao static void output_vvv(DisasContext *ctx, arg_vvv *a, const char *mnemonic)
80257b4f1acSSong Gao {
80357b4f1acSSong Gao     output(ctx, mnemonic, "v%d, v%d, v%d", a->vd, a->vj, a->vk);
80457b4f1acSSong Gao }
80557b4f1acSSong Gao 
806d8be64c1SSong Gao static void output_vv_i(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
807d8be64c1SSong Gao {
808d8be64c1SSong Gao     output(ctx, mnemonic, "v%d, v%d, 0x%x", a->vd, a->vj, a->imm);
809d8be64c1SSong Gao }
810d8be64c1SSong Gao 
811be9ec557SSong Gao static void output_vv(DisasContext *ctx, arg_vv *a, const char *mnemonic)
812be9ec557SSong Gao {
813be9ec557SSong Gao     output(ctx, mnemonic, "v%d, v%d", a->vd, a->vj);
814be9ec557SSong Gao }
815be9ec557SSong Gao 
816aca67472SSong Gao static void output_vvvv(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
817aca67472SSong Gao {
818aca67472SSong Gao     output(ctx, mnemonic, "v%d, v%d, v%d, v%d", a->vd, a->vj, a->vk, a->va);
819aca67472SSong Gao }
820aca67472SSong Gao 
821cdbdefbfSSong Gao static void output_vr_i(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
822cdbdefbfSSong Gao {
823cdbdefbfSSong Gao     output(ctx, mnemonic, "v%d, r%d, 0x%x", a->vd, a->rj, a->imm);
824cdbdefbfSSong Gao }
825cdbdefbfSSong Gao 
826cdbdefbfSSong Gao static void output_rv_i(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
827cdbdefbfSSong Gao {
828cdbdefbfSSong Gao     output(ctx, mnemonic, "r%d, v%d, 0x%x", a->rd, a->vj,  a->imm);
829cdbdefbfSSong Gao }
830cdbdefbfSSong Gao 
831cdbdefbfSSong Gao static void output_vr(DisasContext *ctx, arg_vr *a, const char *mnemonic)
832cdbdefbfSSong Gao {
833cdbdefbfSSong Gao     output(ctx, mnemonic, "v%d, r%d", a->vd, a->rj);
834cdbdefbfSSong Gao }
835cdbdefbfSSong Gao 
836*d5e5563cSSong Gao static void output_vvr(DisasContext *ctx, arg_vvr *a, const char *mnemonic)
837*d5e5563cSSong Gao {
838*d5e5563cSSong Gao     output(ctx, mnemonic, "v%d, v%d, r%d", a->vd, a->vj, a->rk);
839*d5e5563cSSong Gao }
840*d5e5563cSSong Gao 
84157b4f1acSSong Gao INSN_LSX(vadd_b,           vvv)
84257b4f1acSSong Gao INSN_LSX(vadd_h,           vvv)
84357b4f1acSSong Gao INSN_LSX(vadd_w,           vvv)
84457b4f1acSSong Gao INSN_LSX(vadd_d,           vvv)
84557b4f1acSSong Gao INSN_LSX(vadd_q,           vvv)
84657b4f1acSSong Gao INSN_LSX(vsub_b,           vvv)
84757b4f1acSSong Gao INSN_LSX(vsub_h,           vvv)
84857b4f1acSSong Gao INSN_LSX(vsub_w,           vvv)
84957b4f1acSSong Gao INSN_LSX(vsub_d,           vvv)
85057b4f1acSSong Gao INSN_LSX(vsub_q,           vvv)
851d8be64c1SSong Gao 
852d8be64c1SSong Gao INSN_LSX(vaddi_bu,         vv_i)
853d8be64c1SSong Gao INSN_LSX(vaddi_hu,         vv_i)
854d8be64c1SSong Gao INSN_LSX(vaddi_wu,         vv_i)
855d8be64c1SSong Gao INSN_LSX(vaddi_du,         vv_i)
856d8be64c1SSong Gao INSN_LSX(vsubi_bu,         vv_i)
857d8be64c1SSong Gao INSN_LSX(vsubi_hu,         vv_i)
858d8be64c1SSong Gao INSN_LSX(vsubi_wu,         vv_i)
859d8be64c1SSong Gao INSN_LSX(vsubi_du,         vv_i)
860be9ec557SSong Gao 
861be9ec557SSong Gao INSN_LSX(vneg_b,           vv)
862be9ec557SSong Gao INSN_LSX(vneg_h,           vv)
863be9ec557SSong Gao INSN_LSX(vneg_w,           vv)
864be9ec557SSong Gao INSN_LSX(vneg_d,           vv)
865a94cb911SSong Gao 
866a94cb911SSong Gao INSN_LSX(vsadd_b,          vvv)
867a94cb911SSong Gao INSN_LSX(vsadd_h,          vvv)
868a94cb911SSong Gao INSN_LSX(vsadd_w,          vvv)
869a94cb911SSong Gao INSN_LSX(vsadd_d,          vvv)
870a94cb911SSong Gao INSN_LSX(vsadd_bu,         vvv)
871a94cb911SSong Gao INSN_LSX(vsadd_hu,         vvv)
872a94cb911SSong Gao INSN_LSX(vsadd_wu,         vvv)
873a94cb911SSong Gao INSN_LSX(vsadd_du,         vvv)
874a94cb911SSong Gao INSN_LSX(vssub_b,          vvv)
875a94cb911SSong Gao INSN_LSX(vssub_h,          vvv)
876a94cb911SSong Gao INSN_LSX(vssub_w,          vvv)
877a94cb911SSong Gao INSN_LSX(vssub_d,          vvv)
878a94cb911SSong Gao INSN_LSX(vssub_bu,         vvv)
879a94cb911SSong Gao INSN_LSX(vssub_hu,         vvv)
880a94cb911SSong Gao INSN_LSX(vssub_wu,         vvv)
881a94cb911SSong Gao INSN_LSX(vssub_du,         vvv)
882c037fbc9SSong Gao 
883c037fbc9SSong Gao INSN_LSX(vhaddw_h_b,       vvv)
884c037fbc9SSong Gao INSN_LSX(vhaddw_w_h,       vvv)
885c037fbc9SSong Gao INSN_LSX(vhaddw_d_w,       vvv)
886c037fbc9SSong Gao INSN_LSX(vhaddw_q_d,       vvv)
887c037fbc9SSong Gao INSN_LSX(vhaddw_hu_bu,     vvv)
888c037fbc9SSong Gao INSN_LSX(vhaddw_wu_hu,     vvv)
889c037fbc9SSong Gao INSN_LSX(vhaddw_du_wu,     vvv)
890c037fbc9SSong Gao INSN_LSX(vhaddw_qu_du,     vvv)
891c037fbc9SSong Gao INSN_LSX(vhsubw_h_b,       vvv)
892c037fbc9SSong Gao INSN_LSX(vhsubw_w_h,       vvv)
893c037fbc9SSong Gao INSN_LSX(vhsubw_d_w,       vvv)
894c037fbc9SSong Gao INSN_LSX(vhsubw_q_d,       vvv)
895c037fbc9SSong Gao INSN_LSX(vhsubw_hu_bu,     vvv)
896c037fbc9SSong Gao INSN_LSX(vhsubw_wu_hu,     vvv)
897c037fbc9SSong Gao INSN_LSX(vhsubw_du_wu,     vvv)
898c037fbc9SSong Gao INSN_LSX(vhsubw_qu_du,     vvv)
8992d5f950cSSong Gao 
9002d5f950cSSong Gao INSN_LSX(vaddwev_h_b,      vvv)
9012d5f950cSSong Gao INSN_LSX(vaddwev_w_h,      vvv)
9022d5f950cSSong Gao INSN_LSX(vaddwev_d_w,      vvv)
9032d5f950cSSong Gao INSN_LSX(vaddwev_q_d,      vvv)
9042d5f950cSSong Gao INSN_LSX(vaddwod_h_b,      vvv)
9052d5f950cSSong Gao INSN_LSX(vaddwod_w_h,      vvv)
9062d5f950cSSong Gao INSN_LSX(vaddwod_d_w,      vvv)
9072d5f950cSSong Gao INSN_LSX(vaddwod_q_d,      vvv)
9082d5f950cSSong Gao INSN_LSX(vsubwev_h_b,      vvv)
9092d5f950cSSong Gao INSN_LSX(vsubwev_w_h,      vvv)
9102d5f950cSSong Gao INSN_LSX(vsubwev_d_w,      vvv)
9112d5f950cSSong Gao INSN_LSX(vsubwev_q_d,      vvv)
9122d5f950cSSong Gao INSN_LSX(vsubwod_h_b,      vvv)
9132d5f950cSSong Gao INSN_LSX(vsubwod_w_h,      vvv)
9142d5f950cSSong Gao INSN_LSX(vsubwod_d_w,      vvv)
9152d5f950cSSong Gao INSN_LSX(vsubwod_q_d,      vvv)
9162d5f950cSSong Gao 
9172d5f950cSSong Gao INSN_LSX(vaddwev_h_bu,     vvv)
9182d5f950cSSong Gao INSN_LSX(vaddwev_w_hu,     vvv)
9192d5f950cSSong Gao INSN_LSX(vaddwev_d_wu,     vvv)
9202d5f950cSSong Gao INSN_LSX(vaddwev_q_du,     vvv)
9212d5f950cSSong Gao INSN_LSX(vaddwod_h_bu,     vvv)
9222d5f950cSSong Gao INSN_LSX(vaddwod_w_hu,     vvv)
9232d5f950cSSong Gao INSN_LSX(vaddwod_d_wu,     vvv)
9242d5f950cSSong Gao INSN_LSX(vaddwod_q_du,     vvv)
9252d5f950cSSong Gao INSN_LSX(vsubwev_h_bu,     vvv)
9262d5f950cSSong Gao INSN_LSX(vsubwev_w_hu,     vvv)
9272d5f950cSSong Gao INSN_LSX(vsubwev_d_wu,     vvv)
9282d5f950cSSong Gao INSN_LSX(vsubwev_q_du,     vvv)
9292d5f950cSSong Gao INSN_LSX(vsubwod_h_bu,     vvv)
9302d5f950cSSong Gao INSN_LSX(vsubwod_w_hu,     vvv)
9312d5f950cSSong Gao INSN_LSX(vsubwod_d_wu,     vvv)
9322d5f950cSSong Gao INSN_LSX(vsubwod_q_du,     vvv)
9332d5f950cSSong Gao 
9342d5f950cSSong Gao INSN_LSX(vaddwev_h_bu_b,   vvv)
9352d5f950cSSong Gao INSN_LSX(vaddwev_w_hu_h,   vvv)
9362d5f950cSSong Gao INSN_LSX(vaddwev_d_wu_w,   vvv)
9372d5f950cSSong Gao INSN_LSX(vaddwev_q_du_d,   vvv)
9382d5f950cSSong Gao INSN_LSX(vaddwod_h_bu_b,   vvv)
9392d5f950cSSong Gao INSN_LSX(vaddwod_w_hu_h,   vvv)
9402d5f950cSSong Gao INSN_LSX(vaddwod_d_wu_w,   vvv)
9412d5f950cSSong Gao INSN_LSX(vaddwod_q_du_d,   vvv)
94239e9b0a7SSong Gao 
94339e9b0a7SSong Gao INSN_LSX(vavg_b,           vvv)
94439e9b0a7SSong Gao INSN_LSX(vavg_h,           vvv)
94539e9b0a7SSong Gao INSN_LSX(vavg_w,           vvv)
94639e9b0a7SSong Gao INSN_LSX(vavg_d,           vvv)
94739e9b0a7SSong Gao INSN_LSX(vavg_bu,          vvv)
94839e9b0a7SSong Gao INSN_LSX(vavg_hu,          vvv)
94939e9b0a7SSong Gao INSN_LSX(vavg_wu,          vvv)
95039e9b0a7SSong Gao INSN_LSX(vavg_du,          vvv)
95139e9b0a7SSong Gao INSN_LSX(vavgr_b,          vvv)
95239e9b0a7SSong Gao INSN_LSX(vavgr_h,          vvv)
95339e9b0a7SSong Gao INSN_LSX(vavgr_w,          vvv)
95439e9b0a7SSong Gao INSN_LSX(vavgr_d,          vvv)
95539e9b0a7SSong Gao INSN_LSX(vavgr_bu,         vvv)
95639e9b0a7SSong Gao INSN_LSX(vavgr_hu,         vvv)
95739e9b0a7SSong Gao INSN_LSX(vavgr_wu,         vvv)
95839e9b0a7SSong Gao INSN_LSX(vavgr_du,         vvv)
95949725659SSong Gao 
96049725659SSong Gao INSN_LSX(vabsd_b,          vvv)
96149725659SSong Gao INSN_LSX(vabsd_h,          vvv)
96249725659SSong Gao INSN_LSX(vabsd_w,          vvv)
96349725659SSong Gao INSN_LSX(vabsd_d,          vvv)
96449725659SSong Gao INSN_LSX(vabsd_bu,         vvv)
96549725659SSong Gao INSN_LSX(vabsd_hu,         vvv)
96649725659SSong Gao INSN_LSX(vabsd_wu,         vvv)
96749725659SSong Gao INSN_LSX(vabsd_du,         vvv)
968af448cb3SSong Gao 
969af448cb3SSong Gao INSN_LSX(vadda_b,          vvv)
970af448cb3SSong Gao INSN_LSX(vadda_h,          vvv)
971af448cb3SSong Gao INSN_LSX(vadda_w,          vvv)
972af448cb3SSong Gao INSN_LSX(vadda_d,          vvv)
9739ab29520SSong Gao 
9749ab29520SSong Gao INSN_LSX(vmax_b,           vvv)
9759ab29520SSong Gao INSN_LSX(vmax_h,           vvv)
9769ab29520SSong Gao INSN_LSX(vmax_w,           vvv)
9779ab29520SSong Gao INSN_LSX(vmax_d,           vvv)
9789ab29520SSong Gao INSN_LSX(vmin_b,           vvv)
9799ab29520SSong Gao INSN_LSX(vmin_h,           vvv)
9809ab29520SSong Gao INSN_LSX(vmin_w,           vvv)
9819ab29520SSong Gao INSN_LSX(vmin_d,           vvv)
9829ab29520SSong Gao INSN_LSX(vmax_bu,          vvv)
9839ab29520SSong Gao INSN_LSX(vmax_hu,          vvv)
9849ab29520SSong Gao INSN_LSX(vmax_wu,          vvv)
9859ab29520SSong Gao INSN_LSX(vmax_du,          vvv)
9869ab29520SSong Gao INSN_LSX(vmin_bu,          vvv)
9879ab29520SSong Gao INSN_LSX(vmin_hu,          vvv)
9889ab29520SSong Gao INSN_LSX(vmin_wu,          vvv)
9899ab29520SSong Gao INSN_LSX(vmin_du,          vvv)
9909ab29520SSong Gao INSN_LSX(vmaxi_b,          vv_i)
9919ab29520SSong Gao INSN_LSX(vmaxi_h,          vv_i)
9929ab29520SSong Gao INSN_LSX(vmaxi_w,          vv_i)
9939ab29520SSong Gao INSN_LSX(vmaxi_d,          vv_i)
9949ab29520SSong Gao INSN_LSX(vmini_b,          vv_i)
9959ab29520SSong Gao INSN_LSX(vmini_h,          vv_i)
9969ab29520SSong Gao INSN_LSX(vmini_w,          vv_i)
9979ab29520SSong Gao INSN_LSX(vmini_d,          vv_i)
9989ab29520SSong Gao INSN_LSX(vmaxi_bu,         vv_i)
9999ab29520SSong Gao INSN_LSX(vmaxi_hu,         vv_i)
10009ab29520SSong Gao INSN_LSX(vmaxi_wu,         vv_i)
10019ab29520SSong Gao INSN_LSX(vmaxi_du,         vv_i)
10029ab29520SSong Gao INSN_LSX(vmini_bu,         vv_i)
10039ab29520SSong Gao INSN_LSX(vmini_hu,         vv_i)
10049ab29520SSong Gao INSN_LSX(vmini_wu,         vv_i)
10059ab29520SSong Gao INSN_LSX(vmini_du,         vv_i)
1006cd1c49adSSong Gao 
1007cd1c49adSSong Gao INSN_LSX(vmul_b,           vvv)
1008cd1c49adSSong Gao INSN_LSX(vmul_h,           vvv)
1009cd1c49adSSong Gao INSN_LSX(vmul_w,           vvv)
1010cd1c49adSSong Gao INSN_LSX(vmul_d,           vvv)
1011cd1c49adSSong Gao INSN_LSX(vmuh_b,           vvv)
1012cd1c49adSSong Gao INSN_LSX(vmuh_h,           vvv)
1013cd1c49adSSong Gao INSN_LSX(vmuh_w,           vvv)
1014cd1c49adSSong Gao INSN_LSX(vmuh_d,           vvv)
1015cd1c49adSSong Gao INSN_LSX(vmuh_bu,          vvv)
1016cd1c49adSSong Gao INSN_LSX(vmuh_hu,          vvv)
1017cd1c49adSSong Gao INSN_LSX(vmuh_wu,          vvv)
1018cd1c49adSSong Gao INSN_LSX(vmuh_du,          vvv)
1019cd1c49adSSong Gao 
1020cd1c49adSSong Gao INSN_LSX(vmulwev_h_b,      vvv)
1021cd1c49adSSong Gao INSN_LSX(vmulwev_w_h,      vvv)
1022cd1c49adSSong Gao INSN_LSX(vmulwev_d_w,      vvv)
1023cd1c49adSSong Gao INSN_LSX(vmulwev_q_d,      vvv)
1024cd1c49adSSong Gao INSN_LSX(vmulwod_h_b,      vvv)
1025cd1c49adSSong Gao INSN_LSX(vmulwod_w_h,      vvv)
1026cd1c49adSSong Gao INSN_LSX(vmulwod_d_w,      vvv)
1027cd1c49adSSong Gao INSN_LSX(vmulwod_q_d,      vvv)
1028cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu,     vvv)
1029cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu,     vvv)
1030cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu,     vvv)
1031cd1c49adSSong Gao INSN_LSX(vmulwev_q_du,     vvv)
1032cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu,     vvv)
1033cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu,     vvv)
1034cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu,     vvv)
1035cd1c49adSSong Gao INSN_LSX(vmulwod_q_du,     vvv)
1036cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu_b,   vvv)
1037cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu_h,   vvv)
1038cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu_w,   vvv)
1039cd1c49adSSong Gao INSN_LSX(vmulwev_q_du_d,   vvv)
1040cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu_b,   vvv)
1041cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu_h,   vvv)
1042cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu_w,   vvv)
1043cd1c49adSSong Gao INSN_LSX(vmulwod_q_du_d,   vvv)
1044d3aec65bSSong Gao 
1045d3aec65bSSong Gao INSN_LSX(vmadd_b,          vvv)
1046d3aec65bSSong Gao INSN_LSX(vmadd_h,          vvv)
1047d3aec65bSSong Gao INSN_LSX(vmadd_w,          vvv)
1048d3aec65bSSong Gao INSN_LSX(vmadd_d,          vvv)
1049d3aec65bSSong Gao INSN_LSX(vmsub_b,          vvv)
1050d3aec65bSSong Gao INSN_LSX(vmsub_h,          vvv)
1051d3aec65bSSong Gao INSN_LSX(vmsub_w,          vvv)
1052d3aec65bSSong Gao INSN_LSX(vmsub_d,          vvv)
1053d3aec65bSSong Gao 
1054d3aec65bSSong Gao INSN_LSX(vmaddwev_h_b,     vvv)
1055d3aec65bSSong Gao INSN_LSX(vmaddwev_w_h,     vvv)
1056d3aec65bSSong Gao INSN_LSX(vmaddwev_d_w,     vvv)
1057d3aec65bSSong Gao INSN_LSX(vmaddwev_q_d,     vvv)
1058d3aec65bSSong Gao INSN_LSX(vmaddwod_h_b,     vvv)
1059d3aec65bSSong Gao INSN_LSX(vmaddwod_w_h,     vvv)
1060d3aec65bSSong Gao INSN_LSX(vmaddwod_d_w,     vvv)
1061d3aec65bSSong Gao INSN_LSX(vmaddwod_q_d,     vvv)
1062d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu,    vvv)
1063d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu,    vvv)
1064d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu,    vvv)
1065d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du,    vvv)
1066d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu,    vvv)
1067d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu,    vvv)
1068d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu,    vvv)
1069d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du,    vvv)
1070d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu_b,  vvv)
1071d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu_h,  vvv)
1072d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu_w,  vvv)
1073d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du_d,  vvv)
1074d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu_b,  vvv)
1075d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu_h,  vvv)
1076d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu_w,  vvv)
1077d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du_d,  vvv)
10784cc4c0f7SSong Gao 
10794cc4c0f7SSong Gao INSN_LSX(vdiv_b,           vvv)
10804cc4c0f7SSong Gao INSN_LSX(vdiv_h,           vvv)
10814cc4c0f7SSong Gao INSN_LSX(vdiv_w,           vvv)
10824cc4c0f7SSong Gao INSN_LSX(vdiv_d,           vvv)
10834cc4c0f7SSong Gao INSN_LSX(vdiv_bu,          vvv)
10844cc4c0f7SSong Gao INSN_LSX(vdiv_hu,          vvv)
10854cc4c0f7SSong Gao INSN_LSX(vdiv_wu,          vvv)
10864cc4c0f7SSong Gao INSN_LSX(vdiv_du,          vvv)
10874cc4c0f7SSong Gao INSN_LSX(vmod_b,           vvv)
10884cc4c0f7SSong Gao INSN_LSX(vmod_h,           vvv)
10894cc4c0f7SSong Gao INSN_LSX(vmod_w,           vvv)
10904cc4c0f7SSong Gao INSN_LSX(vmod_d,           vvv)
10914cc4c0f7SSong Gao INSN_LSX(vmod_bu,          vvv)
10924cc4c0f7SSong Gao INSN_LSX(vmod_hu,          vvv)
10934cc4c0f7SSong Gao INSN_LSX(vmod_wu,          vvv)
10944cc4c0f7SSong Gao INSN_LSX(vmod_du,          vvv)
1095cbe44190SSong Gao 
1096cbe44190SSong Gao INSN_LSX(vsat_b,           vv_i)
1097cbe44190SSong Gao INSN_LSX(vsat_h,           vv_i)
1098cbe44190SSong Gao INSN_LSX(vsat_w,           vv_i)
1099cbe44190SSong Gao INSN_LSX(vsat_d,           vv_i)
1100cbe44190SSong Gao INSN_LSX(vsat_bu,          vv_i)
1101cbe44190SSong Gao INSN_LSX(vsat_hu,          vv_i)
1102cbe44190SSong Gao INSN_LSX(vsat_wu,          vv_i)
1103cbe44190SSong Gao INSN_LSX(vsat_du,          vv_i)
11043734ad93SSong Gao 
11053734ad93SSong Gao INSN_LSX(vexth_h_b,        vv)
11063734ad93SSong Gao INSN_LSX(vexth_w_h,        vv)
11073734ad93SSong Gao INSN_LSX(vexth_d_w,        vv)
11083734ad93SSong Gao INSN_LSX(vexth_q_d,        vv)
11093734ad93SSong Gao INSN_LSX(vexth_hu_bu,      vv)
11103734ad93SSong Gao INSN_LSX(vexth_wu_hu,      vv)
11113734ad93SSong Gao INSN_LSX(vexth_du_wu,      vv)
11123734ad93SSong Gao INSN_LSX(vexth_qu_du,      vv)
1113f0e395dfSSong Gao 
1114f0e395dfSSong Gao INSN_LSX(vsigncov_b,       vvv)
1115f0e395dfSSong Gao INSN_LSX(vsigncov_h,       vvv)
1116f0e395dfSSong Gao INSN_LSX(vsigncov_w,       vvv)
1117f0e395dfSSong Gao INSN_LSX(vsigncov_d,       vvv)
1118789f4a4cSSong Gao 
1119789f4a4cSSong Gao INSN_LSX(vmskltz_b,        vv)
1120789f4a4cSSong Gao INSN_LSX(vmskltz_h,        vv)
1121789f4a4cSSong Gao INSN_LSX(vmskltz_w,        vv)
1122789f4a4cSSong Gao INSN_LSX(vmskltz_d,        vv)
1123789f4a4cSSong Gao INSN_LSX(vmskgez_b,        vv)
1124789f4a4cSSong Gao INSN_LSX(vmsknz_b,         vv)
1125f205a539SSong Gao 
1126f205a539SSong Gao INSN_LSX(vand_v,           vvv)
1127f205a539SSong Gao INSN_LSX(vor_v,            vvv)
1128f205a539SSong Gao INSN_LSX(vxor_v,           vvv)
1129f205a539SSong Gao INSN_LSX(vnor_v,           vvv)
1130f205a539SSong Gao INSN_LSX(vandn_v,          vvv)
1131f205a539SSong Gao INSN_LSX(vorn_v,           vvv)
1132f205a539SSong Gao 
1133f205a539SSong Gao INSN_LSX(vandi_b,          vv_i)
1134f205a539SSong Gao INSN_LSX(vori_b,           vv_i)
1135f205a539SSong Gao INSN_LSX(vxori_b,          vv_i)
1136f205a539SSong Gao INSN_LSX(vnori_b,          vv_i)
1137b281d696SSong Gao 
1138b281d696SSong Gao INSN_LSX(vsll_b,           vvv)
1139b281d696SSong Gao INSN_LSX(vsll_h,           vvv)
1140b281d696SSong Gao INSN_LSX(vsll_w,           vvv)
1141b281d696SSong Gao INSN_LSX(vsll_d,           vvv)
1142b281d696SSong Gao INSN_LSX(vslli_b,          vv_i)
1143b281d696SSong Gao INSN_LSX(vslli_h,          vv_i)
1144b281d696SSong Gao INSN_LSX(vslli_w,          vv_i)
1145b281d696SSong Gao INSN_LSX(vslli_d,          vv_i)
1146b281d696SSong Gao 
1147b281d696SSong Gao INSN_LSX(vsrl_b,           vvv)
1148b281d696SSong Gao INSN_LSX(vsrl_h,           vvv)
1149b281d696SSong Gao INSN_LSX(vsrl_w,           vvv)
1150b281d696SSong Gao INSN_LSX(vsrl_d,           vvv)
1151b281d696SSong Gao INSN_LSX(vsrli_b,          vv_i)
1152b281d696SSong Gao INSN_LSX(vsrli_h,          vv_i)
1153b281d696SSong Gao INSN_LSX(vsrli_w,          vv_i)
1154b281d696SSong Gao INSN_LSX(vsrli_d,          vv_i)
1155b281d696SSong Gao 
1156b281d696SSong Gao INSN_LSX(vsra_b,           vvv)
1157b281d696SSong Gao INSN_LSX(vsra_h,           vvv)
1158b281d696SSong Gao INSN_LSX(vsra_w,           vvv)
1159b281d696SSong Gao INSN_LSX(vsra_d,           vvv)
1160b281d696SSong Gao INSN_LSX(vsrai_b,          vv_i)
1161b281d696SSong Gao INSN_LSX(vsrai_h,          vv_i)
1162b281d696SSong Gao INSN_LSX(vsrai_w,          vv_i)
1163b281d696SSong Gao INSN_LSX(vsrai_d,          vv_i)
1164b281d696SSong Gao 
1165b281d696SSong Gao INSN_LSX(vrotr_b,          vvv)
1166b281d696SSong Gao INSN_LSX(vrotr_h,          vvv)
1167b281d696SSong Gao INSN_LSX(vrotr_w,          vvv)
1168b281d696SSong Gao INSN_LSX(vrotr_d,          vvv)
1169b281d696SSong Gao INSN_LSX(vrotri_b,         vv_i)
1170b281d696SSong Gao INSN_LSX(vrotri_h,         vv_i)
1171b281d696SSong Gao INSN_LSX(vrotri_w,         vv_i)
1172b281d696SSong Gao INSN_LSX(vrotri_d,         vv_i)
11739b21a7a5SSong Gao 
11749b21a7a5SSong Gao INSN_LSX(vsllwil_h_b,      vv_i)
11759b21a7a5SSong Gao INSN_LSX(vsllwil_w_h,      vv_i)
11769b21a7a5SSong Gao INSN_LSX(vsllwil_d_w,      vv_i)
11779b21a7a5SSong Gao INSN_LSX(vextl_q_d,        vv)
11789b21a7a5SSong Gao INSN_LSX(vsllwil_hu_bu,    vv_i)
11799b21a7a5SSong Gao INSN_LSX(vsllwil_wu_hu,    vv_i)
11809b21a7a5SSong Gao INSN_LSX(vsllwil_du_wu,    vv_i)
11819b21a7a5SSong Gao INSN_LSX(vextl_qu_du,      vv)
1182ecb93716SSong Gao 
1183ecb93716SSong Gao INSN_LSX(vsrlr_b,          vvv)
1184ecb93716SSong Gao INSN_LSX(vsrlr_h,          vvv)
1185ecb93716SSong Gao INSN_LSX(vsrlr_w,          vvv)
1186ecb93716SSong Gao INSN_LSX(vsrlr_d,          vvv)
1187ecb93716SSong Gao INSN_LSX(vsrlri_b,         vv_i)
1188ecb93716SSong Gao INSN_LSX(vsrlri_h,         vv_i)
1189ecb93716SSong Gao INSN_LSX(vsrlri_w,         vv_i)
1190ecb93716SSong Gao INSN_LSX(vsrlri_d,         vv_i)
1191ecb93716SSong Gao 
1192ecb93716SSong Gao INSN_LSX(vsrar_b,          vvv)
1193ecb93716SSong Gao INSN_LSX(vsrar_h,          vvv)
1194ecb93716SSong Gao INSN_LSX(vsrar_w,          vvv)
1195ecb93716SSong Gao INSN_LSX(vsrar_d,          vvv)
1196ecb93716SSong Gao INSN_LSX(vsrari_b,         vv_i)
1197ecb93716SSong Gao INSN_LSX(vsrari_h,         vv_i)
1198ecb93716SSong Gao INSN_LSX(vsrari_w,         vv_i)
1199ecb93716SSong Gao INSN_LSX(vsrari_d,         vv_i)
1200d79fb8ddSSong Gao 
1201d79fb8ddSSong Gao INSN_LSX(vsrln_b_h,       vvv)
1202d79fb8ddSSong Gao INSN_LSX(vsrln_h_w,       vvv)
1203d79fb8ddSSong Gao INSN_LSX(vsrln_w_d,       vvv)
1204d79fb8ddSSong Gao INSN_LSX(vsran_b_h,       vvv)
1205d79fb8ddSSong Gao INSN_LSX(vsran_h_w,       vvv)
1206d79fb8ddSSong Gao INSN_LSX(vsran_w_d,       vvv)
1207d79fb8ddSSong Gao 
1208d79fb8ddSSong Gao INSN_LSX(vsrlni_b_h,       vv_i)
1209d79fb8ddSSong Gao INSN_LSX(vsrlni_h_w,       vv_i)
1210d79fb8ddSSong Gao INSN_LSX(vsrlni_w_d,       vv_i)
1211d79fb8ddSSong Gao INSN_LSX(vsrlni_d_q,       vv_i)
1212d79fb8ddSSong Gao INSN_LSX(vsrani_b_h,       vv_i)
1213d79fb8ddSSong Gao INSN_LSX(vsrani_h_w,       vv_i)
1214d79fb8ddSSong Gao INSN_LSX(vsrani_w_d,       vv_i)
1215d79fb8ddSSong Gao INSN_LSX(vsrani_d_q,       vv_i)
1216a5200a17SSong Gao 
1217a5200a17SSong Gao INSN_LSX(vsrlrn_b_h,       vvv)
1218a5200a17SSong Gao INSN_LSX(vsrlrn_h_w,       vvv)
1219a5200a17SSong Gao INSN_LSX(vsrlrn_w_d,       vvv)
1220a5200a17SSong Gao INSN_LSX(vsrarn_b_h,       vvv)
1221a5200a17SSong Gao INSN_LSX(vsrarn_h_w,       vvv)
1222a5200a17SSong Gao INSN_LSX(vsrarn_w_d,       vvv)
1223a5200a17SSong Gao 
1224a5200a17SSong Gao INSN_LSX(vsrlrni_b_h,      vv_i)
1225a5200a17SSong Gao INSN_LSX(vsrlrni_h_w,      vv_i)
1226a5200a17SSong Gao INSN_LSX(vsrlrni_w_d,      vv_i)
1227a5200a17SSong Gao INSN_LSX(vsrlrni_d_q,      vv_i)
1228a5200a17SSong Gao INSN_LSX(vsrarni_b_h,      vv_i)
1229a5200a17SSong Gao INSN_LSX(vsrarni_h_w,      vv_i)
1230a5200a17SSong Gao INSN_LSX(vsrarni_w_d,      vv_i)
1231a5200a17SSong Gao INSN_LSX(vsrarni_d_q,      vv_i)
123283b3815dSSong Gao 
123383b3815dSSong Gao INSN_LSX(vssrln_b_h,       vvv)
123483b3815dSSong Gao INSN_LSX(vssrln_h_w,       vvv)
123583b3815dSSong Gao INSN_LSX(vssrln_w_d,       vvv)
123683b3815dSSong Gao INSN_LSX(vssran_b_h,       vvv)
123783b3815dSSong Gao INSN_LSX(vssran_h_w,       vvv)
123883b3815dSSong Gao INSN_LSX(vssran_w_d,       vvv)
123983b3815dSSong Gao INSN_LSX(vssrln_bu_h,      vvv)
124083b3815dSSong Gao INSN_LSX(vssrln_hu_w,      vvv)
124183b3815dSSong Gao INSN_LSX(vssrln_wu_d,      vvv)
124283b3815dSSong Gao INSN_LSX(vssran_bu_h,      vvv)
124383b3815dSSong Gao INSN_LSX(vssran_hu_w,      vvv)
124483b3815dSSong Gao INSN_LSX(vssran_wu_d,      vvv)
124583b3815dSSong Gao 
124683b3815dSSong Gao INSN_LSX(vssrlni_b_h,      vv_i)
124783b3815dSSong Gao INSN_LSX(vssrlni_h_w,      vv_i)
124883b3815dSSong Gao INSN_LSX(vssrlni_w_d,      vv_i)
124983b3815dSSong Gao INSN_LSX(vssrlni_d_q,      vv_i)
125083b3815dSSong Gao INSN_LSX(vssrani_b_h,      vv_i)
125183b3815dSSong Gao INSN_LSX(vssrani_h_w,      vv_i)
125283b3815dSSong Gao INSN_LSX(vssrani_w_d,      vv_i)
125383b3815dSSong Gao INSN_LSX(vssrani_d_q,      vv_i)
125483b3815dSSong Gao INSN_LSX(vssrlni_bu_h,     vv_i)
125583b3815dSSong Gao INSN_LSX(vssrlni_hu_w,     vv_i)
125683b3815dSSong Gao INSN_LSX(vssrlni_wu_d,     vv_i)
125783b3815dSSong Gao INSN_LSX(vssrlni_du_q,     vv_i)
125883b3815dSSong Gao INSN_LSX(vssrani_bu_h,     vv_i)
125983b3815dSSong Gao INSN_LSX(vssrani_hu_w,     vv_i)
126083b3815dSSong Gao INSN_LSX(vssrani_wu_d,     vv_i)
126183b3815dSSong Gao INSN_LSX(vssrani_du_q,     vv_i)
1262162cd32cSSong Gao 
1263162cd32cSSong Gao INSN_LSX(vssrlrn_b_h,      vvv)
1264162cd32cSSong Gao INSN_LSX(vssrlrn_h_w,      vvv)
1265162cd32cSSong Gao INSN_LSX(vssrlrn_w_d,      vvv)
1266162cd32cSSong Gao INSN_LSX(vssrarn_b_h,      vvv)
1267162cd32cSSong Gao INSN_LSX(vssrarn_h_w,      vvv)
1268162cd32cSSong Gao INSN_LSX(vssrarn_w_d,      vvv)
1269162cd32cSSong Gao INSN_LSX(vssrlrn_bu_h,     vvv)
1270162cd32cSSong Gao INSN_LSX(vssrlrn_hu_w,     vvv)
1271162cd32cSSong Gao INSN_LSX(vssrlrn_wu_d,     vvv)
1272162cd32cSSong Gao INSN_LSX(vssrarn_bu_h,     vvv)
1273162cd32cSSong Gao INSN_LSX(vssrarn_hu_w,     vvv)
1274162cd32cSSong Gao INSN_LSX(vssrarn_wu_d,     vvv)
1275162cd32cSSong Gao 
1276162cd32cSSong Gao INSN_LSX(vssrlrni_b_h,     vv_i)
1277162cd32cSSong Gao INSN_LSX(vssrlrni_h_w,     vv_i)
1278162cd32cSSong Gao INSN_LSX(vssrlrni_w_d,     vv_i)
1279162cd32cSSong Gao INSN_LSX(vssrlrni_d_q,     vv_i)
1280162cd32cSSong Gao INSN_LSX(vssrlrni_bu_h,    vv_i)
1281162cd32cSSong Gao INSN_LSX(vssrlrni_hu_w,    vv_i)
1282162cd32cSSong Gao INSN_LSX(vssrlrni_wu_d,    vv_i)
1283162cd32cSSong Gao INSN_LSX(vssrlrni_du_q,    vv_i)
1284162cd32cSSong Gao INSN_LSX(vssrarni_b_h,     vv_i)
1285162cd32cSSong Gao INSN_LSX(vssrarni_h_w,     vv_i)
1286162cd32cSSong Gao INSN_LSX(vssrarni_w_d,     vv_i)
1287162cd32cSSong Gao INSN_LSX(vssrarni_d_q,     vv_i)
1288162cd32cSSong Gao INSN_LSX(vssrarni_bu_h,    vv_i)
1289162cd32cSSong Gao INSN_LSX(vssrarni_hu_w,    vv_i)
1290162cd32cSSong Gao INSN_LSX(vssrarni_wu_d,    vv_i)
1291162cd32cSSong Gao INSN_LSX(vssrarni_du_q,    vv_i)
12922e105e12SSong Gao 
12932e105e12SSong Gao INSN_LSX(vclo_b,           vv)
12942e105e12SSong Gao INSN_LSX(vclo_h,           vv)
12952e105e12SSong Gao INSN_LSX(vclo_w,           vv)
12962e105e12SSong Gao INSN_LSX(vclo_d,           vv)
12972e105e12SSong Gao INSN_LSX(vclz_b,           vv)
12982e105e12SSong Gao INSN_LSX(vclz_h,           vv)
12992e105e12SSong Gao INSN_LSX(vclz_w,           vv)
13002e105e12SSong Gao INSN_LSX(vclz_d,           vv)
1301bb22ee57SSong Gao 
1302bb22ee57SSong Gao INSN_LSX(vpcnt_b,          vv)
1303bb22ee57SSong Gao INSN_LSX(vpcnt_h,          vv)
1304bb22ee57SSong Gao INSN_LSX(vpcnt_w,          vv)
1305bb22ee57SSong Gao INSN_LSX(vpcnt_d,          vv)
13060b1e6705SSong Gao 
13070b1e6705SSong Gao INSN_LSX(vbitclr_b,        vvv)
13080b1e6705SSong Gao INSN_LSX(vbitclr_h,        vvv)
13090b1e6705SSong Gao INSN_LSX(vbitclr_w,        vvv)
13100b1e6705SSong Gao INSN_LSX(vbitclr_d,        vvv)
13110b1e6705SSong Gao INSN_LSX(vbitclri_b,       vv_i)
13120b1e6705SSong Gao INSN_LSX(vbitclri_h,       vv_i)
13130b1e6705SSong Gao INSN_LSX(vbitclri_w,       vv_i)
13140b1e6705SSong Gao INSN_LSX(vbitclri_d,       vv_i)
13150b1e6705SSong Gao INSN_LSX(vbitset_b,        vvv)
13160b1e6705SSong Gao INSN_LSX(vbitset_h,        vvv)
13170b1e6705SSong Gao INSN_LSX(vbitset_w,        vvv)
13180b1e6705SSong Gao INSN_LSX(vbitset_d,        vvv)
13190b1e6705SSong Gao INSN_LSX(vbitseti_b,       vv_i)
13200b1e6705SSong Gao INSN_LSX(vbitseti_h,       vv_i)
13210b1e6705SSong Gao INSN_LSX(vbitseti_w,       vv_i)
13220b1e6705SSong Gao INSN_LSX(vbitseti_d,       vv_i)
13230b1e6705SSong Gao INSN_LSX(vbitrev_b,        vvv)
13240b1e6705SSong Gao INSN_LSX(vbitrev_h,        vvv)
13250b1e6705SSong Gao INSN_LSX(vbitrev_w,        vvv)
13260b1e6705SSong Gao INSN_LSX(vbitrev_d,        vvv)
13270b1e6705SSong Gao INSN_LSX(vbitrevi_b,       vv_i)
13280b1e6705SSong Gao INSN_LSX(vbitrevi_h,       vv_i)
13290b1e6705SSong Gao INSN_LSX(vbitrevi_w,       vv_i)
13300b1e6705SSong Gao INSN_LSX(vbitrevi_d,       vv_i)
1331ac95a0b9SSong Gao 
1332ac95a0b9SSong Gao INSN_LSX(vfrstp_b,         vvv)
1333ac95a0b9SSong Gao INSN_LSX(vfrstp_h,         vvv)
1334ac95a0b9SSong Gao INSN_LSX(vfrstpi_b,        vv_i)
1335ac95a0b9SSong Gao INSN_LSX(vfrstpi_h,        vv_i)
1336aca67472SSong Gao 
1337aca67472SSong Gao INSN_LSX(vfadd_s,          vvv)
1338aca67472SSong Gao INSN_LSX(vfadd_d,          vvv)
1339aca67472SSong Gao INSN_LSX(vfsub_s,          vvv)
1340aca67472SSong Gao INSN_LSX(vfsub_d,          vvv)
1341aca67472SSong Gao INSN_LSX(vfmul_s,          vvv)
1342aca67472SSong Gao INSN_LSX(vfmul_d,          vvv)
1343aca67472SSong Gao INSN_LSX(vfdiv_s,          vvv)
1344aca67472SSong Gao INSN_LSX(vfdiv_d,          vvv)
1345aca67472SSong Gao 
1346aca67472SSong Gao INSN_LSX(vfmadd_s,         vvvv)
1347aca67472SSong Gao INSN_LSX(vfmadd_d,         vvvv)
1348aca67472SSong Gao INSN_LSX(vfmsub_s,         vvvv)
1349aca67472SSong Gao INSN_LSX(vfmsub_d,         vvvv)
1350aca67472SSong Gao INSN_LSX(vfnmadd_s,        vvvv)
1351aca67472SSong Gao INSN_LSX(vfnmadd_d,        vvvv)
1352aca67472SSong Gao INSN_LSX(vfnmsub_s,        vvvv)
1353aca67472SSong Gao INSN_LSX(vfnmsub_d,        vvvv)
1354aca67472SSong Gao 
1355aca67472SSong Gao INSN_LSX(vfmax_s,          vvv)
1356aca67472SSong Gao INSN_LSX(vfmax_d,          vvv)
1357aca67472SSong Gao INSN_LSX(vfmin_s,          vvv)
1358aca67472SSong Gao INSN_LSX(vfmin_d,          vvv)
1359aca67472SSong Gao 
1360aca67472SSong Gao INSN_LSX(vfmaxa_s,         vvv)
1361aca67472SSong Gao INSN_LSX(vfmaxa_d,         vvv)
1362aca67472SSong Gao INSN_LSX(vfmina_s,         vvv)
1363aca67472SSong Gao INSN_LSX(vfmina_d,         vvv)
1364aca67472SSong Gao 
1365aca67472SSong Gao INSN_LSX(vflogb_s,         vv)
1366aca67472SSong Gao INSN_LSX(vflogb_d,         vv)
1367aca67472SSong Gao 
1368aca67472SSong Gao INSN_LSX(vfclass_s,        vv)
1369aca67472SSong Gao INSN_LSX(vfclass_d,        vv)
1370aca67472SSong Gao 
1371aca67472SSong Gao INSN_LSX(vfsqrt_s,         vv)
1372aca67472SSong Gao INSN_LSX(vfsqrt_d,         vv)
1373aca67472SSong Gao INSN_LSX(vfrecip_s,        vv)
1374aca67472SSong Gao INSN_LSX(vfrecip_d,        vv)
1375aca67472SSong Gao INSN_LSX(vfrsqrt_s,        vv)
1376aca67472SSong Gao INSN_LSX(vfrsqrt_d,        vv)
1377399665d2SSong Gao 
1378399665d2SSong Gao INSN_LSX(vfcvtl_s_h,       vv)
1379399665d2SSong Gao INSN_LSX(vfcvth_s_h,       vv)
1380399665d2SSong Gao INSN_LSX(vfcvtl_d_s,       vv)
1381399665d2SSong Gao INSN_LSX(vfcvth_d_s,       vv)
1382399665d2SSong Gao INSN_LSX(vfcvt_h_s,        vvv)
1383399665d2SSong Gao INSN_LSX(vfcvt_s_d,        vvv)
1384399665d2SSong Gao 
1385399665d2SSong Gao INSN_LSX(vfrint_s,         vv)
1386399665d2SSong Gao INSN_LSX(vfrint_d,         vv)
1387399665d2SSong Gao INSN_LSX(vfrintrm_s,       vv)
1388399665d2SSong Gao INSN_LSX(vfrintrm_d,       vv)
1389399665d2SSong Gao INSN_LSX(vfrintrp_s,       vv)
1390399665d2SSong Gao INSN_LSX(vfrintrp_d,       vv)
1391399665d2SSong Gao INSN_LSX(vfrintrz_s,       vv)
1392399665d2SSong Gao INSN_LSX(vfrintrz_d,       vv)
1393399665d2SSong Gao INSN_LSX(vfrintrne_s,      vv)
1394399665d2SSong Gao INSN_LSX(vfrintrne_d,      vv)
1395399665d2SSong Gao 
1396399665d2SSong Gao INSN_LSX(vftint_w_s,       vv)
1397399665d2SSong Gao INSN_LSX(vftint_l_d,       vv)
1398399665d2SSong Gao INSN_LSX(vftintrm_w_s,     vv)
1399399665d2SSong Gao INSN_LSX(vftintrm_l_d,     vv)
1400399665d2SSong Gao INSN_LSX(vftintrp_w_s,     vv)
1401399665d2SSong Gao INSN_LSX(vftintrp_l_d,     vv)
1402399665d2SSong Gao INSN_LSX(vftintrz_w_s,     vv)
1403399665d2SSong Gao INSN_LSX(vftintrz_l_d,     vv)
1404399665d2SSong Gao INSN_LSX(vftintrne_w_s,    vv)
1405399665d2SSong Gao INSN_LSX(vftintrne_l_d,    vv)
1406399665d2SSong Gao INSN_LSX(vftint_wu_s,      vv)
1407399665d2SSong Gao INSN_LSX(vftint_lu_d,      vv)
1408399665d2SSong Gao INSN_LSX(vftintrz_wu_s,    vv)
1409399665d2SSong Gao INSN_LSX(vftintrz_lu_d,    vv)
1410399665d2SSong Gao INSN_LSX(vftint_w_d,       vvv)
1411399665d2SSong Gao INSN_LSX(vftintrm_w_d,     vvv)
1412399665d2SSong Gao INSN_LSX(vftintrp_w_d,     vvv)
1413399665d2SSong Gao INSN_LSX(vftintrz_w_d,     vvv)
1414399665d2SSong Gao INSN_LSX(vftintrne_w_d,    vvv)
1415399665d2SSong Gao INSN_LSX(vftintl_l_s,      vv)
1416399665d2SSong Gao INSN_LSX(vftinth_l_s,      vv)
1417399665d2SSong Gao INSN_LSX(vftintrml_l_s,    vv)
1418399665d2SSong Gao INSN_LSX(vftintrmh_l_s,    vv)
1419399665d2SSong Gao INSN_LSX(vftintrpl_l_s,    vv)
1420399665d2SSong Gao INSN_LSX(vftintrph_l_s,    vv)
1421399665d2SSong Gao INSN_LSX(vftintrzl_l_s,    vv)
1422399665d2SSong Gao INSN_LSX(vftintrzh_l_s,    vv)
1423399665d2SSong Gao INSN_LSX(vftintrnel_l_s,   vv)
1424399665d2SSong Gao INSN_LSX(vftintrneh_l_s,   vv)
1425399665d2SSong Gao 
1426399665d2SSong Gao INSN_LSX(vffint_s_w,       vv)
1427399665d2SSong Gao INSN_LSX(vffint_s_wu,      vv)
1428399665d2SSong Gao INSN_LSX(vffint_d_l,       vv)
1429399665d2SSong Gao INSN_LSX(vffint_d_lu,      vv)
1430399665d2SSong Gao INSN_LSX(vffintl_d_w,      vv)
1431399665d2SSong Gao INSN_LSX(vffinth_d_w,      vv)
1432399665d2SSong Gao INSN_LSX(vffint_s_l,       vvv)
1433f435e1e5SSong Gao 
1434f435e1e5SSong Gao INSN_LSX(vseq_b,           vvv)
1435f435e1e5SSong Gao INSN_LSX(vseq_h,           vvv)
1436f435e1e5SSong Gao INSN_LSX(vseq_w,           vvv)
1437f435e1e5SSong Gao INSN_LSX(vseq_d,           vvv)
1438f435e1e5SSong Gao INSN_LSX(vseqi_b,          vv_i)
1439f435e1e5SSong Gao INSN_LSX(vseqi_h,          vv_i)
1440f435e1e5SSong Gao INSN_LSX(vseqi_w,          vv_i)
1441f435e1e5SSong Gao INSN_LSX(vseqi_d,          vv_i)
1442f435e1e5SSong Gao 
1443f435e1e5SSong Gao INSN_LSX(vsle_b,           vvv)
1444f435e1e5SSong Gao INSN_LSX(vsle_h,           vvv)
1445f435e1e5SSong Gao INSN_LSX(vsle_w,           vvv)
1446f435e1e5SSong Gao INSN_LSX(vsle_d,           vvv)
1447f435e1e5SSong Gao INSN_LSX(vslei_b,          vv_i)
1448f435e1e5SSong Gao INSN_LSX(vslei_h,          vv_i)
1449f435e1e5SSong Gao INSN_LSX(vslei_w,          vv_i)
1450f435e1e5SSong Gao INSN_LSX(vslei_d,          vv_i)
1451f435e1e5SSong Gao INSN_LSX(vsle_bu,          vvv)
1452f435e1e5SSong Gao INSN_LSX(vsle_hu,          vvv)
1453f435e1e5SSong Gao INSN_LSX(vsle_wu,          vvv)
1454f435e1e5SSong Gao INSN_LSX(vsle_du,          vvv)
1455f435e1e5SSong Gao INSN_LSX(vslei_bu,         vv_i)
1456f435e1e5SSong Gao INSN_LSX(vslei_hu,         vv_i)
1457f435e1e5SSong Gao INSN_LSX(vslei_wu,         vv_i)
1458f435e1e5SSong Gao INSN_LSX(vslei_du,         vv_i)
1459f435e1e5SSong Gao 
1460f435e1e5SSong Gao INSN_LSX(vslt_b,           vvv)
1461f435e1e5SSong Gao INSN_LSX(vslt_h,           vvv)
1462f435e1e5SSong Gao INSN_LSX(vslt_w,           vvv)
1463f435e1e5SSong Gao INSN_LSX(vslt_d,           vvv)
1464f435e1e5SSong Gao INSN_LSX(vslti_b,          vv_i)
1465f435e1e5SSong Gao INSN_LSX(vslti_h,          vv_i)
1466f435e1e5SSong Gao INSN_LSX(vslti_w,          vv_i)
1467f435e1e5SSong Gao INSN_LSX(vslti_d,          vv_i)
1468f435e1e5SSong Gao INSN_LSX(vslt_bu,          vvv)
1469f435e1e5SSong Gao INSN_LSX(vslt_hu,          vvv)
1470f435e1e5SSong Gao INSN_LSX(vslt_wu,          vvv)
1471f435e1e5SSong Gao INSN_LSX(vslt_du,          vvv)
1472f435e1e5SSong Gao INSN_LSX(vslti_bu,         vv_i)
1473f435e1e5SSong Gao INSN_LSX(vslti_hu,         vv_i)
1474f435e1e5SSong Gao INSN_LSX(vslti_wu,         vv_i)
1475f435e1e5SSong Gao INSN_LSX(vslti_du,         vv_i)
1476386c4e86SSong Gao 
1477386c4e86SSong Gao #define output_vfcmp(C, PREFIX, SUFFIX)                                     \
1478386c4e86SSong Gao {                                                                           \
1479386c4e86SSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %s%s\t%d, f%d, f%d", \
1480386c4e86SSong Gao                             (C)->insn, PREFIX, SUFFIX, a->vd,               \
1481386c4e86SSong Gao                             a->vj, a->vk);                                  \
1482386c4e86SSong Gao }
1483386c4e86SSong Gao 
1484386c4e86SSong Gao static bool output_vvv_fcond(DisasContext *ctx, arg_vvv_fcond * a,
1485386c4e86SSong Gao                              const char *suffix)
1486386c4e86SSong Gao {
1487386c4e86SSong Gao     bool ret = true;
1488386c4e86SSong Gao     switch (a->fcond) {
1489386c4e86SSong Gao     case 0x0:
1490386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_caf_", suffix);
1491386c4e86SSong Gao         break;
1492386c4e86SSong Gao     case 0x1:
1493386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_saf_", suffix);
1494386c4e86SSong Gao         break;
1495386c4e86SSong Gao     case 0x2:
1496386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_clt_", suffix);
1497386c4e86SSong Gao         break;
1498386c4e86SSong Gao     case 0x3:
1499386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_slt_", suffix);
1500386c4e86SSong Gao         break;
1501386c4e86SSong Gao     case 0x4:
1502386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_ceq_", suffix);
1503386c4e86SSong Gao         break;
1504386c4e86SSong Gao     case 0x5:
1505386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_seq_", suffix);
1506386c4e86SSong Gao         break;
1507386c4e86SSong Gao     case 0x6:
1508386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cle_", suffix);
1509386c4e86SSong Gao         break;
1510386c4e86SSong Gao     case 0x7:
1511386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sle_", suffix);
1512386c4e86SSong Gao         break;
1513386c4e86SSong Gao     case 0x8:
1514386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cun_", suffix);
1515386c4e86SSong Gao         break;
1516386c4e86SSong Gao     case 0x9:
1517386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sun_", suffix);
1518386c4e86SSong Gao         break;
1519386c4e86SSong Gao     case 0xA:
1520386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cult_", suffix);
1521386c4e86SSong Gao         break;
1522386c4e86SSong Gao     case 0xB:
1523386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sult_", suffix);
1524386c4e86SSong Gao         break;
1525386c4e86SSong Gao     case 0xC:
1526386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cueq_", suffix);
1527386c4e86SSong Gao         break;
1528386c4e86SSong Gao     case 0xD:
1529386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sueq_", suffix);
1530386c4e86SSong Gao         break;
1531386c4e86SSong Gao     case 0xE:
1532386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cule_", suffix);
1533386c4e86SSong Gao         break;
1534386c4e86SSong Gao     case 0xF:
1535386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sule_", suffix);
1536386c4e86SSong Gao         break;
1537386c4e86SSong Gao     case 0x10:
1538386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cne_", suffix);
1539386c4e86SSong Gao         break;
1540386c4e86SSong Gao     case 0x11:
1541386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sne_", suffix);
1542386c4e86SSong Gao         break;
1543386c4e86SSong Gao     case 0x14:
1544386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cor_", suffix);
1545386c4e86SSong Gao         break;
1546386c4e86SSong Gao     case 0x15:
1547386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sor_", suffix);
1548386c4e86SSong Gao         break;
1549386c4e86SSong Gao     case 0x18:
1550386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cune_", suffix);
1551386c4e86SSong Gao         break;
1552386c4e86SSong Gao     case 0x19:
1553386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sune_", suffix);
1554386c4e86SSong Gao         break;
1555386c4e86SSong Gao     default:
1556386c4e86SSong Gao         ret = false;
1557386c4e86SSong Gao     }
1558386c4e86SSong Gao     return ret;
1559386c4e86SSong Gao }
1560386c4e86SSong Gao 
1561386c4e86SSong Gao #define LSX_FCMP_INSN(suffix)                            \
1562386c4e86SSong Gao static bool trans_vfcmp_cond_##suffix(DisasContext *ctx, \
1563386c4e86SSong Gao                                      arg_vvv_fcond * a)  \
1564386c4e86SSong Gao {                                                        \
1565386c4e86SSong Gao     return output_vvv_fcond(ctx, a, #suffix);            \
1566386c4e86SSong Gao }
1567386c4e86SSong Gao 
1568386c4e86SSong Gao LSX_FCMP_INSN(s)
1569386c4e86SSong Gao LSX_FCMP_INSN(d)
1570d0dfa19aSSong Gao 
1571d0dfa19aSSong Gao INSN_LSX(vbitsel_v,        vvvv)
1572d0dfa19aSSong Gao INSN_LSX(vbitseli_b,       vv_i)
1573d0dfa19aSSong Gao 
1574d0dfa19aSSong Gao INSN_LSX(vseteqz_v,        cv)
1575d0dfa19aSSong Gao INSN_LSX(vsetnez_v,        cv)
1576d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_b,     cv)
1577d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_h,     cv)
1578d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_w,     cv)
1579d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_d,     cv)
1580d0dfa19aSSong Gao INSN_LSX(vsetallnez_b,     cv)
1581d0dfa19aSSong Gao INSN_LSX(vsetallnez_h,     cv)
1582d0dfa19aSSong Gao INSN_LSX(vsetallnez_w,     cv)
1583d0dfa19aSSong Gao INSN_LSX(vsetallnez_d,     cv)
1584cdbdefbfSSong Gao 
1585cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_b,      vr_i)
1586cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_h,      vr_i)
1587cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_w,      vr_i)
1588cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_d,      vr_i)
1589cdbdefbfSSong Gao INSN_LSX(vpickve2gr_b,     rv_i)
1590cdbdefbfSSong Gao INSN_LSX(vpickve2gr_h,     rv_i)
1591cdbdefbfSSong Gao INSN_LSX(vpickve2gr_w,     rv_i)
1592cdbdefbfSSong Gao INSN_LSX(vpickve2gr_d,     rv_i)
1593cdbdefbfSSong Gao INSN_LSX(vpickve2gr_bu,    rv_i)
1594cdbdefbfSSong Gao INSN_LSX(vpickve2gr_hu,    rv_i)
1595cdbdefbfSSong Gao INSN_LSX(vpickve2gr_wu,    rv_i)
1596cdbdefbfSSong Gao INSN_LSX(vpickve2gr_du,    rv_i)
1597cdbdefbfSSong Gao 
1598cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_b,     vr)
1599cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_h,     vr)
1600cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_w,     vr)
1601cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_d,     vr)
1602*d5e5563cSSong Gao 
1603*d5e5563cSSong Gao INSN_LSX(vreplve_b,        vvr)
1604*d5e5563cSSong Gao INSN_LSX(vreplve_h,        vvr)
1605*d5e5563cSSong Gao INSN_LSX(vreplve_w,        vvr)
1606*d5e5563cSSong Gao INSN_LSX(vreplve_d,        vvr)
1607*d5e5563cSSong Gao INSN_LSX(vreplvei_b,       vv_i)
1608*d5e5563cSSong Gao INSN_LSX(vreplvei_h,       vv_i)
1609*d5e5563cSSong Gao INSN_LSX(vreplvei_w,       vv_i)
1610*d5e5563cSSong Gao INSN_LSX(vreplvei_d,       vv_i)
1611*d5e5563cSSong Gao 
1612*d5e5563cSSong Gao INSN_LSX(vbsll_v,          vv_i)
1613*d5e5563cSSong Gao INSN_LSX(vbsrl_v,          vv_i)
1614*d5e5563cSSong Gao 
1615*d5e5563cSSong Gao INSN_LSX(vpackev_b,        vvv)
1616*d5e5563cSSong Gao INSN_LSX(vpackev_h,        vvv)
1617*d5e5563cSSong Gao INSN_LSX(vpackev_w,        vvv)
1618*d5e5563cSSong Gao INSN_LSX(vpackev_d,        vvv)
1619*d5e5563cSSong Gao INSN_LSX(vpackod_b,        vvv)
1620*d5e5563cSSong Gao INSN_LSX(vpackod_h,        vvv)
1621*d5e5563cSSong Gao INSN_LSX(vpackod_w,        vvv)
1622*d5e5563cSSong Gao INSN_LSX(vpackod_d,        vvv)
1623*d5e5563cSSong Gao 
1624*d5e5563cSSong Gao INSN_LSX(vpickev_b,        vvv)
1625*d5e5563cSSong Gao INSN_LSX(vpickev_h,        vvv)
1626*d5e5563cSSong Gao INSN_LSX(vpickev_w,        vvv)
1627*d5e5563cSSong Gao INSN_LSX(vpickev_d,        vvv)
1628*d5e5563cSSong Gao INSN_LSX(vpickod_b,        vvv)
1629*d5e5563cSSong Gao INSN_LSX(vpickod_h,        vvv)
1630*d5e5563cSSong Gao INSN_LSX(vpickod_w,        vvv)
1631*d5e5563cSSong Gao INSN_LSX(vpickod_d,        vvv)
1632