xref: /openbmc/qemu/target/loongarch/disas.c (revision 27f5485d)
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 
24843b627aSSong Gao static inline int shl_1(DisasContext *ctx, int x)
25843b627aSSong Gao {
26843b627aSSong Gao     return x << 1;
27843b627aSSong Gao }
28843b627aSSong Gao 
29aae1746cSSong Gao static inline int shl_2(DisasContext *ctx, int x)
30aae1746cSSong Gao {
31aae1746cSSong Gao     return x << 2;
32aae1746cSSong Gao }
33aae1746cSSong Gao 
34843b627aSSong Gao static inline int shl_3(DisasContext *ctx, int x)
35843b627aSSong Gao {
36843b627aSSong Gao     return x << 3;
37843b627aSSong Gao }
38843b627aSSong Gao 
395b1dedfeSXiaojuan Yang #define CSR_NAME(REG) \
405b1dedfeSXiaojuan Yang     [LOONGARCH_CSR_##REG] = (#REG)
415b1dedfeSXiaojuan Yang 
425b1dedfeSXiaojuan Yang static const char * const csr_names[] = {
435b1dedfeSXiaojuan Yang     CSR_NAME(CRMD),
445b1dedfeSXiaojuan Yang     CSR_NAME(PRMD),
455b1dedfeSXiaojuan Yang     CSR_NAME(EUEN),
465b1dedfeSXiaojuan Yang     CSR_NAME(MISC),
475b1dedfeSXiaojuan Yang     CSR_NAME(ECFG),
485b1dedfeSXiaojuan Yang     CSR_NAME(ESTAT),
495b1dedfeSXiaojuan Yang     CSR_NAME(ERA),
505b1dedfeSXiaojuan Yang     CSR_NAME(BADV),
515b1dedfeSXiaojuan Yang     CSR_NAME(BADI),
525b1dedfeSXiaojuan Yang     CSR_NAME(EENTRY),
535b1dedfeSXiaojuan Yang     CSR_NAME(TLBIDX),
545b1dedfeSXiaojuan Yang     CSR_NAME(TLBEHI),
555b1dedfeSXiaojuan Yang     CSR_NAME(TLBELO0),
565b1dedfeSXiaojuan Yang     CSR_NAME(TLBELO1),
575b1dedfeSXiaojuan Yang     CSR_NAME(ASID),
585b1dedfeSXiaojuan Yang     CSR_NAME(PGDL),
595b1dedfeSXiaojuan Yang     CSR_NAME(PGDH),
605b1dedfeSXiaojuan Yang     CSR_NAME(PGD),
615b1dedfeSXiaojuan Yang     CSR_NAME(PWCL),
625b1dedfeSXiaojuan Yang     CSR_NAME(PWCH),
635b1dedfeSXiaojuan Yang     CSR_NAME(STLBPS),
645b1dedfeSXiaojuan Yang     CSR_NAME(RVACFG),
655b1dedfeSXiaojuan Yang     CSR_NAME(CPUID),
665b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG1),
675b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG2),
685b1dedfeSXiaojuan Yang     CSR_NAME(PRCFG3),
695b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(0)),
705b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(1)),
715b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(2)),
725b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(3)),
735b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(4)),
745b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(5)),
755b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(6)),
765b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(7)),
775b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(8)),
785b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(9)),
795b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(10)),
805b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(11)),
815b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(12)),
825b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(13)),
835b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(14)),
845b1dedfeSXiaojuan Yang     CSR_NAME(SAVE(15)),
855b1dedfeSXiaojuan Yang     CSR_NAME(TID),
865b1dedfeSXiaojuan Yang     CSR_NAME(TCFG),
875b1dedfeSXiaojuan Yang     CSR_NAME(TVAL),
885b1dedfeSXiaojuan Yang     CSR_NAME(CNTC),
895b1dedfeSXiaojuan Yang     CSR_NAME(TICLR),
905b1dedfeSXiaojuan Yang     CSR_NAME(LLBCTL),
915b1dedfeSXiaojuan Yang     CSR_NAME(IMPCTL1),
925b1dedfeSXiaojuan Yang     CSR_NAME(IMPCTL2),
935b1dedfeSXiaojuan Yang     CSR_NAME(TLBRENTRY),
945b1dedfeSXiaojuan Yang     CSR_NAME(TLBRBADV),
955b1dedfeSXiaojuan Yang     CSR_NAME(TLBRERA),
965b1dedfeSXiaojuan Yang     CSR_NAME(TLBRSAVE),
975b1dedfeSXiaojuan Yang     CSR_NAME(TLBRELO0),
985b1dedfeSXiaojuan Yang     CSR_NAME(TLBRELO1),
995b1dedfeSXiaojuan Yang     CSR_NAME(TLBREHI),
1005b1dedfeSXiaojuan Yang     CSR_NAME(TLBRPRMD),
1015b1dedfeSXiaojuan Yang     CSR_NAME(MERRCTL),
1025b1dedfeSXiaojuan Yang     CSR_NAME(MERRINFO1),
1035b1dedfeSXiaojuan Yang     CSR_NAME(MERRINFO2),
1045b1dedfeSXiaojuan Yang     CSR_NAME(MERRENTRY),
1055b1dedfeSXiaojuan Yang     CSR_NAME(MERRERA),
1065b1dedfeSXiaojuan Yang     CSR_NAME(MERRSAVE),
1075b1dedfeSXiaojuan Yang     CSR_NAME(CTAG),
1085b1dedfeSXiaojuan Yang     CSR_NAME(DMW(0)),
1095b1dedfeSXiaojuan Yang     CSR_NAME(DMW(1)),
1105b1dedfeSXiaojuan Yang     CSR_NAME(DMW(2)),
1115b1dedfeSXiaojuan Yang     CSR_NAME(DMW(3)),
1125b1dedfeSXiaojuan Yang     CSR_NAME(DBG),
1135b1dedfeSXiaojuan Yang     CSR_NAME(DERA),
1145b1dedfeSXiaojuan Yang     CSR_NAME(DSAVE),
1155b1dedfeSXiaojuan Yang };
1165b1dedfeSXiaojuan Yang 
1175b1dedfeSXiaojuan Yang static const char *get_csr_name(unsigned num)
1185b1dedfeSXiaojuan Yang {
1195b1dedfeSXiaojuan Yang     return ((num < ARRAY_SIZE(csr_names)) && (csr_names[num] != NULL)) ?
1205b1dedfeSXiaojuan Yang            csr_names[num] : "Undefined CSR";
1215b1dedfeSXiaojuan Yang }
1225b1dedfeSXiaojuan Yang 
123aae1746cSSong Gao #define output(C, INSN, FMT, ...)                                   \
124aae1746cSSong Gao {                                                                   \
125aae1746cSSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %-9s\t" FMT, \
126aae1746cSSong Gao                             (C)->insn, INSN, ##__VA_ARGS__);        \
127aae1746cSSong Gao }
128aae1746cSSong Gao 
129aae1746cSSong Gao #include "decode-insns.c.inc"
130aae1746cSSong Gao 
131aae1746cSSong Gao int print_insn_loongarch(bfd_vma memaddr, struct disassemble_info *info)
132aae1746cSSong Gao {
133aae1746cSSong Gao     bfd_byte buffer[4];
134aae1746cSSong Gao     uint32_t insn;
135aae1746cSSong Gao     int status;
136aae1746cSSong Gao 
137aae1746cSSong Gao     status = (*info->read_memory_func)(memaddr, buffer, 4, info);
138aae1746cSSong Gao     if (status != 0) {
139aae1746cSSong Gao         (*info->memory_error_func)(status, memaddr, info);
140aae1746cSSong Gao         return -1;
141aae1746cSSong Gao     }
142aae1746cSSong Gao     insn = bfd_getl32(buffer);
143aae1746cSSong Gao     DisasContext ctx = {
144aae1746cSSong Gao         .info = info,
145aae1746cSSong Gao         .pc = memaddr,
146aae1746cSSong Gao         .insn = insn
147aae1746cSSong Gao     };
148aae1746cSSong Gao 
149aae1746cSSong Gao     if (!decode(&ctx, insn)) {
150aae1746cSSong Gao         output(&ctx, "illegal", "");
151aae1746cSSong Gao     }
152aae1746cSSong Gao     return 4;
153aae1746cSSong Gao }
154aae1746cSSong Gao 
155aae1746cSSong Gao static void output_r_i(DisasContext *ctx, arg_r_i *a, const char *mnemonic)
156aae1746cSSong Gao {
157aae1746cSSong Gao     output(ctx, mnemonic, "r%d, %d", a->rd, a->imm);
158aae1746cSSong Gao }
159aae1746cSSong Gao 
160aae1746cSSong Gao static void output_rrr(DisasContext *ctx, arg_rrr *a, const char *mnemonic)
161aae1746cSSong Gao {
162aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, r%d", a->rd, a->rj, a->rk);
163aae1746cSSong Gao }
164aae1746cSSong Gao 
165aae1746cSSong Gao static void output_rr_i(DisasContext *ctx, arg_rr_i *a, const char *mnemonic)
166aae1746cSSong Gao {
167aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d", a->rd, a->rj, a->imm);
168aae1746cSSong Gao }
169aae1746cSSong Gao 
170aae1746cSSong Gao static void output_rrr_sa(DisasContext *ctx, arg_rrr_sa *a,
171aae1746cSSong Gao                           const char *mnemonic)
172aae1746cSSong Gao {
173aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, r%d, %d", a->rd, a->rj, a->rk, a->sa);
174aae1746cSSong Gao }
175aae1746cSSong Gao 
176aae1746cSSong Gao static void output_rr(DisasContext *ctx, arg_rr *a, const char *mnemonic)
177aae1746cSSong Gao {
178aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d", a->rd, a->rj);
179aae1746cSSong Gao }
180aae1746cSSong Gao 
181aae1746cSSong Gao static void output_rr_ms_ls(DisasContext *ctx, arg_rr_ms_ls *a,
182aae1746cSSong Gao                           const char *mnemonic)
183aae1746cSSong Gao {
184aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d, %d", a->rd, a->rj, a->ms, a->ls);
185aae1746cSSong Gao }
186aae1746cSSong Gao 
187aae1746cSSong Gao static void output_hint_r_i(DisasContext *ctx, arg_hint_r_i *a,
188aae1746cSSong Gao                             const char *mnemonic)
189aae1746cSSong Gao {
190aae1746cSSong Gao     output(ctx, mnemonic, "%d, r%d, %d", a->hint, a->rj, a->imm);
191aae1746cSSong Gao }
192aae1746cSSong Gao 
193aae1746cSSong Gao static void output_i(DisasContext *ctx, arg_i *a, const char *mnemonic)
194aae1746cSSong Gao {
195aae1746cSSong Gao     output(ctx, mnemonic, "%d", a->imm);
196aae1746cSSong Gao }
197aae1746cSSong Gao 
198aae1746cSSong Gao static void output_rr_jk(DisasContext *ctx, arg_rr_jk *a,
199aae1746cSSong Gao                          const char *mnemonic)
200aae1746cSSong Gao {
201aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d", a->rj, a->rk);
202aae1746cSSong Gao }
203aae1746cSSong Gao 
204aae1746cSSong Gao static void output_ff(DisasContext *ctx, arg_ff *a, const char *mnemonic)
205aae1746cSSong Gao {
206aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d", a->fd, a->fj);
207aae1746cSSong Gao }
208aae1746cSSong Gao 
209aae1746cSSong Gao static void output_fff(DisasContext *ctx, arg_fff *a, const char *mnemonic)
210aae1746cSSong Gao {
211aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d", a->fd, a->fj, a->fk);
212aae1746cSSong Gao }
213aae1746cSSong Gao 
214aae1746cSSong Gao static void output_ffff(DisasContext *ctx, arg_ffff *a, const char *mnemonic)
215aae1746cSSong Gao {
216aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d, f%d", a->fd, a->fj, a->fk, a->fa);
217aae1746cSSong Gao }
218aae1746cSSong Gao 
219aae1746cSSong Gao static void output_fffc(DisasContext *ctx, arg_fffc *a, const char *mnemonic)
220aae1746cSSong Gao {
221aae1746cSSong Gao     output(ctx, mnemonic, "f%d, f%d, f%d, %d", a->fd, a->fj, a->fk, a->ca);
222aae1746cSSong Gao }
223aae1746cSSong Gao 
224aae1746cSSong Gao static void output_fr(DisasContext *ctx, arg_fr *a, const char *mnemonic)
225aae1746cSSong Gao {
226aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d", a->fd, a->rj);
227aae1746cSSong Gao }
228aae1746cSSong Gao 
229aae1746cSSong Gao static void output_rf(DisasContext *ctx, arg_rf *a, const char *mnemonic)
230aae1746cSSong Gao {
231aae1746cSSong Gao     output(ctx, mnemonic, "r%d, f%d", a->rd, a->fj);
232aae1746cSSong Gao }
233aae1746cSSong Gao 
234aae1746cSSong Gao static void output_fcsrd_r(DisasContext *ctx, arg_fcsrd_r *a,
235aae1746cSSong Gao                            const char *mnemonic)
236aae1746cSSong Gao {
237aae1746cSSong Gao     output(ctx, mnemonic, "fcsr%d, r%d", a->fcsrd, a->rj);
238aae1746cSSong Gao }
239aae1746cSSong Gao 
240aae1746cSSong Gao static void output_r_fcsrs(DisasContext *ctx, arg_r_fcsrs *a,
241aae1746cSSong Gao                            const char *mnemonic)
242aae1746cSSong Gao {
243aae1746cSSong Gao     output(ctx, mnemonic, "r%d, fcsr%d", a->rd, a->fcsrs);
244aae1746cSSong Gao }
245aae1746cSSong Gao 
246aae1746cSSong Gao static void output_cf(DisasContext *ctx, arg_cf *a, const char *mnemonic)
247aae1746cSSong Gao {
248aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, f%d", a->cd, a->fj);
249aae1746cSSong Gao }
250aae1746cSSong Gao 
251aae1746cSSong Gao static void output_fc(DisasContext *ctx, arg_fc *a, const char *mnemonic)
252aae1746cSSong Gao {
253aae1746cSSong Gao     output(ctx, mnemonic, "f%d, fcc%d", a->fd, a->cj);
254aae1746cSSong Gao }
255aae1746cSSong Gao 
256aae1746cSSong Gao static void output_cr(DisasContext *ctx, arg_cr *a, const char *mnemonic)
257aae1746cSSong Gao {
258aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, r%d", a->cd, a->rj);
259aae1746cSSong Gao }
260aae1746cSSong Gao 
261aae1746cSSong Gao static void output_rc(DisasContext *ctx, arg_rc *a, const char *mnemonic)
262aae1746cSSong Gao {
263aae1746cSSong Gao     output(ctx, mnemonic, "r%d, fcc%d", a->rd, a->cj);
264aae1746cSSong Gao }
265aae1746cSSong Gao 
266aae1746cSSong Gao static void output_frr(DisasContext *ctx, arg_frr *a, const char *mnemonic)
267aae1746cSSong Gao {
268aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d, r%d", a->fd, a->rj, a->rk);
269aae1746cSSong Gao }
270aae1746cSSong Gao 
271aae1746cSSong Gao static void output_fr_i(DisasContext *ctx, arg_fr_i *a, const char *mnemonic)
272aae1746cSSong Gao {
273aae1746cSSong Gao     output(ctx, mnemonic, "f%d, r%d, %d", a->fd, a->rj, a->imm);
274aae1746cSSong Gao }
275aae1746cSSong Gao 
276aae1746cSSong Gao static void output_r_offs(DisasContext *ctx, arg_r_offs *a,
277aae1746cSSong Gao                           const char *mnemonic)
278aae1746cSSong Gao {
279aae1746cSSong Gao     output(ctx, mnemonic, "r%d, %d # 0x%" PRIx64, a->rj, a->offs,
280aae1746cSSong Gao            ctx->pc + a->offs);
281aae1746cSSong Gao }
282aae1746cSSong Gao 
283aae1746cSSong Gao static void output_c_offs(DisasContext *ctx, arg_c_offs *a,
284aae1746cSSong Gao                           const char *mnemonic)
285aae1746cSSong Gao {
286aae1746cSSong Gao     output(ctx, mnemonic, "fcc%d, %d # 0x%" PRIx64, a->cj, a->offs,
287aae1746cSSong Gao            ctx->pc + a->offs);
288aae1746cSSong Gao }
289aae1746cSSong Gao 
290aae1746cSSong Gao static void output_offs(DisasContext *ctx, arg_offs *a,
291aae1746cSSong Gao                         const char *mnemonic)
292aae1746cSSong Gao {
293aae1746cSSong Gao     output(ctx, mnemonic, "%d # 0x%" PRIx64, a->offs, ctx->pc + a->offs);
294aae1746cSSong Gao }
295aae1746cSSong Gao 
296aae1746cSSong Gao static void output_rr_offs(DisasContext *ctx, arg_rr_offs *a,
297aae1746cSSong Gao                            const char *mnemonic)
298aae1746cSSong Gao {
299aae1746cSSong Gao     output(ctx, mnemonic, "r%d, r%d, %d # 0x%" PRIx64, a->rj,
300aae1746cSSong Gao            a->rd, a->offs, ctx->pc + a->offs);
301aae1746cSSong Gao }
302aae1746cSSong Gao 
3035b1dedfeSXiaojuan Yang static void output_r_csr(DisasContext *ctx, arg_r_csr *a,
3045b1dedfeSXiaojuan Yang                          const char *mnemonic)
3055b1dedfeSXiaojuan Yang {
3065b1dedfeSXiaojuan Yang     output(ctx, mnemonic, "r%d, %d # %s", a->rd, a->csr, get_csr_name(a->csr));
3075b1dedfeSXiaojuan Yang }
3085b1dedfeSXiaojuan Yang 
3095b1dedfeSXiaojuan Yang static void output_rr_csr(DisasContext *ctx, arg_rr_csr *a,
3105b1dedfeSXiaojuan Yang                           const char *mnemonic)
3115b1dedfeSXiaojuan Yang {
3125b1dedfeSXiaojuan Yang     output(ctx, mnemonic, "r%d, r%d, %d # %s",
3135b1dedfeSXiaojuan Yang            a->rd, a->rj, a->csr, get_csr_name(a->csr));
3145b1dedfeSXiaojuan Yang }
3155b1dedfeSXiaojuan Yang 
316fcbbeb8eSXiaojuan Yang static void output_empty(DisasContext *ctx, arg_empty *a,
317fcbbeb8eSXiaojuan Yang                          const char *mnemonic)
318fcbbeb8eSXiaojuan Yang {
319fcbbeb8eSXiaojuan Yang     output(ctx, mnemonic, "");
320fcbbeb8eSXiaojuan Yang }
321fcbbeb8eSXiaojuan Yang 
322fcbbeb8eSXiaojuan Yang static void output_i_rr(DisasContext *ctx, arg_i_rr *a, const char *mnemonic)
323fcbbeb8eSXiaojuan Yang {
324fcbbeb8eSXiaojuan Yang     output(ctx, mnemonic, "%d, r%d, r%d", a->imm, a->rj, a->rk);
325fcbbeb8eSXiaojuan Yang }
326fcbbeb8eSXiaojuan Yang 
327d2cba6f7SXiaojuan Yang static void output_cop_r_i(DisasContext *ctx, arg_cop_r_i *a,
328d2cba6f7SXiaojuan Yang                            const char *mnemonic)
329d2cba6f7SXiaojuan Yang {
330d2cba6f7SXiaojuan Yang     output(ctx, mnemonic, "%d, r%d, %d", a->cop, a->rj, a->imm);
331d2cba6f7SXiaojuan Yang }
332d2cba6f7SXiaojuan Yang 
333d2cba6f7SXiaojuan Yang static void output_j_i(DisasContext *ctx, arg_j_i *a, const char *mnemonic)
334d2cba6f7SXiaojuan Yang {
335d2cba6f7SXiaojuan Yang     output(ctx, mnemonic, "r%d, %d", a->rj, a->imm);
336d2cba6f7SXiaojuan Yang }
337d2cba6f7SXiaojuan Yang 
338aae1746cSSong Gao #define INSN(insn, type)                                    \
339aae1746cSSong Gao static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
340aae1746cSSong Gao {                                                           \
341aae1746cSSong Gao     output_##type(ctx, a, #insn);                           \
342aae1746cSSong Gao     return true;                                            \
343aae1746cSSong Gao }
344aae1746cSSong Gao 
345aae1746cSSong Gao INSN(clo_w,        rr)
346aae1746cSSong Gao INSN(clz_w,        rr)
347aae1746cSSong Gao INSN(cto_w,        rr)
348aae1746cSSong Gao INSN(ctz_w,        rr)
349aae1746cSSong Gao INSN(clo_d,        rr)
350aae1746cSSong Gao INSN(clz_d,        rr)
351aae1746cSSong Gao INSN(cto_d,        rr)
352aae1746cSSong Gao INSN(ctz_d,        rr)
353aae1746cSSong Gao INSN(revb_2h,      rr)
354aae1746cSSong Gao INSN(revb_4h,      rr)
355aae1746cSSong Gao INSN(revb_2w,      rr)
356aae1746cSSong Gao INSN(revb_d,       rr)
357aae1746cSSong Gao INSN(revh_2w,      rr)
358aae1746cSSong Gao INSN(revh_d,       rr)
359aae1746cSSong Gao INSN(bitrev_4b,    rr)
360aae1746cSSong Gao INSN(bitrev_8b,    rr)
361aae1746cSSong Gao INSN(bitrev_w,     rr)
362aae1746cSSong Gao INSN(bitrev_d,     rr)
363aae1746cSSong Gao INSN(ext_w_h,      rr)
364aae1746cSSong Gao INSN(ext_w_b,      rr)
365f9bf5074SXiaojuan Yang INSN(rdtimel_w,    rr)
366f9bf5074SXiaojuan Yang INSN(rdtimeh_w,    rr)
367f9bf5074SXiaojuan Yang INSN(rdtime_d,     rr)
368aae1746cSSong Gao INSN(cpucfg,       rr)
369aae1746cSSong Gao INSN(asrtle_d,     rr_jk)
370aae1746cSSong Gao INSN(asrtgt_d,     rr_jk)
371aae1746cSSong Gao INSN(alsl_w,       rrr_sa)
372aae1746cSSong Gao INSN(alsl_wu,      rrr_sa)
373aae1746cSSong Gao INSN(bytepick_w,   rrr_sa)
374aae1746cSSong Gao INSN(bytepick_d,   rrr_sa)
375aae1746cSSong Gao INSN(add_w,        rrr)
376aae1746cSSong Gao INSN(add_d,        rrr)
377aae1746cSSong Gao INSN(sub_w,        rrr)
378aae1746cSSong Gao INSN(sub_d,        rrr)
379aae1746cSSong Gao INSN(slt,          rrr)
380aae1746cSSong Gao INSN(sltu,         rrr)
381aae1746cSSong Gao INSN(maskeqz,      rrr)
382aae1746cSSong Gao INSN(masknez,      rrr)
383aae1746cSSong Gao INSN(nor,          rrr)
384aae1746cSSong Gao INSN(and,          rrr)
385aae1746cSSong Gao INSN(or,           rrr)
386aae1746cSSong Gao INSN(xor,          rrr)
387aae1746cSSong Gao INSN(orn,          rrr)
388aae1746cSSong Gao INSN(andn,         rrr)
389aae1746cSSong Gao INSN(sll_w,        rrr)
390aae1746cSSong Gao INSN(srl_w,        rrr)
391aae1746cSSong Gao INSN(sra_w,        rrr)
392aae1746cSSong Gao INSN(sll_d,        rrr)
393aae1746cSSong Gao INSN(srl_d,        rrr)
394aae1746cSSong Gao INSN(sra_d,        rrr)
395aae1746cSSong Gao INSN(rotr_w,       rrr)
396aae1746cSSong Gao INSN(rotr_d,       rrr)
397aae1746cSSong Gao INSN(mul_w,        rrr)
398aae1746cSSong Gao INSN(mulh_w,       rrr)
399aae1746cSSong Gao INSN(mulh_wu,      rrr)
400aae1746cSSong Gao INSN(mul_d,        rrr)
401aae1746cSSong Gao INSN(mulh_d,       rrr)
402aae1746cSSong Gao INSN(mulh_du,      rrr)
403aae1746cSSong Gao INSN(mulw_d_w,     rrr)
404aae1746cSSong Gao INSN(mulw_d_wu,    rrr)
405aae1746cSSong Gao INSN(div_w,        rrr)
406aae1746cSSong Gao INSN(mod_w,        rrr)
407aae1746cSSong Gao INSN(div_wu,       rrr)
408aae1746cSSong Gao INSN(mod_wu,       rrr)
409aae1746cSSong Gao INSN(div_d,        rrr)
410aae1746cSSong Gao INSN(mod_d,        rrr)
411aae1746cSSong Gao INSN(div_du,       rrr)
412aae1746cSSong Gao INSN(mod_du,       rrr)
413aae1746cSSong Gao INSN(crc_w_b_w,    rrr)
414aae1746cSSong Gao INSN(crc_w_h_w,    rrr)
415aae1746cSSong Gao INSN(crc_w_w_w,    rrr)
416aae1746cSSong Gao INSN(crc_w_d_w,    rrr)
417aae1746cSSong Gao INSN(crcc_w_b_w,   rrr)
418aae1746cSSong Gao INSN(crcc_w_h_w,   rrr)
419aae1746cSSong Gao INSN(crcc_w_w_w,   rrr)
420aae1746cSSong Gao INSN(crcc_w_d_w,   rrr)
421aae1746cSSong Gao INSN(break,        i)
422aae1746cSSong Gao INSN(syscall,      i)
423aae1746cSSong Gao INSN(alsl_d,       rrr_sa)
424aae1746cSSong Gao INSN(slli_w,       rr_i)
425aae1746cSSong Gao INSN(slli_d,       rr_i)
426aae1746cSSong Gao INSN(srli_w,       rr_i)
427aae1746cSSong Gao INSN(srli_d,       rr_i)
428aae1746cSSong Gao INSN(srai_w,       rr_i)
429aae1746cSSong Gao INSN(srai_d,       rr_i)
430aae1746cSSong Gao INSN(rotri_w,      rr_i)
431aae1746cSSong Gao INSN(rotri_d,      rr_i)
432aae1746cSSong Gao INSN(bstrins_w,    rr_ms_ls)
433aae1746cSSong Gao INSN(bstrpick_w,   rr_ms_ls)
434aae1746cSSong Gao INSN(bstrins_d,    rr_ms_ls)
435aae1746cSSong Gao INSN(bstrpick_d,   rr_ms_ls)
436aae1746cSSong Gao INSN(fadd_s,       fff)
437aae1746cSSong Gao INSN(fadd_d,       fff)
438aae1746cSSong Gao INSN(fsub_s,       fff)
439aae1746cSSong Gao INSN(fsub_d,       fff)
440aae1746cSSong Gao INSN(fmul_s,       fff)
441aae1746cSSong Gao INSN(fmul_d,       fff)
442aae1746cSSong Gao INSN(fdiv_s,       fff)
443aae1746cSSong Gao INSN(fdiv_d,       fff)
444aae1746cSSong Gao INSN(fmax_s,       fff)
445aae1746cSSong Gao INSN(fmax_d,       fff)
446aae1746cSSong Gao INSN(fmin_s,       fff)
447aae1746cSSong Gao INSN(fmin_d,       fff)
448aae1746cSSong Gao INSN(fmaxa_s,      fff)
449aae1746cSSong Gao INSN(fmaxa_d,      fff)
450aae1746cSSong Gao INSN(fmina_s,      fff)
451aae1746cSSong Gao INSN(fmina_d,      fff)
452aae1746cSSong Gao INSN(fscaleb_s,    fff)
453aae1746cSSong Gao INSN(fscaleb_d,    fff)
454aae1746cSSong Gao INSN(fcopysign_s,  fff)
455aae1746cSSong Gao INSN(fcopysign_d,  fff)
456aae1746cSSong Gao INSN(fabs_s,       ff)
457aae1746cSSong Gao INSN(fabs_d,       ff)
458aae1746cSSong Gao INSN(fneg_s,       ff)
459aae1746cSSong Gao INSN(fneg_d,       ff)
460aae1746cSSong Gao INSN(flogb_s,      ff)
461aae1746cSSong Gao INSN(flogb_d,      ff)
462aae1746cSSong Gao INSN(fclass_s,     ff)
463aae1746cSSong Gao INSN(fclass_d,     ff)
464aae1746cSSong Gao INSN(fsqrt_s,      ff)
465aae1746cSSong Gao INSN(fsqrt_d,      ff)
466aae1746cSSong Gao INSN(frecip_s,     ff)
467aae1746cSSong Gao INSN(frecip_d,     ff)
468aae1746cSSong Gao INSN(frsqrt_s,     ff)
469aae1746cSSong Gao INSN(frsqrt_d,     ff)
470aae1746cSSong Gao INSN(fmov_s,       ff)
471aae1746cSSong Gao INSN(fmov_d,       ff)
472aae1746cSSong Gao INSN(movgr2fr_w,   fr)
473aae1746cSSong Gao INSN(movgr2fr_d,   fr)
474aae1746cSSong Gao INSN(movgr2frh_w,  fr)
475aae1746cSSong Gao INSN(movfr2gr_s,   rf)
476aae1746cSSong Gao INSN(movfr2gr_d,   rf)
477aae1746cSSong Gao INSN(movfrh2gr_s,  rf)
478aae1746cSSong Gao INSN(movgr2fcsr,   fcsrd_r)
479aae1746cSSong Gao INSN(movfcsr2gr,   r_fcsrs)
480aae1746cSSong Gao INSN(movfr2cf,     cf)
481aae1746cSSong Gao INSN(movcf2fr,     fc)
482aae1746cSSong Gao INSN(movgr2cf,     cr)
483aae1746cSSong Gao INSN(movcf2gr,     rc)
484aae1746cSSong Gao INSN(fcvt_s_d,     ff)
485aae1746cSSong Gao INSN(fcvt_d_s,     ff)
486aae1746cSSong Gao INSN(ftintrm_w_s,  ff)
487aae1746cSSong Gao INSN(ftintrm_w_d,  ff)
488aae1746cSSong Gao INSN(ftintrm_l_s,  ff)
489aae1746cSSong Gao INSN(ftintrm_l_d,  ff)
490aae1746cSSong Gao INSN(ftintrp_w_s,  ff)
491aae1746cSSong Gao INSN(ftintrp_w_d,  ff)
492aae1746cSSong Gao INSN(ftintrp_l_s,  ff)
493aae1746cSSong Gao INSN(ftintrp_l_d,  ff)
494aae1746cSSong Gao INSN(ftintrz_w_s,  ff)
495aae1746cSSong Gao INSN(ftintrz_w_d,  ff)
496aae1746cSSong Gao INSN(ftintrz_l_s,  ff)
497aae1746cSSong Gao INSN(ftintrz_l_d,  ff)
498aae1746cSSong Gao INSN(ftintrne_w_s, ff)
499aae1746cSSong Gao INSN(ftintrne_w_d, ff)
500aae1746cSSong Gao INSN(ftintrne_l_s, ff)
501aae1746cSSong Gao INSN(ftintrne_l_d, ff)
502aae1746cSSong Gao INSN(ftint_w_s,    ff)
503aae1746cSSong Gao INSN(ftint_w_d,    ff)
504aae1746cSSong Gao INSN(ftint_l_s,    ff)
505aae1746cSSong Gao INSN(ftint_l_d,    ff)
506aae1746cSSong Gao INSN(ffint_s_w,    ff)
507aae1746cSSong Gao INSN(ffint_s_l,    ff)
508aae1746cSSong Gao INSN(ffint_d_w,    ff)
509aae1746cSSong Gao INSN(ffint_d_l,    ff)
510aae1746cSSong Gao INSN(frint_s,      ff)
511aae1746cSSong Gao INSN(frint_d,      ff)
512aae1746cSSong Gao INSN(slti,         rr_i)
513aae1746cSSong Gao INSN(sltui,        rr_i)
514aae1746cSSong Gao INSN(addi_w,       rr_i)
515aae1746cSSong Gao INSN(addi_d,       rr_i)
516aae1746cSSong Gao INSN(lu52i_d,      rr_i)
517aae1746cSSong Gao INSN(andi,         rr_i)
518aae1746cSSong Gao INSN(ori,          rr_i)
519aae1746cSSong Gao INSN(xori,         rr_i)
520aae1746cSSong Gao INSN(fmadd_s,      ffff)
521aae1746cSSong Gao INSN(fmadd_d,      ffff)
522aae1746cSSong Gao INSN(fmsub_s,      ffff)
523aae1746cSSong Gao INSN(fmsub_d,      ffff)
524aae1746cSSong Gao INSN(fnmadd_s,     ffff)
525aae1746cSSong Gao INSN(fnmadd_d,     ffff)
526aae1746cSSong Gao INSN(fnmsub_s,     ffff)
527aae1746cSSong Gao INSN(fnmsub_d,     ffff)
528aae1746cSSong Gao INSN(fsel,         fffc)
529aae1746cSSong Gao INSN(addu16i_d,    rr_i)
530aae1746cSSong Gao INSN(lu12i_w,      r_i)
531aae1746cSSong Gao INSN(lu32i_d,      r_i)
532aae1746cSSong Gao INSN(ll_w,         rr_i)
533aae1746cSSong Gao INSN(sc_w,         rr_i)
534aae1746cSSong Gao INSN(ll_d,         rr_i)
535aae1746cSSong Gao INSN(sc_d,         rr_i)
536aae1746cSSong Gao INSN(ldptr_w,      rr_i)
537aae1746cSSong Gao INSN(stptr_w,      rr_i)
538aae1746cSSong Gao INSN(ldptr_d,      rr_i)
539aae1746cSSong Gao INSN(stptr_d,      rr_i)
540aae1746cSSong Gao INSN(ld_b,         rr_i)
541aae1746cSSong Gao INSN(ld_h,         rr_i)
542aae1746cSSong Gao INSN(ld_w,         rr_i)
543aae1746cSSong Gao INSN(ld_d,         rr_i)
544aae1746cSSong Gao INSN(st_b,         rr_i)
545aae1746cSSong Gao INSN(st_h,         rr_i)
546aae1746cSSong Gao INSN(st_w,         rr_i)
547aae1746cSSong Gao INSN(st_d,         rr_i)
548aae1746cSSong Gao INSN(ld_bu,        rr_i)
549aae1746cSSong Gao INSN(ld_hu,        rr_i)
550aae1746cSSong Gao INSN(ld_wu,        rr_i)
551aae1746cSSong Gao INSN(preld,        hint_r_i)
552aae1746cSSong Gao INSN(fld_s,        fr_i)
553aae1746cSSong Gao INSN(fst_s,        fr_i)
554aae1746cSSong Gao INSN(fld_d,        fr_i)
555aae1746cSSong Gao INSN(fst_d,        fr_i)
556aae1746cSSong Gao INSN(ldx_b,        rrr)
557aae1746cSSong Gao INSN(ldx_h,        rrr)
558aae1746cSSong Gao INSN(ldx_w,        rrr)
559aae1746cSSong Gao INSN(ldx_d,        rrr)
560aae1746cSSong Gao INSN(stx_b,        rrr)
561aae1746cSSong Gao INSN(stx_h,        rrr)
562aae1746cSSong Gao INSN(stx_w,        rrr)
563aae1746cSSong Gao INSN(stx_d,        rrr)
564aae1746cSSong Gao INSN(ldx_bu,       rrr)
565aae1746cSSong Gao INSN(ldx_hu,       rrr)
566aae1746cSSong Gao INSN(ldx_wu,       rrr)
567aae1746cSSong Gao INSN(fldx_s,       frr)
568aae1746cSSong Gao INSN(fldx_d,       frr)
569aae1746cSSong Gao INSN(fstx_s,       frr)
570aae1746cSSong Gao INSN(fstx_d,       frr)
571aae1746cSSong Gao INSN(amswap_w,     rrr)
572aae1746cSSong Gao INSN(amswap_d,     rrr)
573aae1746cSSong Gao INSN(amadd_w,      rrr)
574aae1746cSSong Gao INSN(amadd_d,      rrr)
575aae1746cSSong Gao INSN(amand_w,      rrr)
576aae1746cSSong Gao INSN(amand_d,      rrr)
577aae1746cSSong Gao INSN(amor_w,       rrr)
578aae1746cSSong Gao INSN(amor_d,       rrr)
579aae1746cSSong Gao INSN(amxor_w,      rrr)
580aae1746cSSong Gao INSN(amxor_d,      rrr)
581aae1746cSSong Gao INSN(ammax_w,      rrr)
582aae1746cSSong Gao INSN(ammax_d,      rrr)
583aae1746cSSong Gao INSN(ammin_w,      rrr)
584aae1746cSSong Gao INSN(ammin_d,      rrr)
585aae1746cSSong Gao INSN(ammax_wu,     rrr)
586aae1746cSSong Gao INSN(ammax_du,     rrr)
587aae1746cSSong Gao INSN(ammin_wu,     rrr)
588aae1746cSSong Gao INSN(ammin_du,     rrr)
589aae1746cSSong Gao INSN(amswap_db_w,  rrr)
590aae1746cSSong Gao INSN(amswap_db_d,  rrr)
591aae1746cSSong Gao INSN(amadd_db_w,   rrr)
592aae1746cSSong Gao INSN(amadd_db_d,   rrr)
593aae1746cSSong Gao INSN(amand_db_w,   rrr)
594aae1746cSSong Gao INSN(amand_db_d,   rrr)
595aae1746cSSong Gao INSN(amor_db_w,    rrr)
596aae1746cSSong Gao INSN(amor_db_d,    rrr)
597aae1746cSSong Gao INSN(amxor_db_w,   rrr)
598aae1746cSSong Gao INSN(amxor_db_d,   rrr)
599aae1746cSSong Gao INSN(ammax_db_w,   rrr)
600aae1746cSSong Gao INSN(ammax_db_d,   rrr)
601aae1746cSSong Gao INSN(ammin_db_w,   rrr)
602aae1746cSSong Gao INSN(ammin_db_d,   rrr)
603aae1746cSSong Gao INSN(ammax_db_wu,  rrr)
604aae1746cSSong Gao INSN(ammax_db_du,  rrr)
605aae1746cSSong Gao INSN(ammin_db_wu,  rrr)
606aae1746cSSong Gao INSN(ammin_db_du,  rrr)
607aae1746cSSong Gao INSN(dbar,         i)
608aae1746cSSong Gao INSN(ibar,         i)
609aae1746cSSong Gao INSN(fldgt_s,      frr)
610aae1746cSSong Gao INSN(fldgt_d,      frr)
611aae1746cSSong Gao INSN(fldle_s,      frr)
612aae1746cSSong Gao INSN(fldle_d,      frr)
613aae1746cSSong Gao INSN(fstgt_s,      frr)
614aae1746cSSong Gao INSN(fstgt_d,      frr)
615aae1746cSSong Gao INSN(fstle_s,      frr)
616aae1746cSSong Gao INSN(fstle_d,      frr)
617aae1746cSSong Gao INSN(ldgt_b,       rrr)
618aae1746cSSong Gao INSN(ldgt_h,       rrr)
619aae1746cSSong Gao INSN(ldgt_w,       rrr)
620aae1746cSSong Gao INSN(ldgt_d,       rrr)
621aae1746cSSong Gao INSN(ldle_b,       rrr)
622aae1746cSSong Gao INSN(ldle_h,       rrr)
623aae1746cSSong Gao INSN(ldle_w,       rrr)
624aae1746cSSong Gao INSN(ldle_d,       rrr)
625aae1746cSSong Gao INSN(stgt_b,       rrr)
626aae1746cSSong Gao INSN(stgt_h,       rrr)
627aae1746cSSong Gao INSN(stgt_w,       rrr)
628aae1746cSSong Gao INSN(stgt_d,       rrr)
629aae1746cSSong Gao INSN(stle_b,       rrr)
630aae1746cSSong Gao INSN(stle_h,       rrr)
631aae1746cSSong Gao INSN(stle_w,       rrr)
632aae1746cSSong Gao INSN(stle_d,       rrr)
633aae1746cSSong Gao INSN(beqz,         r_offs)
634aae1746cSSong Gao INSN(bnez,         r_offs)
635aae1746cSSong Gao INSN(bceqz,        c_offs)
636aae1746cSSong Gao INSN(bcnez,        c_offs)
637c2b618a8SRichard Henderson INSN(jirl,         rr_i)
638aae1746cSSong Gao INSN(b,            offs)
639aae1746cSSong Gao INSN(bl,           offs)
640aae1746cSSong Gao INSN(beq,          rr_offs)
641aae1746cSSong Gao INSN(bne,          rr_offs)
642aae1746cSSong Gao INSN(blt,          rr_offs)
643aae1746cSSong Gao INSN(bge,          rr_offs)
644aae1746cSSong Gao INSN(bltu,         rr_offs)
645aae1746cSSong Gao INSN(bgeu,         rr_offs)
6465b1dedfeSXiaojuan Yang INSN(csrrd,        r_csr)
6475b1dedfeSXiaojuan Yang INSN(csrwr,        r_csr)
6485b1dedfeSXiaojuan Yang INSN(csrxchg,      rr_csr)
649f84a2aacSXiaojuan Yang INSN(iocsrrd_b,    rr)
650f84a2aacSXiaojuan Yang INSN(iocsrrd_h,    rr)
651f84a2aacSXiaojuan Yang INSN(iocsrrd_w,    rr)
652f84a2aacSXiaojuan Yang INSN(iocsrrd_d,    rr)
653f84a2aacSXiaojuan Yang INSN(iocsrwr_b,    rr)
654f84a2aacSXiaojuan Yang INSN(iocsrwr_h,    rr)
655f84a2aacSXiaojuan Yang INSN(iocsrwr_w,    rr)
656f84a2aacSXiaojuan Yang INSN(iocsrwr_d,    rr)
657fcbbeb8eSXiaojuan Yang INSN(tlbsrch,      empty)
658fcbbeb8eSXiaojuan Yang INSN(tlbrd,        empty)
659fcbbeb8eSXiaojuan Yang INSN(tlbwr,        empty)
660fcbbeb8eSXiaojuan Yang INSN(tlbfill,      empty)
661fcbbeb8eSXiaojuan Yang INSN(tlbclr,       empty)
662fcbbeb8eSXiaojuan Yang INSN(tlbflush,     empty)
663fcbbeb8eSXiaojuan Yang INSN(invtlb,       i_rr)
664d2cba6f7SXiaojuan Yang INSN(cacop,        cop_r_i)
665d2cba6f7SXiaojuan Yang INSN(lddir,        rr_i)
666d2cba6f7SXiaojuan Yang INSN(ldpte,        j_i)
667d2cba6f7SXiaojuan Yang INSN(ertn,         empty)
668d2cba6f7SXiaojuan Yang INSN(idle,         i)
669d2cba6f7SXiaojuan Yang INSN(dbcl,         i)
670aae1746cSSong Gao 
671aae1746cSSong Gao #define output_fcmp(C, PREFIX, SUFFIX)                                         \
672aae1746cSSong Gao {                                                                              \
673aae1746cSSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %s%s\tfcc%d, f%d, f%d", \
674aae1746cSSong Gao                             (C)->insn, PREFIX, SUFFIX, a->cd,                  \
675aae1746cSSong Gao                             a->fj, a->fk);                                     \
676aae1746cSSong Gao }
677aae1746cSSong Gao 
678aae1746cSSong Gao static bool output_cff_fcond(DisasContext *ctx, arg_cff_fcond * a,
679aae1746cSSong Gao                                const char *suffix)
680aae1746cSSong Gao {
681aae1746cSSong Gao     bool ret = true;
682aae1746cSSong Gao     switch (a->fcond) {
683aae1746cSSong Gao     case 0x0:
684aae1746cSSong Gao         output_fcmp(ctx, "fcmp_caf_", suffix);
685aae1746cSSong Gao         break;
686aae1746cSSong Gao     case 0x1:
687aae1746cSSong Gao         output_fcmp(ctx, "fcmp_saf_", suffix);
688aae1746cSSong Gao         break;
689aae1746cSSong Gao     case 0x2:
690aae1746cSSong Gao         output_fcmp(ctx, "fcmp_clt_", suffix);
691aae1746cSSong Gao         break;
692aae1746cSSong Gao     case 0x3:
693aae1746cSSong Gao         output_fcmp(ctx, "fcmp_slt_", suffix);
694aae1746cSSong Gao         break;
695aae1746cSSong Gao     case 0x4:
696aae1746cSSong Gao         output_fcmp(ctx, "fcmp_ceq_", suffix);
697aae1746cSSong Gao         break;
698aae1746cSSong Gao     case 0x5:
699aae1746cSSong Gao         output_fcmp(ctx, "fcmp_seq_", suffix);
700aae1746cSSong Gao         break;
701aae1746cSSong Gao     case 0x6:
702aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cle_", suffix);
703aae1746cSSong Gao         break;
704aae1746cSSong Gao     case 0x7:
705aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sle_", suffix);
706aae1746cSSong Gao         break;
707aae1746cSSong Gao     case 0x8:
708aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cun_", suffix);
709aae1746cSSong Gao         break;
710aae1746cSSong Gao     case 0x9:
711aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sun_", suffix);
712aae1746cSSong Gao         break;
713aae1746cSSong Gao     case 0xA:
714aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cult_", suffix);
715aae1746cSSong Gao         break;
716aae1746cSSong Gao     case 0xB:
717aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sult_", suffix);
718aae1746cSSong Gao         break;
719aae1746cSSong Gao     case 0xC:
720aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cueq_", suffix);
721aae1746cSSong Gao         break;
722aae1746cSSong Gao     case 0xD:
723aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sueq_", suffix);
724aae1746cSSong Gao         break;
725aae1746cSSong Gao     case 0xE:
726aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cule_", suffix);
727aae1746cSSong Gao         break;
728aae1746cSSong Gao     case 0xF:
729aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sule_", suffix);
730aae1746cSSong Gao         break;
731aae1746cSSong Gao     case 0x10:
732aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cne_", suffix);
733aae1746cSSong Gao         break;
734aae1746cSSong Gao     case 0x11:
735aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sne_", suffix);
736aae1746cSSong Gao         break;
737aae1746cSSong Gao     case 0x14:
738aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cor_", suffix);
739aae1746cSSong Gao         break;
740aae1746cSSong Gao     case 0x15:
741aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sor_", suffix);
742aae1746cSSong Gao         break;
743aae1746cSSong Gao     case 0x18:
744aae1746cSSong Gao         output_fcmp(ctx, "fcmp_cune_", suffix);
745aae1746cSSong Gao         break;
746aae1746cSSong Gao     case 0x19:
747aae1746cSSong Gao         output_fcmp(ctx, "fcmp_sune_", suffix);
748aae1746cSSong Gao         break;
749aae1746cSSong Gao     default:
750aae1746cSSong Gao         ret = false;
751aae1746cSSong Gao     }
752aae1746cSSong Gao     return ret;
753aae1746cSSong Gao }
754aae1746cSSong Gao 
755aae1746cSSong Gao #define FCMP_INSN(suffix)                               \
756aae1746cSSong Gao static bool trans_fcmp_cond_##suffix(DisasContext *ctx, \
757aae1746cSSong Gao                                      arg_cff_fcond * a) \
758aae1746cSSong Gao {                                                       \
759aae1746cSSong Gao     return output_cff_fcond(ctx, a, #suffix);           \
760aae1746cSSong Gao }
761aae1746cSSong Gao 
762aae1746cSSong Gao FCMP_INSN(s)
763aae1746cSSong Gao FCMP_INSN(d)
76469c9a5cfSRichard Henderson 
76569c9a5cfSRichard Henderson #define PCADD_INSN(name)                                        \
76669c9a5cfSRichard Henderson static bool trans_##name(DisasContext *ctx, arg_##name *a)      \
76769c9a5cfSRichard Henderson {                                                               \
76869c9a5cfSRichard Henderson     output(ctx, #name, "r%d, %d # 0x%" PRIx64,                  \
76969c9a5cfSRichard Henderson            a->rd, a->imm, gen_##name(ctx->pc, a->imm));         \
77069c9a5cfSRichard Henderson     return true;                                                \
77169c9a5cfSRichard Henderson }
77269c9a5cfSRichard Henderson 
77369c9a5cfSRichard Henderson static uint64_t gen_pcaddi(uint64_t pc, int imm)
77469c9a5cfSRichard Henderson {
77569c9a5cfSRichard Henderson     return pc + (imm << 2);
77669c9a5cfSRichard Henderson }
77769c9a5cfSRichard Henderson 
77869c9a5cfSRichard Henderson static uint64_t gen_pcalau12i(uint64_t pc, int imm)
77969c9a5cfSRichard Henderson {
78069c9a5cfSRichard Henderson     return (pc + (imm << 12)) & ~0xfff;
78169c9a5cfSRichard Henderson }
78269c9a5cfSRichard Henderson 
78369c9a5cfSRichard Henderson static uint64_t gen_pcaddu12i(uint64_t pc, int imm)
78469c9a5cfSRichard Henderson {
78569c9a5cfSRichard Henderson     return pc + (imm << 12);
78669c9a5cfSRichard Henderson }
78769c9a5cfSRichard Henderson 
78869c9a5cfSRichard Henderson static uint64_t gen_pcaddu18i(uint64_t pc, int imm)
78969c9a5cfSRichard Henderson {
79069c9a5cfSRichard Henderson     return pc + ((uint64_t)(imm) << 18);
79169c9a5cfSRichard Henderson }
79269c9a5cfSRichard Henderson 
79369c9a5cfSRichard Henderson PCADD_INSN(pcaddi)
79469c9a5cfSRichard Henderson PCADD_INSN(pcalau12i)
79569c9a5cfSRichard Henderson PCADD_INSN(pcaddu12i)
79669c9a5cfSRichard Henderson PCADD_INSN(pcaddu18i)
79757b4f1acSSong Gao 
79857b4f1acSSong Gao #define INSN_LSX(insn, type)                                \
79957b4f1acSSong Gao static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
80057b4f1acSSong Gao {                                                           \
80157b4f1acSSong Gao     output_##type(ctx, a, #insn);                           \
80257b4f1acSSong Gao     return true;                                            \
80357b4f1acSSong Gao }
80457b4f1acSSong Gao 
805d0dfa19aSSong Gao static void output_cv(DisasContext *ctx, arg_cv *a,
806d0dfa19aSSong Gao                         const char *mnemonic)
807d0dfa19aSSong Gao {
808d0dfa19aSSong Gao     output(ctx, mnemonic, "fcc%d, v%d", a->cd, a->vj);
809d0dfa19aSSong Gao }
810d0dfa19aSSong Gao 
81157b4f1acSSong Gao static void output_vvv(DisasContext *ctx, arg_vvv *a, const char *mnemonic)
81257b4f1acSSong Gao {
81357b4f1acSSong Gao     output(ctx, mnemonic, "v%d, v%d, v%d", a->vd, a->vj, a->vk);
81457b4f1acSSong Gao }
81557b4f1acSSong Gao 
816d8be64c1SSong Gao static void output_vv_i(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
817d8be64c1SSong Gao {
818d8be64c1SSong Gao     output(ctx, mnemonic, "v%d, v%d, 0x%x", a->vd, a->vj, a->imm);
819d8be64c1SSong Gao }
820d8be64c1SSong Gao 
821be9ec557SSong Gao static void output_vv(DisasContext *ctx, arg_vv *a, const char *mnemonic)
822be9ec557SSong Gao {
823be9ec557SSong Gao     output(ctx, mnemonic, "v%d, v%d", a->vd, a->vj);
824be9ec557SSong Gao }
825be9ec557SSong Gao 
826aca67472SSong Gao static void output_vvvv(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
827aca67472SSong Gao {
828aca67472SSong Gao     output(ctx, mnemonic, "v%d, v%d, v%d, v%d", a->vd, a->vj, a->vk, a->va);
829aca67472SSong Gao }
830aca67472SSong Gao 
831cdbdefbfSSong Gao static void output_vr_i(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
832cdbdefbfSSong Gao {
833cdbdefbfSSong Gao     output(ctx, mnemonic, "v%d, r%d, 0x%x", a->vd, a->rj, a->imm);
834cdbdefbfSSong Gao }
835cdbdefbfSSong Gao 
836843b627aSSong Gao static void output_vr_ii(DisasContext *ctx, arg_vr_ii *a, const char *mnemonic)
837843b627aSSong Gao {
838843b627aSSong Gao     output(ctx, mnemonic, "v%d, r%d, 0x%x, 0x%x", a->vd, a->rj, a->imm, a->imm2);
839843b627aSSong Gao }
840843b627aSSong Gao 
841cdbdefbfSSong Gao static void output_rv_i(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
842cdbdefbfSSong Gao {
843cdbdefbfSSong Gao     output(ctx, mnemonic, "r%d, v%d, 0x%x", a->rd, a->vj,  a->imm);
844cdbdefbfSSong Gao }
845cdbdefbfSSong Gao 
846cdbdefbfSSong Gao static void output_vr(DisasContext *ctx, arg_vr *a, const char *mnemonic)
847cdbdefbfSSong Gao {
848cdbdefbfSSong Gao     output(ctx, mnemonic, "v%d, r%d", a->vd, a->rj);
849cdbdefbfSSong Gao }
850cdbdefbfSSong Gao 
851d5e5563cSSong Gao static void output_vvr(DisasContext *ctx, arg_vvr *a, const char *mnemonic)
852d5e5563cSSong Gao {
853d5e5563cSSong Gao     output(ctx, mnemonic, "v%d, v%d, r%d", a->vd, a->vj, a->rk);
854d5e5563cSSong Gao }
855d5e5563cSSong Gao 
856843b627aSSong Gao static void output_vrr(DisasContext *ctx, arg_vrr *a, const char *mnemonic)
857843b627aSSong Gao {
858843b627aSSong Gao     output(ctx, mnemonic, "v%d, r%d, r%d", a->vd, a->rj, a->rk);
859843b627aSSong Gao }
860843b627aSSong Gao 
86129bb5d72SSong Gao static void output_v_i(DisasContext *ctx, arg_v_i *a, const char *mnemonic)
86229bb5d72SSong Gao {
86329bb5d72SSong Gao     output(ctx, mnemonic, "v%d, 0x%x", a->vd, a->imm);
86429bb5d72SSong Gao }
86529bb5d72SSong Gao 
86657b4f1acSSong Gao INSN_LSX(vadd_b,           vvv)
86757b4f1acSSong Gao INSN_LSX(vadd_h,           vvv)
86857b4f1acSSong Gao INSN_LSX(vadd_w,           vvv)
86957b4f1acSSong Gao INSN_LSX(vadd_d,           vvv)
87057b4f1acSSong Gao INSN_LSX(vadd_q,           vvv)
87157b4f1acSSong Gao INSN_LSX(vsub_b,           vvv)
87257b4f1acSSong Gao INSN_LSX(vsub_h,           vvv)
87357b4f1acSSong Gao INSN_LSX(vsub_w,           vvv)
87457b4f1acSSong Gao INSN_LSX(vsub_d,           vvv)
87557b4f1acSSong Gao INSN_LSX(vsub_q,           vvv)
876d8be64c1SSong Gao 
877d8be64c1SSong Gao INSN_LSX(vaddi_bu,         vv_i)
878d8be64c1SSong Gao INSN_LSX(vaddi_hu,         vv_i)
879d8be64c1SSong Gao INSN_LSX(vaddi_wu,         vv_i)
880d8be64c1SSong Gao INSN_LSX(vaddi_du,         vv_i)
881d8be64c1SSong Gao INSN_LSX(vsubi_bu,         vv_i)
882d8be64c1SSong Gao INSN_LSX(vsubi_hu,         vv_i)
883d8be64c1SSong Gao INSN_LSX(vsubi_wu,         vv_i)
884d8be64c1SSong Gao INSN_LSX(vsubi_du,         vv_i)
885be9ec557SSong Gao 
886be9ec557SSong Gao INSN_LSX(vneg_b,           vv)
887be9ec557SSong Gao INSN_LSX(vneg_h,           vv)
888be9ec557SSong Gao INSN_LSX(vneg_w,           vv)
889be9ec557SSong Gao INSN_LSX(vneg_d,           vv)
890a94cb911SSong Gao 
891a94cb911SSong Gao INSN_LSX(vsadd_b,          vvv)
892a94cb911SSong Gao INSN_LSX(vsadd_h,          vvv)
893a94cb911SSong Gao INSN_LSX(vsadd_w,          vvv)
894a94cb911SSong Gao INSN_LSX(vsadd_d,          vvv)
895a94cb911SSong Gao INSN_LSX(vsadd_bu,         vvv)
896a94cb911SSong Gao INSN_LSX(vsadd_hu,         vvv)
897a94cb911SSong Gao INSN_LSX(vsadd_wu,         vvv)
898a94cb911SSong Gao INSN_LSX(vsadd_du,         vvv)
899a94cb911SSong Gao INSN_LSX(vssub_b,          vvv)
900a94cb911SSong Gao INSN_LSX(vssub_h,          vvv)
901a94cb911SSong Gao INSN_LSX(vssub_w,          vvv)
902a94cb911SSong Gao INSN_LSX(vssub_d,          vvv)
903a94cb911SSong Gao INSN_LSX(vssub_bu,         vvv)
904a94cb911SSong Gao INSN_LSX(vssub_hu,         vvv)
905a94cb911SSong Gao INSN_LSX(vssub_wu,         vvv)
906a94cb911SSong Gao INSN_LSX(vssub_du,         vvv)
907c037fbc9SSong Gao 
908c037fbc9SSong Gao INSN_LSX(vhaddw_h_b,       vvv)
909c037fbc9SSong Gao INSN_LSX(vhaddw_w_h,       vvv)
910c037fbc9SSong Gao INSN_LSX(vhaddw_d_w,       vvv)
911c037fbc9SSong Gao INSN_LSX(vhaddw_q_d,       vvv)
912c037fbc9SSong Gao INSN_LSX(vhaddw_hu_bu,     vvv)
913c037fbc9SSong Gao INSN_LSX(vhaddw_wu_hu,     vvv)
914c037fbc9SSong Gao INSN_LSX(vhaddw_du_wu,     vvv)
915c037fbc9SSong Gao INSN_LSX(vhaddw_qu_du,     vvv)
916c037fbc9SSong Gao INSN_LSX(vhsubw_h_b,       vvv)
917c037fbc9SSong Gao INSN_LSX(vhsubw_w_h,       vvv)
918c037fbc9SSong Gao INSN_LSX(vhsubw_d_w,       vvv)
919c037fbc9SSong Gao INSN_LSX(vhsubw_q_d,       vvv)
920c037fbc9SSong Gao INSN_LSX(vhsubw_hu_bu,     vvv)
921c037fbc9SSong Gao INSN_LSX(vhsubw_wu_hu,     vvv)
922c037fbc9SSong Gao INSN_LSX(vhsubw_du_wu,     vvv)
923c037fbc9SSong Gao INSN_LSX(vhsubw_qu_du,     vvv)
9242d5f950cSSong Gao 
9252d5f950cSSong Gao INSN_LSX(vaddwev_h_b,      vvv)
9262d5f950cSSong Gao INSN_LSX(vaddwev_w_h,      vvv)
9272d5f950cSSong Gao INSN_LSX(vaddwev_d_w,      vvv)
9282d5f950cSSong Gao INSN_LSX(vaddwev_q_d,      vvv)
9292d5f950cSSong Gao INSN_LSX(vaddwod_h_b,      vvv)
9302d5f950cSSong Gao INSN_LSX(vaddwod_w_h,      vvv)
9312d5f950cSSong Gao INSN_LSX(vaddwod_d_w,      vvv)
9322d5f950cSSong Gao INSN_LSX(vaddwod_q_d,      vvv)
9332d5f950cSSong Gao INSN_LSX(vsubwev_h_b,      vvv)
9342d5f950cSSong Gao INSN_LSX(vsubwev_w_h,      vvv)
9352d5f950cSSong Gao INSN_LSX(vsubwev_d_w,      vvv)
9362d5f950cSSong Gao INSN_LSX(vsubwev_q_d,      vvv)
9372d5f950cSSong Gao INSN_LSX(vsubwod_h_b,      vvv)
9382d5f950cSSong Gao INSN_LSX(vsubwod_w_h,      vvv)
9392d5f950cSSong Gao INSN_LSX(vsubwod_d_w,      vvv)
9402d5f950cSSong Gao INSN_LSX(vsubwod_q_d,      vvv)
9412d5f950cSSong Gao 
9422d5f950cSSong Gao INSN_LSX(vaddwev_h_bu,     vvv)
9432d5f950cSSong Gao INSN_LSX(vaddwev_w_hu,     vvv)
9442d5f950cSSong Gao INSN_LSX(vaddwev_d_wu,     vvv)
9452d5f950cSSong Gao INSN_LSX(vaddwev_q_du,     vvv)
9462d5f950cSSong Gao INSN_LSX(vaddwod_h_bu,     vvv)
9472d5f950cSSong Gao INSN_LSX(vaddwod_w_hu,     vvv)
9482d5f950cSSong Gao INSN_LSX(vaddwod_d_wu,     vvv)
9492d5f950cSSong Gao INSN_LSX(vaddwod_q_du,     vvv)
9502d5f950cSSong Gao INSN_LSX(vsubwev_h_bu,     vvv)
9512d5f950cSSong Gao INSN_LSX(vsubwev_w_hu,     vvv)
9522d5f950cSSong Gao INSN_LSX(vsubwev_d_wu,     vvv)
9532d5f950cSSong Gao INSN_LSX(vsubwev_q_du,     vvv)
9542d5f950cSSong Gao INSN_LSX(vsubwod_h_bu,     vvv)
9552d5f950cSSong Gao INSN_LSX(vsubwod_w_hu,     vvv)
9562d5f950cSSong Gao INSN_LSX(vsubwod_d_wu,     vvv)
9572d5f950cSSong Gao INSN_LSX(vsubwod_q_du,     vvv)
9582d5f950cSSong Gao 
9592d5f950cSSong Gao INSN_LSX(vaddwev_h_bu_b,   vvv)
9602d5f950cSSong Gao INSN_LSX(vaddwev_w_hu_h,   vvv)
9612d5f950cSSong Gao INSN_LSX(vaddwev_d_wu_w,   vvv)
9622d5f950cSSong Gao INSN_LSX(vaddwev_q_du_d,   vvv)
9632d5f950cSSong Gao INSN_LSX(vaddwod_h_bu_b,   vvv)
9642d5f950cSSong Gao INSN_LSX(vaddwod_w_hu_h,   vvv)
9652d5f950cSSong Gao INSN_LSX(vaddwod_d_wu_w,   vvv)
9662d5f950cSSong Gao INSN_LSX(vaddwod_q_du_d,   vvv)
96739e9b0a7SSong Gao 
96839e9b0a7SSong Gao INSN_LSX(vavg_b,           vvv)
96939e9b0a7SSong Gao INSN_LSX(vavg_h,           vvv)
97039e9b0a7SSong Gao INSN_LSX(vavg_w,           vvv)
97139e9b0a7SSong Gao INSN_LSX(vavg_d,           vvv)
97239e9b0a7SSong Gao INSN_LSX(vavg_bu,          vvv)
97339e9b0a7SSong Gao INSN_LSX(vavg_hu,          vvv)
97439e9b0a7SSong Gao INSN_LSX(vavg_wu,          vvv)
97539e9b0a7SSong Gao INSN_LSX(vavg_du,          vvv)
97639e9b0a7SSong Gao INSN_LSX(vavgr_b,          vvv)
97739e9b0a7SSong Gao INSN_LSX(vavgr_h,          vvv)
97839e9b0a7SSong Gao INSN_LSX(vavgr_w,          vvv)
97939e9b0a7SSong Gao INSN_LSX(vavgr_d,          vvv)
98039e9b0a7SSong Gao INSN_LSX(vavgr_bu,         vvv)
98139e9b0a7SSong Gao INSN_LSX(vavgr_hu,         vvv)
98239e9b0a7SSong Gao INSN_LSX(vavgr_wu,         vvv)
98339e9b0a7SSong Gao INSN_LSX(vavgr_du,         vvv)
98449725659SSong Gao 
98549725659SSong Gao INSN_LSX(vabsd_b,          vvv)
98649725659SSong Gao INSN_LSX(vabsd_h,          vvv)
98749725659SSong Gao INSN_LSX(vabsd_w,          vvv)
98849725659SSong Gao INSN_LSX(vabsd_d,          vvv)
98949725659SSong Gao INSN_LSX(vabsd_bu,         vvv)
99049725659SSong Gao INSN_LSX(vabsd_hu,         vvv)
99149725659SSong Gao INSN_LSX(vabsd_wu,         vvv)
99249725659SSong Gao INSN_LSX(vabsd_du,         vvv)
993af448cb3SSong Gao 
994af448cb3SSong Gao INSN_LSX(vadda_b,          vvv)
995af448cb3SSong Gao INSN_LSX(vadda_h,          vvv)
996af448cb3SSong Gao INSN_LSX(vadda_w,          vvv)
997af448cb3SSong Gao INSN_LSX(vadda_d,          vvv)
9989ab29520SSong Gao 
9999ab29520SSong Gao INSN_LSX(vmax_b,           vvv)
10009ab29520SSong Gao INSN_LSX(vmax_h,           vvv)
10019ab29520SSong Gao INSN_LSX(vmax_w,           vvv)
10029ab29520SSong Gao INSN_LSX(vmax_d,           vvv)
10039ab29520SSong Gao INSN_LSX(vmin_b,           vvv)
10049ab29520SSong Gao INSN_LSX(vmin_h,           vvv)
10059ab29520SSong Gao INSN_LSX(vmin_w,           vvv)
10069ab29520SSong Gao INSN_LSX(vmin_d,           vvv)
10079ab29520SSong Gao INSN_LSX(vmax_bu,          vvv)
10089ab29520SSong Gao INSN_LSX(vmax_hu,          vvv)
10099ab29520SSong Gao INSN_LSX(vmax_wu,          vvv)
10109ab29520SSong Gao INSN_LSX(vmax_du,          vvv)
10119ab29520SSong Gao INSN_LSX(vmin_bu,          vvv)
10129ab29520SSong Gao INSN_LSX(vmin_hu,          vvv)
10139ab29520SSong Gao INSN_LSX(vmin_wu,          vvv)
10149ab29520SSong Gao INSN_LSX(vmin_du,          vvv)
10159ab29520SSong Gao INSN_LSX(vmaxi_b,          vv_i)
10169ab29520SSong Gao INSN_LSX(vmaxi_h,          vv_i)
10179ab29520SSong Gao INSN_LSX(vmaxi_w,          vv_i)
10189ab29520SSong Gao INSN_LSX(vmaxi_d,          vv_i)
10199ab29520SSong Gao INSN_LSX(vmini_b,          vv_i)
10209ab29520SSong Gao INSN_LSX(vmini_h,          vv_i)
10219ab29520SSong Gao INSN_LSX(vmini_w,          vv_i)
10229ab29520SSong Gao INSN_LSX(vmini_d,          vv_i)
10239ab29520SSong Gao INSN_LSX(vmaxi_bu,         vv_i)
10249ab29520SSong Gao INSN_LSX(vmaxi_hu,         vv_i)
10259ab29520SSong Gao INSN_LSX(vmaxi_wu,         vv_i)
10269ab29520SSong Gao INSN_LSX(vmaxi_du,         vv_i)
10279ab29520SSong Gao INSN_LSX(vmini_bu,         vv_i)
10289ab29520SSong Gao INSN_LSX(vmini_hu,         vv_i)
10299ab29520SSong Gao INSN_LSX(vmini_wu,         vv_i)
10309ab29520SSong Gao INSN_LSX(vmini_du,         vv_i)
1031cd1c49adSSong Gao 
1032cd1c49adSSong Gao INSN_LSX(vmul_b,           vvv)
1033cd1c49adSSong Gao INSN_LSX(vmul_h,           vvv)
1034cd1c49adSSong Gao INSN_LSX(vmul_w,           vvv)
1035cd1c49adSSong Gao INSN_LSX(vmul_d,           vvv)
1036cd1c49adSSong Gao INSN_LSX(vmuh_b,           vvv)
1037cd1c49adSSong Gao INSN_LSX(vmuh_h,           vvv)
1038cd1c49adSSong Gao INSN_LSX(vmuh_w,           vvv)
1039cd1c49adSSong Gao INSN_LSX(vmuh_d,           vvv)
1040cd1c49adSSong Gao INSN_LSX(vmuh_bu,          vvv)
1041cd1c49adSSong Gao INSN_LSX(vmuh_hu,          vvv)
1042cd1c49adSSong Gao INSN_LSX(vmuh_wu,          vvv)
1043cd1c49adSSong Gao INSN_LSX(vmuh_du,          vvv)
1044cd1c49adSSong Gao 
1045cd1c49adSSong Gao INSN_LSX(vmulwev_h_b,      vvv)
1046cd1c49adSSong Gao INSN_LSX(vmulwev_w_h,      vvv)
1047cd1c49adSSong Gao INSN_LSX(vmulwev_d_w,      vvv)
1048cd1c49adSSong Gao INSN_LSX(vmulwev_q_d,      vvv)
1049cd1c49adSSong Gao INSN_LSX(vmulwod_h_b,      vvv)
1050cd1c49adSSong Gao INSN_LSX(vmulwod_w_h,      vvv)
1051cd1c49adSSong Gao INSN_LSX(vmulwod_d_w,      vvv)
1052cd1c49adSSong Gao INSN_LSX(vmulwod_q_d,      vvv)
1053cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu,     vvv)
1054cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu,     vvv)
1055cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu,     vvv)
1056cd1c49adSSong Gao INSN_LSX(vmulwev_q_du,     vvv)
1057cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu,     vvv)
1058cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu,     vvv)
1059cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu,     vvv)
1060cd1c49adSSong Gao INSN_LSX(vmulwod_q_du,     vvv)
1061cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu_b,   vvv)
1062cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu_h,   vvv)
1063cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu_w,   vvv)
1064cd1c49adSSong Gao INSN_LSX(vmulwev_q_du_d,   vvv)
1065cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu_b,   vvv)
1066cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu_h,   vvv)
1067cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu_w,   vvv)
1068cd1c49adSSong Gao INSN_LSX(vmulwod_q_du_d,   vvv)
1069d3aec65bSSong Gao 
1070d3aec65bSSong Gao INSN_LSX(vmadd_b,          vvv)
1071d3aec65bSSong Gao INSN_LSX(vmadd_h,          vvv)
1072d3aec65bSSong Gao INSN_LSX(vmadd_w,          vvv)
1073d3aec65bSSong Gao INSN_LSX(vmadd_d,          vvv)
1074d3aec65bSSong Gao INSN_LSX(vmsub_b,          vvv)
1075d3aec65bSSong Gao INSN_LSX(vmsub_h,          vvv)
1076d3aec65bSSong Gao INSN_LSX(vmsub_w,          vvv)
1077d3aec65bSSong Gao INSN_LSX(vmsub_d,          vvv)
1078d3aec65bSSong Gao 
1079d3aec65bSSong Gao INSN_LSX(vmaddwev_h_b,     vvv)
1080d3aec65bSSong Gao INSN_LSX(vmaddwev_w_h,     vvv)
1081d3aec65bSSong Gao INSN_LSX(vmaddwev_d_w,     vvv)
1082d3aec65bSSong Gao INSN_LSX(vmaddwev_q_d,     vvv)
1083d3aec65bSSong Gao INSN_LSX(vmaddwod_h_b,     vvv)
1084d3aec65bSSong Gao INSN_LSX(vmaddwod_w_h,     vvv)
1085d3aec65bSSong Gao INSN_LSX(vmaddwod_d_w,     vvv)
1086d3aec65bSSong Gao INSN_LSX(vmaddwod_q_d,     vvv)
1087d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu,    vvv)
1088d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu,    vvv)
1089d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu,    vvv)
1090d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du,    vvv)
1091d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu,    vvv)
1092d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu,    vvv)
1093d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu,    vvv)
1094d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du,    vvv)
1095d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu_b,  vvv)
1096d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu_h,  vvv)
1097d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu_w,  vvv)
1098d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du_d,  vvv)
1099d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu_b,  vvv)
1100d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu_h,  vvv)
1101d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu_w,  vvv)
1102d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du_d,  vvv)
11034cc4c0f7SSong Gao 
11044cc4c0f7SSong Gao INSN_LSX(vdiv_b,           vvv)
11054cc4c0f7SSong Gao INSN_LSX(vdiv_h,           vvv)
11064cc4c0f7SSong Gao INSN_LSX(vdiv_w,           vvv)
11074cc4c0f7SSong Gao INSN_LSX(vdiv_d,           vvv)
11084cc4c0f7SSong Gao INSN_LSX(vdiv_bu,          vvv)
11094cc4c0f7SSong Gao INSN_LSX(vdiv_hu,          vvv)
11104cc4c0f7SSong Gao INSN_LSX(vdiv_wu,          vvv)
11114cc4c0f7SSong Gao INSN_LSX(vdiv_du,          vvv)
11124cc4c0f7SSong Gao INSN_LSX(vmod_b,           vvv)
11134cc4c0f7SSong Gao INSN_LSX(vmod_h,           vvv)
11144cc4c0f7SSong Gao INSN_LSX(vmod_w,           vvv)
11154cc4c0f7SSong Gao INSN_LSX(vmod_d,           vvv)
11164cc4c0f7SSong Gao INSN_LSX(vmod_bu,          vvv)
11174cc4c0f7SSong Gao INSN_LSX(vmod_hu,          vvv)
11184cc4c0f7SSong Gao INSN_LSX(vmod_wu,          vvv)
11194cc4c0f7SSong Gao INSN_LSX(vmod_du,          vvv)
1120cbe44190SSong Gao 
1121cbe44190SSong Gao INSN_LSX(vsat_b,           vv_i)
1122cbe44190SSong Gao INSN_LSX(vsat_h,           vv_i)
1123cbe44190SSong Gao INSN_LSX(vsat_w,           vv_i)
1124cbe44190SSong Gao INSN_LSX(vsat_d,           vv_i)
1125cbe44190SSong Gao INSN_LSX(vsat_bu,          vv_i)
1126cbe44190SSong Gao INSN_LSX(vsat_hu,          vv_i)
1127cbe44190SSong Gao INSN_LSX(vsat_wu,          vv_i)
1128cbe44190SSong Gao INSN_LSX(vsat_du,          vv_i)
11293734ad93SSong Gao 
11303734ad93SSong Gao INSN_LSX(vexth_h_b,        vv)
11313734ad93SSong Gao INSN_LSX(vexth_w_h,        vv)
11323734ad93SSong Gao INSN_LSX(vexth_d_w,        vv)
11333734ad93SSong Gao INSN_LSX(vexth_q_d,        vv)
11343734ad93SSong Gao INSN_LSX(vexth_hu_bu,      vv)
11353734ad93SSong Gao INSN_LSX(vexth_wu_hu,      vv)
11363734ad93SSong Gao INSN_LSX(vexth_du_wu,      vv)
11373734ad93SSong Gao INSN_LSX(vexth_qu_du,      vv)
1138f0e395dfSSong Gao 
1139f0e395dfSSong Gao INSN_LSX(vsigncov_b,       vvv)
1140f0e395dfSSong Gao INSN_LSX(vsigncov_h,       vvv)
1141f0e395dfSSong Gao INSN_LSX(vsigncov_w,       vvv)
1142f0e395dfSSong Gao INSN_LSX(vsigncov_d,       vvv)
1143789f4a4cSSong Gao 
1144789f4a4cSSong Gao INSN_LSX(vmskltz_b,        vv)
1145789f4a4cSSong Gao INSN_LSX(vmskltz_h,        vv)
1146789f4a4cSSong Gao INSN_LSX(vmskltz_w,        vv)
1147789f4a4cSSong Gao INSN_LSX(vmskltz_d,        vv)
1148789f4a4cSSong Gao INSN_LSX(vmskgez_b,        vv)
1149789f4a4cSSong Gao INSN_LSX(vmsknz_b,         vv)
1150f205a539SSong Gao 
115129bb5d72SSong Gao INSN_LSX(vldi,             v_i)
115229bb5d72SSong Gao 
1153f205a539SSong Gao INSN_LSX(vand_v,           vvv)
1154f205a539SSong Gao INSN_LSX(vor_v,            vvv)
1155f205a539SSong Gao INSN_LSX(vxor_v,           vvv)
1156f205a539SSong Gao INSN_LSX(vnor_v,           vvv)
1157f205a539SSong Gao INSN_LSX(vandn_v,          vvv)
1158f205a539SSong Gao INSN_LSX(vorn_v,           vvv)
1159f205a539SSong Gao 
1160f205a539SSong Gao INSN_LSX(vandi_b,          vv_i)
1161f205a539SSong Gao INSN_LSX(vori_b,           vv_i)
1162f205a539SSong Gao INSN_LSX(vxori_b,          vv_i)
1163f205a539SSong Gao INSN_LSX(vnori_b,          vv_i)
1164b281d696SSong Gao 
1165b281d696SSong Gao INSN_LSX(vsll_b,           vvv)
1166b281d696SSong Gao INSN_LSX(vsll_h,           vvv)
1167b281d696SSong Gao INSN_LSX(vsll_w,           vvv)
1168b281d696SSong Gao INSN_LSX(vsll_d,           vvv)
1169b281d696SSong Gao INSN_LSX(vslli_b,          vv_i)
1170b281d696SSong Gao INSN_LSX(vslli_h,          vv_i)
1171b281d696SSong Gao INSN_LSX(vslli_w,          vv_i)
1172b281d696SSong Gao INSN_LSX(vslli_d,          vv_i)
1173b281d696SSong Gao 
1174b281d696SSong Gao INSN_LSX(vsrl_b,           vvv)
1175b281d696SSong Gao INSN_LSX(vsrl_h,           vvv)
1176b281d696SSong Gao INSN_LSX(vsrl_w,           vvv)
1177b281d696SSong Gao INSN_LSX(vsrl_d,           vvv)
1178b281d696SSong Gao INSN_LSX(vsrli_b,          vv_i)
1179b281d696SSong Gao INSN_LSX(vsrli_h,          vv_i)
1180b281d696SSong Gao INSN_LSX(vsrli_w,          vv_i)
1181b281d696SSong Gao INSN_LSX(vsrli_d,          vv_i)
1182b281d696SSong Gao 
1183b281d696SSong Gao INSN_LSX(vsra_b,           vvv)
1184b281d696SSong Gao INSN_LSX(vsra_h,           vvv)
1185b281d696SSong Gao INSN_LSX(vsra_w,           vvv)
1186b281d696SSong Gao INSN_LSX(vsra_d,           vvv)
1187b281d696SSong Gao INSN_LSX(vsrai_b,          vv_i)
1188b281d696SSong Gao INSN_LSX(vsrai_h,          vv_i)
1189b281d696SSong Gao INSN_LSX(vsrai_w,          vv_i)
1190b281d696SSong Gao INSN_LSX(vsrai_d,          vv_i)
1191b281d696SSong Gao 
1192b281d696SSong Gao INSN_LSX(vrotr_b,          vvv)
1193b281d696SSong Gao INSN_LSX(vrotr_h,          vvv)
1194b281d696SSong Gao INSN_LSX(vrotr_w,          vvv)
1195b281d696SSong Gao INSN_LSX(vrotr_d,          vvv)
1196b281d696SSong Gao INSN_LSX(vrotri_b,         vv_i)
1197b281d696SSong Gao INSN_LSX(vrotri_h,         vv_i)
1198b281d696SSong Gao INSN_LSX(vrotri_w,         vv_i)
1199b281d696SSong Gao INSN_LSX(vrotri_d,         vv_i)
12009b21a7a5SSong Gao 
12019b21a7a5SSong Gao INSN_LSX(vsllwil_h_b,      vv_i)
12029b21a7a5SSong Gao INSN_LSX(vsllwil_w_h,      vv_i)
12039b21a7a5SSong Gao INSN_LSX(vsllwil_d_w,      vv_i)
12049b21a7a5SSong Gao INSN_LSX(vextl_q_d,        vv)
12059b21a7a5SSong Gao INSN_LSX(vsllwil_hu_bu,    vv_i)
12069b21a7a5SSong Gao INSN_LSX(vsllwil_wu_hu,    vv_i)
12079b21a7a5SSong Gao INSN_LSX(vsllwil_du_wu,    vv_i)
12089b21a7a5SSong Gao INSN_LSX(vextl_qu_du,      vv)
1209ecb93716SSong Gao 
1210ecb93716SSong Gao INSN_LSX(vsrlr_b,          vvv)
1211ecb93716SSong Gao INSN_LSX(vsrlr_h,          vvv)
1212ecb93716SSong Gao INSN_LSX(vsrlr_w,          vvv)
1213ecb93716SSong Gao INSN_LSX(vsrlr_d,          vvv)
1214ecb93716SSong Gao INSN_LSX(vsrlri_b,         vv_i)
1215ecb93716SSong Gao INSN_LSX(vsrlri_h,         vv_i)
1216ecb93716SSong Gao INSN_LSX(vsrlri_w,         vv_i)
1217ecb93716SSong Gao INSN_LSX(vsrlri_d,         vv_i)
1218ecb93716SSong Gao 
1219ecb93716SSong Gao INSN_LSX(vsrar_b,          vvv)
1220ecb93716SSong Gao INSN_LSX(vsrar_h,          vvv)
1221ecb93716SSong Gao INSN_LSX(vsrar_w,          vvv)
1222ecb93716SSong Gao INSN_LSX(vsrar_d,          vvv)
1223ecb93716SSong Gao INSN_LSX(vsrari_b,         vv_i)
1224ecb93716SSong Gao INSN_LSX(vsrari_h,         vv_i)
1225ecb93716SSong Gao INSN_LSX(vsrari_w,         vv_i)
1226ecb93716SSong Gao INSN_LSX(vsrari_d,         vv_i)
1227d79fb8ddSSong Gao 
1228d79fb8ddSSong Gao INSN_LSX(vsrln_b_h,       vvv)
1229d79fb8ddSSong Gao INSN_LSX(vsrln_h_w,       vvv)
1230d79fb8ddSSong Gao INSN_LSX(vsrln_w_d,       vvv)
1231d79fb8ddSSong Gao INSN_LSX(vsran_b_h,       vvv)
1232d79fb8ddSSong Gao INSN_LSX(vsran_h_w,       vvv)
1233d79fb8ddSSong Gao INSN_LSX(vsran_w_d,       vvv)
1234d79fb8ddSSong Gao 
1235d79fb8ddSSong Gao INSN_LSX(vsrlni_b_h,       vv_i)
1236d79fb8ddSSong Gao INSN_LSX(vsrlni_h_w,       vv_i)
1237d79fb8ddSSong Gao INSN_LSX(vsrlni_w_d,       vv_i)
1238d79fb8ddSSong Gao INSN_LSX(vsrlni_d_q,       vv_i)
1239d79fb8ddSSong Gao INSN_LSX(vsrani_b_h,       vv_i)
1240d79fb8ddSSong Gao INSN_LSX(vsrani_h_w,       vv_i)
1241d79fb8ddSSong Gao INSN_LSX(vsrani_w_d,       vv_i)
1242d79fb8ddSSong Gao INSN_LSX(vsrani_d_q,       vv_i)
1243a5200a17SSong Gao 
1244a5200a17SSong Gao INSN_LSX(vsrlrn_b_h,       vvv)
1245a5200a17SSong Gao INSN_LSX(vsrlrn_h_w,       vvv)
1246a5200a17SSong Gao INSN_LSX(vsrlrn_w_d,       vvv)
1247a5200a17SSong Gao INSN_LSX(vsrarn_b_h,       vvv)
1248a5200a17SSong Gao INSN_LSX(vsrarn_h_w,       vvv)
1249a5200a17SSong Gao INSN_LSX(vsrarn_w_d,       vvv)
1250a5200a17SSong Gao 
1251a5200a17SSong Gao INSN_LSX(vsrlrni_b_h,      vv_i)
1252a5200a17SSong Gao INSN_LSX(vsrlrni_h_w,      vv_i)
1253a5200a17SSong Gao INSN_LSX(vsrlrni_w_d,      vv_i)
1254a5200a17SSong Gao INSN_LSX(vsrlrni_d_q,      vv_i)
1255a5200a17SSong Gao INSN_LSX(vsrarni_b_h,      vv_i)
1256a5200a17SSong Gao INSN_LSX(vsrarni_h_w,      vv_i)
1257a5200a17SSong Gao INSN_LSX(vsrarni_w_d,      vv_i)
1258a5200a17SSong Gao INSN_LSX(vsrarni_d_q,      vv_i)
125983b3815dSSong Gao 
126083b3815dSSong Gao INSN_LSX(vssrln_b_h,       vvv)
126183b3815dSSong Gao INSN_LSX(vssrln_h_w,       vvv)
126283b3815dSSong Gao INSN_LSX(vssrln_w_d,       vvv)
126383b3815dSSong Gao INSN_LSX(vssran_b_h,       vvv)
126483b3815dSSong Gao INSN_LSX(vssran_h_w,       vvv)
126583b3815dSSong Gao INSN_LSX(vssran_w_d,       vvv)
126683b3815dSSong Gao INSN_LSX(vssrln_bu_h,      vvv)
126783b3815dSSong Gao INSN_LSX(vssrln_hu_w,      vvv)
126883b3815dSSong Gao INSN_LSX(vssrln_wu_d,      vvv)
126983b3815dSSong Gao INSN_LSX(vssran_bu_h,      vvv)
127083b3815dSSong Gao INSN_LSX(vssran_hu_w,      vvv)
127183b3815dSSong Gao INSN_LSX(vssran_wu_d,      vvv)
127283b3815dSSong Gao 
127383b3815dSSong Gao INSN_LSX(vssrlni_b_h,      vv_i)
127483b3815dSSong Gao INSN_LSX(vssrlni_h_w,      vv_i)
127583b3815dSSong Gao INSN_LSX(vssrlni_w_d,      vv_i)
127683b3815dSSong Gao INSN_LSX(vssrlni_d_q,      vv_i)
127783b3815dSSong Gao INSN_LSX(vssrani_b_h,      vv_i)
127883b3815dSSong Gao INSN_LSX(vssrani_h_w,      vv_i)
127983b3815dSSong Gao INSN_LSX(vssrani_w_d,      vv_i)
128083b3815dSSong Gao INSN_LSX(vssrani_d_q,      vv_i)
128183b3815dSSong Gao INSN_LSX(vssrlni_bu_h,     vv_i)
128283b3815dSSong Gao INSN_LSX(vssrlni_hu_w,     vv_i)
128383b3815dSSong Gao INSN_LSX(vssrlni_wu_d,     vv_i)
128483b3815dSSong Gao INSN_LSX(vssrlni_du_q,     vv_i)
128583b3815dSSong Gao INSN_LSX(vssrani_bu_h,     vv_i)
128683b3815dSSong Gao INSN_LSX(vssrani_hu_w,     vv_i)
128783b3815dSSong Gao INSN_LSX(vssrani_wu_d,     vv_i)
128883b3815dSSong Gao INSN_LSX(vssrani_du_q,     vv_i)
1289162cd32cSSong Gao 
1290162cd32cSSong Gao INSN_LSX(vssrlrn_b_h,      vvv)
1291162cd32cSSong Gao INSN_LSX(vssrlrn_h_w,      vvv)
1292162cd32cSSong Gao INSN_LSX(vssrlrn_w_d,      vvv)
1293162cd32cSSong Gao INSN_LSX(vssrarn_b_h,      vvv)
1294162cd32cSSong Gao INSN_LSX(vssrarn_h_w,      vvv)
1295162cd32cSSong Gao INSN_LSX(vssrarn_w_d,      vvv)
1296162cd32cSSong Gao INSN_LSX(vssrlrn_bu_h,     vvv)
1297162cd32cSSong Gao INSN_LSX(vssrlrn_hu_w,     vvv)
1298162cd32cSSong Gao INSN_LSX(vssrlrn_wu_d,     vvv)
1299162cd32cSSong Gao INSN_LSX(vssrarn_bu_h,     vvv)
1300162cd32cSSong Gao INSN_LSX(vssrarn_hu_w,     vvv)
1301162cd32cSSong Gao INSN_LSX(vssrarn_wu_d,     vvv)
1302162cd32cSSong Gao 
1303162cd32cSSong Gao INSN_LSX(vssrlrni_b_h,     vv_i)
1304162cd32cSSong Gao INSN_LSX(vssrlrni_h_w,     vv_i)
1305162cd32cSSong Gao INSN_LSX(vssrlrni_w_d,     vv_i)
1306162cd32cSSong Gao INSN_LSX(vssrlrni_d_q,     vv_i)
1307162cd32cSSong Gao INSN_LSX(vssrlrni_bu_h,    vv_i)
1308162cd32cSSong Gao INSN_LSX(vssrlrni_hu_w,    vv_i)
1309162cd32cSSong Gao INSN_LSX(vssrlrni_wu_d,    vv_i)
1310162cd32cSSong Gao INSN_LSX(vssrlrni_du_q,    vv_i)
1311162cd32cSSong Gao INSN_LSX(vssrarni_b_h,     vv_i)
1312162cd32cSSong Gao INSN_LSX(vssrarni_h_w,     vv_i)
1313162cd32cSSong Gao INSN_LSX(vssrarni_w_d,     vv_i)
1314162cd32cSSong Gao INSN_LSX(vssrarni_d_q,     vv_i)
1315162cd32cSSong Gao INSN_LSX(vssrarni_bu_h,    vv_i)
1316162cd32cSSong Gao INSN_LSX(vssrarni_hu_w,    vv_i)
1317162cd32cSSong Gao INSN_LSX(vssrarni_wu_d,    vv_i)
1318162cd32cSSong Gao INSN_LSX(vssrarni_du_q,    vv_i)
13192e105e12SSong Gao 
13202e105e12SSong Gao INSN_LSX(vclo_b,           vv)
13212e105e12SSong Gao INSN_LSX(vclo_h,           vv)
13222e105e12SSong Gao INSN_LSX(vclo_w,           vv)
13232e105e12SSong Gao INSN_LSX(vclo_d,           vv)
13242e105e12SSong Gao INSN_LSX(vclz_b,           vv)
13252e105e12SSong Gao INSN_LSX(vclz_h,           vv)
13262e105e12SSong Gao INSN_LSX(vclz_w,           vv)
13272e105e12SSong Gao INSN_LSX(vclz_d,           vv)
1328bb22ee57SSong Gao 
1329bb22ee57SSong Gao INSN_LSX(vpcnt_b,          vv)
1330bb22ee57SSong Gao INSN_LSX(vpcnt_h,          vv)
1331bb22ee57SSong Gao INSN_LSX(vpcnt_w,          vv)
1332bb22ee57SSong Gao INSN_LSX(vpcnt_d,          vv)
13330b1e6705SSong Gao 
13340b1e6705SSong Gao INSN_LSX(vbitclr_b,        vvv)
13350b1e6705SSong Gao INSN_LSX(vbitclr_h,        vvv)
13360b1e6705SSong Gao INSN_LSX(vbitclr_w,        vvv)
13370b1e6705SSong Gao INSN_LSX(vbitclr_d,        vvv)
13380b1e6705SSong Gao INSN_LSX(vbitclri_b,       vv_i)
13390b1e6705SSong Gao INSN_LSX(vbitclri_h,       vv_i)
13400b1e6705SSong Gao INSN_LSX(vbitclri_w,       vv_i)
13410b1e6705SSong Gao INSN_LSX(vbitclri_d,       vv_i)
13420b1e6705SSong Gao INSN_LSX(vbitset_b,        vvv)
13430b1e6705SSong Gao INSN_LSX(vbitset_h,        vvv)
13440b1e6705SSong Gao INSN_LSX(vbitset_w,        vvv)
13450b1e6705SSong Gao INSN_LSX(vbitset_d,        vvv)
13460b1e6705SSong Gao INSN_LSX(vbitseti_b,       vv_i)
13470b1e6705SSong Gao INSN_LSX(vbitseti_h,       vv_i)
13480b1e6705SSong Gao INSN_LSX(vbitseti_w,       vv_i)
13490b1e6705SSong Gao INSN_LSX(vbitseti_d,       vv_i)
13500b1e6705SSong Gao INSN_LSX(vbitrev_b,        vvv)
13510b1e6705SSong Gao INSN_LSX(vbitrev_h,        vvv)
13520b1e6705SSong Gao INSN_LSX(vbitrev_w,        vvv)
13530b1e6705SSong Gao INSN_LSX(vbitrev_d,        vvv)
13540b1e6705SSong Gao INSN_LSX(vbitrevi_b,       vv_i)
13550b1e6705SSong Gao INSN_LSX(vbitrevi_h,       vv_i)
13560b1e6705SSong Gao INSN_LSX(vbitrevi_w,       vv_i)
13570b1e6705SSong Gao INSN_LSX(vbitrevi_d,       vv_i)
1358ac95a0b9SSong Gao 
1359ac95a0b9SSong Gao INSN_LSX(vfrstp_b,         vvv)
1360ac95a0b9SSong Gao INSN_LSX(vfrstp_h,         vvv)
1361ac95a0b9SSong Gao INSN_LSX(vfrstpi_b,        vv_i)
1362ac95a0b9SSong Gao INSN_LSX(vfrstpi_h,        vv_i)
1363aca67472SSong Gao 
1364aca67472SSong Gao INSN_LSX(vfadd_s,          vvv)
1365aca67472SSong Gao INSN_LSX(vfadd_d,          vvv)
1366aca67472SSong Gao INSN_LSX(vfsub_s,          vvv)
1367aca67472SSong Gao INSN_LSX(vfsub_d,          vvv)
1368aca67472SSong Gao INSN_LSX(vfmul_s,          vvv)
1369aca67472SSong Gao INSN_LSX(vfmul_d,          vvv)
1370aca67472SSong Gao INSN_LSX(vfdiv_s,          vvv)
1371aca67472SSong Gao INSN_LSX(vfdiv_d,          vvv)
1372aca67472SSong Gao 
1373aca67472SSong Gao INSN_LSX(vfmadd_s,         vvvv)
1374aca67472SSong Gao INSN_LSX(vfmadd_d,         vvvv)
1375aca67472SSong Gao INSN_LSX(vfmsub_s,         vvvv)
1376aca67472SSong Gao INSN_LSX(vfmsub_d,         vvvv)
1377aca67472SSong Gao INSN_LSX(vfnmadd_s,        vvvv)
1378aca67472SSong Gao INSN_LSX(vfnmadd_d,        vvvv)
1379aca67472SSong Gao INSN_LSX(vfnmsub_s,        vvvv)
1380aca67472SSong Gao INSN_LSX(vfnmsub_d,        vvvv)
1381aca67472SSong Gao 
1382aca67472SSong Gao INSN_LSX(vfmax_s,          vvv)
1383aca67472SSong Gao INSN_LSX(vfmax_d,          vvv)
1384aca67472SSong Gao INSN_LSX(vfmin_s,          vvv)
1385aca67472SSong Gao INSN_LSX(vfmin_d,          vvv)
1386aca67472SSong Gao 
1387aca67472SSong Gao INSN_LSX(vfmaxa_s,         vvv)
1388aca67472SSong Gao INSN_LSX(vfmaxa_d,         vvv)
1389aca67472SSong Gao INSN_LSX(vfmina_s,         vvv)
1390aca67472SSong Gao INSN_LSX(vfmina_d,         vvv)
1391aca67472SSong Gao 
1392aca67472SSong Gao INSN_LSX(vflogb_s,         vv)
1393aca67472SSong Gao INSN_LSX(vflogb_d,         vv)
1394aca67472SSong Gao 
1395aca67472SSong Gao INSN_LSX(vfclass_s,        vv)
1396aca67472SSong Gao INSN_LSX(vfclass_d,        vv)
1397aca67472SSong Gao 
1398aca67472SSong Gao INSN_LSX(vfsqrt_s,         vv)
1399aca67472SSong Gao INSN_LSX(vfsqrt_d,         vv)
1400aca67472SSong Gao INSN_LSX(vfrecip_s,        vv)
1401aca67472SSong Gao INSN_LSX(vfrecip_d,        vv)
1402aca67472SSong Gao INSN_LSX(vfrsqrt_s,        vv)
1403aca67472SSong Gao INSN_LSX(vfrsqrt_d,        vv)
1404399665d2SSong Gao 
1405399665d2SSong Gao INSN_LSX(vfcvtl_s_h,       vv)
1406399665d2SSong Gao INSN_LSX(vfcvth_s_h,       vv)
1407399665d2SSong Gao INSN_LSX(vfcvtl_d_s,       vv)
1408399665d2SSong Gao INSN_LSX(vfcvth_d_s,       vv)
1409399665d2SSong Gao INSN_LSX(vfcvt_h_s,        vvv)
1410399665d2SSong Gao INSN_LSX(vfcvt_s_d,        vvv)
1411399665d2SSong Gao 
1412399665d2SSong Gao INSN_LSX(vfrint_s,         vv)
1413399665d2SSong Gao INSN_LSX(vfrint_d,         vv)
1414399665d2SSong Gao INSN_LSX(vfrintrm_s,       vv)
1415399665d2SSong Gao INSN_LSX(vfrintrm_d,       vv)
1416399665d2SSong Gao INSN_LSX(vfrintrp_s,       vv)
1417399665d2SSong Gao INSN_LSX(vfrintrp_d,       vv)
1418399665d2SSong Gao INSN_LSX(vfrintrz_s,       vv)
1419399665d2SSong Gao INSN_LSX(vfrintrz_d,       vv)
1420399665d2SSong Gao INSN_LSX(vfrintrne_s,      vv)
1421399665d2SSong Gao INSN_LSX(vfrintrne_d,      vv)
1422399665d2SSong Gao 
1423399665d2SSong Gao INSN_LSX(vftint_w_s,       vv)
1424399665d2SSong Gao INSN_LSX(vftint_l_d,       vv)
1425399665d2SSong Gao INSN_LSX(vftintrm_w_s,     vv)
1426399665d2SSong Gao INSN_LSX(vftintrm_l_d,     vv)
1427399665d2SSong Gao INSN_LSX(vftintrp_w_s,     vv)
1428399665d2SSong Gao INSN_LSX(vftintrp_l_d,     vv)
1429399665d2SSong Gao INSN_LSX(vftintrz_w_s,     vv)
1430399665d2SSong Gao INSN_LSX(vftintrz_l_d,     vv)
1431399665d2SSong Gao INSN_LSX(vftintrne_w_s,    vv)
1432399665d2SSong Gao INSN_LSX(vftintrne_l_d,    vv)
1433399665d2SSong Gao INSN_LSX(vftint_wu_s,      vv)
1434399665d2SSong Gao INSN_LSX(vftint_lu_d,      vv)
1435399665d2SSong Gao INSN_LSX(vftintrz_wu_s,    vv)
1436399665d2SSong Gao INSN_LSX(vftintrz_lu_d,    vv)
1437399665d2SSong Gao INSN_LSX(vftint_w_d,       vvv)
1438399665d2SSong Gao INSN_LSX(vftintrm_w_d,     vvv)
1439399665d2SSong Gao INSN_LSX(vftintrp_w_d,     vvv)
1440399665d2SSong Gao INSN_LSX(vftintrz_w_d,     vvv)
1441399665d2SSong Gao INSN_LSX(vftintrne_w_d,    vvv)
1442399665d2SSong Gao INSN_LSX(vftintl_l_s,      vv)
1443399665d2SSong Gao INSN_LSX(vftinth_l_s,      vv)
1444399665d2SSong Gao INSN_LSX(vftintrml_l_s,    vv)
1445399665d2SSong Gao INSN_LSX(vftintrmh_l_s,    vv)
1446399665d2SSong Gao INSN_LSX(vftintrpl_l_s,    vv)
1447399665d2SSong Gao INSN_LSX(vftintrph_l_s,    vv)
1448399665d2SSong Gao INSN_LSX(vftintrzl_l_s,    vv)
1449399665d2SSong Gao INSN_LSX(vftintrzh_l_s,    vv)
1450399665d2SSong Gao INSN_LSX(vftintrnel_l_s,   vv)
1451399665d2SSong Gao INSN_LSX(vftintrneh_l_s,   vv)
1452399665d2SSong Gao 
1453399665d2SSong Gao INSN_LSX(vffint_s_w,       vv)
1454399665d2SSong Gao INSN_LSX(vffint_s_wu,      vv)
1455399665d2SSong Gao INSN_LSX(vffint_d_l,       vv)
1456399665d2SSong Gao INSN_LSX(vffint_d_lu,      vv)
1457399665d2SSong Gao INSN_LSX(vffintl_d_w,      vv)
1458399665d2SSong Gao INSN_LSX(vffinth_d_w,      vv)
1459399665d2SSong Gao INSN_LSX(vffint_s_l,       vvv)
1460f435e1e5SSong Gao 
1461f435e1e5SSong Gao INSN_LSX(vseq_b,           vvv)
1462f435e1e5SSong Gao INSN_LSX(vseq_h,           vvv)
1463f435e1e5SSong Gao INSN_LSX(vseq_w,           vvv)
1464f435e1e5SSong Gao INSN_LSX(vseq_d,           vvv)
1465f435e1e5SSong Gao INSN_LSX(vseqi_b,          vv_i)
1466f435e1e5SSong Gao INSN_LSX(vseqi_h,          vv_i)
1467f435e1e5SSong Gao INSN_LSX(vseqi_w,          vv_i)
1468f435e1e5SSong Gao INSN_LSX(vseqi_d,          vv_i)
1469f435e1e5SSong Gao 
1470f435e1e5SSong Gao INSN_LSX(vsle_b,           vvv)
1471f435e1e5SSong Gao INSN_LSX(vsle_h,           vvv)
1472f435e1e5SSong Gao INSN_LSX(vsle_w,           vvv)
1473f435e1e5SSong Gao INSN_LSX(vsle_d,           vvv)
1474f435e1e5SSong Gao INSN_LSX(vslei_b,          vv_i)
1475f435e1e5SSong Gao INSN_LSX(vslei_h,          vv_i)
1476f435e1e5SSong Gao INSN_LSX(vslei_w,          vv_i)
1477f435e1e5SSong Gao INSN_LSX(vslei_d,          vv_i)
1478f435e1e5SSong Gao INSN_LSX(vsle_bu,          vvv)
1479f435e1e5SSong Gao INSN_LSX(vsle_hu,          vvv)
1480f435e1e5SSong Gao INSN_LSX(vsle_wu,          vvv)
1481f435e1e5SSong Gao INSN_LSX(vsle_du,          vvv)
1482f435e1e5SSong Gao INSN_LSX(vslei_bu,         vv_i)
1483f435e1e5SSong Gao INSN_LSX(vslei_hu,         vv_i)
1484f435e1e5SSong Gao INSN_LSX(vslei_wu,         vv_i)
1485f435e1e5SSong Gao INSN_LSX(vslei_du,         vv_i)
1486f435e1e5SSong Gao 
1487f435e1e5SSong Gao INSN_LSX(vslt_b,           vvv)
1488f435e1e5SSong Gao INSN_LSX(vslt_h,           vvv)
1489f435e1e5SSong Gao INSN_LSX(vslt_w,           vvv)
1490f435e1e5SSong Gao INSN_LSX(vslt_d,           vvv)
1491f435e1e5SSong Gao INSN_LSX(vslti_b,          vv_i)
1492f435e1e5SSong Gao INSN_LSX(vslti_h,          vv_i)
1493f435e1e5SSong Gao INSN_LSX(vslti_w,          vv_i)
1494f435e1e5SSong Gao INSN_LSX(vslti_d,          vv_i)
1495f435e1e5SSong Gao INSN_LSX(vslt_bu,          vvv)
1496f435e1e5SSong Gao INSN_LSX(vslt_hu,          vvv)
1497f435e1e5SSong Gao INSN_LSX(vslt_wu,          vvv)
1498f435e1e5SSong Gao INSN_LSX(vslt_du,          vvv)
1499f435e1e5SSong Gao INSN_LSX(vslti_bu,         vv_i)
1500f435e1e5SSong Gao INSN_LSX(vslti_hu,         vv_i)
1501f435e1e5SSong Gao INSN_LSX(vslti_wu,         vv_i)
1502f435e1e5SSong Gao INSN_LSX(vslti_du,         vv_i)
1503386c4e86SSong Gao 
1504386c4e86SSong Gao #define output_vfcmp(C, PREFIX, SUFFIX)                                     \
1505386c4e86SSong Gao {                                                                           \
1506386c4e86SSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %s%s\t%d, f%d, f%d", \
1507386c4e86SSong Gao                             (C)->insn, PREFIX, SUFFIX, a->vd,               \
1508386c4e86SSong Gao                             a->vj, a->vk);                                  \
1509386c4e86SSong Gao }
1510386c4e86SSong Gao 
1511386c4e86SSong Gao static bool output_vvv_fcond(DisasContext *ctx, arg_vvv_fcond * a,
1512386c4e86SSong Gao                              const char *suffix)
1513386c4e86SSong Gao {
1514386c4e86SSong Gao     bool ret = true;
1515386c4e86SSong Gao     switch (a->fcond) {
1516386c4e86SSong Gao     case 0x0:
1517386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_caf_", suffix);
1518386c4e86SSong Gao         break;
1519386c4e86SSong Gao     case 0x1:
1520386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_saf_", suffix);
1521386c4e86SSong Gao         break;
1522386c4e86SSong Gao     case 0x2:
1523386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_clt_", suffix);
1524386c4e86SSong Gao         break;
1525386c4e86SSong Gao     case 0x3:
1526386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_slt_", suffix);
1527386c4e86SSong Gao         break;
1528386c4e86SSong Gao     case 0x4:
1529386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_ceq_", suffix);
1530386c4e86SSong Gao         break;
1531386c4e86SSong Gao     case 0x5:
1532386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_seq_", suffix);
1533386c4e86SSong Gao         break;
1534386c4e86SSong Gao     case 0x6:
1535386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cle_", suffix);
1536386c4e86SSong Gao         break;
1537386c4e86SSong Gao     case 0x7:
1538386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sle_", suffix);
1539386c4e86SSong Gao         break;
1540386c4e86SSong Gao     case 0x8:
1541386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cun_", suffix);
1542386c4e86SSong Gao         break;
1543386c4e86SSong Gao     case 0x9:
1544386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sun_", suffix);
1545386c4e86SSong Gao         break;
1546386c4e86SSong Gao     case 0xA:
1547386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cult_", suffix);
1548386c4e86SSong Gao         break;
1549386c4e86SSong Gao     case 0xB:
1550386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sult_", suffix);
1551386c4e86SSong Gao         break;
1552386c4e86SSong Gao     case 0xC:
1553386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cueq_", suffix);
1554386c4e86SSong Gao         break;
1555386c4e86SSong Gao     case 0xD:
1556386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sueq_", suffix);
1557386c4e86SSong Gao         break;
1558386c4e86SSong Gao     case 0xE:
1559386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cule_", suffix);
1560386c4e86SSong Gao         break;
1561386c4e86SSong Gao     case 0xF:
1562386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sule_", suffix);
1563386c4e86SSong Gao         break;
1564386c4e86SSong Gao     case 0x10:
1565386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cne_", suffix);
1566386c4e86SSong Gao         break;
1567386c4e86SSong Gao     case 0x11:
1568386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sne_", suffix);
1569386c4e86SSong Gao         break;
1570386c4e86SSong Gao     case 0x14:
1571386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cor_", suffix);
1572386c4e86SSong Gao         break;
1573386c4e86SSong Gao     case 0x15:
1574386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sor_", suffix);
1575386c4e86SSong Gao         break;
1576386c4e86SSong Gao     case 0x18:
1577386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cune_", suffix);
1578386c4e86SSong Gao         break;
1579386c4e86SSong Gao     case 0x19:
1580386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sune_", suffix);
1581386c4e86SSong Gao         break;
1582386c4e86SSong Gao     default:
1583386c4e86SSong Gao         ret = false;
1584386c4e86SSong Gao     }
1585386c4e86SSong Gao     return ret;
1586386c4e86SSong Gao }
1587386c4e86SSong Gao 
1588386c4e86SSong Gao #define LSX_FCMP_INSN(suffix)                            \
1589386c4e86SSong Gao static bool trans_vfcmp_cond_##suffix(DisasContext *ctx, \
1590386c4e86SSong Gao                                      arg_vvv_fcond * a)  \
1591386c4e86SSong Gao {                                                        \
1592386c4e86SSong Gao     return output_vvv_fcond(ctx, a, #suffix);            \
1593386c4e86SSong Gao }
1594386c4e86SSong Gao 
1595386c4e86SSong Gao LSX_FCMP_INSN(s)
1596386c4e86SSong Gao LSX_FCMP_INSN(d)
1597d0dfa19aSSong Gao 
1598d0dfa19aSSong Gao INSN_LSX(vbitsel_v,        vvvv)
1599d0dfa19aSSong Gao INSN_LSX(vbitseli_b,       vv_i)
1600d0dfa19aSSong Gao 
1601d0dfa19aSSong Gao INSN_LSX(vseteqz_v,        cv)
1602d0dfa19aSSong Gao INSN_LSX(vsetnez_v,        cv)
1603d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_b,     cv)
1604d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_h,     cv)
1605d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_w,     cv)
1606d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_d,     cv)
1607d0dfa19aSSong Gao INSN_LSX(vsetallnez_b,     cv)
1608d0dfa19aSSong Gao INSN_LSX(vsetallnez_h,     cv)
1609d0dfa19aSSong Gao INSN_LSX(vsetallnez_w,     cv)
1610d0dfa19aSSong Gao INSN_LSX(vsetallnez_d,     cv)
1611cdbdefbfSSong Gao 
1612cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_b,      vr_i)
1613cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_h,      vr_i)
1614cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_w,      vr_i)
1615cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_d,      vr_i)
1616cdbdefbfSSong Gao INSN_LSX(vpickve2gr_b,     rv_i)
1617cdbdefbfSSong Gao INSN_LSX(vpickve2gr_h,     rv_i)
1618cdbdefbfSSong Gao INSN_LSX(vpickve2gr_w,     rv_i)
1619cdbdefbfSSong Gao INSN_LSX(vpickve2gr_d,     rv_i)
1620cdbdefbfSSong Gao INSN_LSX(vpickve2gr_bu,    rv_i)
1621cdbdefbfSSong Gao INSN_LSX(vpickve2gr_hu,    rv_i)
1622cdbdefbfSSong Gao INSN_LSX(vpickve2gr_wu,    rv_i)
1623cdbdefbfSSong Gao INSN_LSX(vpickve2gr_du,    rv_i)
1624cdbdefbfSSong Gao 
1625cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_b,     vr)
1626cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_h,     vr)
1627cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_w,     vr)
1628cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_d,     vr)
1629d5e5563cSSong Gao 
1630d5e5563cSSong Gao INSN_LSX(vreplve_b,        vvr)
1631d5e5563cSSong Gao INSN_LSX(vreplve_h,        vvr)
1632d5e5563cSSong Gao INSN_LSX(vreplve_w,        vvr)
1633d5e5563cSSong Gao INSN_LSX(vreplve_d,        vvr)
1634d5e5563cSSong Gao INSN_LSX(vreplvei_b,       vv_i)
1635d5e5563cSSong Gao INSN_LSX(vreplvei_h,       vv_i)
1636d5e5563cSSong Gao INSN_LSX(vreplvei_w,       vv_i)
1637d5e5563cSSong Gao INSN_LSX(vreplvei_d,       vv_i)
1638d5e5563cSSong Gao 
1639d5e5563cSSong Gao INSN_LSX(vbsll_v,          vv_i)
1640d5e5563cSSong Gao INSN_LSX(vbsrl_v,          vv_i)
1641d5e5563cSSong Gao 
1642d5e5563cSSong Gao INSN_LSX(vpackev_b,        vvv)
1643d5e5563cSSong Gao INSN_LSX(vpackev_h,        vvv)
1644d5e5563cSSong Gao INSN_LSX(vpackev_w,        vvv)
1645d5e5563cSSong Gao INSN_LSX(vpackev_d,        vvv)
1646d5e5563cSSong Gao INSN_LSX(vpackod_b,        vvv)
1647d5e5563cSSong Gao INSN_LSX(vpackod_h,        vvv)
1648d5e5563cSSong Gao INSN_LSX(vpackod_w,        vvv)
1649d5e5563cSSong Gao INSN_LSX(vpackod_d,        vvv)
1650d5e5563cSSong Gao 
1651d5e5563cSSong Gao INSN_LSX(vpickev_b,        vvv)
1652d5e5563cSSong Gao INSN_LSX(vpickev_h,        vvv)
1653d5e5563cSSong Gao INSN_LSX(vpickev_w,        vvv)
1654d5e5563cSSong Gao INSN_LSX(vpickev_d,        vvv)
1655d5e5563cSSong Gao INSN_LSX(vpickod_b,        vvv)
1656d5e5563cSSong Gao INSN_LSX(vpickod_h,        vvv)
1657d5e5563cSSong Gao INSN_LSX(vpickod_w,        vvv)
1658d5e5563cSSong Gao INSN_LSX(vpickod_d,        vvv)
1659e93dd431SSong Gao 
1660e93dd431SSong Gao INSN_LSX(vilvl_b,          vvv)
1661e93dd431SSong Gao INSN_LSX(vilvl_h,          vvv)
1662e93dd431SSong Gao INSN_LSX(vilvl_w,          vvv)
1663e93dd431SSong Gao INSN_LSX(vilvl_d,          vvv)
1664e93dd431SSong Gao INSN_LSX(vilvh_b,          vvv)
1665e93dd431SSong Gao INSN_LSX(vilvh_h,          vvv)
1666e93dd431SSong Gao INSN_LSX(vilvh_w,          vvv)
1667e93dd431SSong Gao INSN_LSX(vilvh_d,          vvv)
1668e93dd431SSong Gao 
1669e93dd431SSong Gao INSN_LSX(vshuf_b,          vvvv)
1670e93dd431SSong Gao INSN_LSX(vshuf_h,          vvv)
1671e93dd431SSong Gao INSN_LSX(vshuf_w,          vvv)
1672e93dd431SSong Gao INSN_LSX(vshuf_d,          vvv)
1673e93dd431SSong Gao INSN_LSX(vshuf4i_b,        vv_i)
1674e93dd431SSong Gao INSN_LSX(vshuf4i_h,        vv_i)
1675e93dd431SSong Gao INSN_LSX(vshuf4i_w,        vv_i)
1676e93dd431SSong Gao INSN_LSX(vshuf4i_d,        vv_i)
1677e93dd431SSong Gao 
1678e93dd431SSong Gao INSN_LSX(vpermi_w,         vv_i)
1679e93dd431SSong Gao 
1680e93dd431SSong Gao INSN_LSX(vextrins_d,       vv_i)
1681e93dd431SSong Gao INSN_LSX(vextrins_w,       vv_i)
1682e93dd431SSong Gao INSN_LSX(vextrins_h,       vv_i)
1683e93dd431SSong Gao INSN_LSX(vextrins_b,       vv_i)
1684843b627aSSong Gao 
1685843b627aSSong Gao INSN_LSX(vld,              vr_i)
1686843b627aSSong Gao INSN_LSX(vst,              vr_i)
1687843b627aSSong Gao INSN_LSX(vldx,             vrr)
1688843b627aSSong Gao INSN_LSX(vstx,             vrr)
1689843b627aSSong Gao 
1690843b627aSSong Gao INSN_LSX(vldrepl_d,        vr_i)
1691843b627aSSong Gao INSN_LSX(vldrepl_w,        vr_i)
1692843b627aSSong Gao INSN_LSX(vldrepl_h,        vr_i)
1693843b627aSSong Gao INSN_LSX(vldrepl_b,        vr_i)
1694843b627aSSong Gao INSN_LSX(vstelm_d,         vr_ii)
1695843b627aSSong Gao INSN_LSX(vstelm_w,         vr_ii)
1696843b627aSSong Gao INSN_LSX(vstelm_h,         vr_ii)
1697843b627aSSong Gao INSN_LSX(vstelm_b,         vr_ii)
1698269ca39aSSong Gao 
1699269ca39aSSong Gao #define INSN_LASX(insn, type)                               \
1700269ca39aSSong Gao static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
1701269ca39aSSong Gao {                                                           \
1702269ca39aSSong Gao     output_##type ## _x(ctx, a, #insn);                     \
1703269ca39aSSong Gao     return true;                                            \
1704269ca39aSSong Gao }
1705269ca39aSSong Gao 
1706269ca39aSSong Gao static void output_vvv_x(DisasContext *ctx, arg_vvv * a, const char *mnemonic)
1707269ca39aSSong Gao {
1708269ca39aSSong Gao     output(ctx, mnemonic, "x%d, x%d, x%d", a->vd, a->vj, a->vk);
1709269ca39aSSong Gao }
1710269ca39aSSong Gao 
171173123406SSong Gao static void output_vr_x(DisasContext *ctx, arg_vr *a, const char *mnemonic)
171273123406SSong Gao {
171373123406SSong Gao     output(ctx, mnemonic, "x%d, r%d", a->vd, a->rj);
171473123406SSong Gao }
171573123406SSong Gao 
171634200421SSong Gao static void output_vv_i_x(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
171734200421SSong Gao {
171834200421SSong Gao     output(ctx, mnemonic, "x%d, x%d, 0x%x", a->vd, a->vj, a->imm);
171934200421SSong Gao }
172034200421SSong Gao 
1721760f9647SSong Gao static void output_vv_x(DisasContext *ctx, arg_vv *a, const char *mnemonic)
1722760f9647SSong Gao {
1723760f9647SSong Gao     output(ctx, mnemonic, "x%d, x%d", a->vd, a->vj);
1724760f9647SSong Gao }
1725760f9647SSong Gao 
1726269ca39aSSong Gao INSN_LASX(xvadd_b,           vvv)
1727269ca39aSSong Gao INSN_LASX(xvadd_h,           vvv)
1728269ca39aSSong Gao INSN_LASX(xvadd_w,           vvv)
1729269ca39aSSong Gao INSN_LASX(xvadd_d,           vvv)
1730269ca39aSSong Gao INSN_LASX(xvadd_q,           vvv)
1731269ca39aSSong Gao INSN_LASX(xvsub_b,           vvv)
1732269ca39aSSong Gao INSN_LASX(xvsub_h,           vvv)
1733269ca39aSSong Gao INSN_LASX(xvsub_w,           vvv)
1734269ca39aSSong Gao INSN_LASX(xvsub_d,           vvv)
1735269ca39aSSong Gao INSN_LASX(xvsub_q,           vvv)
173673123406SSong Gao 
173734200421SSong Gao INSN_LASX(xvaddi_bu,         vv_i)
173834200421SSong Gao INSN_LASX(xvaddi_hu,         vv_i)
173934200421SSong Gao INSN_LASX(xvaddi_wu,         vv_i)
174034200421SSong Gao INSN_LASX(xvaddi_du,         vv_i)
174134200421SSong Gao INSN_LASX(xvsubi_bu,         vv_i)
174234200421SSong Gao INSN_LASX(xvsubi_hu,         vv_i)
174334200421SSong Gao INSN_LASX(xvsubi_wu,         vv_i)
174434200421SSong Gao INSN_LASX(xvsubi_du,         vv_i)
174534200421SSong Gao 
1746760f9647SSong Gao INSN_LASX(xvneg_b,           vv)
1747760f9647SSong Gao INSN_LASX(xvneg_h,           vv)
1748760f9647SSong Gao INSN_LASX(xvneg_w,           vv)
1749760f9647SSong Gao INSN_LASX(xvneg_d,           vv)
1750760f9647SSong Gao 
1751d2df46d9SSong Gao INSN_LASX(xvsadd_b,          vvv)
1752d2df46d9SSong Gao INSN_LASX(xvsadd_h,          vvv)
1753d2df46d9SSong Gao INSN_LASX(xvsadd_w,          vvv)
1754d2df46d9SSong Gao INSN_LASX(xvsadd_d,          vvv)
1755d2df46d9SSong Gao INSN_LASX(xvsadd_bu,         vvv)
1756d2df46d9SSong Gao INSN_LASX(xvsadd_hu,         vvv)
1757d2df46d9SSong Gao INSN_LASX(xvsadd_wu,         vvv)
1758d2df46d9SSong Gao INSN_LASX(xvsadd_du,         vvv)
1759d2df46d9SSong Gao INSN_LASX(xvssub_b,          vvv)
1760d2df46d9SSong Gao INSN_LASX(xvssub_h,          vvv)
1761d2df46d9SSong Gao INSN_LASX(xvssub_w,          vvv)
1762d2df46d9SSong Gao INSN_LASX(xvssub_d,          vvv)
1763d2df46d9SSong Gao INSN_LASX(xvssub_bu,         vvv)
1764d2df46d9SSong Gao INSN_LASX(xvssub_hu,         vvv)
1765d2df46d9SSong Gao INSN_LASX(xvssub_wu,         vvv)
1766d2df46d9SSong Gao INSN_LASX(xvssub_du,         vvv)
1767d2df46d9SSong Gao 
176864cf6b99SSong Gao INSN_LASX(xvhaddw_h_b,       vvv)
176964cf6b99SSong Gao INSN_LASX(xvhaddw_w_h,       vvv)
177064cf6b99SSong Gao INSN_LASX(xvhaddw_d_w,       vvv)
177164cf6b99SSong Gao INSN_LASX(xvhaddw_q_d,       vvv)
177264cf6b99SSong Gao INSN_LASX(xvhaddw_hu_bu,     vvv)
177364cf6b99SSong Gao INSN_LASX(xvhaddw_wu_hu,     vvv)
177464cf6b99SSong Gao INSN_LASX(xvhaddw_du_wu,     vvv)
177564cf6b99SSong Gao INSN_LASX(xvhaddw_qu_du,     vvv)
177664cf6b99SSong Gao INSN_LASX(xvhsubw_h_b,       vvv)
177764cf6b99SSong Gao INSN_LASX(xvhsubw_w_h,       vvv)
177864cf6b99SSong Gao INSN_LASX(xvhsubw_d_w,       vvv)
177964cf6b99SSong Gao INSN_LASX(xvhsubw_q_d,       vvv)
178064cf6b99SSong Gao INSN_LASX(xvhsubw_hu_bu,     vvv)
178164cf6b99SSong Gao INSN_LASX(xvhsubw_wu_hu,     vvv)
178264cf6b99SSong Gao INSN_LASX(xvhsubw_du_wu,     vvv)
178364cf6b99SSong Gao INSN_LASX(xvhsubw_qu_du,     vvv)
178464cf6b99SSong Gao 
178585995f07SSong Gao INSN_LASX(xvaddwev_h_b,      vvv)
178685995f07SSong Gao INSN_LASX(xvaddwev_w_h,      vvv)
178785995f07SSong Gao INSN_LASX(xvaddwev_d_w,      vvv)
178885995f07SSong Gao INSN_LASX(xvaddwev_q_d,      vvv)
178985995f07SSong Gao INSN_LASX(xvaddwod_h_b,      vvv)
179085995f07SSong Gao INSN_LASX(xvaddwod_w_h,      vvv)
179185995f07SSong Gao INSN_LASX(xvaddwod_d_w,      vvv)
179285995f07SSong Gao INSN_LASX(xvaddwod_q_d,      vvv)
179385995f07SSong Gao INSN_LASX(xvsubwev_h_b,      vvv)
179485995f07SSong Gao INSN_LASX(xvsubwev_w_h,      vvv)
179585995f07SSong Gao INSN_LASX(xvsubwev_d_w,      vvv)
179685995f07SSong Gao INSN_LASX(xvsubwev_q_d,      vvv)
179785995f07SSong Gao INSN_LASX(xvsubwod_h_b,      vvv)
179885995f07SSong Gao INSN_LASX(xvsubwod_w_h,      vvv)
179985995f07SSong Gao INSN_LASX(xvsubwod_d_w,      vvv)
180085995f07SSong Gao INSN_LASX(xvsubwod_q_d,      vvv)
180185995f07SSong Gao 
180285995f07SSong Gao INSN_LASX(xvaddwev_h_bu,     vvv)
180385995f07SSong Gao INSN_LASX(xvaddwev_w_hu,     vvv)
180485995f07SSong Gao INSN_LASX(xvaddwev_d_wu,     vvv)
180585995f07SSong Gao INSN_LASX(xvaddwev_q_du,     vvv)
180685995f07SSong Gao INSN_LASX(xvaddwod_h_bu,     vvv)
180785995f07SSong Gao INSN_LASX(xvaddwod_w_hu,     vvv)
180885995f07SSong Gao INSN_LASX(xvaddwod_d_wu,     vvv)
180985995f07SSong Gao INSN_LASX(xvaddwod_q_du,     vvv)
181085995f07SSong Gao INSN_LASX(xvsubwev_h_bu,     vvv)
181185995f07SSong Gao INSN_LASX(xvsubwev_w_hu,     vvv)
181285995f07SSong Gao INSN_LASX(xvsubwev_d_wu,     vvv)
181385995f07SSong Gao INSN_LASX(xvsubwev_q_du,     vvv)
181485995f07SSong Gao INSN_LASX(xvsubwod_h_bu,     vvv)
181585995f07SSong Gao INSN_LASX(xvsubwod_w_hu,     vvv)
181685995f07SSong Gao INSN_LASX(xvsubwod_d_wu,     vvv)
181785995f07SSong Gao INSN_LASX(xvsubwod_q_du,     vvv)
181885995f07SSong Gao 
181985995f07SSong Gao INSN_LASX(xvaddwev_h_bu_b,   vvv)
182085995f07SSong Gao INSN_LASX(xvaddwev_w_hu_h,   vvv)
182185995f07SSong Gao INSN_LASX(xvaddwev_d_wu_w,   vvv)
182285995f07SSong Gao INSN_LASX(xvaddwev_q_du_d,   vvv)
182385995f07SSong Gao INSN_LASX(xvaddwod_h_bu_b,   vvv)
182485995f07SSong Gao INSN_LASX(xvaddwod_w_hu_h,   vvv)
182585995f07SSong Gao INSN_LASX(xvaddwod_d_wu_w,   vvv)
182685995f07SSong Gao INSN_LASX(xvaddwod_q_du_d,   vvv)
182785995f07SSong Gao 
1828ee7250d0SSong Gao INSN_LASX(xvavg_b,           vvv)
1829ee7250d0SSong Gao INSN_LASX(xvavg_h,           vvv)
1830ee7250d0SSong Gao INSN_LASX(xvavg_w,           vvv)
1831ee7250d0SSong Gao INSN_LASX(xvavg_d,           vvv)
1832ee7250d0SSong Gao INSN_LASX(xvavg_bu,          vvv)
1833ee7250d0SSong Gao INSN_LASX(xvavg_hu,          vvv)
1834ee7250d0SSong Gao INSN_LASX(xvavg_wu,          vvv)
1835ee7250d0SSong Gao INSN_LASX(xvavg_du,          vvv)
1836ee7250d0SSong Gao INSN_LASX(xvavgr_b,          vvv)
1837ee7250d0SSong Gao INSN_LASX(xvavgr_h,          vvv)
1838ee7250d0SSong Gao INSN_LASX(xvavgr_w,          vvv)
1839ee7250d0SSong Gao INSN_LASX(xvavgr_d,          vvv)
1840ee7250d0SSong Gao INSN_LASX(xvavgr_bu,         vvv)
1841ee7250d0SSong Gao INSN_LASX(xvavgr_hu,         vvv)
1842ee7250d0SSong Gao INSN_LASX(xvavgr_wu,         vvv)
1843ee7250d0SSong Gao INSN_LASX(xvavgr_du,         vvv)
1844ee7250d0SSong Gao 
1845ccc9fa26SSong Gao INSN_LASX(xvabsd_b,          vvv)
1846ccc9fa26SSong Gao INSN_LASX(xvabsd_h,          vvv)
1847ccc9fa26SSong Gao INSN_LASX(xvabsd_w,          vvv)
1848ccc9fa26SSong Gao INSN_LASX(xvabsd_d,          vvv)
1849ccc9fa26SSong Gao INSN_LASX(xvabsd_bu,         vvv)
1850ccc9fa26SSong Gao INSN_LASX(xvabsd_hu,         vvv)
1851ccc9fa26SSong Gao INSN_LASX(xvabsd_wu,         vvv)
1852ccc9fa26SSong Gao INSN_LASX(xvabsd_du,         vvv)
1853ccc9fa26SSong Gao 
1854*27f5485dSSong Gao INSN_LASX(xvadda_b,          vvv)
1855*27f5485dSSong Gao INSN_LASX(xvadda_h,          vvv)
1856*27f5485dSSong Gao INSN_LASX(xvadda_w,          vvv)
1857*27f5485dSSong Gao INSN_LASX(xvadda_d,          vvv)
1858*27f5485dSSong Gao 
185973123406SSong Gao INSN_LASX(xvreplgr2vr_b,     vr)
186073123406SSong Gao INSN_LASX(xvreplgr2vr_h,     vr)
186173123406SSong Gao INSN_LASX(xvreplgr2vr_w,     vr)
186273123406SSong Gao INSN_LASX(xvreplgr2vr_d,     vr)
1863