xref: /openbmc/qemu/target/loongarch/disas.c (revision df97f338)
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 
1706f3dfcc8bSSong Gao static void output_cv_x(DisasContext *ctx, arg_cv *a, const char *mnemonic)
1707f3dfcc8bSSong Gao {
1708f3dfcc8bSSong Gao     output(ctx, mnemonic, "fcc%d, x%d", a->cd, a->vj);
1709f3dfcc8bSSong Gao }
1710f3dfcc8bSSong Gao 
1711a59098e3SSong Gao static void output_v_i_x(DisasContext *ctx, arg_v_i *a, const char *mnemonic)
1712a59098e3SSong Gao {
1713a59098e3SSong Gao     output(ctx, mnemonic, "x%d, 0x%x", a->vd, a->imm);
1714a59098e3SSong Gao }
1715a59098e3SSong Gao 
1716c9caf158SSong Gao static void output_vvvv_x(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
1717c9caf158SSong Gao {
1718c9caf158SSong Gao     output(ctx, mnemonic, "x%d, x%d, x%d, x%d", a->vd, a->vj, a->vk, a->va);
1719c9caf158SSong Gao }
1720c9caf158SSong Gao 
1721269ca39aSSong Gao static void output_vvv_x(DisasContext *ctx, arg_vvv * a, const char *mnemonic)
1722269ca39aSSong Gao {
1723269ca39aSSong Gao     output(ctx, mnemonic, "x%d, x%d, x%d", a->vd, a->vj, a->vk);
1724269ca39aSSong Gao }
1725269ca39aSSong Gao 
172673123406SSong Gao static void output_vr_x(DisasContext *ctx, arg_vr *a, const char *mnemonic)
172773123406SSong Gao {
172873123406SSong Gao     output(ctx, mnemonic, "x%d, r%d", a->vd, a->rj);
172973123406SSong Gao }
173073123406SSong Gao 
173134200421SSong Gao static void output_vv_i_x(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
173234200421SSong Gao {
173334200421SSong Gao     output(ctx, mnemonic, "x%d, x%d, 0x%x", a->vd, a->vj, a->imm);
173434200421SSong Gao }
173534200421SSong Gao 
1736760f9647SSong Gao static void output_vv_x(DisasContext *ctx, arg_vv *a, const char *mnemonic)
1737760f9647SSong Gao {
1738760f9647SSong Gao     output(ctx, mnemonic, "x%d, x%d", a->vd, a->vj);
1739760f9647SSong Gao }
1740760f9647SSong Gao 
1741f5ce2c8fSSong Gao static void output_vr_i_x(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
1742f5ce2c8fSSong Gao {
1743f5ce2c8fSSong Gao     output(ctx, mnemonic, "x%d, r%d, 0x%x", a->vd, a->rj, a->imm);
1744f5ce2c8fSSong Gao }
1745f5ce2c8fSSong Gao 
1746f5ce2c8fSSong Gao static void output_rv_i_x(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
1747f5ce2c8fSSong Gao {
1748f5ce2c8fSSong Gao     output(ctx, mnemonic, "r%d, x%d, 0x%x", a->rd, a->vj, a->imm);
1749f5ce2c8fSSong Gao }
1750f5ce2c8fSSong Gao 
1751*df97f338SSong Gao static void output_vvr_x(DisasContext *ctx, arg_vvr *a, const char *mnemonic)
1752*df97f338SSong Gao {
1753*df97f338SSong Gao     output(ctx, mnemonic, "x%d, x%d, r%d", a->vd, a->vj, a->rk);
1754*df97f338SSong Gao }
1755*df97f338SSong Gao 
1756269ca39aSSong Gao INSN_LASX(xvadd_b,           vvv)
1757269ca39aSSong Gao INSN_LASX(xvadd_h,           vvv)
1758269ca39aSSong Gao INSN_LASX(xvadd_w,           vvv)
1759269ca39aSSong Gao INSN_LASX(xvadd_d,           vvv)
1760269ca39aSSong Gao INSN_LASX(xvadd_q,           vvv)
1761269ca39aSSong Gao INSN_LASX(xvsub_b,           vvv)
1762269ca39aSSong Gao INSN_LASX(xvsub_h,           vvv)
1763269ca39aSSong Gao INSN_LASX(xvsub_w,           vvv)
1764269ca39aSSong Gao INSN_LASX(xvsub_d,           vvv)
1765269ca39aSSong Gao INSN_LASX(xvsub_q,           vvv)
176673123406SSong Gao 
176734200421SSong Gao INSN_LASX(xvaddi_bu,         vv_i)
176834200421SSong Gao INSN_LASX(xvaddi_hu,         vv_i)
176934200421SSong Gao INSN_LASX(xvaddi_wu,         vv_i)
177034200421SSong Gao INSN_LASX(xvaddi_du,         vv_i)
177134200421SSong Gao INSN_LASX(xvsubi_bu,         vv_i)
177234200421SSong Gao INSN_LASX(xvsubi_hu,         vv_i)
177334200421SSong Gao INSN_LASX(xvsubi_wu,         vv_i)
177434200421SSong Gao INSN_LASX(xvsubi_du,         vv_i)
177534200421SSong Gao 
1776760f9647SSong Gao INSN_LASX(xvneg_b,           vv)
1777760f9647SSong Gao INSN_LASX(xvneg_h,           vv)
1778760f9647SSong Gao INSN_LASX(xvneg_w,           vv)
1779760f9647SSong Gao INSN_LASX(xvneg_d,           vv)
1780760f9647SSong Gao 
1781d2df46d9SSong Gao INSN_LASX(xvsadd_b,          vvv)
1782d2df46d9SSong Gao INSN_LASX(xvsadd_h,          vvv)
1783d2df46d9SSong Gao INSN_LASX(xvsadd_w,          vvv)
1784d2df46d9SSong Gao INSN_LASX(xvsadd_d,          vvv)
1785d2df46d9SSong Gao INSN_LASX(xvsadd_bu,         vvv)
1786d2df46d9SSong Gao INSN_LASX(xvsadd_hu,         vvv)
1787d2df46d9SSong Gao INSN_LASX(xvsadd_wu,         vvv)
1788d2df46d9SSong Gao INSN_LASX(xvsadd_du,         vvv)
1789d2df46d9SSong Gao INSN_LASX(xvssub_b,          vvv)
1790d2df46d9SSong Gao INSN_LASX(xvssub_h,          vvv)
1791d2df46d9SSong Gao INSN_LASX(xvssub_w,          vvv)
1792d2df46d9SSong Gao INSN_LASX(xvssub_d,          vvv)
1793d2df46d9SSong Gao INSN_LASX(xvssub_bu,         vvv)
1794d2df46d9SSong Gao INSN_LASX(xvssub_hu,         vvv)
1795d2df46d9SSong Gao INSN_LASX(xvssub_wu,         vvv)
1796d2df46d9SSong Gao INSN_LASX(xvssub_du,         vvv)
1797d2df46d9SSong Gao 
179864cf6b99SSong Gao INSN_LASX(xvhaddw_h_b,       vvv)
179964cf6b99SSong Gao INSN_LASX(xvhaddw_w_h,       vvv)
180064cf6b99SSong Gao INSN_LASX(xvhaddw_d_w,       vvv)
180164cf6b99SSong Gao INSN_LASX(xvhaddw_q_d,       vvv)
180264cf6b99SSong Gao INSN_LASX(xvhaddw_hu_bu,     vvv)
180364cf6b99SSong Gao INSN_LASX(xvhaddw_wu_hu,     vvv)
180464cf6b99SSong Gao INSN_LASX(xvhaddw_du_wu,     vvv)
180564cf6b99SSong Gao INSN_LASX(xvhaddw_qu_du,     vvv)
180664cf6b99SSong Gao INSN_LASX(xvhsubw_h_b,       vvv)
180764cf6b99SSong Gao INSN_LASX(xvhsubw_w_h,       vvv)
180864cf6b99SSong Gao INSN_LASX(xvhsubw_d_w,       vvv)
180964cf6b99SSong Gao INSN_LASX(xvhsubw_q_d,       vvv)
181064cf6b99SSong Gao INSN_LASX(xvhsubw_hu_bu,     vvv)
181164cf6b99SSong Gao INSN_LASX(xvhsubw_wu_hu,     vvv)
181264cf6b99SSong Gao INSN_LASX(xvhsubw_du_wu,     vvv)
181364cf6b99SSong Gao INSN_LASX(xvhsubw_qu_du,     vvv)
181464cf6b99SSong Gao 
181585995f07SSong Gao INSN_LASX(xvaddwev_h_b,      vvv)
181685995f07SSong Gao INSN_LASX(xvaddwev_w_h,      vvv)
181785995f07SSong Gao INSN_LASX(xvaddwev_d_w,      vvv)
181885995f07SSong Gao INSN_LASX(xvaddwev_q_d,      vvv)
181985995f07SSong Gao INSN_LASX(xvaddwod_h_b,      vvv)
182085995f07SSong Gao INSN_LASX(xvaddwod_w_h,      vvv)
182185995f07SSong Gao INSN_LASX(xvaddwod_d_w,      vvv)
182285995f07SSong Gao INSN_LASX(xvaddwod_q_d,      vvv)
182385995f07SSong Gao INSN_LASX(xvsubwev_h_b,      vvv)
182485995f07SSong Gao INSN_LASX(xvsubwev_w_h,      vvv)
182585995f07SSong Gao INSN_LASX(xvsubwev_d_w,      vvv)
182685995f07SSong Gao INSN_LASX(xvsubwev_q_d,      vvv)
182785995f07SSong Gao INSN_LASX(xvsubwod_h_b,      vvv)
182885995f07SSong Gao INSN_LASX(xvsubwod_w_h,      vvv)
182985995f07SSong Gao INSN_LASX(xvsubwod_d_w,      vvv)
183085995f07SSong Gao INSN_LASX(xvsubwod_q_d,      vvv)
183185995f07SSong Gao 
183285995f07SSong Gao INSN_LASX(xvaddwev_h_bu,     vvv)
183385995f07SSong Gao INSN_LASX(xvaddwev_w_hu,     vvv)
183485995f07SSong Gao INSN_LASX(xvaddwev_d_wu,     vvv)
183585995f07SSong Gao INSN_LASX(xvaddwev_q_du,     vvv)
183685995f07SSong Gao INSN_LASX(xvaddwod_h_bu,     vvv)
183785995f07SSong Gao INSN_LASX(xvaddwod_w_hu,     vvv)
183885995f07SSong Gao INSN_LASX(xvaddwod_d_wu,     vvv)
183985995f07SSong Gao INSN_LASX(xvaddwod_q_du,     vvv)
184085995f07SSong Gao INSN_LASX(xvsubwev_h_bu,     vvv)
184185995f07SSong Gao INSN_LASX(xvsubwev_w_hu,     vvv)
184285995f07SSong Gao INSN_LASX(xvsubwev_d_wu,     vvv)
184385995f07SSong Gao INSN_LASX(xvsubwev_q_du,     vvv)
184485995f07SSong Gao INSN_LASX(xvsubwod_h_bu,     vvv)
184585995f07SSong Gao INSN_LASX(xvsubwod_w_hu,     vvv)
184685995f07SSong Gao INSN_LASX(xvsubwod_d_wu,     vvv)
184785995f07SSong Gao INSN_LASX(xvsubwod_q_du,     vvv)
184885995f07SSong Gao 
184985995f07SSong Gao INSN_LASX(xvaddwev_h_bu_b,   vvv)
185085995f07SSong Gao INSN_LASX(xvaddwev_w_hu_h,   vvv)
185185995f07SSong Gao INSN_LASX(xvaddwev_d_wu_w,   vvv)
185285995f07SSong Gao INSN_LASX(xvaddwev_q_du_d,   vvv)
185385995f07SSong Gao INSN_LASX(xvaddwod_h_bu_b,   vvv)
185485995f07SSong Gao INSN_LASX(xvaddwod_w_hu_h,   vvv)
185585995f07SSong Gao INSN_LASX(xvaddwod_d_wu_w,   vvv)
185685995f07SSong Gao INSN_LASX(xvaddwod_q_du_d,   vvv)
185785995f07SSong Gao 
1858ee7250d0SSong Gao INSN_LASX(xvavg_b,           vvv)
1859ee7250d0SSong Gao INSN_LASX(xvavg_h,           vvv)
1860ee7250d0SSong Gao INSN_LASX(xvavg_w,           vvv)
1861ee7250d0SSong Gao INSN_LASX(xvavg_d,           vvv)
1862ee7250d0SSong Gao INSN_LASX(xvavg_bu,          vvv)
1863ee7250d0SSong Gao INSN_LASX(xvavg_hu,          vvv)
1864ee7250d0SSong Gao INSN_LASX(xvavg_wu,          vvv)
1865ee7250d0SSong Gao INSN_LASX(xvavg_du,          vvv)
1866ee7250d0SSong Gao INSN_LASX(xvavgr_b,          vvv)
1867ee7250d0SSong Gao INSN_LASX(xvavgr_h,          vvv)
1868ee7250d0SSong Gao INSN_LASX(xvavgr_w,          vvv)
1869ee7250d0SSong Gao INSN_LASX(xvavgr_d,          vvv)
1870ee7250d0SSong Gao INSN_LASX(xvavgr_bu,         vvv)
1871ee7250d0SSong Gao INSN_LASX(xvavgr_hu,         vvv)
1872ee7250d0SSong Gao INSN_LASX(xvavgr_wu,         vvv)
1873ee7250d0SSong Gao INSN_LASX(xvavgr_du,         vvv)
1874ee7250d0SSong Gao 
1875ccc9fa26SSong Gao INSN_LASX(xvabsd_b,          vvv)
1876ccc9fa26SSong Gao INSN_LASX(xvabsd_h,          vvv)
1877ccc9fa26SSong Gao INSN_LASX(xvabsd_w,          vvv)
1878ccc9fa26SSong Gao INSN_LASX(xvabsd_d,          vvv)
1879ccc9fa26SSong Gao INSN_LASX(xvabsd_bu,         vvv)
1880ccc9fa26SSong Gao INSN_LASX(xvabsd_hu,         vvv)
1881ccc9fa26SSong Gao INSN_LASX(xvabsd_wu,         vvv)
1882ccc9fa26SSong Gao INSN_LASX(xvabsd_du,         vvv)
1883ccc9fa26SSong Gao 
188427f5485dSSong Gao INSN_LASX(xvadda_b,          vvv)
188527f5485dSSong Gao INSN_LASX(xvadda_h,          vvv)
188627f5485dSSong Gao INSN_LASX(xvadda_w,          vvv)
188727f5485dSSong Gao INSN_LASX(xvadda_d,          vvv)
188827f5485dSSong Gao 
1889c09360faSSong Gao INSN_LASX(xvmax_b,           vvv)
1890c09360faSSong Gao INSN_LASX(xvmax_h,           vvv)
1891c09360faSSong Gao INSN_LASX(xvmax_w,           vvv)
1892c09360faSSong Gao INSN_LASX(xvmax_d,           vvv)
1893c09360faSSong Gao INSN_LASX(xvmin_b,           vvv)
1894c09360faSSong Gao INSN_LASX(xvmin_h,           vvv)
1895c09360faSSong Gao INSN_LASX(xvmin_w,           vvv)
1896c09360faSSong Gao INSN_LASX(xvmin_d,           vvv)
1897c09360faSSong Gao INSN_LASX(xvmax_bu,          vvv)
1898c09360faSSong Gao INSN_LASX(xvmax_hu,          vvv)
1899c09360faSSong Gao INSN_LASX(xvmax_wu,          vvv)
1900c09360faSSong Gao INSN_LASX(xvmax_du,          vvv)
1901c09360faSSong Gao INSN_LASX(xvmin_bu,          vvv)
1902c09360faSSong Gao INSN_LASX(xvmin_hu,          vvv)
1903c09360faSSong Gao INSN_LASX(xvmin_wu,          vvv)
1904c09360faSSong Gao INSN_LASX(xvmin_du,          vvv)
1905c09360faSSong Gao 
1906c09360faSSong Gao INSN_LASX(xvmaxi_b,          vv_i)
1907c09360faSSong Gao INSN_LASX(xvmaxi_h,          vv_i)
1908c09360faSSong Gao INSN_LASX(xvmaxi_w,          vv_i)
1909c09360faSSong Gao INSN_LASX(xvmaxi_d,          vv_i)
1910c09360faSSong Gao INSN_LASX(xvmini_b,          vv_i)
1911c09360faSSong Gao INSN_LASX(xvmini_h,          vv_i)
1912c09360faSSong Gao INSN_LASX(xvmini_w,          vv_i)
1913c09360faSSong Gao INSN_LASX(xvmini_d,          vv_i)
1914c09360faSSong Gao INSN_LASX(xvmaxi_bu,         vv_i)
1915c09360faSSong Gao INSN_LASX(xvmaxi_hu,         vv_i)
1916c09360faSSong Gao INSN_LASX(xvmaxi_wu,         vv_i)
1917c09360faSSong Gao INSN_LASX(xvmaxi_du,         vv_i)
1918c09360faSSong Gao INSN_LASX(xvmini_bu,         vv_i)
1919c09360faSSong Gao INSN_LASX(xvmini_hu,         vv_i)
1920c09360faSSong Gao INSN_LASX(xvmini_wu,         vv_i)
1921c09360faSSong Gao INSN_LASX(xvmini_du,         vv_i)
1922c09360faSSong Gao 
1923342dc1cfSSong Gao INSN_LASX(xvmul_b,           vvv)
1924342dc1cfSSong Gao INSN_LASX(xvmul_h,           vvv)
1925342dc1cfSSong Gao INSN_LASX(xvmul_w,           vvv)
1926342dc1cfSSong Gao INSN_LASX(xvmul_d,           vvv)
1927342dc1cfSSong Gao INSN_LASX(xvmuh_b,           vvv)
1928342dc1cfSSong Gao INSN_LASX(xvmuh_h,           vvv)
1929342dc1cfSSong Gao INSN_LASX(xvmuh_w,           vvv)
1930342dc1cfSSong Gao INSN_LASX(xvmuh_d,           vvv)
1931342dc1cfSSong Gao INSN_LASX(xvmuh_bu,          vvv)
1932342dc1cfSSong Gao INSN_LASX(xvmuh_hu,          vvv)
1933342dc1cfSSong Gao INSN_LASX(xvmuh_wu,          vvv)
1934342dc1cfSSong Gao INSN_LASX(xvmuh_du,          vvv)
1935342dc1cfSSong Gao 
1936342dc1cfSSong Gao INSN_LASX(xvmulwev_h_b,      vvv)
1937342dc1cfSSong Gao INSN_LASX(xvmulwev_w_h,      vvv)
1938342dc1cfSSong Gao INSN_LASX(xvmulwev_d_w,      vvv)
1939342dc1cfSSong Gao INSN_LASX(xvmulwev_q_d,      vvv)
1940342dc1cfSSong Gao INSN_LASX(xvmulwod_h_b,      vvv)
1941342dc1cfSSong Gao INSN_LASX(xvmulwod_w_h,      vvv)
1942342dc1cfSSong Gao INSN_LASX(xvmulwod_d_w,      vvv)
1943342dc1cfSSong Gao INSN_LASX(xvmulwod_q_d,      vvv)
1944342dc1cfSSong Gao INSN_LASX(xvmulwev_h_bu,     vvv)
1945342dc1cfSSong Gao INSN_LASX(xvmulwev_w_hu,     vvv)
1946342dc1cfSSong Gao INSN_LASX(xvmulwev_d_wu,     vvv)
1947342dc1cfSSong Gao INSN_LASX(xvmulwev_q_du,     vvv)
1948342dc1cfSSong Gao INSN_LASX(xvmulwod_h_bu,     vvv)
1949342dc1cfSSong Gao INSN_LASX(xvmulwod_w_hu,     vvv)
1950342dc1cfSSong Gao INSN_LASX(xvmulwod_d_wu,     vvv)
1951342dc1cfSSong Gao INSN_LASX(xvmulwod_q_du,     vvv)
1952342dc1cfSSong Gao INSN_LASX(xvmulwev_h_bu_b,   vvv)
1953342dc1cfSSong Gao INSN_LASX(xvmulwev_w_hu_h,   vvv)
1954342dc1cfSSong Gao INSN_LASX(xvmulwev_d_wu_w,   vvv)
1955342dc1cfSSong Gao INSN_LASX(xvmulwev_q_du_d,   vvv)
1956342dc1cfSSong Gao INSN_LASX(xvmulwod_h_bu_b,   vvv)
1957342dc1cfSSong Gao INSN_LASX(xvmulwod_w_hu_h,   vvv)
1958342dc1cfSSong Gao INSN_LASX(xvmulwod_d_wu_w,   vvv)
1959342dc1cfSSong Gao INSN_LASX(xvmulwod_q_du_d,   vvv)
1960342dc1cfSSong Gao 
19613f450c17SSong Gao INSN_LASX(xvmadd_b,          vvv)
19623f450c17SSong Gao INSN_LASX(xvmadd_h,          vvv)
19633f450c17SSong Gao INSN_LASX(xvmadd_w,          vvv)
19643f450c17SSong Gao INSN_LASX(xvmadd_d,          vvv)
19653f450c17SSong Gao INSN_LASX(xvmsub_b,          vvv)
19663f450c17SSong Gao INSN_LASX(xvmsub_h,          vvv)
19673f450c17SSong Gao INSN_LASX(xvmsub_w,          vvv)
19683f450c17SSong Gao INSN_LASX(xvmsub_d,          vvv)
19693f450c17SSong Gao 
19703f450c17SSong Gao INSN_LASX(xvmaddwev_h_b,     vvv)
19713f450c17SSong Gao INSN_LASX(xvmaddwev_w_h,     vvv)
19723f450c17SSong Gao INSN_LASX(xvmaddwev_d_w,     vvv)
19733f450c17SSong Gao INSN_LASX(xvmaddwev_q_d,     vvv)
19743f450c17SSong Gao INSN_LASX(xvmaddwod_h_b,     vvv)
19753f450c17SSong Gao INSN_LASX(xvmaddwod_w_h,     vvv)
19763f450c17SSong Gao INSN_LASX(xvmaddwod_d_w,     vvv)
19773f450c17SSong Gao INSN_LASX(xvmaddwod_q_d,     vvv)
19783f450c17SSong Gao INSN_LASX(xvmaddwev_h_bu,    vvv)
19793f450c17SSong Gao INSN_LASX(xvmaddwev_w_hu,    vvv)
19803f450c17SSong Gao INSN_LASX(xvmaddwev_d_wu,    vvv)
19813f450c17SSong Gao INSN_LASX(xvmaddwev_q_du,    vvv)
19823f450c17SSong Gao INSN_LASX(xvmaddwod_h_bu,    vvv)
19833f450c17SSong Gao INSN_LASX(xvmaddwod_w_hu,    vvv)
19843f450c17SSong Gao INSN_LASX(xvmaddwod_d_wu,    vvv)
19853f450c17SSong Gao INSN_LASX(xvmaddwod_q_du,    vvv)
19863f450c17SSong Gao INSN_LASX(xvmaddwev_h_bu_b,  vvv)
19873f450c17SSong Gao INSN_LASX(xvmaddwev_w_hu_h,  vvv)
19883f450c17SSong Gao INSN_LASX(xvmaddwev_d_wu_w,  vvv)
19893f450c17SSong Gao INSN_LASX(xvmaddwev_q_du_d,  vvv)
19903f450c17SSong Gao INSN_LASX(xvmaddwod_h_bu_b,  vvv)
19913f450c17SSong Gao INSN_LASX(xvmaddwod_w_hu_h,  vvv)
19923f450c17SSong Gao INSN_LASX(xvmaddwod_d_wu_w,  vvv)
19933f450c17SSong Gao INSN_LASX(xvmaddwod_q_du_d,  vvv)
19943f450c17SSong Gao 
1995abb693deSSong Gao INSN_LASX(xvdiv_b,           vvv)
1996abb693deSSong Gao INSN_LASX(xvdiv_h,           vvv)
1997abb693deSSong Gao INSN_LASX(xvdiv_w,           vvv)
1998abb693deSSong Gao INSN_LASX(xvdiv_d,           vvv)
1999abb693deSSong Gao INSN_LASX(xvdiv_bu,          vvv)
2000abb693deSSong Gao INSN_LASX(xvdiv_hu,          vvv)
2001abb693deSSong Gao INSN_LASX(xvdiv_wu,          vvv)
2002abb693deSSong Gao INSN_LASX(xvdiv_du,          vvv)
2003abb693deSSong Gao INSN_LASX(xvmod_b,           vvv)
2004abb693deSSong Gao INSN_LASX(xvmod_h,           vvv)
2005abb693deSSong Gao INSN_LASX(xvmod_w,           vvv)
2006abb693deSSong Gao INSN_LASX(xvmod_d,           vvv)
2007abb693deSSong Gao INSN_LASX(xvmod_bu,          vvv)
2008abb693deSSong Gao INSN_LASX(xvmod_hu,          vvv)
2009abb693deSSong Gao INSN_LASX(xvmod_wu,          vvv)
2010abb693deSSong Gao INSN_LASX(xvmod_du,          vvv)
2011abb693deSSong Gao 
2012e5c7f031SSong Gao INSN_LASX(xvsat_b,           vv_i)
2013e5c7f031SSong Gao INSN_LASX(xvsat_h,           vv_i)
2014e5c7f031SSong Gao INSN_LASX(xvsat_w,           vv_i)
2015e5c7f031SSong Gao INSN_LASX(xvsat_d,           vv_i)
2016e5c7f031SSong Gao INSN_LASX(xvsat_bu,          vv_i)
2017e5c7f031SSong Gao INSN_LASX(xvsat_hu,          vv_i)
2018e5c7f031SSong Gao INSN_LASX(xvsat_wu,          vv_i)
2019e5c7f031SSong Gao INSN_LASX(xvsat_du,          vv_i)
2020e5c7f031SSong Gao 
2021f0db0bebSSong Gao INSN_LASX(xvexth_h_b,        vv)
2022f0db0bebSSong Gao INSN_LASX(xvexth_w_h,        vv)
2023f0db0bebSSong Gao INSN_LASX(xvexth_d_w,        vv)
2024f0db0bebSSong Gao INSN_LASX(xvexth_q_d,        vv)
2025f0db0bebSSong Gao INSN_LASX(xvexth_hu_bu,      vv)
2026f0db0bebSSong Gao INSN_LASX(xvexth_wu_hu,      vv)
2027f0db0bebSSong Gao INSN_LASX(xvexth_du_wu,      vv)
2028f0db0bebSSong Gao INSN_LASX(xvexth_qu_du,      vv)
2029f0db0bebSSong Gao 
2030790acb2aSSong Gao INSN_LASX(vext2xv_h_b,       vv)
2031790acb2aSSong Gao INSN_LASX(vext2xv_w_b,       vv)
2032790acb2aSSong Gao INSN_LASX(vext2xv_d_b,       vv)
2033790acb2aSSong Gao INSN_LASX(vext2xv_w_h,       vv)
2034790acb2aSSong Gao INSN_LASX(vext2xv_d_h,       vv)
2035790acb2aSSong Gao INSN_LASX(vext2xv_d_w,       vv)
2036790acb2aSSong Gao INSN_LASX(vext2xv_hu_bu,     vv)
2037790acb2aSSong Gao INSN_LASX(vext2xv_wu_bu,     vv)
2038790acb2aSSong Gao INSN_LASX(vext2xv_du_bu,     vv)
2039790acb2aSSong Gao INSN_LASX(vext2xv_wu_hu,     vv)
2040790acb2aSSong Gao INSN_LASX(vext2xv_du_hu,     vv)
2041790acb2aSSong Gao INSN_LASX(vext2xv_du_wu,     vv)
2042790acb2aSSong Gao 
20433a275217SSong Gao INSN_LASX(xvsigncov_b,       vvv)
20443a275217SSong Gao INSN_LASX(xvsigncov_h,       vvv)
20453a275217SSong Gao INSN_LASX(xvsigncov_w,       vvv)
20463a275217SSong Gao INSN_LASX(xvsigncov_d,       vvv)
20473a275217SSong Gao 
204897074674SSong Gao INSN_LASX(xvmskltz_b,        vv)
204997074674SSong Gao INSN_LASX(xvmskltz_h,        vv)
205097074674SSong Gao INSN_LASX(xvmskltz_w,        vv)
205197074674SSong Gao INSN_LASX(xvmskltz_d,        vv)
205297074674SSong Gao INSN_LASX(xvmskgez_b,        vv)
205397074674SSong Gao INSN_LASX(xvmsknz_b,         vv)
205497074674SSong Gao 
2055a59098e3SSong Gao INSN_LASX(xvldi,             v_i)
2056a59098e3SSong Gao 
20574472a45aSSong Gao INSN_LASX(xvand_v,           vvv)
20584472a45aSSong Gao INSN_LASX(xvor_v,            vvv)
20594472a45aSSong Gao INSN_LASX(xvxor_v,           vvv)
20604472a45aSSong Gao INSN_LASX(xvnor_v,           vvv)
20614472a45aSSong Gao INSN_LASX(xvandn_v,          vvv)
20624472a45aSSong Gao INSN_LASX(xvorn_v,           vvv)
20634472a45aSSong Gao 
20644472a45aSSong Gao INSN_LASX(xvandi_b,          vv_i)
20654472a45aSSong Gao INSN_LASX(xvori_b,           vv_i)
20664472a45aSSong Gao INSN_LASX(xvxori_b,          vv_i)
20674472a45aSSong Gao INSN_LASX(xvnori_b,          vv_i)
20684472a45aSSong Gao 
2069ad6dc718SSong Gao INSN_LASX(xvsll_b,           vvv)
2070ad6dc718SSong Gao INSN_LASX(xvsll_h,           vvv)
2071ad6dc718SSong Gao INSN_LASX(xvsll_w,           vvv)
2072ad6dc718SSong Gao INSN_LASX(xvsll_d,           vvv)
2073ad6dc718SSong Gao INSN_LASX(xvslli_b,          vv_i)
2074ad6dc718SSong Gao INSN_LASX(xvslli_h,          vv_i)
2075ad6dc718SSong Gao INSN_LASX(xvslli_w,          vv_i)
2076ad6dc718SSong Gao INSN_LASX(xvslli_d,          vv_i)
2077ad6dc718SSong Gao 
2078ad6dc718SSong Gao INSN_LASX(xvsrl_b,           vvv)
2079ad6dc718SSong Gao INSN_LASX(xvsrl_h,           vvv)
2080ad6dc718SSong Gao INSN_LASX(xvsrl_w,           vvv)
2081ad6dc718SSong Gao INSN_LASX(xvsrl_d,           vvv)
2082ad6dc718SSong Gao INSN_LASX(xvsrli_b,          vv_i)
2083ad6dc718SSong Gao INSN_LASX(xvsrli_h,          vv_i)
2084ad6dc718SSong Gao INSN_LASX(xvsrli_w,          vv_i)
2085ad6dc718SSong Gao INSN_LASX(xvsrli_d,          vv_i)
2086ad6dc718SSong Gao 
2087ad6dc718SSong Gao INSN_LASX(xvsra_b,           vvv)
2088ad6dc718SSong Gao INSN_LASX(xvsra_h,           vvv)
2089ad6dc718SSong Gao INSN_LASX(xvsra_w,           vvv)
2090ad6dc718SSong Gao INSN_LASX(xvsra_d,           vvv)
2091ad6dc718SSong Gao INSN_LASX(xvsrai_b,          vv_i)
2092ad6dc718SSong Gao INSN_LASX(xvsrai_h,          vv_i)
2093ad6dc718SSong Gao INSN_LASX(xvsrai_w,          vv_i)
2094ad6dc718SSong Gao INSN_LASX(xvsrai_d,          vv_i)
2095ad6dc718SSong Gao 
2096ad6dc718SSong Gao INSN_LASX(xvrotr_b,          vvv)
2097ad6dc718SSong Gao INSN_LASX(xvrotr_h,          vvv)
2098ad6dc718SSong Gao INSN_LASX(xvrotr_w,          vvv)
2099ad6dc718SSong Gao INSN_LASX(xvrotr_d,          vvv)
2100ad6dc718SSong Gao INSN_LASX(xvrotri_b,         vv_i)
2101ad6dc718SSong Gao INSN_LASX(xvrotri_h,         vv_i)
2102ad6dc718SSong Gao INSN_LASX(xvrotri_w,         vv_i)
2103ad6dc718SSong Gao INSN_LASX(xvrotri_d,         vv_i)
2104ad6dc718SSong Gao 
21056567eac7SSong Gao INSN_LASX(xvsllwil_h_b,      vv_i)
21066567eac7SSong Gao INSN_LASX(xvsllwil_w_h,      vv_i)
21076567eac7SSong Gao INSN_LASX(xvsllwil_d_w,      vv_i)
21086567eac7SSong Gao INSN_LASX(xvextl_q_d,        vv)
21096567eac7SSong Gao INSN_LASX(xvsllwil_hu_bu,    vv_i)
21106567eac7SSong Gao INSN_LASX(xvsllwil_wu_hu,    vv_i)
21116567eac7SSong Gao INSN_LASX(xvsllwil_du_wu,    vv_i)
21126567eac7SSong Gao INSN_LASX(xvextl_qu_du,      vv)
21136567eac7SSong Gao 
21148c272fe8SSong Gao INSN_LASX(xvsrlr_b,          vvv)
21158c272fe8SSong Gao INSN_LASX(xvsrlr_h,          vvv)
21168c272fe8SSong Gao INSN_LASX(xvsrlr_w,          vvv)
21178c272fe8SSong Gao INSN_LASX(xvsrlr_d,          vvv)
21188c272fe8SSong Gao INSN_LASX(xvsrlri_b,         vv_i)
21198c272fe8SSong Gao INSN_LASX(xvsrlri_h,         vv_i)
21208c272fe8SSong Gao INSN_LASX(xvsrlri_w,         vv_i)
21218c272fe8SSong Gao INSN_LASX(xvsrlri_d,         vv_i)
21228c272fe8SSong Gao 
21238c272fe8SSong Gao INSN_LASX(xvsrar_b,          vvv)
21248c272fe8SSong Gao INSN_LASX(xvsrar_h,          vvv)
21258c272fe8SSong Gao INSN_LASX(xvsrar_w,          vvv)
21268c272fe8SSong Gao INSN_LASX(xvsrar_d,          vvv)
21278c272fe8SSong Gao INSN_LASX(xvsrari_b,         vv_i)
21288c272fe8SSong Gao INSN_LASX(xvsrari_h,         vv_i)
21298c272fe8SSong Gao INSN_LASX(xvsrari_w,         vv_i)
21308c272fe8SSong Gao INSN_LASX(xvsrari_d,         vv_i)
21318c272fe8SSong Gao 
213240c7674eSSong Gao INSN_LASX(xvsrln_b_h,        vvv)
213340c7674eSSong Gao INSN_LASX(xvsrln_h_w,        vvv)
213440c7674eSSong Gao INSN_LASX(xvsrln_w_d,        vvv)
213540c7674eSSong Gao INSN_LASX(xvsran_b_h,        vvv)
213640c7674eSSong Gao INSN_LASX(xvsran_h_w,        vvv)
213740c7674eSSong Gao INSN_LASX(xvsran_w_d,        vvv)
213840c7674eSSong Gao 
213940c7674eSSong Gao INSN_LASX(xvsrlni_b_h,       vv_i)
214040c7674eSSong Gao INSN_LASX(xvsrlni_h_w,       vv_i)
214140c7674eSSong Gao INSN_LASX(xvsrlni_w_d,       vv_i)
214240c7674eSSong Gao INSN_LASX(xvsrlni_d_q,       vv_i)
214340c7674eSSong Gao INSN_LASX(xvsrani_b_h,       vv_i)
214440c7674eSSong Gao INSN_LASX(xvsrani_h_w,       vv_i)
214540c7674eSSong Gao INSN_LASX(xvsrani_w_d,       vv_i)
214640c7674eSSong Gao INSN_LASX(xvsrani_d_q,       vv_i)
214740c7674eSSong Gao 
2148c50ce38aSSong Gao INSN_LASX(xvsrlrn_b_h,       vvv)
2149c50ce38aSSong Gao INSN_LASX(xvsrlrn_h_w,       vvv)
2150c50ce38aSSong Gao INSN_LASX(xvsrlrn_w_d,       vvv)
2151c50ce38aSSong Gao INSN_LASX(xvsrarn_b_h,       vvv)
2152c50ce38aSSong Gao INSN_LASX(xvsrarn_h_w,       vvv)
2153c50ce38aSSong Gao INSN_LASX(xvsrarn_w_d,       vvv)
2154c50ce38aSSong Gao 
2155c50ce38aSSong Gao INSN_LASX(xvsrlrni_b_h,      vv_i)
2156c50ce38aSSong Gao INSN_LASX(xvsrlrni_h_w,      vv_i)
2157c50ce38aSSong Gao INSN_LASX(xvsrlrni_w_d,      vv_i)
2158c50ce38aSSong Gao INSN_LASX(xvsrlrni_d_q,      vv_i)
2159c50ce38aSSong Gao INSN_LASX(xvsrarni_b_h,      vv_i)
2160c50ce38aSSong Gao INSN_LASX(xvsrarni_h_w,      vv_i)
2161c50ce38aSSong Gao INSN_LASX(xvsrarni_w_d,      vv_i)
2162c50ce38aSSong Gao INSN_LASX(xvsrarni_d_q,      vv_i)
2163c50ce38aSSong Gao 
21646256c8caSSong Gao INSN_LASX(xvssrln_b_h,       vvv)
21656256c8caSSong Gao INSN_LASX(xvssrln_h_w,       vvv)
21666256c8caSSong Gao INSN_LASX(xvssrln_w_d,       vvv)
21676256c8caSSong Gao INSN_LASX(xvssran_b_h,       vvv)
21686256c8caSSong Gao INSN_LASX(xvssran_h_w,       vvv)
21696256c8caSSong Gao INSN_LASX(xvssran_w_d,       vvv)
21706256c8caSSong Gao INSN_LASX(xvssrln_bu_h,      vvv)
21716256c8caSSong Gao INSN_LASX(xvssrln_hu_w,      vvv)
21726256c8caSSong Gao INSN_LASX(xvssrln_wu_d,      vvv)
21736256c8caSSong Gao INSN_LASX(xvssran_bu_h,      vvv)
21746256c8caSSong Gao INSN_LASX(xvssran_hu_w,      vvv)
21756256c8caSSong Gao INSN_LASX(xvssran_wu_d,      vvv)
21766256c8caSSong Gao 
21776256c8caSSong Gao INSN_LASX(xvssrlni_b_h,      vv_i)
21786256c8caSSong Gao INSN_LASX(xvssrlni_h_w,      vv_i)
21796256c8caSSong Gao INSN_LASX(xvssrlni_w_d,      vv_i)
21806256c8caSSong Gao INSN_LASX(xvssrlni_d_q,      vv_i)
21816256c8caSSong Gao INSN_LASX(xvssrani_b_h,      vv_i)
21826256c8caSSong Gao INSN_LASX(xvssrani_h_w,      vv_i)
21836256c8caSSong Gao INSN_LASX(xvssrani_w_d,      vv_i)
21846256c8caSSong Gao INSN_LASX(xvssrani_d_q,      vv_i)
21856256c8caSSong Gao INSN_LASX(xvssrlni_bu_h,     vv_i)
21866256c8caSSong Gao INSN_LASX(xvssrlni_hu_w,     vv_i)
21876256c8caSSong Gao INSN_LASX(xvssrlni_wu_d,     vv_i)
21886256c8caSSong Gao INSN_LASX(xvssrlni_du_q,     vv_i)
21896256c8caSSong Gao INSN_LASX(xvssrani_bu_h,     vv_i)
21906256c8caSSong Gao INSN_LASX(xvssrani_hu_w,     vv_i)
21916256c8caSSong Gao INSN_LASX(xvssrani_wu_d,     vv_i)
21926256c8caSSong Gao INSN_LASX(xvssrani_du_q,     vv_i)
21936256c8caSSong Gao 
219477fca794SSong Gao INSN_LASX(xvssrlrn_b_h,      vvv)
219577fca794SSong Gao INSN_LASX(xvssrlrn_h_w,      vvv)
219677fca794SSong Gao INSN_LASX(xvssrlrn_w_d,      vvv)
219777fca794SSong Gao INSN_LASX(xvssrarn_b_h,      vvv)
219877fca794SSong Gao INSN_LASX(xvssrarn_h_w,      vvv)
219977fca794SSong Gao INSN_LASX(xvssrarn_w_d,      vvv)
220077fca794SSong Gao INSN_LASX(xvssrlrn_bu_h,     vvv)
220177fca794SSong Gao INSN_LASX(xvssrlrn_hu_w,     vvv)
220277fca794SSong Gao INSN_LASX(xvssrlrn_wu_d,     vvv)
220377fca794SSong Gao INSN_LASX(xvssrarn_bu_h,     vvv)
220477fca794SSong Gao INSN_LASX(xvssrarn_hu_w,     vvv)
220577fca794SSong Gao INSN_LASX(xvssrarn_wu_d,     vvv)
220677fca794SSong Gao 
220777fca794SSong Gao INSN_LASX(xvssrlrni_b_h,     vv_i)
220877fca794SSong Gao INSN_LASX(xvssrlrni_h_w,     vv_i)
220977fca794SSong Gao INSN_LASX(xvssrlrni_w_d,     vv_i)
221077fca794SSong Gao INSN_LASX(xvssrlrni_d_q,     vv_i)
221177fca794SSong Gao INSN_LASX(xvssrlrni_bu_h,    vv_i)
221277fca794SSong Gao INSN_LASX(xvssrlrni_hu_w,    vv_i)
221377fca794SSong Gao INSN_LASX(xvssrlrni_wu_d,    vv_i)
221477fca794SSong Gao INSN_LASX(xvssrlrni_du_q,    vv_i)
221577fca794SSong Gao INSN_LASX(xvssrarni_b_h,     vv_i)
221677fca794SSong Gao INSN_LASX(xvssrarni_h_w,     vv_i)
221777fca794SSong Gao INSN_LASX(xvssrarni_w_d,     vv_i)
221877fca794SSong Gao INSN_LASX(xvssrarni_d_q,     vv_i)
221977fca794SSong Gao INSN_LASX(xvssrarni_bu_h,    vv_i)
222077fca794SSong Gao INSN_LASX(xvssrarni_hu_w,    vv_i)
222177fca794SSong Gao INSN_LASX(xvssrarni_wu_d,    vv_i)
222277fca794SSong Gao INSN_LASX(xvssrarni_du_q,    vv_i)
222377fca794SSong Gao 
222412ad133fSSong Gao INSN_LASX(xvclo_b,           vv)
222512ad133fSSong Gao INSN_LASX(xvclo_h,           vv)
222612ad133fSSong Gao INSN_LASX(xvclo_w,           vv)
222712ad133fSSong Gao INSN_LASX(xvclo_d,           vv)
222812ad133fSSong Gao INSN_LASX(xvclz_b,           vv)
222912ad133fSSong Gao INSN_LASX(xvclz_h,           vv)
223012ad133fSSong Gao INSN_LASX(xvclz_w,           vv)
223112ad133fSSong Gao INSN_LASX(xvclz_d,           vv)
223212ad133fSSong Gao 
2233956dec74SSong Gao INSN_LASX(xvpcnt_b,          vv)
2234956dec74SSong Gao INSN_LASX(xvpcnt_h,          vv)
2235956dec74SSong Gao INSN_LASX(xvpcnt_w,          vv)
2236956dec74SSong Gao INSN_LASX(xvpcnt_d,          vv)
2237956dec74SSong Gao 
22381b3e242fSSong Gao INSN_LASX(xvbitclr_b,        vvv)
22391b3e242fSSong Gao INSN_LASX(xvbitclr_h,        vvv)
22401b3e242fSSong Gao INSN_LASX(xvbitclr_w,        vvv)
22411b3e242fSSong Gao INSN_LASX(xvbitclr_d,        vvv)
22421b3e242fSSong Gao INSN_LASX(xvbitclri_b,       vv_i)
22431b3e242fSSong Gao INSN_LASX(xvbitclri_h,       vv_i)
22441b3e242fSSong Gao INSN_LASX(xvbitclri_w,       vv_i)
22451b3e242fSSong Gao INSN_LASX(xvbitclri_d,       vv_i)
22461b3e242fSSong Gao INSN_LASX(xvbitset_b,        vvv)
22471b3e242fSSong Gao INSN_LASX(xvbitset_h,        vvv)
22481b3e242fSSong Gao INSN_LASX(xvbitset_w,        vvv)
22491b3e242fSSong Gao INSN_LASX(xvbitset_d,        vvv)
22501b3e242fSSong Gao INSN_LASX(xvbitseti_b,       vv_i)
22511b3e242fSSong Gao INSN_LASX(xvbitseti_h,       vv_i)
22521b3e242fSSong Gao INSN_LASX(xvbitseti_w,       vv_i)
22531b3e242fSSong Gao INSN_LASX(xvbitseti_d,       vv_i)
22541b3e242fSSong Gao INSN_LASX(xvbitrev_b,        vvv)
22551b3e242fSSong Gao INSN_LASX(xvbitrev_h,        vvv)
22561b3e242fSSong Gao INSN_LASX(xvbitrev_w,        vvv)
22571b3e242fSSong Gao INSN_LASX(xvbitrev_d,        vvv)
22581b3e242fSSong Gao INSN_LASX(xvbitrevi_b,       vv_i)
22591b3e242fSSong Gao INSN_LASX(xvbitrevi_h,       vv_i)
22601b3e242fSSong Gao INSN_LASX(xvbitrevi_w,       vv_i)
22611b3e242fSSong Gao INSN_LASX(xvbitrevi_d,       vv_i)
22621b3e242fSSong Gao 
2263abee168eSSong Gao INSN_LASX(xvfrstp_b,         vvv)
2264abee168eSSong Gao INSN_LASX(xvfrstp_h,         vvv)
2265abee168eSSong Gao INSN_LASX(xvfrstpi_b,        vv_i)
2266abee168eSSong Gao INSN_LASX(xvfrstpi_h,        vv_i)
2267abee168eSSong Gao 
2268c9caf158SSong Gao INSN_LASX(xvfadd_s,          vvv)
2269c9caf158SSong Gao INSN_LASX(xvfadd_d,          vvv)
2270c9caf158SSong Gao INSN_LASX(xvfsub_s,          vvv)
2271c9caf158SSong Gao INSN_LASX(xvfsub_d,          vvv)
2272c9caf158SSong Gao INSN_LASX(xvfmul_s,          vvv)
2273c9caf158SSong Gao INSN_LASX(xvfmul_d,          vvv)
2274c9caf158SSong Gao INSN_LASX(xvfdiv_s,          vvv)
2275c9caf158SSong Gao INSN_LASX(xvfdiv_d,          vvv)
2276c9caf158SSong Gao 
2277c9caf158SSong Gao INSN_LASX(xvfmadd_s,         vvvv)
2278c9caf158SSong Gao INSN_LASX(xvfmadd_d,         vvvv)
2279c9caf158SSong Gao INSN_LASX(xvfmsub_s,         vvvv)
2280c9caf158SSong Gao INSN_LASX(xvfmsub_d,         vvvv)
2281c9caf158SSong Gao INSN_LASX(xvfnmadd_s,        vvvv)
2282c9caf158SSong Gao INSN_LASX(xvfnmadd_d,        vvvv)
2283c9caf158SSong Gao INSN_LASX(xvfnmsub_s,        vvvv)
2284c9caf158SSong Gao INSN_LASX(xvfnmsub_d,        vvvv)
2285c9caf158SSong Gao 
2286c9caf158SSong Gao INSN_LASX(xvfmax_s,          vvv)
2287c9caf158SSong Gao INSN_LASX(xvfmax_d,          vvv)
2288c9caf158SSong Gao INSN_LASX(xvfmin_s,          vvv)
2289c9caf158SSong Gao INSN_LASX(xvfmin_d,          vvv)
2290c9caf158SSong Gao 
2291c9caf158SSong Gao INSN_LASX(xvfmaxa_s,         vvv)
2292c9caf158SSong Gao INSN_LASX(xvfmaxa_d,         vvv)
2293c9caf158SSong Gao INSN_LASX(xvfmina_s,         vvv)
2294c9caf158SSong Gao INSN_LASX(xvfmina_d,         vvv)
2295c9caf158SSong Gao 
2296c9caf158SSong Gao INSN_LASX(xvflogb_s,         vv)
2297c9caf158SSong Gao INSN_LASX(xvflogb_d,         vv)
2298c9caf158SSong Gao 
2299c9caf158SSong Gao INSN_LASX(xvfclass_s,        vv)
2300c9caf158SSong Gao INSN_LASX(xvfclass_d,        vv)
2301c9caf158SSong Gao 
2302c9caf158SSong Gao INSN_LASX(xvfsqrt_s,         vv)
2303c9caf158SSong Gao INSN_LASX(xvfsqrt_d,         vv)
2304c9caf158SSong Gao INSN_LASX(xvfrecip_s,        vv)
2305c9caf158SSong Gao INSN_LASX(xvfrecip_d,        vv)
2306c9caf158SSong Gao INSN_LASX(xvfrsqrt_s,        vv)
2307c9caf158SSong Gao INSN_LASX(xvfrsqrt_d,        vv)
2308c9caf158SSong Gao 
230960df31a2SSong Gao INSN_LASX(xvfcvtl_s_h,       vv)
231060df31a2SSong Gao INSN_LASX(xvfcvth_s_h,       vv)
231160df31a2SSong Gao INSN_LASX(xvfcvtl_d_s,       vv)
231260df31a2SSong Gao INSN_LASX(xvfcvth_d_s,       vv)
231360df31a2SSong Gao INSN_LASX(xvfcvt_h_s,        vvv)
231460df31a2SSong Gao INSN_LASX(xvfcvt_s_d,        vvv)
231560df31a2SSong Gao 
231660df31a2SSong Gao INSN_LASX(xvfrint_s,         vv)
231760df31a2SSong Gao INSN_LASX(xvfrint_d,         vv)
231860df31a2SSong Gao INSN_LASX(xvfrintrm_s,       vv)
231960df31a2SSong Gao INSN_LASX(xvfrintrm_d,       vv)
232060df31a2SSong Gao INSN_LASX(xvfrintrp_s,       vv)
232160df31a2SSong Gao INSN_LASX(xvfrintrp_d,       vv)
232260df31a2SSong Gao INSN_LASX(xvfrintrz_s,       vv)
232360df31a2SSong Gao INSN_LASX(xvfrintrz_d,       vv)
232460df31a2SSong Gao INSN_LASX(xvfrintrne_s,      vv)
232560df31a2SSong Gao INSN_LASX(xvfrintrne_d,      vv)
232660df31a2SSong Gao 
232760df31a2SSong Gao INSN_LASX(xvftint_w_s,       vv)
232860df31a2SSong Gao INSN_LASX(xvftint_l_d,       vv)
232960df31a2SSong Gao INSN_LASX(xvftintrm_w_s,     vv)
233060df31a2SSong Gao INSN_LASX(xvftintrm_l_d,     vv)
233160df31a2SSong Gao INSN_LASX(xvftintrp_w_s,     vv)
233260df31a2SSong Gao INSN_LASX(xvftintrp_l_d,     vv)
233360df31a2SSong Gao INSN_LASX(xvftintrz_w_s,     vv)
233460df31a2SSong Gao INSN_LASX(xvftintrz_l_d,     vv)
233560df31a2SSong Gao INSN_LASX(xvftintrne_w_s,    vv)
233660df31a2SSong Gao INSN_LASX(xvftintrne_l_d,    vv)
233760df31a2SSong Gao INSN_LASX(xvftint_wu_s,      vv)
233860df31a2SSong Gao INSN_LASX(xvftint_lu_d,      vv)
233960df31a2SSong Gao INSN_LASX(xvftintrz_wu_s,    vv)
234060df31a2SSong Gao INSN_LASX(xvftintrz_lu_d,    vv)
234160df31a2SSong Gao INSN_LASX(xvftint_w_d,       vvv)
234260df31a2SSong Gao INSN_LASX(xvftintrm_w_d,     vvv)
234360df31a2SSong Gao INSN_LASX(xvftintrp_w_d,     vvv)
234460df31a2SSong Gao INSN_LASX(xvftintrz_w_d,     vvv)
234560df31a2SSong Gao INSN_LASX(xvftintrne_w_d,    vvv)
234660df31a2SSong Gao INSN_LASX(xvftintl_l_s,      vv)
234760df31a2SSong Gao INSN_LASX(xvftinth_l_s,      vv)
234860df31a2SSong Gao INSN_LASX(xvftintrml_l_s,    vv)
234960df31a2SSong Gao INSN_LASX(xvftintrmh_l_s,    vv)
235060df31a2SSong Gao INSN_LASX(xvftintrpl_l_s,    vv)
235160df31a2SSong Gao INSN_LASX(xvftintrph_l_s,    vv)
235260df31a2SSong Gao INSN_LASX(xvftintrzl_l_s,    vv)
235360df31a2SSong Gao INSN_LASX(xvftintrzh_l_s,    vv)
235460df31a2SSong Gao INSN_LASX(xvftintrnel_l_s,   vv)
235560df31a2SSong Gao INSN_LASX(xvftintrneh_l_s,   vv)
235660df31a2SSong Gao 
235760df31a2SSong Gao INSN_LASX(xvffint_s_w,       vv)
235860df31a2SSong Gao INSN_LASX(xvffint_s_wu,      vv)
235960df31a2SSong Gao INSN_LASX(xvffint_d_l,       vv)
236060df31a2SSong Gao INSN_LASX(xvffint_d_lu,      vv)
236160df31a2SSong Gao INSN_LASX(xvffintl_d_w,      vv)
236260df31a2SSong Gao INSN_LASX(xvffinth_d_w,      vv)
236360df31a2SSong Gao INSN_LASX(xvffint_s_l,       vvv)
236460df31a2SSong Gao 
23654da72d43SSong Gao INSN_LASX(xvseq_b,           vvv)
23664da72d43SSong Gao INSN_LASX(xvseq_h,           vvv)
23674da72d43SSong Gao INSN_LASX(xvseq_w,           vvv)
23684da72d43SSong Gao INSN_LASX(xvseq_d,           vvv)
23694da72d43SSong Gao INSN_LASX(xvseqi_b,          vv_i)
23704da72d43SSong Gao INSN_LASX(xvseqi_h,          vv_i)
23714da72d43SSong Gao INSN_LASX(xvseqi_w,          vv_i)
23724da72d43SSong Gao INSN_LASX(xvseqi_d,          vv_i)
23734da72d43SSong Gao 
23744da72d43SSong Gao INSN_LASX(xvsle_b,           vvv)
23754da72d43SSong Gao INSN_LASX(xvsle_h,           vvv)
23764da72d43SSong Gao INSN_LASX(xvsle_w,           vvv)
23774da72d43SSong Gao INSN_LASX(xvsle_d,           vvv)
23784da72d43SSong Gao INSN_LASX(xvslei_b,          vv_i)
23794da72d43SSong Gao INSN_LASX(xvslei_h,          vv_i)
23804da72d43SSong Gao INSN_LASX(xvslei_w,          vv_i)
23814da72d43SSong Gao INSN_LASX(xvslei_d,          vv_i)
23824da72d43SSong Gao INSN_LASX(xvsle_bu,          vvv)
23834da72d43SSong Gao INSN_LASX(xvsle_hu,          vvv)
23844da72d43SSong Gao INSN_LASX(xvsle_wu,          vvv)
23854da72d43SSong Gao INSN_LASX(xvsle_du,          vvv)
23864da72d43SSong Gao INSN_LASX(xvslei_bu,         vv_i)
23874da72d43SSong Gao INSN_LASX(xvslei_hu,         vv_i)
23884da72d43SSong Gao INSN_LASX(xvslei_wu,         vv_i)
23894da72d43SSong Gao INSN_LASX(xvslei_du,         vv_i)
23904da72d43SSong Gao 
23914da72d43SSong Gao INSN_LASX(xvslt_b,           vvv)
23924da72d43SSong Gao INSN_LASX(xvslt_h,           vvv)
23934da72d43SSong Gao INSN_LASX(xvslt_w,           vvv)
23944da72d43SSong Gao INSN_LASX(xvslt_d,           vvv)
23954da72d43SSong Gao INSN_LASX(xvslti_b,          vv_i)
23964da72d43SSong Gao INSN_LASX(xvslti_h,          vv_i)
23974da72d43SSong Gao INSN_LASX(xvslti_w,          vv_i)
23984da72d43SSong Gao INSN_LASX(xvslti_d,          vv_i)
23994da72d43SSong Gao INSN_LASX(xvslt_bu,          vvv)
24004da72d43SSong Gao INSN_LASX(xvslt_hu,          vvv)
24014da72d43SSong Gao INSN_LASX(xvslt_wu,          vvv)
24024da72d43SSong Gao INSN_LASX(xvslt_du,          vvv)
24034da72d43SSong Gao INSN_LASX(xvslti_bu,         vv_i)
24044da72d43SSong Gao INSN_LASX(xvslti_hu,         vv_i)
24054da72d43SSong Gao INSN_LASX(xvslti_wu,         vv_i)
24064da72d43SSong Gao INSN_LASX(xvslti_du,         vv_i)
24074da72d43SSong Gao 
24083eeda5feSSong Gao #define output_xvfcmp(C, PREFIX, SUFFIX)                                    \
24093eeda5feSSong Gao {                                                                           \
24103eeda5feSSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x  %s%s\tx%d, x%d, x%d", \
24113eeda5feSSong Gao                             (C)->insn, PREFIX, SUFFIX, a->vd,               \
24123eeda5feSSong Gao                             a->vj, a->vk);                                  \
24133eeda5feSSong Gao }
24143eeda5feSSong Gao static bool output_xxx_fcond(DisasContext *ctx, arg_vvv_fcond * a,
24153eeda5feSSong Gao                              const char *suffix)
24163eeda5feSSong Gao {
24173eeda5feSSong Gao     bool ret = true;
24183eeda5feSSong Gao     switch (a->fcond) {
24193eeda5feSSong Gao     case 0x0:
24203eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_caf_", suffix);
24213eeda5feSSong Gao         break;
24223eeda5feSSong Gao     case 0x1:
24233eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_saf_", suffix);
24243eeda5feSSong Gao         break;
24253eeda5feSSong Gao     case 0x2:
24263eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_clt_", suffix);
24273eeda5feSSong Gao         break;
24283eeda5feSSong Gao     case 0x3:
24293eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_slt_", suffix);
24303eeda5feSSong Gao         break;
24313eeda5feSSong Gao     case 0x4:
24323eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_ceq_", suffix);
24333eeda5feSSong Gao         break;
24343eeda5feSSong Gao     case 0x5:
24353eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_seq_", suffix);
24363eeda5feSSong Gao         break;
24373eeda5feSSong Gao     case 0x6:
24383eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cle_", suffix);
24393eeda5feSSong Gao         break;
24403eeda5feSSong Gao     case 0x7:
24413eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sle_", suffix);
24423eeda5feSSong Gao         break;
24433eeda5feSSong Gao     case 0x8:
24443eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cun_", suffix);
24453eeda5feSSong Gao         break;
24463eeda5feSSong Gao     case 0x9:
24473eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sun_", suffix);
24483eeda5feSSong Gao         break;
24493eeda5feSSong Gao     case 0xA:
24503eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cult_", suffix);
24513eeda5feSSong Gao         break;
24523eeda5feSSong Gao     case 0xB:
24533eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sult_", suffix);
24543eeda5feSSong Gao         break;
24553eeda5feSSong Gao     case 0xC:
24563eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cueq_", suffix);
24573eeda5feSSong Gao         break;
24583eeda5feSSong Gao     case 0xD:
24593eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sueq_", suffix);
24603eeda5feSSong Gao         break;
24613eeda5feSSong Gao     case 0xE:
24623eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cule_", suffix);
24633eeda5feSSong Gao         break;
24643eeda5feSSong Gao     case 0xF:
24653eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sule_", suffix);
24663eeda5feSSong Gao         break;
24673eeda5feSSong Gao     case 0x10:
24683eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cne_", suffix);
24693eeda5feSSong Gao         break;
24703eeda5feSSong Gao     case 0x11:
24713eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sne_", suffix);
24723eeda5feSSong Gao         break;
24733eeda5feSSong Gao     case 0x14:
24743eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cor_", suffix);
24753eeda5feSSong Gao         break;
24763eeda5feSSong Gao     case 0x15:
24773eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sor_", suffix);
24783eeda5feSSong Gao         break;
24793eeda5feSSong Gao     case 0x18:
24803eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_cune_", suffix);
24813eeda5feSSong Gao         break;
24823eeda5feSSong Gao     case 0x19:
24833eeda5feSSong Gao         output_xvfcmp(ctx, "xvfcmp_sune_", suffix);
24843eeda5feSSong Gao         break;
24853eeda5feSSong Gao     default:
24863eeda5feSSong Gao         ret = false;
24873eeda5feSSong Gao     }
24883eeda5feSSong Gao     return ret;
24893eeda5feSSong Gao }
24903eeda5feSSong Gao 
24913eeda5feSSong Gao #define LASX_FCMP_INSN(suffix)                            \
24923eeda5feSSong Gao static bool trans_xvfcmp_cond_##suffix(DisasContext *ctx, \
24933eeda5feSSong Gao                                        arg_vvv_fcond * a) \
24943eeda5feSSong Gao {                                                         \
24953eeda5feSSong Gao     return output_xxx_fcond(ctx, a, #suffix);             \
24963eeda5feSSong Gao }
24973eeda5feSSong Gao 
24983eeda5feSSong Gao LASX_FCMP_INSN(s)
24993eeda5feSSong Gao LASX_FCMP_INSN(d)
25003eeda5feSSong Gao 
2501f3dfcc8bSSong Gao INSN_LASX(xvbitsel_v,        vvvv)
2502f3dfcc8bSSong Gao INSN_LASX(xvbitseli_b,       vv_i)
2503f3dfcc8bSSong Gao 
2504f3dfcc8bSSong Gao INSN_LASX(xvseteqz_v,        cv)
2505f3dfcc8bSSong Gao INSN_LASX(xvsetnez_v,        cv)
2506f3dfcc8bSSong Gao INSN_LASX(xvsetanyeqz_b,     cv)
2507f3dfcc8bSSong Gao INSN_LASX(xvsetanyeqz_h,     cv)
2508f3dfcc8bSSong Gao INSN_LASX(xvsetanyeqz_w,     cv)
2509f3dfcc8bSSong Gao INSN_LASX(xvsetanyeqz_d,     cv)
2510f3dfcc8bSSong Gao INSN_LASX(xvsetallnez_b,     cv)
2511f3dfcc8bSSong Gao INSN_LASX(xvsetallnez_h,     cv)
2512f3dfcc8bSSong Gao INSN_LASX(xvsetallnez_w,     cv)
2513f3dfcc8bSSong Gao INSN_LASX(xvsetallnez_d,     cv)
2514f3dfcc8bSSong Gao 
2515f5ce2c8fSSong Gao INSN_LASX(xvinsgr2vr_w,      vr_i)
2516f5ce2c8fSSong Gao INSN_LASX(xvinsgr2vr_d,      vr_i)
2517f5ce2c8fSSong Gao INSN_LASX(xvpickve2gr_w,     rv_i)
2518f5ce2c8fSSong Gao INSN_LASX(xvpickve2gr_d,     rv_i)
2519f5ce2c8fSSong Gao INSN_LASX(xvpickve2gr_wu,    rv_i)
2520f5ce2c8fSSong Gao INSN_LASX(xvpickve2gr_du,    rv_i)
2521f5ce2c8fSSong Gao 
252273123406SSong Gao INSN_LASX(xvreplgr2vr_b,     vr)
252373123406SSong Gao INSN_LASX(xvreplgr2vr_h,     vr)
252473123406SSong Gao INSN_LASX(xvreplgr2vr_w,     vr)
252573123406SSong Gao INSN_LASX(xvreplgr2vr_d,     vr)
2526*df97f338SSong Gao 
2527*df97f338SSong Gao INSN_LASX(xvreplve_b,        vvr)
2528*df97f338SSong Gao INSN_LASX(xvreplve_h,        vvr)
2529*df97f338SSong Gao INSN_LASX(xvreplve_w,        vvr)
2530*df97f338SSong Gao INSN_LASX(xvreplve_d,        vvr)
2531*df97f338SSong Gao INSN_LASX(xvrepl128vei_b,    vv_i)
2532*df97f338SSong Gao INSN_LASX(xvrepl128vei_h,    vv_i)
2533*df97f338SSong Gao INSN_LASX(xvrepl128vei_w,    vv_i)
2534*df97f338SSong Gao INSN_LASX(xvrepl128vei_d,    vv_i)
2535*df97f338SSong Gao 
2536*df97f338SSong Gao INSN_LASX(xvreplve0_b,       vv)
2537*df97f338SSong Gao INSN_LASX(xvreplve0_h,       vv)
2538*df97f338SSong Gao INSN_LASX(xvreplve0_w,       vv)
2539*df97f338SSong Gao INSN_LASX(xvreplve0_d,       vv)
2540*df97f338SSong Gao INSN_LASX(xvreplve0_q,       vv)
2541*df97f338SSong Gao 
2542*df97f338SSong Gao INSN_LASX(xvinsve0_w,        vv_i)
2543*df97f338SSong Gao INSN_LASX(xvinsve0_d,        vv_i)
2544*df97f338SSong Gao 
2545*df97f338SSong Gao INSN_LASX(xvpickve_w,        vv_i)
2546*df97f338SSong Gao INSN_LASX(xvpickve_d,        vv_i)
2547*df97f338SSong Gao 
2548*df97f338SSong Gao INSN_LASX(xvbsll_v,          vv_i)
2549*df97f338SSong Gao INSN_LASX(xvbsrl_v,          vv_i)
2550