xref: /openbmc/qemu/target/loongarch/disas.c (revision b281d696)
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 
79557b4f1acSSong Gao static void output_vvv(DisasContext *ctx, arg_vvv *a, const char *mnemonic)
79657b4f1acSSong Gao {
79757b4f1acSSong Gao     output(ctx, mnemonic, "v%d, v%d, v%d", a->vd, a->vj, a->vk);
79857b4f1acSSong Gao }
79957b4f1acSSong Gao 
800d8be64c1SSong Gao static void output_vv_i(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
801d8be64c1SSong Gao {
802d8be64c1SSong Gao     output(ctx, mnemonic, "v%d, v%d, 0x%x", a->vd, a->vj, a->imm);
803d8be64c1SSong Gao }
804d8be64c1SSong Gao 
805be9ec557SSong Gao static void output_vv(DisasContext *ctx, arg_vv *a, const char *mnemonic)
806be9ec557SSong Gao {
807be9ec557SSong Gao     output(ctx, mnemonic, "v%d, v%d", a->vd, a->vj);
808be9ec557SSong Gao }
809be9ec557SSong Gao 
81057b4f1acSSong Gao INSN_LSX(vadd_b,           vvv)
81157b4f1acSSong Gao INSN_LSX(vadd_h,           vvv)
81257b4f1acSSong Gao INSN_LSX(vadd_w,           vvv)
81357b4f1acSSong Gao INSN_LSX(vadd_d,           vvv)
81457b4f1acSSong Gao INSN_LSX(vadd_q,           vvv)
81557b4f1acSSong Gao INSN_LSX(vsub_b,           vvv)
81657b4f1acSSong Gao INSN_LSX(vsub_h,           vvv)
81757b4f1acSSong Gao INSN_LSX(vsub_w,           vvv)
81857b4f1acSSong Gao INSN_LSX(vsub_d,           vvv)
81957b4f1acSSong Gao INSN_LSX(vsub_q,           vvv)
820d8be64c1SSong Gao 
821d8be64c1SSong Gao INSN_LSX(vaddi_bu,         vv_i)
822d8be64c1SSong Gao INSN_LSX(vaddi_hu,         vv_i)
823d8be64c1SSong Gao INSN_LSX(vaddi_wu,         vv_i)
824d8be64c1SSong Gao INSN_LSX(vaddi_du,         vv_i)
825d8be64c1SSong Gao INSN_LSX(vsubi_bu,         vv_i)
826d8be64c1SSong Gao INSN_LSX(vsubi_hu,         vv_i)
827d8be64c1SSong Gao INSN_LSX(vsubi_wu,         vv_i)
828d8be64c1SSong Gao INSN_LSX(vsubi_du,         vv_i)
829be9ec557SSong Gao 
830be9ec557SSong Gao INSN_LSX(vneg_b,           vv)
831be9ec557SSong Gao INSN_LSX(vneg_h,           vv)
832be9ec557SSong Gao INSN_LSX(vneg_w,           vv)
833be9ec557SSong Gao INSN_LSX(vneg_d,           vv)
834a94cb911SSong Gao 
835a94cb911SSong Gao INSN_LSX(vsadd_b,          vvv)
836a94cb911SSong Gao INSN_LSX(vsadd_h,          vvv)
837a94cb911SSong Gao INSN_LSX(vsadd_w,          vvv)
838a94cb911SSong Gao INSN_LSX(vsadd_d,          vvv)
839a94cb911SSong Gao INSN_LSX(vsadd_bu,         vvv)
840a94cb911SSong Gao INSN_LSX(vsadd_hu,         vvv)
841a94cb911SSong Gao INSN_LSX(vsadd_wu,         vvv)
842a94cb911SSong Gao INSN_LSX(vsadd_du,         vvv)
843a94cb911SSong Gao INSN_LSX(vssub_b,          vvv)
844a94cb911SSong Gao INSN_LSX(vssub_h,          vvv)
845a94cb911SSong Gao INSN_LSX(vssub_w,          vvv)
846a94cb911SSong Gao INSN_LSX(vssub_d,          vvv)
847a94cb911SSong Gao INSN_LSX(vssub_bu,         vvv)
848a94cb911SSong Gao INSN_LSX(vssub_hu,         vvv)
849a94cb911SSong Gao INSN_LSX(vssub_wu,         vvv)
850a94cb911SSong Gao INSN_LSX(vssub_du,         vvv)
851c037fbc9SSong Gao 
852c037fbc9SSong Gao INSN_LSX(vhaddw_h_b,       vvv)
853c037fbc9SSong Gao INSN_LSX(vhaddw_w_h,       vvv)
854c037fbc9SSong Gao INSN_LSX(vhaddw_d_w,       vvv)
855c037fbc9SSong Gao INSN_LSX(vhaddw_q_d,       vvv)
856c037fbc9SSong Gao INSN_LSX(vhaddw_hu_bu,     vvv)
857c037fbc9SSong Gao INSN_LSX(vhaddw_wu_hu,     vvv)
858c037fbc9SSong Gao INSN_LSX(vhaddw_du_wu,     vvv)
859c037fbc9SSong Gao INSN_LSX(vhaddw_qu_du,     vvv)
860c037fbc9SSong Gao INSN_LSX(vhsubw_h_b,       vvv)
861c037fbc9SSong Gao INSN_LSX(vhsubw_w_h,       vvv)
862c037fbc9SSong Gao INSN_LSX(vhsubw_d_w,       vvv)
863c037fbc9SSong Gao INSN_LSX(vhsubw_q_d,       vvv)
864c037fbc9SSong Gao INSN_LSX(vhsubw_hu_bu,     vvv)
865c037fbc9SSong Gao INSN_LSX(vhsubw_wu_hu,     vvv)
866c037fbc9SSong Gao INSN_LSX(vhsubw_du_wu,     vvv)
867c037fbc9SSong Gao INSN_LSX(vhsubw_qu_du,     vvv)
8682d5f950cSSong Gao 
8692d5f950cSSong Gao INSN_LSX(vaddwev_h_b,      vvv)
8702d5f950cSSong Gao INSN_LSX(vaddwev_w_h,      vvv)
8712d5f950cSSong Gao INSN_LSX(vaddwev_d_w,      vvv)
8722d5f950cSSong Gao INSN_LSX(vaddwev_q_d,      vvv)
8732d5f950cSSong Gao INSN_LSX(vaddwod_h_b,      vvv)
8742d5f950cSSong Gao INSN_LSX(vaddwod_w_h,      vvv)
8752d5f950cSSong Gao INSN_LSX(vaddwod_d_w,      vvv)
8762d5f950cSSong Gao INSN_LSX(vaddwod_q_d,      vvv)
8772d5f950cSSong Gao INSN_LSX(vsubwev_h_b,      vvv)
8782d5f950cSSong Gao INSN_LSX(vsubwev_w_h,      vvv)
8792d5f950cSSong Gao INSN_LSX(vsubwev_d_w,      vvv)
8802d5f950cSSong Gao INSN_LSX(vsubwev_q_d,      vvv)
8812d5f950cSSong Gao INSN_LSX(vsubwod_h_b,      vvv)
8822d5f950cSSong Gao INSN_LSX(vsubwod_w_h,      vvv)
8832d5f950cSSong Gao INSN_LSX(vsubwod_d_w,      vvv)
8842d5f950cSSong Gao INSN_LSX(vsubwod_q_d,      vvv)
8852d5f950cSSong Gao 
8862d5f950cSSong Gao INSN_LSX(vaddwev_h_bu,     vvv)
8872d5f950cSSong Gao INSN_LSX(vaddwev_w_hu,     vvv)
8882d5f950cSSong Gao INSN_LSX(vaddwev_d_wu,     vvv)
8892d5f950cSSong Gao INSN_LSX(vaddwev_q_du,     vvv)
8902d5f950cSSong Gao INSN_LSX(vaddwod_h_bu,     vvv)
8912d5f950cSSong Gao INSN_LSX(vaddwod_w_hu,     vvv)
8922d5f950cSSong Gao INSN_LSX(vaddwod_d_wu,     vvv)
8932d5f950cSSong Gao INSN_LSX(vaddwod_q_du,     vvv)
8942d5f950cSSong Gao INSN_LSX(vsubwev_h_bu,     vvv)
8952d5f950cSSong Gao INSN_LSX(vsubwev_w_hu,     vvv)
8962d5f950cSSong Gao INSN_LSX(vsubwev_d_wu,     vvv)
8972d5f950cSSong Gao INSN_LSX(vsubwev_q_du,     vvv)
8982d5f950cSSong Gao INSN_LSX(vsubwod_h_bu,     vvv)
8992d5f950cSSong Gao INSN_LSX(vsubwod_w_hu,     vvv)
9002d5f950cSSong Gao INSN_LSX(vsubwod_d_wu,     vvv)
9012d5f950cSSong Gao INSN_LSX(vsubwod_q_du,     vvv)
9022d5f950cSSong Gao 
9032d5f950cSSong Gao INSN_LSX(vaddwev_h_bu_b,   vvv)
9042d5f950cSSong Gao INSN_LSX(vaddwev_w_hu_h,   vvv)
9052d5f950cSSong Gao INSN_LSX(vaddwev_d_wu_w,   vvv)
9062d5f950cSSong Gao INSN_LSX(vaddwev_q_du_d,   vvv)
9072d5f950cSSong Gao INSN_LSX(vaddwod_h_bu_b,   vvv)
9082d5f950cSSong Gao INSN_LSX(vaddwod_w_hu_h,   vvv)
9092d5f950cSSong Gao INSN_LSX(vaddwod_d_wu_w,   vvv)
9102d5f950cSSong Gao INSN_LSX(vaddwod_q_du_d,   vvv)
91139e9b0a7SSong Gao 
91239e9b0a7SSong Gao INSN_LSX(vavg_b,           vvv)
91339e9b0a7SSong Gao INSN_LSX(vavg_h,           vvv)
91439e9b0a7SSong Gao INSN_LSX(vavg_w,           vvv)
91539e9b0a7SSong Gao INSN_LSX(vavg_d,           vvv)
91639e9b0a7SSong Gao INSN_LSX(vavg_bu,          vvv)
91739e9b0a7SSong Gao INSN_LSX(vavg_hu,          vvv)
91839e9b0a7SSong Gao INSN_LSX(vavg_wu,          vvv)
91939e9b0a7SSong Gao INSN_LSX(vavg_du,          vvv)
92039e9b0a7SSong Gao INSN_LSX(vavgr_b,          vvv)
92139e9b0a7SSong Gao INSN_LSX(vavgr_h,          vvv)
92239e9b0a7SSong Gao INSN_LSX(vavgr_w,          vvv)
92339e9b0a7SSong Gao INSN_LSX(vavgr_d,          vvv)
92439e9b0a7SSong Gao INSN_LSX(vavgr_bu,         vvv)
92539e9b0a7SSong Gao INSN_LSX(vavgr_hu,         vvv)
92639e9b0a7SSong Gao INSN_LSX(vavgr_wu,         vvv)
92739e9b0a7SSong Gao INSN_LSX(vavgr_du,         vvv)
92849725659SSong Gao 
92949725659SSong Gao INSN_LSX(vabsd_b,          vvv)
93049725659SSong Gao INSN_LSX(vabsd_h,          vvv)
93149725659SSong Gao INSN_LSX(vabsd_w,          vvv)
93249725659SSong Gao INSN_LSX(vabsd_d,          vvv)
93349725659SSong Gao INSN_LSX(vabsd_bu,         vvv)
93449725659SSong Gao INSN_LSX(vabsd_hu,         vvv)
93549725659SSong Gao INSN_LSX(vabsd_wu,         vvv)
93649725659SSong Gao INSN_LSX(vabsd_du,         vvv)
937af448cb3SSong Gao 
938af448cb3SSong Gao INSN_LSX(vadda_b,          vvv)
939af448cb3SSong Gao INSN_LSX(vadda_h,          vvv)
940af448cb3SSong Gao INSN_LSX(vadda_w,          vvv)
941af448cb3SSong Gao INSN_LSX(vadda_d,          vvv)
9429ab29520SSong Gao 
9439ab29520SSong Gao INSN_LSX(vmax_b,           vvv)
9449ab29520SSong Gao INSN_LSX(vmax_h,           vvv)
9459ab29520SSong Gao INSN_LSX(vmax_w,           vvv)
9469ab29520SSong Gao INSN_LSX(vmax_d,           vvv)
9479ab29520SSong Gao INSN_LSX(vmin_b,           vvv)
9489ab29520SSong Gao INSN_LSX(vmin_h,           vvv)
9499ab29520SSong Gao INSN_LSX(vmin_w,           vvv)
9509ab29520SSong Gao INSN_LSX(vmin_d,           vvv)
9519ab29520SSong Gao INSN_LSX(vmax_bu,          vvv)
9529ab29520SSong Gao INSN_LSX(vmax_hu,          vvv)
9539ab29520SSong Gao INSN_LSX(vmax_wu,          vvv)
9549ab29520SSong Gao INSN_LSX(vmax_du,          vvv)
9559ab29520SSong Gao INSN_LSX(vmin_bu,          vvv)
9569ab29520SSong Gao INSN_LSX(vmin_hu,          vvv)
9579ab29520SSong Gao INSN_LSX(vmin_wu,          vvv)
9589ab29520SSong Gao INSN_LSX(vmin_du,          vvv)
9599ab29520SSong Gao INSN_LSX(vmaxi_b,          vv_i)
9609ab29520SSong Gao INSN_LSX(vmaxi_h,          vv_i)
9619ab29520SSong Gao INSN_LSX(vmaxi_w,          vv_i)
9629ab29520SSong Gao INSN_LSX(vmaxi_d,          vv_i)
9639ab29520SSong Gao INSN_LSX(vmini_b,          vv_i)
9649ab29520SSong Gao INSN_LSX(vmini_h,          vv_i)
9659ab29520SSong Gao INSN_LSX(vmini_w,          vv_i)
9669ab29520SSong Gao INSN_LSX(vmini_d,          vv_i)
9679ab29520SSong Gao INSN_LSX(vmaxi_bu,         vv_i)
9689ab29520SSong Gao INSN_LSX(vmaxi_hu,         vv_i)
9699ab29520SSong Gao INSN_LSX(vmaxi_wu,         vv_i)
9709ab29520SSong Gao INSN_LSX(vmaxi_du,         vv_i)
9719ab29520SSong Gao INSN_LSX(vmini_bu,         vv_i)
9729ab29520SSong Gao INSN_LSX(vmini_hu,         vv_i)
9739ab29520SSong Gao INSN_LSX(vmini_wu,         vv_i)
9749ab29520SSong Gao INSN_LSX(vmini_du,         vv_i)
975cd1c49adSSong Gao 
976cd1c49adSSong Gao INSN_LSX(vmul_b,           vvv)
977cd1c49adSSong Gao INSN_LSX(vmul_h,           vvv)
978cd1c49adSSong Gao INSN_LSX(vmul_w,           vvv)
979cd1c49adSSong Gao INSN_LSX(vmul_d,           vvv)
980cd1c49adSSong Gao INSN_LSX(vmuh_b,           vvv)
981cd1c49adSSong Gao INSN_LSX(vmuh_h,           vvv)
982cd1c49adSSong Gao INSN_LSX(vmuh_w,           vvv)
983cd1c49adSSong Gao INSN_LSX(vmuh_d,           vvv)
984cd1c49adSSong Gao INSN_LSX(vmuh_bu,          vvv)
985cd1c49adSSong Gao INSN_LSX(vmuh_hu,          vvv)
986cd1c49adSSong Gao INSN_LSX(vmuh_wu,          vvv)
987cd1c49adSSong Gao INSN_LSX(vmuh_du,          vvv)
988cd1c49adSSong Gao 
989cd1c49adSSong Gao INSN_LSX(vmulwev_h_b,      vvv)
990cd1c49adSSong Gao INSN_LSX(vmulwev_w_h,      vvv)
991cd1c49adSSong Gao INSN_LSX(vmulwev_d_w,      vvv)
992cd1c49adSSong Gao INSN_LSX(vmulwev_q_d,      vvv)
993cd1c49adSSong Gao INSN_LSX(vmulwod_h_b,      vvv)
994cd1c49adSSong Gao INSN_LSX(vmulwod_w_h,      vvv)
995cd1c49adSSong Gao INSN_LSX(vmulwod_d_w,      vvv)
996cd1c49adSSong Gao INSN_LSX(vmulwod_q_d,      vvv)
997cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu,     vvv)
998cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu,     vvv)
999cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu,     vvv)
1000cd1c49adSSong Gao INSN_LSX(vmulwev_q_du,     vvv)
1001cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu,     vvv)
1002cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu,     vvv)
1003cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu,     vvv)
1004cd1c49adSSong Gao INSN_LSX(vmulwod_q_du,     vvv)
1005cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu_b,   vvv)
1006cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu_h,   vvv)
1007cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu_w,   vvv)
1008cd1c49adSSong Gao INSN_LSX(vmulwev_q_du_d,   vvv)
1009cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu_b,   vvv)
1010cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu_h,   vvv)
1011cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu_w,   vvv)
1012cd1c49adSSong Gao INSN_LSX(vmulwod_q_du_d,   vvv)
1013d3aec65bSSong Gao 
1014d3aec65bSSong Gao INSN_LSX(vmadd_b,          vvv)
1015d3aec65bSSong Gao INSN_LSX(vmadd_h,          vvv)
1016d3aec65bSSong Gao INSN_LSX(vmadd_w,          vvv)
1017d3aec65bSSong Gao INSN_LSX(vmadd_d,          vvv)
1018d3aec65bSSong Gao INSN_LSX(vmsub_b,          vvv)
1019d3aec65bSSong Gao INSN_LSX(vmsub_h,          vvv)
1020d3aec65bSSong Gao INSN_LSX(vmsub_w,          vvv)
1021d3aec65bSSong Gao INSN_LSX(vmsub_d,          vvv)
1022d3aec65bSSong Gao 
1023d3aec65bSSong Gao INSN_LSX(vmaddwev_h_b,     vvv)
1024d3aec65bSSong Gao INSN_LSX(vmaddwev_w_h,     vvv)
1025d3aec65bSSong Gao INSN_LSX(vmaddwev_d_w,     vvv)
1026d3aec65bSSong Gao INSN_LSX(vmaddwev_q_d,     vvv)
1027d3aec65bSSong Gao INSN_LSX(vmaddwod_h_b,     vvv)
1028d3aec65bSSong Gao INSN_LSX(vmaddwod_w_h,     vvv)
1029d3aec65bSSong Gao INSN_LSX(vmaddwod_d_w,     vvv)
1030d3aec65bSSong Gao INSN_LSX(vmaddwod_q_d,     vvv)
1031d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu,    vvv)
1032d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu,    vvv)
1033d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu,    vvv)
1034d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du,    vvv)
1035d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu,    vvv)
1036d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu,    vvv)
1037d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu,    vvv)
1038d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du,    vvv)
1039d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu_b,  vvv)
1040d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu_h,  vvv)
1041d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu_w,  vvv)
1042d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du_d,  vvv)
1043d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu_b,  vvv)
1044d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu_h,  vvv)
1045d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu_w,  vvv)
1046d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du_d,  vvv)
10474cc4c0f7SSong Gao 
10484cc4c0f7SSong Gao INSN_LSX(vdiv_b,           vvv)
10494cc4c0f7SSong Gao INSN_LSX(vdiv_h,           vvv)
10504cc4c0f7SSong Gao INSN_LSX(vdiv_w,           vvv)
10514cc4c0f7SSong Gao INSN_LSX(vdiv_d,           vvv)
10524cc4c0f7SSong Gao INSN_LSX(vdiv_bu,          vvv)
10534cc4c0f7SSong Gao INSN_LSX(vdiv_hu,          vvv)
10544cc4c0f7SSong Gao INSN_LSX(vdiv_wu,          vvv)
10554cc4c0f7SSong Gao INSN_LSX(vdiv_du,          vvv)
10564cc4c0f7SSong Gao INSN_LSX(vmod_b,           vvv)
10574cc4c0f7SSong Gao INSN_LSX(vmod_h,           vvv)
10584cc4c0f7SSong Gao INSN_LSX(vmod_w,           vvv)
10594cc4c0f7SSong Gao INSN_LSX(vmod_d,           vvv)
10604cc4c0f7SSong Gao INSN_LSX(vmod_bu,          vvv)
10614cc4c0f7SSong Gao INSN_LSX(vmod_hu,          vvv)
10624cc4c0f7SSong Gao INSN_LSX(vmod_wu,          vvv)
10634cc4c0f7SSong Gao INSN_LSX(vmod_du,          vvv)
1064cbe44190SSong Gao 
1065cbe44190SSong Gao INSN_LSX(vsat_b,           vv_i)
1066cbe44190SSong Gao INSN_LSX(vsat_h,           vv_i)
1067cbe44190SSong Gao INSN_LSX(vsat_w,           vv_i)
1068cbe44190SSong Gao INSN_LSX(vsat_d,           vv_i)
1069cbe44190SSong Gao INSN_LSX(vsat_bu,          vv_i)
1070cbe44190SSong Gao INSN_LSX(vsat_hu,          vv_i)
1071cbe44190SSong Gao INSN_LSX(vsat_wu,          vv_i)
1072cbe44190SSong Gao INSN_LSX(vsat_du,          vv_i)
10733734ad93SSong Gao 
10743734ad93SSong Gao INSN_LSX(vexth_h_b,        vv)
10753734ad93SSong Gao INSN_LSX(vexth_w_h,        vv)
10763734ad93SSong Gao INSN_LSX(vexth_d_w,        vv)
10773734ad93SSong Gao INSN_LSX(vexth_q_d,        vv)
10783734ad93SSong Gao INSN_LSX(vexth_hu_bu,      vv)
10793734ad93SSong Gao INSN_LSX(vexth_wu_hu,      vv)
10803734ad93SSong Gao INSN_LSX(vexth_du_wu,      vv)
10813734ad93SSong Gao INSN_LSX(vexth_qu_du,      vv)
1082f0e395dfSSong Gao 
1083f0e395dfSSong Gao INSN_LSX(vsigncov_b,       vvv)
1084f0e395dfSSong Gao INSN_LSX(vsigncov_h,       vvv)
1085f0e395dfSSong Gao INSN_LSX(vsigncov_w,       vvv)
1086f0e395dfSSong Gao INSN_LSX(vsigncov_d,       vvv)
1087789f4a4cSSong Gao 
1088789f4a4cSSong Gao INSN_LSX(vmskltz_b,        vv)
1089789f4a4cSSong Gao INSN_LSX(vmskltz_h,        vv)
1090789f4a4cSSong Gao INSN_LSX(vmskltz_w,        vv)
1091789f4a4cSSong Gao INSN_LSX(vmskltz_d,        vv)
1092789f4a4cSSong Gao INSN_LSX(vmskgez_b,        vv)
1093789f4a4cSSong Gao INSN_LSX(vmsknz_b,         vv)
1094f205a539SSong Gao 
1095f205a539SSong Gao INSN_LSX(vand_v,           vvv)
1096f205a539SSong Gao INSN_LSX(vor_v,            vvv)
1097f205a539SSong Gao INSN_LSX(vxor_v,           vvv)
1098f205a539SSong Gao INSN_LSX(vnor_v,           vvv)
1099f205a539SSong Gao INSN_LSX(vandn_v,          vvv)
1100f205a539SSong Gao INSN_LSX(vorn_v,           vvv)
1101f205a539SSong Gao 
1102f205a539SSong Gao INSN_LSX(vandi_b,          vv_i)
1103f205a539SSong Gao INSN_LSX(vori_b,           vv_i)
1104f205a539SSong Gao INSN_LSX(vxori_b,          vv_i)
1105f205a539SSong Gao INSN_LSX(vnori_b,          vv_i)
1106*b281d696SSong Gao 
1107*b281d696SSong Gao INSN_LSX(vsll_b,           vvv)
1108*b281d696SSong Gao INSN_LSX(vsll_h,           vvv)
1109*b281d696SSong Gao INSN_LSX(vsll_w,           vvv)
1110*b281d696SSong Gao INSN_LSX(vsll_d,           vvv)
1111*b281d696SSong Gao INSN_LSX(vslli_b,          vv_i)
1112*b281d696SSong Gao INSN_LSX(vslli_h,          vv_i)
1113*b281d696SSong Gao INSN_LSX(vslli_w,          vv_i)
1114*b281d696SSong Gao INSN_LSX(vslli_d,          vv_i)
1115*b281d696SSong Gao 
1116*b281d696SSong Gao INSN_LSX(vsrl_b,           vvv)
1117*b281d696SSong Gao INSN_LSX(vsrl_h,           vvv)
1118*b281d696SSong Gao INSN_LSX(vsrl_w,           vvv)
1119*b281d696SSong Gao INSN_LSX(vsrl_d,           vvv)
1120*b281d696SSong Gao INSN_LSX(vsrli_b,          vv_i)
1121*b281d696SSong Gao INSN_LSX(vsrli_h,          vv_i)
1122*b281d696SSong Gao INSN_LSX(vsrli_w,          vv_i)
1123*b281d696SSong Gao INSN_LSX(vsrli_d,          vv_i)
1124*b281d696SSong Gao 
1125*b281d696SSong Gao INSN_LSX(vsra_b,           vvv)
1126*b281d696SSong Gao INSN_LSX(vsra_h,           vvv)
1127*b281d696SSong Gao INSN_LSX(vsra_w,           vvv)
1128*b281d696SSong Gao INSN_LSX(vsra_d,           vvv)
1129*b281d696SSong Gao INSN_LSX(vsrai_b,          vv_i)
1130*b281d696SSong Gao INSN_LSX(vsrai_h,          vv_i)
1131*b281d696SSong Gao INSN_LSX(vsrai_w,          vv_i)
1132*b281d696SSong Gao INSN_LSX(vsrai_d,          vv_i)
1133*b281d696SSong Gao 
1134*b281d696SSong Gao INSN_LSX(vrotr_b,          vvv)
1135*b281d696SSong Gao INSN_LSX(vrotr_h,          vvv)
1136*b281d696SSong Gao INSN_LSX(vrotr_w,          vvv)
1137*b281d696SSong Gao INSN_LSX(vrotr_d,          vvv)
1138*b281d696SSong Gao INSN_LSX(vrotri_b,         vv_i)
1139*b281d696SSong Gao INSN_LSX(vrotri_h,         vv_i)
1140*b281d696SSong Gao INSN_LSX(vrotri_w,         vv_i)
1141*b281d696SSong Gao INSN_LSX(vrotri_d,         vv_i)
1142