xref: /openbmc/qemu/target/loongarch/disas.c (revision 843b627a)
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 
24*843b627aSSong Gao static inline int shl_1(DisasContext *ctx, int x)
25*843b627aSSong Gao {
26*843b627aSSong Gao     return x << 1;
27*843b627aSSong Gao }
28*843b627aSSong Gao 
29aae1746cSSong Gao static inline int shl_2(DisasContext *ctx, int x)
30aae1746cSSong Gao {
31aae1746cSSong Gao     return x << 2;
32aae1746cSSong Gao }
33aae1746cSSong Gao 
34*843b627aSSong Gao static inline int shl_3(DisasContext *ctx, int x)
35*843b627aSSong Gao {
36*843b627aSSong Gao     return x << 3;
37*843b627aSSong Gao }
38*843b627aSSong 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 
836*843b627aSSong Gao static void output_vr_ii(DisasContext *ctx, arg_vr_ii *a, const char *mnemonic)
837*843b627aSSong Gao {
838*843b627aSSong Gao     output(ctx, mnemonic, "v%d, r%d, 0x%x, 0x%x", a->vd, a->rj, a->imm, a->imm2);
839*843b627aSSong Gao }
840*843b627aSSong 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 
856*843b627aSSong Gao static void output_vrr(DisasContext *ctx, arg_vrr *a, const char *mnemonic)
857*843b627aSSong Gao {
858*843b627aSSong Gao     output(ctx, mnemonic, "v%d, r%d, r%d", a->vd, a->rj, a->rk);
859*843b627aSSong Gao }
860*843b627aSSong Gao 
86157b4f1acSSong Gao INSN_LSX(vadd_b,           vvv)
86257b4f1acSSong Gao INSN_LSX(vadd_h,           vvv)
86357b4f1acSSong Gao INSN_LSX(vadd_w,           vvv)
86457b4f1acSSong Gao INSN_LSX(vadd_d,           vvv)
86557b4f1acSSong Gao INSN_LSX(vadd_q,           vvv)
86657b4f1acSSong Gao INSN_LSX(vsub_b,           vvv)
86757b4f1acSSong Gao INSN_LSX(vsub_h,           vvv)
86857b4f1acSSong Gao INSN_LSX(vsub_w,           vvv)
86957b4f1acSSong Gao INSN_LSX(vsub_d,           vvv)
87057b4f1acSSong Gao INSN_LSX(vsub_q,           vvv)
871d8be64c1SSong Gao 
872d8be64c1SSong Gao INSN_LSX(vaddi_bu,         vv_i)
873d8be64c1SSong Gao INSN_LSX(vaddi_hu,         vv_i)
874d8be64c1SSong Gao INSN_LSX(vaddi_wu,         vv_i)
875d8be64c1SSong Gao INSN_LSX(vaddi_du,         vv_i)
876d8be64c1SSong Gao INSN_LSX(vsubi_bu,         vv_i)
877d8be64c1SSong Gao INSN_LSX(vsubi_hu,         vv_i)
878d8be64c1SSong Gao INSN_LSX(vsubi_wu,         vv_i)
879d8be64c1SSong Gao INSN_LSX(vsubi_du,         vv_i)
880be9ec557SSong Gao 
881be9ec557SSong Gao INSN_LSX(vneg_b,           vv)
882be9ec557SSong Gao INSN_LSX(vneg_h,           vv)
883be9ec557SSong Gao INSN_LSX(vneg_w,           vv)
884be9ec557SSong Gao INSN_LSX(vneg_d,           vv)
885a94cb911SSong Gao 
886a94cb911SSong Gao INSN_LSX(vsadd_b,          vvv)
887a94cb911SSong Gao INSN_LSX(vsadd_h,          vvv)
888a94cb911SSong Gao INSN_LSX(vsadd_w,          vvv)
889a94cb911SSong Gao INSN_LSX(vsadd_d,          vvv)
890a94cb911SSong Gao INSN_LSX(vsadd_bu,         vvv)
891a94cb911SSong Gao INSN_LSX(vsadd_hu,         vvv)
892a94cb911SSong Gao INSN_LSX(vsadd_wu,         vvv)
893a94cb911SSong Gao INSN_LSX(vsadd_du,         vvv)
894a94cb911SSong Gao INSN_LSX(vssub_b,          vvv)
895a94cb911SSong Gao INSN_LSX(vssub_h,          vvv)
896a94cb911SSong Gao INSN_LSX(vssub_w,          vvv)
897a94cb911SSong Gao INSN_LSX(vssub_d,          vvv)
898a94cb911SSong Gao INSN_LSX(vssub_bu,         vvv)
899a94cb911SSong Gao INSN_LSX(vssub_hu,         vvv)
900a94cb911SSong Gao INSN_LSX(vssub_wu,         vvv)
901a94cb911SSong Gao INSN_LSX(vssub_du,         vvv)
902c037fbc9SSong Gao 
903c037fbc9SSong Gao INSN_LSX(vhaddw_h_b,       vvv)
904c037fbc9SSong Gao INSN_LSX(vhaddw_w_h,       vvv)
905c037fbc9SSong Gao INSN_LSX(vhaddw_d_w,       vvv)
906c037fbc9SSong Gao INSN_LSX(vhaddw_q_d,       vvv)
907c037fbc9SSong Gao INSN_LSX(vhaddw_hu_bu,     vvv)
908c037fbc9SSong Gao INSN_LSX(vhaddw_wu_hu,     vvv)
909c037fbc9SSong Gao INSN_LSX(vhaddw_du_wu,     vvv)
910c037fbc9SSong Gao INSN_LSX(vhaddw_qu_du,     vvv)
911c037fbc9SSong Gao INSN_LSX(vhsubw_h_b,       vvv)
912c037fbc9SSong Gao INSN_LSX(vhsubw_w_h,       vvv)
913c037fbc9SSong Gao INSN_LSX(vhsubw_d_w,       vvv)
914c037fbc9SSong Gao INSN_LSX(vhsubw_q_d,       vvv)
915c037fbc9SSong Gao INSN_LSX(vhsubw_hu_bu,     vvv)
916c037fbc9SSong Gao INSN_LSX(vhsubw_wu_hu,     vvv)
917c037fbc9SSong Gao INSN_LSX(vhsubw_du_wu,     vvv)
918c037fbc9SSong Gao INSN_LSX(vhsubw_qu_du,     vvv)
9192d5f950cSSong Gao 
9202d5f950cSSong Gao INSN_LSX(vaddwev_h_b,      vvv)
9212d5f950cSSong Gao INSN_LSX(vaddwev_w_h,      vvv)
9222d5f950cSSong Gao INSN_LSX(vaddwev_d_w,      vvv)
9232d5f950cSSong Gao INSN_LSX(vaddwev_q_d,      vvv)
9242d5f950cSSong Gao INSN_LSX(vaddwod_h_b,      vvv)
9252d5f950cSSong Gao INSN_LSX(vaddwod_w_h,      vvv)
9262d5f950cSSong Gao INSN_LSX(vaddwod_d_w,      vvv)
9272d5f950cSSong Gao INSN_LSX(vaddwod_q_d,      vvv)
9282d5f950cSSong Gao INSN_LSX(vsubwev_h_b,      vvv)
9292d5f950cSSong Gao INSN_LSX(vsubwev_w_h,      vvv)
9302d5f950cSSong Gao INSN_LSX(vsubwev_d_w,      vvv)
9312d5f950cSSong Gao INSN_LSX(vsubwev_q_d,      vvv)
9322d5f950cSSong Gao INSN_LSX(vsubwod_h_b,      vvv)
9332d5f950cSSong Gao INSN_LSX(vsubwod_w_h,      vvv)
9342d5f950cSSong Gao INSN_LSX(vsubwod_d_w,      vvv)
9352d5f950cSSong Gao INSN_LSX(vsubwod_q_d,      vvv)
9362d5f950cSSong Gao 
9372d5f950cSSong Gao INSN_LSX(vaddwev_h_bu,     vvv)
9382d5f950cSSong Gao INSN_LSX(vaddwev_w_hu,     vvv)
9392d5f950cSSong Gao INSN_LSX(vaddwev_d_wu,     vvv)
9402d5f950cSSong Gao INSN_LSX(vaddwev_q_du,     vvv)
9412d5f950cSSong Gao INSN_LSX(vaddwod_h_bu,     vvv)
9422d5f950cSSong Gao INSN_LSX(vaddwod_w_hu,     vvv)
9432d5f950cSSong Gao INSN_LSX(vaddwod_d_wu,     vvv)
9442d5f950cSSong Gao INSN_LSX(vaddwod_q_du,     vvv)
9452d5f950cSSong Gao INSN_LSX(vsubwev_h_bu,     vvv)
9462d5f950cSSong Gao INSN_LSX(vsubwev_w_hu,     vvv)
9472d5f950cSSong Gao INSN_LSX(vsubwev_d_wu,     vvv)
9482d5f950cSSong Gao INSN_LSX(vsubwev_q_du,     vvv)
9492d5f950cSSong Gao INSN_LSX(vsubwod_h_bu,     vvv)
9502d5f950cSSong Gao INSN_LSX(vsubwod_w_hu,     vvv)
9512d5f950cSSong Gao INSN_LSX(vsubwod_d_wu,     vvv)
9522d5f950cSSong Gao INSN_LSX(vsubwod_q_du,     vvv)
9532d5f950cSSong Gao 
9542d5f950cSSong Gao INSN_LSX(vaddwev_h_bu_b,   vvv)
9552d5f950cSSong Gao INSN_LSX(vaddwev_w_hu_h,   vvv)
9562d5f950cSSong Gao INSN_LSX(vaddwev_d_wu_w,   vvv)
9572d5f950cSSong Gao INSN_LSX(vaddwev_q_du_d,   vvv)
9582d5f950cSSong Gao INSN_LSX(vaddwod_h_bu_b,   vvv)
9592d5f950cSSong Gao INSN_LSX(vaddwod_w_hu_h,   vvv)
9602d5f950cSSong Gao INSN_LSX(vaddwod_d_wu_w,   vvv)
9612d5f950cSSong Gao INSN_LSX(vaddwod_q_du_d,   vvv)
96239e9b0a7SSong Gao 
96339e9b0a7SSong Gao INSN_LSX(vavg_b,           vvv)
96439e9b0a7SSong Gao INSN_LSX(vavg_h,           vvv)
96539e9b0a7SSong Gao INSN_LSX(vavg_w,           vvv)
96639e9b0a7SSong Gao INSN_LSX(vavg_d,           vvv)
96739e9b0a7SSong Gao INSN_LSX(vavg_bu,          vvv)
96839e9b0a7SSong Gao INSN_LSX(vavg_hu,          vvv)
96939e9b0a7SSong Gao INSN_LSX(vavg_wu,          vvv)
97039e9b0a7SSong Gao INSN_LSX(vavg_du,          vvv)
97139e9b0a7SSong Gao INSN_LSX(vavgr_b,          vvv)
97239e9b0a7SSong Gao INSN_LSX(vavgr_h,          vvv)
97339e9b0a7SSong Gao INSN_LSX(vavgr_w,          vvv)
97439e9b0a7SSong Gao INSN_LSX(vavgr_d,          vvv)
97539e9b0a7SSong Gao INSN_LSX(vavgr_bu,         vvv)
97639e9b0a7SSong Gao INSN_LSX(vavgr_hu,         vvv)
97739e9b0a7SSong Gao INSN_LSX(vavgr_wu,         vvv)
97839e9b0a7SSong Gao INSN_LSX(vavgr_du,         vvv)
97949725659SSong Gao 
98049725659SSong Gao INSN_LSX(vabsd_b,          vvv)
98149725659SSong Gao INSN_LSX(vabsd_h,          vvv)
98249725659SSong Gao INSN_LSX(vabsd_w,          vvv)
98349725659SSong Gao INSN_LSX(vabsd_d,          vvv)
98449725659SSong Gao INSN_LSX(vabsd_bu,         vvv)
98549725659SSong Gao INSN_LSX(vabsd_hu,         vvv)
98649725659SSong Gao INSN_LSX(vabsd_wu,         vvv)
98749725659SSong Gao INSN_LSX(vabsd_du,         vvv)
988af448cb3SSong Gao 
989af448cb3SSong Gao INSN_LSX(vadda_b,          vvv)
990af448cb3SSong Gao INSN_LSX(vadda_h,          vvv)
991af448cb3SSong Gao INSN_LSX(vadda_w,          vvv)
992af448cb3SSong Gao INSN_LSX(vadda_d,          vvv)
9939ab29520SSong Gao 
9949ab29520SSong Gao INSN_LSX(vmax_b,           vvv)
9959ab29520SSong Gao INSN_LSX(vmax_h,           vvv)
9969ab29520SSong Gao INSN_LSX(vmax_w,           vvv)
9979ab29520SSong Gao INSN_LSX(vmax_d,           vvv)
9989ab29520SSong Gao INSN_LSX(vmin_b,           vvv)
9999ab29520SSong Gao INSN_LSX(vmin_h,           vvv)
10009ab29520SSong Gao INSN_LSX(vmin_w,           vvv)
10019ab29520SSong Gao INSN_LSX(vmin_d,           vvv)
10029ab29520SSong Gao INSN_LSX(vmax_bu,          vvv)
10039ab29520SSong Gao INSN_LSX(vmax_hu,          vvv)
10049ab29520SSong Gao INSN_LSX(vmax_wu,          vvv)
10059ab29520SSong Gao INSN_LSX(vmax_du,          vvv)
10069ab29520SSong Gao INSN_LSX(vmin_bu,          vvv)
10079ab29520SSong Gao INSN_LSX(vmin_hu,          vvv)
10089ab29520SSong Gao INSN_LSX(vmin_wu,          vvv)
10099ab29520SSong Gao INSN_LSX(vmin_du,          vvv)
10109ab29520SSong Gao INSN_LSX(vmaxi_b,          vv_i)
10119ab29520SSong Gao INSN_LSX(vmaxi_h,          vv_i)
10129ab29520SSong Gao INSN_LSX(vmaxi_w,          vv_i)
10139ab29520SSong Gao INSN_LSX(vmaxi_d,          vv_i)
10149ab29520SSong Gao INSN_LSX(vmini_b,          vv_i)
10159ab29520SSong Gao INSN_LSX(vmini_h,          vv_i)
10169ab29520SSong Gao INSN_LSX(vmini_w,          vv_i)
10179ab29520SSong Gao INSN_LSX(vmini_d,          vv_i)
10189ab29520SSong Gao INSN_LSX(vmaxi_bu,         vv_i)
10199ab29520SSong Gao INSN_LSX(vmaxi_hu,         vv_i)
10209ab29520SSong Gao INSN_LSX(vmaxi_wu,         vv_i)
10219ab29520SSong Gao INSN_LSX(vmaxi_du,         vv_i)
10229ab29520SSong Gao INSN_LSX(vmini_bu,         vv_i)
10239ab29520SSong Gao INSN_LSX(vmini_hu,         vv_i)
10249ab29520SSong Gao INSN_LSX(vmini_wu,         vv_i)
10259ab29520SSong Gao INSN_LSX(vmini_du,         vv_i)
1026cd1c49adSSong Gao 
1027cd1c49adSSong Gao INSN_LSX(vmul_b,           vvv)
1028cd1c49adSSong Gao INSN_LSX(vmul_h,           vvv)
1029cd1c49adSSong Gao INSN_LSX(vmul_w,           vvv)
1030cd1c49adSSong Gao INSN_LSX(vmul_d,           vvv)
1031cd1c49adSSong Gao INSN_LSX(vmuh_b,           vvv)
1032cd1c49adSSong Gao INSN_LSX(vmuh_h,           vvv)
1033cd1c49adSSong Gao INSN_LSX(vmuh_w,           vvv)
1034cd1c49adSSong Gao INSN_LSX(vmuh_d,           vvv)
1035cd1c49adSSong Gao INSN_LSX(vmuh_bu,          vvv)
1036cd1c49adSSong Gao INSN_LSX(vmuh_hu,          vvv)
1037cd1c49adSSong Gao INSN_LSX(vmuh_wu,          vvv)
1038cd1c49adSSong Gao INSN_LSX(vmuh_du,          vvv)
1039cd1c49adSSong Gao 
1040cd1c49adSSong Gao INSN_LSX(vmulwev_h_b,      vvv)
1041cd1c49adSSong Gao INSN_LSX(vmulwev_w_h,      vvv)
1042cd1c49adSSong Gao INSN_LSX(vmulwev_d_w,      vvv)
1043cd1c49adSSong Gao INSN_LSX(vmulwev_q_d,      vvv)
1044cd1c49adSSong Gao INSN_LSX(vmulwod_h_b,      vvv)
1045cd1c49adSSong Gao INSN_LSX(vmulwod_w_h,      vvv)
1046cd1c49adSSong Gao INSN_LSX(vmulwod_d_w,      vvv)
1047cd1c49adSSong Gao INSN_LSX(vmulwod_q_d,      vvv)
1048cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu,     vvv)
1049cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu,     vvv)
1050cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu,     vvv)
1051cd1c49adSSong Gao INSN_LSX(vmulwev_q_du,     vvv)
1052cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu,     vvv)
1053cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu,     vvv)
1054cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu,     vvv)
1055cd1c49adSSong Gao INSN_LSX(vmulwod_q_du,     vvv)
1056cd1c49adSSong Gao INSN_LSX(vmulwev_h_bu_b,   vvv)
1057cd1c49adSSong Gao INSN_LSX(vmulwev_w_hu_h,   vvv)
1058cd1c49adSSong Gao INSN_LSX(vmulwev_d_wu_w,   vvv)
1059cd1c49adSSong Gao INSN_LSX(vmulwev_q_du_d,   vvv)
1060cd1c49adSSong Gao INSN_LSX(vmulwod_h_bu_b,   vvv)
1061cd1c49adSSong Gao INSN_LSX(vmulwod_w_hu_h,   vvv)
1062cd1c49adSSong Gao INSN_LSX(vmulwod_d_wu_w,   vvv)
1063cd1c49adSSong Gao INSN_LSX(vmulwod_q_du_d,   vvv)
1064d3aec65bSSong Gao 
1065d3aec65bSSong Gao INSN_LSX(vmadd_b,          vvv)
1066d3aec65bSSong Gao INSN_LSX(vmadd_h,          vvv)
1067d3aec65bSSong Gao INSN_LSX(vmadd_w,          vvv)
1068d3aec65bSSong Gao INSN_LSX(vmadd_d,          vvv)
1069d3aec65bSSong Gao INSN_LSX(vmsub_b,          vvv)
1070d3aec65bSSong Gao INSN_LSX(vmsub_h,          vvv)
1071d3aec65bSSong Gao INSN_LSX(vmsub_w,          vvv)
1072d3aec65bSSong Gao INSN_LSX(vmsub_d,          vvv)
1073d3aec65bSSong Gao 
1074d3aec65bSSong Gao INSN_LSX(vmaddwev_h_b,     vvv)
1075d3aec65bSSong Gao INSN_LSX(vmaddwev_w_h,     vvv)
1076d3aec65bSSong Gao INSN_LSX(vmaddwev_d_w,     vvv)
1077d3aec65bSSong Gao INSN_LSX(vmaddwev_q_d,     vvv)
1078d3aec65bSSong Gao INSN_LSX(vmaddwod_h_b,     vvv)
1079d3aec65bSSong Gao INSN_LSX(vmaddwod_w_h,     vvv)
1080d3aec65bSSong Gao INSN_LSX(vmaddwod_d_w,     vvv)
1081d3aec65bSSong Gao INSN_LSX(vmaddwod_q_d,     vvv)
1082d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu,    vvv)
1083d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu,    vvv)
1084d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu,    vvv)
1085d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du,    vvv)
1086d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu,    vvv)
1087d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu,    vvv)
1088d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu,    vvv)
1089d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du,    vvv)
1090d3aec65bSSong Gao INSN_LSX(vmaddwev_h_bu_b,  vvv)
1091d3aec65bSSong Gao INSN_LSX(vmaddwev_w_hu_h,  vvv)
1092d3aec65bSSong Gao INSN_LSX(vmaddwev_d_wu_w,  vvv)
1093d3aec65bSSong Gao INSN_LSX(vmaddwev_q_du_d,  vvv)
1094d3aec65bSSong Gao INSN_LSX(vmaddwod_h_bu_b,  vvv)
1095d3aec65bSSong Gao INSN_LSX(vmaddwod_w_hu_h,  vvv)
1096d3aec65bSSong Gao INSN_LSX(vmaddwod_d_wu_w,  vvv)
1097d3aec65bSSong Gao INSN_LSX(vmaddwod_q_du_d,  vvv)
10984cc4c0f7SSong Gao 
10994cc4c0f7SSong Gao INSN_LSX(vdiv_b,           vvv)
11004cc4c0f7SSong Gao INSN_LSX(vdiv_h,           vvv)
11014cc4c0f7SSong Gao INSN_LSX(vdiv_w,           vvv)
11024cc4c0f7SSong Gao INSN_LSX(vdiv_d,           vvv)
11034cc4c0f7SSong Gao INSN_LSX(vdiv_bu,          vvv)
11044cc4c0f7SSong Gao INSN_LSX(vdiv_hu,          vvv)
11054cc4c0f7SSong Gao INSN_LSX(vdiv_wu,          vvv)
11064cc4c0f7SSong Gao INSN_LSX(vdiv_du,          vvv)
11074cc4c0f7SSong Gao INSN_LSX(vmod_b,           vvv)
11084cc4c0f7SSong Gao INSN_LSX(vmod_h,           vvv)
11094cc4c0f7SSong Gao INSN_LSX(vmod_w,           vvv)
11104cc4c0f7SSong Gao INSN_LSX(vmod_d,           vvv)
11114cc4c0f7SSong Gao INSN_LSX(vmod_bu,          vvv)
11124cc4c0f7SSong Gao INSN_LSX(vmod_hu,          vvv)
11134cc4c0f7SSong Gao INSN_LSX(vmod_wu,          vvv)
11144cc4c0f7SSong Gao INSN_LSX(vmod_du,          vvv)
1115cbe44190SSong Gao 
1116cbe44190SSong Gao INSN_LSX(vsat_b,           vv_i)
1117cbe44190SSong Gao INSN_LSX(vsat_h,           vv_i)
1118cbe44190SSong Gao INSN_LSX(vsat_w,           vv_i)
1119cbe44190SSong Gao INSN_LSX(vsat_d,           vv_i)
1120cbe44190SSong Gao INSN_LSX(vsat_bu,          vv_i)
1121cbe44190SSong Gao INSN_LSX(vsat_hu,          vv_i)
1122cbe44190SSong Gao INSN_LSX(vsat_wu,          vv_i)
1123cbe44190SSong Gao INSN_LSX(vsat_du,          vv_i)
11243734ad93SSong Gao 
11253734ad93SSong Gao INSN_LSX(vexth_h_b,        vv)
11263734ad93SSong Gao INSN_LSX(vexth_w_h,        vv)
11273734ad93SSong Gao INSN_LSX(vexth_d_w,        vv)
11283734ad93SSong Gao INSN_LSX(vexth_q_d,        vv)
11293734ad93SSong Gao INSN_LSX(vexth_hu_bu,      vv)
11303734ad93SSong Gao INSN_LSX(vexth_wu_hu,      vv)
11313734ad93SSong Gao INSN_LSX(vexth_du_wu,      vv)
11323734ad93SSong Gao INSN_LSX(vexth_qu_du,      vv)
1133f0e395dfSSong Gao 
1134f0e395dfSSong Gao INSN_LSX(vsigncov_b,       vvv)
1135f0e395dfSSong Gao INSN_LSX(vsigncov_h,       vvv)
1136f0e395dfSSong Gao INSN_LSX(vsigncov_w,       vvv)
1137f0e395dfSSong Gao INSN_LSX(vsigncov_d,       vvv)
1138789f4a4cSSong Gao 
1139789f4a4cSSong Gao INSN_LSX(vmskltz_b,        vv)
1140789f4a4cSSong Gao INSN_LSX(vmskltz_h,        vv)
1141789f4a4cSSong Gao INSN_LSX(vmskltz_w,        vv)
1142789f4a4cSSong Gao INSN_LSX(vmskltz_d,        vv)
1143789f4a4cSSong Gao INSN_LSX(vmskgez_b,        vv)
1144789f4a4cSSong Gao INSN_LSX(vmsknz_b,         vv)
1145f205a539SSong Gao 
1146f205a539SSong Gao INSN_LSX(vand_v,           vvv)
1147f205a539SSong Gao INSN_LSX(vor_v,            vvv)
1148f205a539SSong Gao INSN_LSX(vxor_v,           vvv)
1149f205a539SSong Gao INSN_LSX(vnor_v,           vvv)
1150f205a539SSong Gao INSN_LSX(vandn_v,          vvv)
1151f205a539SSong Gao INSN_LSX(vorn_v,           vvv)
1152f205a539SSong Gao 
1153f205a539SSong Gao INSN_LSX(vandi_b,          vv_i)
1154f205a539SSong Gao INSN_LSX(vori_b,           vv_i)
1155f205a539SSong Gao INSN_LSX(vxori_b,          vv_i)
1156f205a539SSong Gao INSN_LSX(vnori_b,          vv_i)
1157b281d696SSong Gao 
1158b281d696SSong Gao INSN_LSX(vsll_b,           vvv)
1159b281d696SSong Gao INSN_LSX(vsll_h,           vvv)
1160b281d696SSong Gao INSN_LSX(vsll_w,           vvv)
1161b281d696SSong Gao INSN_LSX(vsll_d,           vvv)
1162b281d696SSong Gao INSN_LSX(vslli_b,          vv_i)
1163b281d696SSong Gao INSN_LSX(vslli_h,          vv_i)
1164b281d696SSong Gao INSN_LSX(vslli_w,          vv_i)
1165b281d696SSong Gao INSN_LSX(vslli_d,          vv_i)
1166b281d696SSong Gao 
1167b281d696SSong Gao INSN_LSX(vsrl_b,           vvv)
1168b281d696SSong Gao INSN_LSX(vsrl_h,           vvv)
1169b281d696SSong Gao INSN_LSX(vsrl_w,           vvv)
1170b281d696SSong Gao INSN_LSX(vsrl_d,           vvv)
1171b281d696SSong Gao INSN_LSX(vsrli_b,          vv_i)
1172b281d696SSong Gao INSN_LSX(vsrli_h,          vv_i)
1173b281d696SSong Gao INSN_LSX(vsrli_w,          vv_i)
1174b281d696SSong Gao INSN_LSX(vsrli_d,          vv_i)
1175b281d696SSong Gao 
1176b281d696SSong Gao INSN_LSX(vsra_b,           vvv)
1177b281d696SSong Gao INSN_LSX(vsra_h,           vvv)
1178b281d696SSong Gao INSN_LSX(vsra_w,           vvv)
1179b281d696SSong Gao INSN_LSX(vsra_d,           vvv)
1180b281d696SSong Gao INSN_LSX(vsrai_b,          vv_i)
1181b281d696SSong Gao INSN_LSX(vsrai_h,          vv_i)
1182b281d696SSong Gao INSN_LSX(vsrai_w,          vv_i)
1183b281d696SSong Gao INSN_LSX(vsrai_d,          vv_i)
1184b281d696SSong Gao 
1185b281d696SSong Gao INSN_LSX(vrotr_b,          vvv)
1186b281d696SSong Gao INSN_LSX(vrotr_h,          vvv)
1187b281d696SSong Gao INSN_LSX(vrotr_w,          vvv)
1188b281d696SSong Gao INSN_LSX(vrotr_d,          vvv)
1189b281d696SSong Gao INSN_LSX(vrotri_b,         vv_i)
1190b281d696SSong Gao INSN_LSX(vrotri_h,         vv_i)
1191b281d696SSong Gao INSN_LSX(vrotri_w,         vv_i)
1192b281d696SSong Gao INSN_LSX(vrotri_d,         vv_i)
11939b21a7a5SSong Gao 
11949b21a7a5SSong Gao INSN_LSX(vsllwil_h_b,      vv_i)
11959b21a7a5SSong Gao INSN_LSX(vsllwil_w_h,      vv_i)
11969b21a7a5SSong Gao INSN_LSX(vsllwil_d_w,      vv_i)
11979b21a7a5SSong Gao INSN_LSX(vextl_q_d,        vv)
11989b21a7a5SSong Gao INSN_LSX(vsllwil_hu_bu,    vv_i)
11999b21a7a5SSong Gao INSN_LSX(vsllwil_wu_hu,    vv_i)
12009b21a7a5SSong Gao INSN_LSX(vsllwil_du_wu,    vv_i)
12019b21a7a5SSong Gao INSN_LSX(vextl_qu_du,      vv)
1202ecb93716SSong Gao 
1203ecb93716SSong Gao INSN_LSX(vsrlr_b,          vvv)
1204ecb93716SSong Gao INSN_LSX(vsrlr_h,          vvv)
1205ecb93716SSong Gao INSN_LSX(vsrlr_w,          vvv)
1206ecb93716SSong Gao INSN_LSX(vsrlr_d,          vvv)
1207ecb93716SSong Gao INSN_LSX(vsrlri_b,         vv_i)
1208ecb93716SSong Gao INSN_LSX(vsrlri_h,         vv_i)
1209ecb93716SSong Gao INSN_LSX(vsrlri_w,         vv_i)
1210ecb93716SSong Gao INSN_LSX(vsrlri_d,         vv_i)
1211ecb93716SSong Gao 
1212ecb93716SSong Gao INSN_LSX(vsrar_b,          vvv)
1213ecb93716SSong Gao INSN_LSX(vsrar_h,          vvv)
1214ecb93716SSong Gao INSN_LSX(vsrar_w,          vvv)
1215ecb93716SSong Gao INSN_LSX(vsrar_d,          vvv)
1216ecb93716SSong Gao INSN_LSX(vsrari_b,         vv_i)
1217ecb93716SSong Gao INSN_LSX(vsrari_h,         vv_i)
1218ecb93716SSong Gao INSN_LSX(vsrari_w,         vv_i)
1219ecb93716SSong Gao INSN_LSX(vsrari_d,         vv_i)
1220d79fb8ddSSong Gao 
1221d79fb8ddSSong Gao INSN_LSX(vsrln_b_h,       vvv)
1222d79fb8ddSSong Gao INSN_LSX(vsrln_h_w,       vvv)
1223d79fb8ddSSong Gao INSN_LSX(vsrln_w_d,       vvv)
1224d79fb8ddSSong Gao INSN_LSX(vsran_b_h,       vvv)
1225d79fb8ddSSong Gao INSN_LSX(vsran_h_w,       vvv)
1226d79fb8ddSSong Gao INSN_LSX(vsran_w_d,       vvv)
1227d79fb8ddSSong Gao 
1228d79fb8ddSSong Gao INSN_LSX(vsrlni_b_h,       vv_i)
1229d79fb8ddSSong Gao INSN_LSX(vsrlni_h_w,       vv_i)
1230d79fb8ddSSong Gao INSN_LSX(vsrlni_w_d,       vv_i)
1231d79fb8ddSSong Gao INSN_LSX(vsrlni_d_q,       vv_i)
1232d79fb8ddSSong Gao INSN_LSX(vsrani_b_h,       vv_i)
1233d79fb8ddSSong Gao INSN_LSX(vsrani_h_w,       vv_i)
1234d79fb8ddSSong Gao INSN_LSX(vsrani_w_d,       vv_i)
1235d79fb8ddSSong Gao INSN_LSX(vsrani_d_q,       vv_i)
1236a5200a17SSong Gao 
1237a5200a17SSong Gao INSN_LSX(vsrlrn_b_h,       vvv)
1238a5200a17SSong Gao INSN_LSX(vsrlrn_h_w,       vvv)
1239a5200a17SSong Gao INSN_LSX(vsrlrn_w_d,       vvv)
1240a5200a17SSong Gao INSN_LSX(vsrarn_b_h,       vvv)
1241a5200a17SSong Gao INSN_LSX(vsrarn_h_w,       vvv)
1242a5200a17SSong Gao INSN_LSX(vsrarn_w_d,       vvv)
1243a5200a17SSong Gao 
1244a5200a17SSong Gao INSN_LSX(vsrlrni_b_h,      vv_i)
1245a5200a17SSong Gao INSN_LSX(vsrlrni_h_w,      vv_i)
1246a5200a17SSong Gao INSN_LSX(vsrlrni_w_d,      vv_i)
1247a5200a17SSong Gao INSN_LSX(vsrlrni_d_q,      vv_i)
1248a5200a17SSong Gao INSN_LSX(vsrarni_b_h,      vv_i)
1249a5200a17SSong Gao INSN_LSX(vsrarni_h_w,      vv_i)
1250a5200a17SSong Gao INSN_LSX(vsrarni_w_d,      vv_i)
1251a5200a17SSong Gao INSN_LSX(vsrarni_d_q,      vv_i)
125283b3815dSSong Gao 
125383b3815dSSong Gao INSN_LSX(vssrln_b_h,       vvv)
125483b3815dSSong Gao INSN_LSX(vssrln_h_w,       vvv)
125583b3815dSSong Gao INSN_LSX(vssrln_w_d,       vvv)
125683b3815dSSong Gao INSN_LSX(vssran_b_h,       vvv)
125783b3815dSSong Gao INSN_LSX(vssran_h_w,       vvv)
125883b3815dSSong Gao INSN_LSX(vssran_w_d,       vvv)
125983b3815dSSong Gao INSN_LSX(vssrln_bu_h,      vvv)
126083b3815dSSong Gao INSN_LSX(vssrln_hu_w,      vvv)
126183b3815dSSong Gao INSN_LSX(vssrln_wu_d,      vvv)
126283b3815dSSong Gao INSN_LSX(vssran_bu_h,      vvv)
126383b3815dSSong Gao INSN_LSX(vssran_hu_w,      vvv)
126483b3815dSSong Gao INSN_LSX(vssran_wu_d,      vvv)
126583b3815dSSong Gao 
126683b3815dSSong Gao INSN_LSX(vssrlni_b_h,      vv_i)
126783b3815dSSong Gao INSN_LSX(vssrlni_h_w,      vv_i)
126883b3815dSSong Gao INSN_LSX(vssrlni_w_d,      vv_i)
126983b3815dSSong Gao INSN_LSX(vssrlni_d_q,      vv_i)
127083b3815dSSong Gao INSN_LSX(vssrani_b_h,      vv_i)
127183b3815dSSong Gao INSN_LSX(vssrani_h_w,      vv_i)
127283b3815dSSong Gao INSN_LSX(vssrani_w_d,      vv_i)
127383b3815dSSong Gao INSN_LSX(vssrani_d_q,      vv_i)
127483b3815dSSong Gao INSN_LSX(vssrlni_bu_h,     vv_i)
127583b3815dSSong Gao INSN_LSX(vssrlni_hu_w,     vv_i)
127683b3815dSSong Gao INSN_LSX(vssrlni_wu_d,     vv_i)
127783b3815dSSong Gao INSN_LSX(vssrlni_du_q,     vv_i)
127883b3815dSSong Gao INSN_LSX(vssrani_bu_h,     vv_i)
127983b3815dSSong Gao INSN_LSX(vssrani_hu_w,     vv_i)
128083b3815dSSong Gao INSN_LSX(vssrani_wu_d,     vv_i)
128183b3815dSSong Gao INSN_LSX(vssrani_du_q,     vv_i)
1282162cd32cSSong Gao 
1283162cd32cSSong Gao INSN_LSX(vssrlrn_b_h,      vvv)
1284162cd32cSSong Gao INSN_LSX(vssrlrn_h_w,      vvv)
1285162cd32cSSong Gao INSN_LSX(vssrlrn_w_d,      vvv)
1286162cd32cSSong Gao INSN_LSX(vssrarn_b_h,      vvv)
1287162cd32cSSong Gao INSN_LSX(vssrarn_h_w,      vvv)
1288162cd32cSSong Gao INSN_LSX(vssrarn_w_d,      vvv)
1289162cd32cSSong Gao INSN_LSX(vssrlrn_bu_h,     vvv)
1290162cd32cSSong Gao INSN_LSX(vssrlrn_hu_w,     vvv)
1291162cd32cSSong Gao INSN_LSX(vssrlrn_wu_d,     vvv)
1292162cd32cSSong Gao INSN_LSX(vssrarn_bu_h,     vvv)
1293162cd32cSSong Gao INSN_LSX(vssrarn_hu_w,     vvv)
1294162cd32cSSong Gao INSN_LSX(vssrarn_wu_d,     vvv)
1295162cd32cSSong Gao 
1296162cd32cSSong Gao INSN_LSX(vssrlrni_b_h,     vv_i)
1297162cd32cSSong Gao INSN_LSX(vssrlrni_h_w,     vv_i)
1298162cd32cSSong Gao INSN_LSX(vssrlrni_w_d,     vv_i)
1299162cd32cSSong Gao INSN_LSX(vssrlrni_d_q,     vv_i)
1300162cd32cSSong Gao INSN_LSX(vssrlrni_bu_h,    vv_i)
1301162cd32cSSong Gao INSN_LSX(vssrlrni_hu_w,    vv_i)
1302162cd32cSSong Gao INSN_LSX(vssrlrni_wu_d,    vv_i)
1303162cd32cSSong Gao INSN_LSX(vssrlrni_du_q,    vv_i)
1304162cd32cSSong Gao INSN_LSX(vssrarni_b_h,     vv_i)
1305162cd32cSSong Gao INSN_LSX(vssrarni_h_w,     vv_i)
1306162cd32cSSong Gao INSN_LSX(vssrarni_w_d,     vv_i)
1307162cd32cSSong Gao INSN_LSX(vssrarni_d_q,     vv_i)
1308162cd32cSSong Gao INSN_LSX(vssrarni_bu_h,    vv_i)
1309162cd32cSSong Gao INSN_LSX(vssrarni_hu_w,    vv_i)
1310162cd32cSSong Gao INSN_LSX(vssrarni_wu_d,    vv_i)
1311162cd32cSSong Gao INSN_LSX(vssrarni_du_q,    vv_i)
13122e105e12SSong Gao 
13132e105e12SSong Gao INSN_LSX(vclo_b,           vv)
13142e105e12SSong Gao INSN_LSX(vclo_h,           vv)
13152e105e12SSong Gao INSN_LSX(vclo_w,           vv)
13162e105e12SSong Gao INSN_LSX(vclo_d,           vv)
13172e105e12SSong Gao INSN_LSX(vclz_b,           vv)
13182e105e12SSong Gao INSN_LSX(vclz_h,           vv)
13192e105e12SSong Gao INSN_LSX(vclz_w,           vv)
13202e105e12SSong Gao INSN_LSX(vclz_d,           vv)
1321bb22ee57SSong Gao 
1322bb22ee57SSong Gao INSN_LSX(vpcnt_b,          vv)
1323bb22ee57SSong Gao INSN_LSX(vpcnt_h,          vv)
1324bb22ee57SSong Gao INSN_LSX(vpcnt_w,          vv)
1325bb22ee57SSong Gao INSN_LSX(vpcnt_d,          vv)
13260b1e6705SSong Gao 
13270b1e6705SSong Gao INSN_LSX(vbitclr_b,        vvv)
13280b1e6705SSong Gao INSN_LSX(vbitclr_h,        vvv)
13290b1e6705SSong Gao INSN_LSX(vbitclr_w,        vvv)
13300b1e6705SSong Gao INSN_LSX(vbitclr_d,        vvv)
13310b1e6705SSong Gao INSN_LSX(vbitclri_b,       vv_i)
13320b1e6705SSong Gao INSN_LSX(vbitclri_h,       vv_i)
13330b1e6705SSong Gao INSN_LSX(vbitclri_w,       vv_i)
13340b1e6705SSong Gao INSN_LSX(vbitclri_d,       vv_i)
13350b1e6705SSong Gao INSN_LSX(vbitset_b,        vvv)
13360b1e6705SSong Gao INSN_LSX(vbitset_h,        vvv)
13370b1e6705SSong Gao INSN_LSX(vbitset_w,        vvv)
13380b1e6705SSong Gao INSN_LSX(vbitset_d,        vvv)
13390b1e6705SSong Gao INSN_LSX(vbitseti_b,       vv_i)
13400b1e6705SSong Gao INSN_LSX(vbitseti_h,       vv_i)
13410b1e6705SSong Gao INSN_LSX(vbitseti_w,       vv_i)
13420b1e6705SSong Gao INSN_LSX(vbitseti_d,       vv_i)
13430b1e6705SSong Gao INSN_LSX(vbitrev_b,        vvv)
13440b1e6705SSong Gao INSN_LSX(vbitrev_h,        vvv)
13450b1e6705SSong Gao INSN_LSX(vbitrev_w,        vvv)
13460b1e6705SSong Gao INSN_LSX(vbitrev_d,        vvv)
13470b1e6705SSong Gao INSN_LSX(vbitrevi_b,       vv_i)
13480b1e6705SSong Gao INSN_LSX(vbitrevi_h,       vv_i)
13490b1e6705SSong Gao INSN_LSX(vbitrevi_w,       vv_i)
13500b1e6705SSong Gao INSN_LSX(vbitrevi_d,       vv_i)
1351ac95a0b9SSong Gao 
1352ac95a0b9SSong Gao INSN_LSX(vfrstp_b,         vvv)
1353ac95a0b9SSong Gao INSN_LSX(vfrstp_h,         vvv)
1354ac95a0b9SSong Gao INSN_LSX(vfrstpi_b,        vv_i)
1355ac95a0b9SSong Gao INSN_LSX(vfrstpi_h,        vv_i)
1356aca67472SSong Gao 
1357aca67472SSong Gao INSN_LSX(vfadd_s,          vvv)
1358aca67472SSong Gao INSN_LSX(vfadd_d,          vvv)
1359aca67472SSong Gao INSN_LSX(vfsub_s,          vvv)
1360aca67472SSong Gao INSN_LSX(vfsub_d,          vvv)
1361aca67472SSong Gao INSN_LSX(vfmul_s,          vvv)
1362aca67472SSong Gao INSN_LSX(vfmul_d,          vvv)
1363aca67472SSong Gao INSN_LSX(vfdiv_s,          vvv)
1364aca67472SSong Gao INSN_LSX(vfdiv_d,          vvv)
1365aca67472SSong Gao 
1366aca67472SSong Gao INSN_LSX(vfmadd_s,         vvvv)
1367aca67472SSong Gao INSN_LSX(vfmadd_d,         vvvv)
1368aca67472SSong Gao INSN_LSX(vfmsub_s,         vvvv)
1369aca67472SSong Gao INSN_LSX(vfmsub_d,         vvvv)
1370aca67472SSong Gao INSN_LSX(vfnmadd_s,        vvvv)
1371aca67472SSong Gao INSN_LSX(vfnmadd_d,        vvvv)
1372aca67472SSong Gao INSN_LSX(vfnmsub_s,        vvvv)
1373aca67472SSong Gao INSN_LSX(vfnmsub_d,        vvvv)
1374aca67472SSong Gao 
1375aca67472SSong Gao INSN_LSX(vfmax_s,          vvv)
1376aca67472SSong Gao INSN_LSX(vfmax_d,          vvv)
1377aca67472SSong Gao INSN_LSX(vfmin_s,          vvv)
1378aca67472SSong Gao INSN_LSX(vfmin_d,          vvv)
1379aca67472SSong Gao 
1380aca67472SSong Gao INSN_LSX(vfmaxa_s,         vvv)
1381aca67472SSong Gao INSN_LSX(vfmaxa_d,         vvv)
1382aca67472SSong Gao INSN_LSX(vfmina_s,         vvv)
1383aca67472SSong Gao INSN_LSX(vfmina_d,         vvv)
1384aca67472SSong Gao 
1385aca67472SSong Gao INSN_LSX(vflogb_s,         vv)
1386aca67472SSong Gao INSN_LSX(vflogb_d,         vv)
1387aca67472SSong Gao 
1388aca67472SSong Gao INSN_LSX(vfclass_s,        vv)
1389aca67472SSong Gao INSN_LSX(vfclass_d,        vv)
1390aca67472SSong Gao 
1391aca67472SSong Gao INSN_LSX(vfsqrt_s,         vv)
1392aca67472SSong Gao INSN_LSX(vfsqrt_d,         vv)
1393aca67472SSong Gao INSN_LSX(vfrecip_s,        vv)
1394aca67472SSong Gao INSN_LSX(vfrecip_d,        vv)
1395aca67472SSong Gao INSN_LSX(vfrsqrt_s,        vv)
1396aca67472SSong Gao INSN_LSX(vfrsqrt_d,        vv)
1397399665d2SSong Gao 
1398399665d2SSong Gao INSN_LSX(vfcvtl_s_h,       vv)
1399399665d2SSong Gao INSN_LSX(vfcvth_s_h,       vv)
1400399665d2SSong Gao INSN_LSX(vfcvtl_d_s,       vv)
1401399665d2SSong Gao INSN_LSX(vfcvth_d_s,       vv)
1402399665d2SSong Gao INSN_LSX(vfcvt_h_s,        vvv)
1403399665d2SSong Gao INSN_LSX(vfcvt_s_d,        vvv)
1404399665d2SSong Gao 
1405399665d2SSong Gao INSN_LSX(vfrint_s,         vv)
1406399665d2SSong Gao INSN_LSX(vfrint_d,         vv)
1407399665d2SSong Gao INSN_LSX(vfrintrm_s,       vv)
1408399665d2SSong Gao INSN_LSX(vfrintrm_d,       vv)
1409399665d2SSong Gao INSN_LSX(vfrintrp_s,       vv)
1410399665d2SSong Gao INSN_LSX(vfrintrp_d,       vv)
1411399665d2SSong Gao INSN_LSX(vfrintrz_s,       vv)
1412399665d2SSong Gao INSN_LSX(vfrintrz_d,       vv)
1413399665d2SSong Gao INSN_LSX(vfrintrne_s,      vv)
1414399665d2SSong Gao INSN_LSX(vfrintrne_d,      vv)
1415399665d2SSong Gao 
1416399665d2SSong Gao INSN_LSX(vftint_w_s,       vv)
1417399665d2SSong Gao INSN_LSX(vftint_l_d,       vv)
1418399665d2SSong Gao INSN_LSX(vftintrm_w_s,     vv)
1419399665d2SSong Gao INSN_LSX(vftintrm_l_d,     vv)
1420399665d2SSong Gao INSN_LSX(vftintrp_w_s,     vv)
1421399665d2SSong Gao INSN_LSX(vftintrp_l_d,     vv)
1422399665d2SSong Gao INSN_LSX(vftintrz_w_s,     vv)
1423399665d2SSong Gao INSN_LSX(vftintrz_l_d,     vv)
1424399665d2SSong Gao INSN_LSX(vftintrne_w_s,    vv)
1425399665d2SSong Gao INSN_LSX(vftintrne_l_d,    vv)
1426399665d2SSong Gao INSN_LSX(vftint_wu_s,      vv)
1427399665d2SSong Gao INSN_LSX(vftint_lu_d,      vv)
1428399665d2SSong Gao INSN_LSX(vftintrz_wu_s,    vv)
1429399665d2SSong Gao INSN_LSX(vftintrz_lu_d,    vv)
1430399665d2SSong Gao INSN_LSX(vftint_w_d,       vvv)
1431399665d2SSong Gao INSN_LSX(vftintrm_w_d,     vvv)
1432399665d2SSong Gao INSN_LSX(vftintrp_w_d,     vvv)
1433399665d2SSong Gao INSN_LSX(vftintrz_w_d,     vvv)
1434399665d2SSong Gao INSN_LSX(vftintrne_w_d,    vvv)
1435399665d2SSong Gao INSN_LSX(vftintl_l_s,      vv)
1436399665d2SSong Gao INSN_LSX(vftinth_l_s,      vv)
1437399665d2SSong Gao INSN_LSX(vftintrml_l_s,    vv)
1438399665d2SSong Gao INSN_LSX(vftintrmh_l_s,    vv)
1439399665d2SSong Gao INSN_LSX(vftintrpl_l_s,    vv)
1440399665d2SSong Gao INSN_LSX(vftintrph_l_s,    vv)
1441399665d2SSong Gao INSN_LSX(vftintrzl_l_s,    vv)
1442399665d2SSong Gao INSN_LSX(vftintrzh_l_s,    vv)
1443399665d2SSong Gao INSN_LSX(vftintrnel_l_s,   vv)
1444399665d2SSong Gao INSN_LSX(vftintrneh_l_s,   vv)
1445399665d2SSong Gao 
1446399665d2SSong Gao INSN_LSX(vffint_s_w,       vv)
1447399665d2SSong Gao INSN_LSX(vffint_s_wu,      vv)
1448399665d2SSong Gao INSN_LSX(vffint_d_l,       vv)
1449399665d2SSong Gao INSN_LSX(vffint_d_lu,      vv)
1450399665d2SSong Gao INSN_LSX(vffintl_d_w,      vv)
1451399665d2SSong Gao INSN_LSX(vffinth_d_w,      vv)
1452399665d2SSong Gao INSN_LSX(vffint_s_l,       vvv)
1453f435e1e5SSong Gao 
1454f435e1e5SSong Gao INSN_LSX(vseq_b,           vvv)
1455f435e1e5SSong Gao INSN_LSX(vseq_h,           vvv)
1456f435e1e5SSong Gao INSN_LSX(vseq_w,           vvv)
1457f435e1e5SSong Gao INSN_LSX(vseq_d,           vvv)
1458f435e1e5SSong Gao INSN_LSX(vseqi_b,          vv_i)
1459f435e1e5SSong Gao INSN_LSX(vseqi_h,          vv_i)
1460f435e1e5SSong Gao INSN_LSX(vseqi_w,          vv_i)
1461f435e1e5SSong Gao INSN_LSX(vseqi_d,          vv_i)
1462f435e1e5SSong Gao 
1463f435e1e5SSong Gao INSN_LSX(vsle_b,           vvv)
1464f435e1e5SSong Gao INSN_LSX(vsle_h,           vvv)
1465f435e1e5SSong Gao INSN_LSX(vsle_w,           vvv)
1466f435e1e5SSong Gao INSN_LSX(vsle_d,           vvv)
1467f435e1e5SSong Gao INSN_LSX(vslei_b,          vv_i)
1468f435e1e5SSong Gao INSN_LSX(vslei_h,          vv_i)
1469f435e1e5SSong Gao INSN_LSX(vslei_w,          vv_i)
1470f435e1e5SSong Gao INSN_LSX(vslei_d,          vv_i)
1471f435e1e5SSong Gao INSN_LSX(vsle_bu,          vvv)
1472f435e1e5SSong Gao INSN_LSX(vsle_hu,          vvv)
1473f435e1e5SSong Gao INSN_LSX(vsle_wu,          vvv)
1474f435e1e5SSong Gao INSN_LSX(vsle_du,          vvv)
1475f435e1e5SSong Gao INSN_LSX(vslei_bu,         vv_i)
1476f435e1e5SSong Gao INSN_LSX(vslei_hu,         vv_i)
1477f435e1e5SSong Gao INSN_LSX(vslei_wu,         vv_i)
1478f435e1e5SSong Gao INSN_LSX(vslei_du,         vv_i)
1479f435e1e5SSong Gao 
1480f435e1e5SSong Gao INSN_LSX(vslt_b,           vvv)
1481f435e1e5SSong Gao INSN_LSX(vslt_h,           vvv)
1482f435e1e5SSong Gao INSN_LSX(vslt_w,           vvv)
1483f435e1e5SSong Gao INSN_LSX(vslt_d,           vvv)
1484f435e1e5SSong Gao INSN_LSX(vslti_b,          vv_i)
1485f435e1e5SSong Gao INSN_LSX(vslti_h,          vv_i)
1486f435e1e5SSong Gao INSN_LSX(vslti_w,          vv_i)
1487f435e1e5SSong Gao INSN_LSX(vslti_d,          vv_i)
1488f435e1e5SSong Gao INSN_LSX(vslt_bu,          vvv)
1489f435e1e5SSong Gao INSN_LSX(vslt_hu,          vvv)
1490f435e1e5SSong Gao INSN_LSX(vslt_wu,          vvv)
1491f435e1e5SSong Gao INSN_LSX(vslt_du,          vvv)
1492f435e1e5SSong Gao INSN_LSX(vslti_bu,         vv_i)
1493f435e1e5SSong Gao INSN_LSX(vslti_hu,         vv_i)
1494f435e1e5SSong Gao INSN_LSX(vslti_wu,         vv_i)
1495f435e1e5SSong Gao INSN_LSX(vslti_du,         vv_i)
1496386c4e86SSong Gao 
1497386c4e86SSong Gao #define output_vfcmp(C, PREFIX, SUFFIX)                                     \
1498386c4e86SSong Gao {                                                                           \
1499386c4e86SSong Gao     (C)->info->fprintf_func((C)->info->stream, "%08x   %s%s\t%d, f%d, f%d", \
1500386c4e86SSong Gao                             (C)->insn, PREFIX, SUFFIX, a->vd,               \
1501386c4e86SSong Gao                             a->vj, a->vk);                                  \
1502386c4e86SSong Gao }
1503386c4e86SSong Gao 
1504386c4e86SSong Gao static bool output_vvv_fcond(DisasContext *ctx, arg_vvv_fcond * a,
1505386c4e86SSong Gao                              const char *suffix)
1506386c4e86SSong Gao {
1507386c4e86SSong Gao     bool ret = true;
1508386c4e86SSong Gao     switch (a->fcond) {
1509386c4e86SSong Gao     case 0x0:
1510386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_caf_", suffix);
1511386c4e86SSong Gao         break;
1512386c4e86SSong Gao     case 0x1:
1513386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_saf_", suffix);
1514386c4e86SSong Gao         break;
1515386c4e86SSong Gao     case 0x2:
1516386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_clt_", suffix);
1517386c4e86SSong Gao         break;
1518386c4e86SSong Gao     case 0x3:
1519386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_slt_", suffix);
1520386c4e86SSong Gao         break;
1521386c4e86SSong Gao     case 0x4:
1522386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_ceq_", suffix);
1523386c4e86SSong Gao         break;
1524386c4e86SSong Gao     case 0x5:
1525386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_seq_", suffix);
1526386c4e86SSong Gao         break;
1527386c4e86SSong Gao     case 0x6:
1528386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cle_", suffix);
1529386c4e86SSong Gao         break;
1530386c4e86SSong Gao     case 0x7:
1531386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sle_", suffix);
1532386c4e86SSong Gao         break;
1533386c4e86SSong Gao     case 0x8:
1534386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cun_", suffix);
1535386c4e86SSong Gao         break;
1536386c4e86SSong Gao     case 0x9:
1537386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sun_", suffix);
1538386c4e86SSong Gao         break;
1539386c4e86SSong Gao     case 0xA:
1540386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cult_", suffix);
1541386c4e86SSong Gao         break;
1542386c4e86SSong Gao     case 0xB:
1543386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sult_", suffix);
1544386c4e86SSong Gao         break;
1545386c4e86SSong Gao     case 0xC:
1546386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cueq_", suffix);
1547386c4e86SSong Gao         break;
1548386c4e86SSong Gao     case 0xD:
1549386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sueq_", suffix);
1550386c4e86SSong Gao         break;
1551386c4e86SSong Gao     case 0xE:
1552386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cule_", suffix);
1553386c4e86SSong Gao         break;
1554386c4e86SSong Gao     case 0xF:
1555386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sule_", suffix);
1556386c4e86SSong Gao         break;
1557386c4e86SSong Gao     case 0x10:
1558386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cne_", suffix);
1559386c4e86SSong Gao         break;
1560386c4e86SSong Gao     case 0x11:
1561386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sne_", suffix);
1562386c4e86SSong Gao         break;
1563386c4e86SSong Gao     case 0x14:
1564386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cor_", suffix);
1565386c4e86SSong Gao         break;
1566386c4e86SSong Gao     case 0x15:
1567386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sor_", suffix);
1568386c4e86SSong Gao         break;
1569386c4e86SSong Gao     case 0x18:
1570386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_cune_", suffix);
1571386c4e86SSong Gao         break;
1572386c4e86SSong Gao     case 0x19:
1573386c4e86SSong Gao         output_vfcmp(ctx, "vfcmp_sune_", suffix);
1574386c4e86SSong Gao         break;
1575386c4e86SSong Gao     default:
1576386c4e86SSong Gao         ret = false;
1577386c4e86SSong Gao     }
1578386c4e86SSong Gao     return ret;
1579386c4e86SSong Gao }
1580386c4e86SSong Gao 
1581386c4e86SSong Gao #define LSX_FCMP_INSN(suffix)                            \
1582386c4e86SSong Gao static bool trans_vfcmp_cond_##suffix(DisasContext *ctx, \
1583386c4e86SSong Gao                                      arg_vvv_fcond * a)  \
1584386c4e86SSong Gao {                                                        \
1585386c4e86SSong Gao     return output_vvv_fcond(ctx, a, #suffix);            \
1586386c4e86SSong Gao }
1587386c4e86SSong Gao 
1588386c4e86SSong Gao LSX_FCMP_INSN(s)
1589386c4e86SSong Gao LSX_FCMP_INSN(d)
1590d0dfa19aSSong Gao 
1591d0dfa19aSSong Gao INSN_LSX(vbitsel_v,        vvvv)
1592d0dfa19aSSong Gao INSN_LSX(vbitseli_b,       vv_i)
1593d0dfa19aSSong Gao 
1594d0dfa19aSSong Gao INSN_LSX(vseteqz_v,        cv)
1595d0dfa19aSSong Gao INSN_LSX(vsetnez_v,        cv)
1596d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_b,     cv)
1597d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_h,     cv)
1598d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_w,     cv)
1599d0dfa19aSSong Gao INSN_LSX(vsetanyeqz_d,     cv)
1600d0dfa19aSSong Gao INSN_LSX(vsetallnez_b,     cv)
1601d0dfa19aSSong Gao INSN_LSX(vsetallnez_h,     cv)
1602d0dfa19aSSong Gao INSN_LSX(vsetallnez_w,     cv)
1603d0dfa19aSSong Gao INSN_LSX(vsetallnez_d,     cv)
1604cdbdefbfSSong Gao 
1605cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_b,      vr_i)
1606cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_h,      vr_i)
1607cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_w,      vr_i)
1608cdbdefbfSSong Gao INSN_LSX(vinsgr2vr_d,      vr_i)
1609cdbdefbfSSong Gao INSN_LSX(vpickve2gr_b,     rv_i)
1610cdbdefbfSSong Gao INSN_LSX(vpickve2gr_h,     rv_i)
1611cdbdefbfSSong Gao INSN_LSX(vpickve2gr_w,     rv_i)
1612cdbdefbfSSong Gao INSN_LSX(vpickve2gr_d,     rv_i)
1613cdbdefbfSSong Gao INSN_LSX(vpickve2gr_bu,    rv_i)
1614cdbdefbfSSong Gao INSN_LSX(vpickve2gr_hu,    rv_i)
1615cdbdefbfSSong Gao INSN_LSX(vpickve2gr_wu,    rv_i)
1616cdbdefbfSSong Gao INSN_LSX(vpickve2gr_du,    rv_i)
1617cdbdefbfSSong Gao 
1618cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_b,     vr)
1619cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_h,     vr)
1620cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_w,     vr)
1621cdbdefbfSSong Gao INSN_LSX(vreplgr2vr_d,     vr)
1622d5e5563cSSong Gao 
1623d5e5563cSSong Gao INSN_LSX(vreplve_b,        vvr)
1624d5e5563cSSong Gao INSN_LSX(vreplve_h,        vvr)
1625d5e5563cSSong Gao INSN_LSX(vreplve_w,        vvr)
1626d5e5563cSSong Gao INSN_LSX(vreplve_d,        vvr)
1627d5e5563cSSong Gao INSN_LSX(vreplvei_b,       vv_i)
1628d5e5563cSSong Gao INSN_LSX(vreplvei_h,       vv_i)
1629d5e5563cSSong Gao INSN_LSX(vreplvei_w,       vv_i)
1630d5e5563cSSong Gao INSN_LSX(vreplvei_d,       vv_i)
1631d5e5563cSSong Gao 
1632d5e5563cSSong Gao INSN_LSX(vbsll_v,          vv_i)
1633d5e5563cSSong Gao INSN_LSX(vbsrl_v,          vv_i)
1634d5e5563cSSong Gao 
1635d5e5563cSSong Gao INSN_LSX(vpackev_b,        vvv)
1636d5e5563cSSong Gao INSN_LSX(vpackev_h,        vvv)
1637d5e5563cSSong Gao INSN_LSX(vpackev_w,        vvv)
1638d5e5563cSSong Gao INSN_LSX(vpackev_d,        vvv)
1639d5e5563cSSong Gao INSN_LSX(vpackod_b,        vvv)
1640d5e5563cSSong Gao INSN_LSX(vpackod_h,        vvv)
1641d5e5563cSSong Gao INSN_LSX(vpackod_w,        vvv)
1642d5e5563cSSong Gao INSN_LSX(vpackod_d,        vvv)
1643d5e5563cSSong Gao 
1644d5e5563cSSong Gao INSN_LSX(vpickev_b,        vvv)
1645d5e5563cSSong Gao INSN_LSX(vpickev_h,        vvv)
1646d5e5563cSSong Gao INSN_LSX(vpickev_w,        vvv)
1647d5e5563cSSong Gao INSN_LSX(vpickev_d,        vvv)
1648d5e5563cSSong Gao INSN_LSX(vpickod_b,        vvv)
1649d5e5563cSSong Gao INSN_LSX(vpickod_h,        vvv)
1650d5e5563cSSong Gao INSN_LSX(vpickod_w,        vvv)
1651d5e5563cSSong Gao INSN_LSX(vpickod_d,        vvv)
1652e93dd431SSong Gao 
1653e93dd431SSong Gao INSN_LSX(vilvl_b,          vvv)
1654e93dd431SSong Gao INSN_LSX(vilvl_h,          vvv)
1655e93dd431SSong Gao INSN_LSX(vilvl_w,          vvv)
1656e93dd431SSong Gao INSN_LSX(vilvl_d,          vvv)
1657e93dd431SSong Gao INSN_LSX(vilvh_b,          vvv)
1658e93dd431SSong Gao INSN_LSX(vilvh_h,          vvv)
1659e93dd431SSong Gao INSN_LSX(vilvh_w,          vvv)
1660e93dd431SSong Gao INSN_LSX(vilvh_d,          vvv)
1661e93dd431SSong Gao 
1662e93dd431SSong Gao INSN_LSX(vshuf_b,          vvvv)
1663e93dd431SSong Gao INSN_LSX(vshuf_h,          vvv)
1664e93dd431SSong Gao INSN_LSX(vshuf_w,          vvv)
1665e93dd431SSong Gao INSN_LSX(vshuf_d,          vvv)
1666e93dd431SSong Gao INSN_LSX(vshuf4i_b,        vv_i)
1667e93dd431SSong Gao INSN_LSX(vshuf4i_h,        vv_i)
1668e93dd431SSong Gao INSN_LSX(vshuf4i_w,        vv_i)
1669e93dd431SSong Gao INSN_LSX(vshuf4i_d,        vv_i)
1670e93dd431SSong Gao 
1671e93dd431SSong Gao INSN_LSX(vpermi_w,         vv_i)
1672e93dd431SSong Gao 
1673e93dd431SSong Gao INSN_LSX(vextrins_d,       vv_i)
1674e93dd431SSong Gao INSN_LSX(vextrins_w,       vv_i)
1675e93dd431SSong Gao INSN_LSX(vextrins_h,       vv_i)
1676e93dd431SSong Gao INSN_LSX(vextrins_b,       vv_i)
1677*843b627aSSong Gao 
1678*843b627aSSong Gao INSN_LSX(vld,              vr_i)
1679*843b627aSSong Gao INSN_LSX(vst,              vr_i)
1680*843b627aSSong Gao INSN_LSX(vldx,             vrr)
1681*843b627aSSong Gao INSN_LSX(vstx,             vrr)
1682*843b627aSSong Gao 
1683*843b627aSSong Gao INSN_LSX(vldrepl_d,        vr_i)
1684*843b627aSSong Gao INSN_LSX(vldrepl_w,        vr_i)
1685*843b627aSSong Gao INSN_LSX(vldrepl_h,        vr_i)
1686*843b627aSSong Gao INSN_LSX(vldrepl_b,        vr_i)
1687*843b627aSSong Gao INSN_LSX(vstelm_d,         vr_ii)
1688*843b627aSSong Gao INSN_LSX(vstelm_w,         vr_ii)
1689*843b627aSSong Gao INSN_LSX(vstelm_h,         vr_ii)
1690*843b627aSSong Gao INSN_LSX(vstelm_b,         vr_ii)
1691