]> git.proxmox.com Git - mirror_qemu.git/blame - target/loongarch/disas.c
Merge tag 'gpu-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging
[mirror_qemu.git] / target / loongarch / disas.c
CommitLineData
aae1746c
SG
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/*
3 * QEMU LoongArch Disassembler
4 *
5 * Copyright (c) 2021 Loongson Technology Corporation Limited.
6 */
7
8#include "qemu/osdep.h"
9#include "disas/dis-asm.h"
10#include "qemu/bitops.h"
5b1dedfe 11#include "cpu-csr.h"
aae1746c
SG
12
13typedef struct {
14 disassemble_info *info;
15 uint64_t pc;
16 uint32_t insn;
17} DisasContext;
18
19static inline int plus_1(DisasContext *ctx, int x)
20{
21 return x + 1;
22}
23
843b627a
SG
24static inline int shl_1(DisasContext *ctx, int x)
25{
26 return x << 1;
27}
28
aae1746c
SG
29static inline int shl_2(DisasContext *ctx, int x)
30{
31 return x << 2;
32}
33
843b627a
SG
34static inline int shl_3(DisasContext *ctx, int x)
35{
36 return x << 3;
37}
38
5b1dedfe
XY
39#define CSR_NAME(REG) \
40 [LOONGARCH_CSR_##REG] = (#REG)
41
42static const char * const csr_names[] = {
43 CSR_NAME(CRMD),
44 CSR_NAME(PRMD),
45 CSR_NAME(EUEN),
46 CSR_NAME(MISC),
47 CSR_NAME(ECFG),
48 CSR_NAME(ESTAT),
49 CSR_NAME(ERA),
50 CSR_NAME(BADV),
51 CSR_NAME(BADI),
52 CSR_NAME(EENTRY),
53 CSR_NAME(TLBIDX),
54 CSR_NAME(TLBEHI),
55 CSR_NAME(TLBELO0),
56 CSR_NAME(TLBELO1),
57 CSR_NAME(ASID),
58 CSR_NAME(PGDL),
59 CSR_NAME(PGDH),
60 CSR_NAME(PGD),
61 CSR_NAME(PWCL),
62 CSR_NAME(PWCH),
63 CSR_NAME(STLBPS),
64 CSR_NAME(RVACFG),
65 CSR_NAME(CPUID),
66 CSR_NAME(PRCFG1),
67 CSR_NAME(PRCFG2),
68 CSR_NAME(PRCFG3),
69 CSR_NAME(SAVE(0)),
70 CSR_NAME(SAVE(1)),
71 CSR_NAME(SAVE(2)),
72 CSR_NAME(SAVE(3)),
73 CSR_NAME(SAVE(4)),
74 CSR_NAME(SAVE(5)),
75 CSR_NAME(SAVE(6)),
76 CSR_NAME(SAVE(7)),
77 CSR_NAME(SAVE(8)),
78 CSR_NAME(SAVE(9)),
79 CSR_NAME(SAVE(10)),
80 CSR_NAME(SAVE(11)),
81 CSR_NAME(SAVE(12)),
82 CSR_NAME(SAVE(13)),
83 CSR_NAME(SAVE(14)),
84 CSR_NAME(SAVE(15)),
85 CSR_NAME(TID),
86 CSR_NAME(TCFG),
87 CSR_NAME(TVAL),
88 CSR_NAME(CNTC),
89 CSR_NAME(TICLR),
90 CSR_NAME(LLBCTL),
91 CSR_NAME(IMPCTL1),
92 CSR_NAME(IMPCTL2),
93 CSR_NAME(TLBRENTRY),
94 CSR_NAME(TLBRBADV),
95 CSR_NAME(TLBRERA),
96 CSR_NAME(TLBRSAVE),
97 CSR_NAME(TLBRELO0),
98 CSR_NAME(TLBRELO1),
99 CSR_NAME(TLBREHI),
100 CSR_NAME(TLBRPRMD),
101 CSR_NAME(MERRCTL),
102 CSR_NAME(MERRINFO1),
103 CSR_NAME(MERRINFO2),
104 CSR_NAME(MERRENTRY),
105 CSR_NAME(MERRERA),
106 CSR_NAME(MERRSAVE),
107 CSR_NAME(CTAG),
108 CSR_NAME(DMW(0)),
109 CSR_NAME(DMW(1)),
110 CSR_NAME(DMW(2)),
111 CSR_NAME(DMW(3)),
112 CSR_NAME(DBG),
113 CSR_NAME(DERA),
114 CSR_NAME(DSAVE),
115};
116
117static const char *get_csr_name(unsigned num)
118{
119 return ((num < ARRAY_SIZE(csr_names)) && (csr_names[num] != NULL)) ?
120 csr_names[num] : "Undefined CSR";
121}
122
aae1746c
SG
123#define output(C, INSN, FMT, ...) \
124{ \
125 (C)->info->fprintf_func((C)->info->stream, "%08x %-9s\t" FMT, \
126 (C)->insn, INSN, ##__VA_ARGS__); \
127}
128
129#include "decode-insns.c.inc"
130
131int print_insn_loongarch(bfd_vma memaddr, struct disassemble_info *info)
132{
133 bfd_byte buffer[4];
134 uint32_t insn;
135 int status;
136
137 status = (*info->read_memory_func)(memaddr, buffer, 4, info);
138 if (status != 0) {
139 (*info->memory_error_func)(status, memaddr, info);
140 return -1;
141 }
142 insn = bfd_getl32(buffer);
143 DisasContext ctx = {
144 .info = info,
145 .pc = memaddr,
146 .insn = insn
147 };
148
149 if (!decode(&ctx, insn)) {
150 output(&ctx, "illegal", "");
151 }
152 return 4;
153}
154
155static void output_r_i(DisasContext *ctx, arg_r_i *a, const char *mnemonic)
156{
157 output(ctx, mnemonic, "r%d, %d", a->rd, a->imm);
158}
159
160static void output_rrr(DisasContext *ctx, arg_rrr *a, const char *mnemonic)
161{
162 output(ctx, mnemonic, "r%d, r%d, r%d", a->rd, a->rj, a->rk);
163}
164
165static void output_rr_i(DisasContext *ctx, arg_rr_i *a, const char *mnemonic)
166{
167 output(ctx, mnemonic, "r%d, r%d, %d", a->rd, a->rj, a->imm);
168}
169
170static void output_rrr_sa(DisasContext *ctx, arg_rrr_sa *a,
171 const char *mnemonic)
172{
173 output(ctx, mnemonic, "r%d, r%d, r%d, %d", a->rd, a->rj, a->rk, a->sa);
174}
175
176static void output_rr(DisasContext *ctx, arg_rr *a, const char *mnemonic)
177{
178 output(ctx, mnemonic, "r%d, r%d", a->rd, a->rj);
179}
180
181static void output_rr_ms_ls(DisasContext *ctx, arg_rr_ms_ls *a,
182 const char *mnemonic)
183{
184 output(ctx, mnemonic, "r%d, r%d, %d, %d", a->rd, a->rj, a->ms, a->ls);
185}
186
187static void output_hint_r_i(DisasContext *ctx, arg_hint_r_i *a,
188 const char *mnemonic)
189{
190 output(ctx, mnemonic, "%d, r%d, %d", a->hint, a->rj, a->imm);
191}
192
5f1a3132
SG
193static void output_hint_rr(DisasContext *ctx, arg_hint_rr *a,
194 const char *mnemonic)
195{
196 output(ctx, mnemonic, "%d, r%d, r%d", a->hint, a->rj, a->rk);
197}
198
aae1746c
SG
199static void output_i(DisasContext *ctx, arg_i *a, const char *mnemonic)
200{
201 output(ctx, mnemonic, "%d", a->imm);
202}
203
204static void output_rr_jk(DisasContext *ctx, arg_rr_jk *a,
205 const char *mnemonic)
206{
207 output(ctx, mnemonic, "r%d, r%d", a->rj, a->rk);
208}
209
210static void output_ff(DisasContext *ctx, arg_ff *a, const char *mnemonic)
211{
212 output(ctx, mnemonic, "f%d, f%d", a->fd, a->fj);
213}
214
215static void output_fff(DisasContext *ctx, arg_fff *a, const char *mnemonic)
216{
217 output(ctx, mnemonic, "f%d, f%d, f%d", a->fd, a->fj, a->fk);
218}
219
220static void output_ffff(DisasContext *ctx, arg_ffff *a, const char *mnemonic)
221{
222 output(ctx, mnemonic, "f%d, f%d, f%d, f%d", a->fd, a->fj, a->fk, a->fa);
223}
224
225static void output_fffc(DisasContext *ctx, arg_fffc *a, const char *mnemonic)
226{
227 output(ctx, mnemonic, "f%d, f%d, f%d, %d", a->fd, a->fj, a->fk, a->ca);
228}
229
230static void output_fr(DisasContext *ctx, arg_fr *a, const char *mnemonic)
231{
232 output(ctx, mnemonic, "f%d, r%d", a->fd, a->rj);
233}
234
235static void output_rf(DisasContext *ctx, arg_rf *a, const char *mnemonic)
236{
237 output(ctx, mnemonic, "r%d, f%d", a->rd, a->fj);
238}
239
240static void output_fcsrd_r(DisasContext *ctx, arg_fcsrd_r *a,
241 const char *mnemonic)
242{
243 output(ctx, mnemonic, "fcsr%d, r%d", a->fcsrd, a->rj);
244}
245
246static void output_r_fcsrs(DisasContext *ctx, arg_r_fcsrs *a,
247 const char *mnemonic)
248{
249 output(ctx, mnemonic, "r%d, fcsr%d", a->rd, a->fcsrs);
250}
251
252static void output_cf(DisasContext *ctx, arg_cf *a, const char *mnemonic)
253{
254 output(ctx, mnemonic, "fcc%d, f%d", a->cd, a->fj);
255}
256
257static void output_fc(DisasContext *ctx, arg_fc *a, const char *mnemonic)
258{
259 output(ctx, mnemonic, "f%d, fcc%d", a->fd, a->cj);
260}
261
262static void output_cr(DisasContext *ctx, arg_cr *a, const char *mnemonic)
263{
264 output(ctx, mnemonic, "fcc%d, r%d", a->cd, a->rj);
265}
266
267static void output_rc(DisasContext *ctx, arg_rc *a, const char *mnemonic)
268{
269 output(ctx, mnemonic, "r%d, fcc%d", a->rd, a->cj);
270}
271
272static void output_frr(DisasContext *ctx, arg_frr *a, const char *mnemonic)
273{
274 output(ctx, mnemonic, "f%d, r%d, r%d", a->fd, a->rj, a->rk);
275}
276
277static void output_fr_i(DisasContext *ctx, arg_fr_i *a, const char *mnemonic)
278{
279 output(ctx, mnemonic, "f%d, r%d, %d", a->fd, a->rj, a->imm);
280}
281
282static void output_r_offs(DisasContext *ctx, arg_r_offs *a,
283 const char *mnemonic)
284{
285 output(ctx, mnemonic, "r%d, %d # 0x%" PRIx64, a->rj, a->offs,
286 ctx->pc + a->offs);
287}
288
289static void output_c_offs(DisasContext *ctx, arg_c_offs *a,
290 const char *mnemonic)
291{
292 output(ctx, mnemonic, "fcc%d, %d # 0x%" PRIx64, a->cj, a->offs,
293 ctx->pc + a->offs);
294}
295
296static void output_offs(DisasContext *ctx, arg_offs *a,
297 const char *mnemonic)
298{
299 output(ctx, mnemonic, "%d # 0x%" PRIx64, a->offs, ctx->pc + a->offs);
300}
301
302static void output_rr_offs(DisasContext *ctx, arg_rr_offs *a,
303 const char *mnemonic)
304{
305 output(ctx, mnemonic, "r%d, r%d, %d # 0x%" PRIx64, a->rj,
306 a->rd, a->offs, ctx->pc + a->offs);
307}
308
5b1dedfe
XY
309static void output_r_csr(DisasContext *ctx, arg_r_csr *a,
310 const char *mnemonic)
311{
312 output(ctx, mnemonic, "r%d, %d # %s", a->rd, a->csr, get_csr_name(a->csr));
313}
314
315static void output_rr_csr(DisasContext *ctx, arg_rr_csr *a,
316 const char *mnemonic)
317{
318 output(ctx, mnemonic, "r%d, r%d, %d # %s",
319 a->rd, a->rj, a->csr, get_csr_name(a->csr));
320}
321
fcbbeb8e
XY
322static void output_empty(DisasContext *ctx, arg_empty *a,
323 const char *mnemonic)
324{
325 output(ctx, mnemonic, "");
326}
327
328static void output_i_rr(DisasContext *ctx, arg_i_rr *a, const char *mnemonic)
329{
330 output(ctx, mnemonic, "%d, r%d, r%d", a->imm, a->rj, a->rk);
331}
332
d2cba6f7
XY
333static void output_cop_r_i(DisasContext *ctx, arg_cop_r_i *a,
334 const char *mnemonic)
335{
336 output(ctx, mnemonic, "%d, r%d, %d", a->cop, a->rj, a->imm);
337}
338
339static void output_j_i(DisasContext *ctx, arg_j_i *a, const char *mnemonic)
340{
341 output(ctx, mnemonic, "r%d, %d", a->rj, a->imm);
342}
343
aae1746c
SG
344#define INSN(insn, type) \
345static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
346{ \
347 output_##type(ctx, a, #insn); \
348 return true; \
349}
350
351INSN(clo_w, rr)
352INSN(clz_w, rr)
353INSN(cto_w, rr)
354INSN(ctz_w, rr)
355INSN(clo_d, rr)
356INSN(clz_d, rr)
357INSN(cto_d, rr)
358INSN(ctz_d, rr)
359INSN(revb_2h, rr)
360INSN(revb_4h, rr)
361INSN(revb_2w, rr)
362INSN(revb_d, rr)
363INSN(revh_2w, rr)
364INSN(revh_d, rr)
365INSN(bitrev_4b, rr)
366INSN(bitrev_8b, rr)
367INSN(bitrev_w, rr)
368INSN(bitrev_d, rr)
369INSN(ext_w_h, rr)
370INSN(ext_w_b, rr)
f9bf5074
XY
371INSN(rdtimel_w, rr)
372INSN(rdtimeh_w, rr)
373INSN(rdtime_d, rr)
aae1746c
SG
374INSN(cpucfg, rr)
375INSN(asrtle_d, rr_jk)
376INSN(asrtgt_d, rr_jk)
377INSN(alsl_w, rrr_sa)
378INSN(alsl_wu, rrr_sa)
379INSN(bytepick_w, rrr_sa)
380INSN(bytepick_d, rrr_sa)
381INSN(add_w, rrr)
382INSN(add_d, rrr)
383INSN(sub_w, rrr)
384INSN(sub_d, rrr)
385INSN(slt, rrr)
386INSN(sltu, rrr)
387INSN(maskeqz, rrr)
388INSN(masknez, rrr)
389INSN(nor, rrr)
390INSN(and, rrr)
391INSN(or, rrr)
392INSN(xor, rrr)
393INSN(orn, rrr)
394INSN(andn, rrr)
395INSN(sll_w, rrr)
396INSN(srl_w, rrr)
397INSN(sra_w, rrr)
398INSN(sll_d, rrr)
399INSN(srl_d, rrr)
400INSN(sra_d, rrr)
401INSN(rotr_w, rrr)
402INSN(rotr_d, rrr)
403INSN(mul_w, rrr)
404INSN(mulh_w, rrr)
405INSN(mulh_wu, rrr)
406INSN(mul_d, rrr)
407INSN(mulh_d, rrr)
408INSN(mulh_du, rrr)
409INSN(mulw_d_w, rrr)
410INSN(mulw_d_wu, rrr)
411INSN(div_w, rrr)
412INSN(mod_w, rrr)
413INSN(div_wu, rrr)
414INSN(mod_wu, rrr)
415INSN(div_d, rrr)
416INSN(mod_d, rrr)
417INSN(div_du, rrr)
418INSN(mod_du, rrr)
419INSN(crc_w_b_w, rrr)
420INSN(crc_w_h_w, rrr)
421INSN(crc_w_w_w, rrr)
422INSN(crc_w_d_w, rrr)
423INSN(crcc_w_b_w, rrr)
424INSN(crcc_w_h_w, rrr)
425INSN(crcc_w_w_w, rrr)
426INSN(crcc_w_d_w, rrr)
427INSN(break, i)
428INSN(syscall, i)
429INSN(alsl_d, rrr_sa)
430INSN(slli_w, rr_i)
431INSN(slli_d, rr_i)
432INSN(srli_w, rr_i)
433INSN(srli_d, rr_i)
434INSN(srai_w, rr_i)
435INSN(srai_d, rr_i)
436INSN(rotri_w, rr_i)
437INSN(rotri_d, rr_i)
438INSN(bstrins_w, rr_ms_ls)
439INSN(bstrpick_w, rr_ms_ls)
440INSN(bstrins_d, rr_ms_ls)
441INSN(bstrpick_d, rr_ms_ls)
442INSN(fadd_s, fff)
443INSN(fadd_d, fff)
444INSN(fsub_s, fff)
445INSN(fsub_d, fff)
446INSN(fmul_s, fff)
447INSN(fmul_d, fff)
448INSN(fdiv_s, fff)
449INSN(fdiv_d, fff)
450INSN(fmax_s, fff)
451INSN(fmax_d, fff)
452INSN(fmin_s, fff)
453INSN(fmin_d, fff)
454INSN(fmaxa_s, fff)
455INSN(fmaxa_d, fff)
456INSN(fmina_s, fff)
457INSN(fmina_d, fff)
458INSN(fscaleb_s, fff)
459INSN(fscaleb_d, fff)
460INSN(fcopysign_s, fff)
461INSN(fcopysign_d, fff)
462INSN(fabs_s, ff)
463INSN(fabs_d, ff)
464INSN(fneg_s, ff)
465INSN(fneg_d, ff)
466INSN(flogb_s, ff)
467INSN(flogb_d, ff)
468INSN(fclass_s, ff)
469INSN(fclass_d, ff)
470INSN(fsqrt_s, ff)
471INSN(fsqrt_d, ff)
472INSN(frecip_s, ff)
473INSN(frecip_d, ff)
474INSN(frsqrt_s, ff)
475INSN(frsqrt_d, ff)
476INSN(fmov_s, ff)
477INSN(fmov_d, ff)
478INSN(movgr2fr_w, fr)
479INSN(movgr2fr_d, fr)
480INSN(movgr2frh_w, fr)
481INSN(movfr2gr_s, rf)
482INSN(movfr2gr_d, rf)
483INSN(movfrh2gr_s, rf)
484INSN(movgr2fcsr, fcsrd_r)
485INSN(movfcsr2gr, r_fcsrs)
486INSN(movfr2cf, cf)
487INSN(movcf2fr, fc)
488INSN(movgr2cf, cr)
489INSN(movcf2gr, rc)
490INSN(fcvt_s_d, ff)
491INSN(fcvt_d_s, ff)
492INSN(ftintrm_w_s, ff)
493INSN(ftintrm_w_d, ff)
494INSN(ftintrm_l_s, ff)
495INSN(ftintrm_l_d, ff)
496INSN(ftintrp_w_s, ff)
497INSN(ftintrp_w_d, ff)
498INSN(ftintrp_l_s, ff)
499INSN(ftintrp_l_d, ff)
500INSN(ftintrz_w_s, ff)
501INSN(ftintrz_w_d, ff)
502INSN(ftintrz_l_s, ff)
503INSN(ftintrz_l_d, ff)
504INSN(ftintrne_w_s, ff)
505INSN(ftintrne_w_d, ff)
506INSN(ftintrne_l_s, ff)
507INSN(ftintrne_l_d, ff)
508INSN(ftint_w_s, ff)
509INSN(ftint_w_d, ff)
510INSN(ftint_l_s, ff)
511INSN(ftint_l_d, ff)
512INSN(ffint_s_w, ff)
513INSN(ffint_s_l, ff)
514INSN(ffint_d_w, ff)
515INSN(ffint_d_l, ff)
516INSN(frint_s, ff)
517INSN(frint_d, ff)
518INSN(slti, rr_i)
519INSN(sltui, rr_i)
520INSN(addi_w, rr_i)
521INSN(addi_d, rr_i)
522INSN(lu52i_d, rr_i)
523INSN(andi, rr_i)
524INSN(ori, rr_i)
525INSN(xori, rr_i)
526INSN(fmadd_s, ffff)
527INSN(fmadd_d, ffff)
528INSN(fmsub_s, ffff)
529INSN(fmsub_d, ffff)
530INSN(fnmadd_s, ffff)
531INSN(fnmadd_d, ffff)
532INSN(fnmsub_s, ffff)
533INSN(fnmsub_d, ffff)
534INSN(fsel, fffc)
535INSN(addu16i_d, rr_i)
536INSN(lu12i_w, r_i)
537INSN(lu32i_d, r_i)
aae1746c
SG
538INSN(ll_w, rr_i)
539INSN(sc_w, rr_i)
540INSN(ll_d, rr_i)
541INSN(sc_d, rr_i)
542INSN(ldptr_w, rr_i)
543INSN(stptr_w, rr_i)
544INSN(ldptr_d, rr_i)
545INSN(stptr_d, rr_i)
546INSN(ld_b, rr_i)
547INSN(ld_h, rr_i)
548INSN(ld_w, rr_i)
549INSN(ld_d, rr_i)
550INSN(st_b, rr_i)
551INSN(st_h, rr_i)
552INSN(st_w, rr_i)
553INSN(st_d, rr_i)
554INSN(ld_bu, rr_i)
555INSN(ld_hu, rr_i)
556INSN(ld_wu, rr_i)
557INSN(preld, hint_r_i)
5f1a3132 558INSN(preldx, hint_rr)
aae1746c
SG
559INSN(fld_s, fr_i)
560INSN(fst_s, fr_i)
561INSN(fld_d, fr_i)
562INSN(fst_d, fr_i)
563INSN(ldx_b, rrr)
564INSN(ldx_h, rrr)
565INSN(ldx_w, rrr)
566INSN(ldx_d, rrr)
567INSN(stx_b, rrr)
568INSN(stx_h, rrr)
569INSN(stx_w, rrr)
570INSN(stx_d, rrr)
571INSN(ldx_bu, rrr)
572INSN(ldx_hu, rrr)
573INSN(ldx_wu, rrr)
574INSN(fldx_s, frr)
575INSN(fldx_d, frr)
576INSN(fstx_s, frr)
577INSN(fstx_d, frr)
578INSN(amswap_w, rrr)
579INSN(amswap_d, rrr)
580INSN(amadd_w, rrr)
581INSN(amadd_d, rrr)
582INSN(amand_w, rrr)
583INSN(amand_d, rrr)
584INSN(amor_w, rrr)
585INSN(amor_d, rrr)
586INSN(amxor_w, rrr)
587INSN(amxor_d, rrr)
588INSN(ammax_w, rrr)
589INSN(ammax_d, rrr)
590INSN(ammin_w, rrr)
591INSN(ammin_d, rrr)
592INSN(ammax_wu, rrr)
593INSN(ammax_du, rrr)
594INSN(ammin_wu, rrr)
595INSN(ammin_du, rrr)
596INSN(amswap_db_w, rrr)
597INSN(amswap_db_d, rrr)
598INSN(amadd_db_w, rrr)
599INSN(amadd_db_d, rrr)
600INSN(amand_db_w, rrr)
601INSN(amand_db_d, rrr)
602INSN(amor_db_w, rrr)
603INSN(amor_db_d, rrr)
604INSN(amxor_db_w, rrr)
605INSN(amxor_db_d, rrr)
606INSN(ammax_db_w, rrr)
607INSN(ammax_db_d, rrr)
608INSN(ammin_db_w, rrr)
609INSN(ammin_db_d, rrr)
610INSN(ammax_db_wu, rrr)
611INSN(ammax_db_du, rrr)
612INSN(ammin_db_wu, rrr)
613INSN(ammin_db_du, rrr)
614INSN(dbar, i)
615INSN(ibar, i)
616INSN(fldgt_s, frr)
617INSN(fldgt_d, frr)
618INSN(fldle_s, frr)
619INSN(fldle_d, frr)
620INSN(fstgt_s, frr)
621INSN(fstgt_d, frr)
622INSN(fstle_s, frr)
623INSN(fstle_d, frr)
624INSN(ldgt_b, rrr)
625INSN(ldgt_h, rrr)
626INSN(ldgt_w, rrr)
627INSN(ldgt_d, rrr)
628INSN(ldle_b, rrr)
629INSN(ldle_h, rrr)
630INSN(ldle_w, rrr)
631INSN(ldle_d, rrr)
632INSN(stgt_b, rrr)
633INSN(stgt_h, rrr)
634INSN(stgt_w, rrr)
635INSN(stgt_d, rrr)
636INSN(stle_b, rrr)
637INSN(stle_h, rrr)
638INSN(stle_w, rrr)
639INSN(stle_d, rrr)
640INSN(beqz, r_offs)
641INSN(bnez, r_offs)
642INSN(bceqz, c_offs)
643INSN(bcnez, c_offs)
c2b618a8 644INSN(jirl, rr_i)
aae1746c
SG
645INSN(b, offs)
646INSN(bl, offs)
647INSN(beq, rr_offs)
648INSN(bne, rr_offs)
649INSN(blt, rr_offs)
650INSN(bge, rr_offs)
651INSN(bltu, rr_offs)
652INSN(bgeu, rr_offs)
5b1dedfe
XY
653INSN(csrrd, r_csr)
654INSN(csrwr, r_csr)
655INSN(csrxchg, rr_csr)
f84a2aac
XY
656INSN(iocsrrd_b, rr)
657INSN(iocsrrd_h, rr)
658INSN(iocsrrd_w, rr)
659INSN(iocsrrd_d, rr)
660INSN(iocsrwr_b, rr)
661INSN(iocsrwr_h, rr)
662INSN(iocsrwr_w, rr)
663INSN(iocsrwr_d, rr)
fcbbeb8e
XY
664INSN(tlbsrch, empty)
665INSN(tlbrd, empty)
666INSN(tlbwr, empty)
667INSN(tlbfill, empty)
668INSN(tlbclr, empty)
669INSN(tlbflush, empty)
670INSN(invtlb, i_rr)
d2cba6f7
XY
671INSN(cacop, cop_r_i)
672INSN(lddir, rr_i)
673INSN(ldpte, j_i)
674INSN(ertn, empty)
675INSN(idle, i)
676INSN(dbcl, i)
aae1746c
SG
677
678#define output_fcmp(C, PREFIX, SUFFIX) \
679{ \
680 (C)->info->fprintf_func((C)->info->stream, "%08x %s%s\tfcc%d, f%d, f%d", \
681 (C)->insn, PREFIX, SUFFIX, a->cd, \
682 a->fj, a->fk); \
683}
684
685static bool output_cff_fcond(DisasContext *ctx, arg_cff_fcond * a,
686 const char *suffix)
687{
688 bool ret = true;
689 switch (a->fcond) {
690 case 0x0:
691 output_fcmp(ctx, "fcmp_caf_", suffix);
692 break;
693 case 0x1:
694 output_fcmp(ctx, "fcmp_saf_", suffix);
695 break;
696 case 0x2:
697 output_fcmp(ctx, "fcmp_clt_", suffix);
698 break;
699 case 0x3:
700 output_fcmp(ctx, "fcmp_slt_", suffix);
701 break;
702 case 0x4:
703 output_fcmp(ctx, "fcmp_ceq_", suffix);
704 break;
705 case 0x5:
706 output_fcmp(ctx, "fcmp_seq_", suffix);
707 break;
708 case 0x6:
709 output_fcmp(ctx, "fcmp_cle_", suffix);
710 break;
711 case 0x7:
712 output_fcmp(ctx, "fcmp_sle_", suffix);
713 break;
714 case 0x8:
715 output_fcmp(ctx, "fcmp_cun_", suffix);
716 break;
717 case 0x9:
718 output_fcmp(ctx, "fcmp_sun_", suffix);
719 break;
720 case 0xA:
721 output_fcmp(ctx, "fcmp_cult_", suffix);
722 break;
723 case 0xB:
724 output_fcmp(ctx, "fcmp_sult_", suffix);
725 break;
726 case 0xC:
727 output_fcmp(ctx, "fcmp_cueq_", suffix);
728 break;
729 case 0xD:
730 output_fcmp(ctx, "fcmp_sueq_", suffix);
731 break;
732 case 0xE:
733 output_fcmp(ctx, "fcmp_cule_", suffix);
734 break;
735 case 0xF:
736 output_fcmp(ctx, "fcmp_sule_", suffix);
737 break;
738 case 0x10:
739 output_fcmp(ctx, "fcmp_cne_", suffix);
740 break;
741 case 0x11:
742 output_fcmp(ctx, "fcmp_sne_", suffix);
743 break;
744 case 0x14:
745 output_fcmp(ctx, "fcmp_cor_", suffix);
746 break;
747 case 0x15:
748 output_fcmp(ctx, "fcmp_sor_", suffix);
749 break;
750 case 0x18:
751 output_fcmp(ctx, "fcmp_cune_", suffix);
752 break;
753 case 0x19:
754 output_fcmp(ctx, "fcmp_sune_", suffix);
755 break;
756 default:
757 ret = false;
758 }
759 return ret;
760}
761
762#define FCMP_INSN(suffix) \
763static bool trans_fcmp_cond_##suffix(DisasContext *ctx, \
764 arg_cff_fcond * a) \
765{ \
766 return output_cff_fcond(ctx, a, #suffix); \
767}
768
769FCMP_INSN(s)
770FCMP_INSN(d)
69c9a5cf
RH
771
772#define PCADD_INSN(name) \
773static bool trans_##name(DisasContext *ctx, arg_##name *a) \
774{ \
775 output(ctx, #name, "r%d, %d # 0x%" PRIx64, \
776 a->rd, a->imm, gen_##name(ctx->pc, a->imm)); \
777 return true; \
778}
779
780static uint64_t gen_pcaddi(uint64_t pc, int imm)
781{
782 return pc + (imm << 2);
783}
784
785static uint64_t gen_pcalau12i(uint64_t pc, int imm)
786{
787 return (pc + (imm << 12)) & ~0xfff;
788}
789
790static uint64_t gen_pcaddu12i(uint64_t pc, int imm)
791{
792 return pc + (imm << 12);
793}
794
795static uint64_t gen_pcaddu18i(uint64_t pc, int imm)
796{
797 return pc + ((uint64_t)(imm) << 18);
798}
799
800PCADD_INSN(pcaddi)
801PCADD_INSN(pcalau12i)
802PCADD_INSN(pcaddu12i)
803PCADD_INSN(pcaddu18i)
57b4f1ac
SG
804
805#define INSN_LSX(insn, type) \
806static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
807{ \
808 output_##type(ctx, a, #insn); \
809 return true; \
810}
811
d0dfa19a
SG
812static void output_cv(DisasContext *ctx, arg_cv *a,
813 const char *mnemonic)
814{
815 output(ctx, mnemonic, "fcc%d, v%d", a->cd, a->vj);
816}
817
57b4f1ac
SG
818static void output_vvv(DisasContext *ctx, arg_vvv *a, const char *mnemonic)
819{
820 output(ctx, mnemonic, "v%d, v%d, v%d", a->vd, a->vj, a->vk);
821}
822
d8be64c1
SG
823static void output_vv_i(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
824{
825 output(ctx, mnemonic, "v%d, v%d, 0x%x", a->vd, a->vj, a->imm);
826}
827
be9ec557
SG
828static void output_vv(DisasContext *ctx, arg_vv *a, const char *mnemonic)
829{
830 output(ctx, mnemonic, "v%d, v%d", a->vd, a->vj);
831}
832
aca67472
SG
833static void output_vvvv(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
834{
835 output(ctx, mnemonic, "v%d, v%d, v%d, v%d", a->vd, a->vj, a->vk, a->va);
836}
837
cdbdefbf
SG
838static void output_vr_i(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
839{
840 output(ctx, mnemonic, "v%d, r%d, 0x%x", a->vd, a->rj, a->imm);
841}
842
843b627a
SG
843static void output_vr_ii(DisasContext *ctx, arg_vr_ii *a, const char *mnemonic)
844{
845 output(ctx, mnemonic, "v%d, r%d, 0x%x, 0x%x", a->vd, a->rj, a->imm, a->imm2);
846}
847
cdbdefbf
SG
848static void output_rv_i(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
849{
850 output(ctx, mnemonic, "r%d, v%d, 0x%x", a->rd, a->vj, a->imm);
851}
852
853static void output_vr(DisasContext *ctx, arg_vr *a, const char *mnemonic)
854{
855 output(ctx, mnemonic, "v%d, r%d", a->vd, a->rj);
856}
857
d5e5563c
SG
858static void output_vvr(DisasContext *ctx, arg_vvr *a, const char *mnemonic)
859{
860 output(ctx, mnemonic, "v%d, v%d, r%d", a->vd, a->vj, a->rk);
861}
862
843b627a
SG
863static void output_vrr(DisasContext *ctx, arg_vrr *a, const char *mnemonic)
864{
865 output(ctx, mnemonic, "v%d, r%d, r%d", a->vd, a->rj, a->rk);
866}
867
29bb5d72
SG
868static void output_v_i(DisasContext *ctx, arg_v_i *a, const char *mnemonic)
869{
870 output(ctx, mnemonic, "v%d, 0x%x", a->vd, a->imm);
871}
872
57b4f1ac
SG
873INSN_LSX(vadd_b, vvv)
874INSN_LSX(vadd_h, vvv)
875INSN_LSX(vadd_w, vvv)
876INSN_LSX(vadd_d, vvv)
877INSN_LSX(vadd_q, vvv)
878INSN_LSX(vsub_b, vvv)
879INSN_LSX(vsub_h, vvv)
880INSN_LSX(vsub_w, vvv)
881INSN_LSX(vsub_d, vvv)
882INSN_LSX(vsub_q, vvv)
d8be64c1
SG
883
884INSN_LSX(vaddi_bu, vv_i)
885INSN_LSX(vaddi_hu, vv_i)
886INSN_LSX(vaddi_wu, vv_i)
887INSN_LSX(vaddi_du, vv_i)
888INSN_LSX(vsubi_bu, vv_i)
889INSN_LSX(vsubi_hu, vv_i)
890INSN_LSX(vsubi_wu, vv_i)
891INSN_LSX(vsubi_du, vv_i)
be9ec557
SG
892
893INSN_LSX(vneg_b, vv)
894INSN_LSX(vneg_h, vv)
895INSN_LSX(vneg_w, vv)
896INSN_LSX(vneg_d, vv)
a94cb911
SG
897
898INSN_LSX(vsadd_b, vvv)
899INSN_LSX(vsadd_h, vvv)
900INSN_LSX(vsadd_w, vvv)
901INSN_LSX(vsadd_d, vvv)
902INSN_LSX(vsadd_bu, vvv)
903INSN_LSX(vsadd_hu, vvv)
904INSN_LSX(vsadd_wu, vvv)
905INSN_LSX(vsadd_du, vvv)
906INSN_LSX(vssub_b, vvv)
907INSN_LSX(vssub_h, vvv)
908INSN_LSX(vssub_w, vvv)
909INSN_LSX(vssub_d, vvv)
910INSN_LSX(vssub_bu, vvv)
911INSN_LSX(vssub_hu, vvv)
912INSN_LSX(vssub_wu, vvv)
913INSN_LSX(vssub_du, vvv)
c037fbc9
SG
914
915INSN_LSX(vhaddw_h_b, vvv)
916INSN_LSX(vhaddw_w_h, vvv)
917INSN_LSX(vhaddw_d_w, vvv)
918INSN_LSX(vhaddw_q_d, vvv)
919INSN_LSX(vhaddw_hu_bu, vvv)
920INSN_LSX(vhaddw_wu_hu, vvv)
921INSN_LSX(vhaddw_du_wu, vvv)
922INSN_LSX(vhaddw_qu_du, vvv)
923INSN_LSX(vhsubw_h_b, vvv)
924INSN_LSX(vhsubw_w_h, vvv)
925INSN_LSX(vhsubw_d_w, vvv)
926INSN_LSX(vhsubw_q_d, vvv)
927INSN_LSX(vhsubw_hu_bu, vvv)
928INSN_LSX(vhsubw_wu_hu, vvv)
929INSN_LSX(vhsubw_du_wu, vvv)
930INSN_LSX(vhsubw_qu_du, vvv)
2d5f950c
SG
931
932INSN_LSX(vaddwev_h_b, vvv)
933INSN_LSX(vaddwev_w_h, vvv)
934INSN_LSX(vaddwev_d_w, vvv)
935INSN_LSX(vaddwev_q_d, vvv)
936INSN_LSX(vaddwod_h_b, vvv)
937INSN_LSX(vaddwod_w_h, vvv)
938INSN_LSX(vaddwod_d_w, vvv)
939INSN_LSX(vaddwod_q_d, vvv)
940INSN_LSX(vsubwev_h_b, vvv)
941INSN_LSX(vsubwev_w_h, vvv)
942INSN_LSX(vsubwev_d_w, vvv)
943INSN_LSX(vsubwev_q_d, vvv)
944INSN_LSX(vsubwod_h_b, vvv)
945INSN_LSX(vsubwod_w_h, vvv)
946INSN_LSX(vsubwod_d_w, vvv)
947INSN_LSX(vsubwod_q_d, vvv)
948
949INSN_LSX(vaddwev_h_bu, vvv)
950INSN_LSX(vaddwev_w_hu, vvv)
951INSN_LSX(vaddwev_d_wu, vvv)
952INSN_LSX(vaddwev_q_du, vvv)
953INSN_LSX(vaddwod_h_bu, vvv)
954INSN_LSX(vaddwod_w_hu, vvv)
955INSN_LSX(vaddwod_d_wu, vvv)
956INSN_LSX(vaddwod_q_du, vvv)
957INSN_LSX(vsubwev_h_bu, vvv)
958INSN_LSX(vsubwev_w_hu, vvv)
959INSN_LSX(vsubwev_d_wu, vvv)
960INSN_LSX(vsubwev_q_du, vvv)
961INSN_LSX(vsubwod_h_bu, vvv)
962INSN_LSX(vsubwod_w_hu, vvv)
963INSN_LSX(vsubwod_d_wu, vvv)
964INSN_LSX(vsubwod_q_du, vvv)
965
966INSN_LSX(vaddwev_h_bu_b, vvv)
967INSN_LSX(vaddwev_w_hu_h, vvv)
968INSN_LSX(vaddwev_d_wu_w, vvv)
969INSN_LSX(vaddwev_q_du_d, vvv)
970INSN_LSX(vaddwod_h_bu_b, vvv)
971INSN_LSX(vaddwod_w_hu_h, vvv)
972INSN_LSX(vaddwod_d_wu_w, vvv)
973INSN_LSX(vaddwod_q_du_d, vvv)
39e9b0a7
SG
974
975INSN_LSX(vavg_b, vvv)
976INSN_LSX(vavg_h, vvv)
977INSN_LSX(vavg_w, vvv)
978INSN_LSX(vavg_d, vvv)
979INSN_LSX(vavg_bu, vvv)
980INSN_LSX(vavg_hu, vvv)
981INSN_LSX(vavg_wu, vvv)
982INSN_LSX(vavg_du, vvv)
983INSN_LSX(vavgr_b, vvv)
984INSN_LSX(vavgr_h, vvv)
985INSN_LSX(vavgr_w, vvv)
986INSN_LSX(vavgr_d, vvv)
987INSN_LSX(vavgr_bu, vvv)
988INSN_LSX(vavgr_hu, vvv)
989INSN_LSX(vavgr_wu, vvv)
990INSN_LSX(vavgr_du, vvv)
49725659
SG
991
992INSN_LSX(vabsd_b, vvv)
993INSN_LSX(vabsd_h, vvv)
994INSN_LSX(vabsd_w, vvv)
995INSN_LSX(vabsd_d, vvv)
996INSN_LSX(vabsd_bu, vvv)
997INSN_LSX(vabsd_hu, vvv)
998INSN_LSX(vabsd_wu, vvv)
999INSN_LSX(vabsd_du, vvv)
af448cb3
SG
1000
1001INSN_LSX(vadda_b, vvv)
1002INSN_LSX(vadda_h, vvv)
1003INSN_LSX(vadda_w, vvv)
1004INSN_LSX(vadda_d, vvv)
9ab29520
SG
1005
1006INSN_LSX(vmax_b, vvv)
1007INSN_LSX(vmax_h, vvv)
1008INSN_LSX(vmax_w, vvv)
1009INSN_LSX(vmax_d, vvv)
1010INSN_LSX(vmin_b, vvv)
1011INSN_LSX(vmin_h, vvv)
1012INSN_LSX(vmin_w, vvv)
1013INSN_LSX(vmin_d, vvv)
1014INSN_LSX(vmax_bu, vvv)
1015INSN_LSX(vmax_hu, vvv)
1016INSN_LSX(vmax_wu, vvv)
1017INSN_LSX(vmax_du, vvv)
1018INSN_LSX(vmin_bu, vvv)
1019INSN_LSX(vmin_hu, vvv)
1020INSN_LSX(vmin_wu, vvv)
1021INSN_LSX(vmin_du, vvv)
1022INSN_LSX(vmaxi_b, vv_i)
1023INSN_LSX(vmaxi_h, vv_i)
1024INSN_LSX(vmaxi_w, vv_i)
1025INSN_LSX(vmaxi_d, vv_i)
1026INSN_LSX(vmini_b, vv_i)
1027INSN_LSX(vmini_h, vv_i)
1028INSN_LSX(vmini_w, vv_i)
1029INSN_LSX(vmini_d, vv_i)
1030INSN_LSX(vmaxi_bu, vv_i)
1031INSN_LSX(vmaxi_hu, vv_i)
1032INSN_LSX(vmaxi_wu, vv_i)
1033INSN_LSX(vmaxi_du, vv_i)
1034INSN_LSX(vmini_bu, vv_i)
1035INSN_LSX(vmini_hu, vv_i)
1036INSN_LSX(vmini_wu, vv_i)
1037INSN_LSX(vmini_du, vv_i)
cd1c49ad
SG
1038
1039INSN_LSX(vmul_b, vvv)
1040INSN_LSX(vmul_h, vvv)
1041INSN_LSX(vmul_w, vvv)
1042INSN_LSX(vmul_d, vvv)
1043INSN_LSX(vmuh_b, vvv)
1044INSN_LSX(vmuh_h, vvv)
1045INSN_LSX(vmuh_w, vvv)
1046INSN_LSX(vmuh_d, vvv)
1047INSN_LSX(vmuh_bu, vvv)
1048INSN_LSX(vmuh_hu, vvv)
1049INSN_LSX(vmuh_wu, vvv)
1050INSN_LSX(vmuh_du, vvv)
1051
1052INSN_LSX(vmulwev_h_b, vvv)
1053INSN_LSX(vmulwev_w_h, vvv)
1054INSN_LSX(vmulwev_d_w, vvv)
1055INSN_LSX(vmulwev_q_d, vvv)
1056INSN_LSX(vmulwod_h_b, vvv)
1057INSN_LSX(vmulwod_w_h, vvv)
1058INSN_LSX(vmulwod_d_w, vvv)
1059INSN_LSX(vmulwod_q_d, vvv)
1060INSN_LSX(vmulwev_h_bu, vvv)
1061INSN_LSX(vmulwev_w_hu, vvv)
1062INSN_LSX(vmulwev_d_wu, vvv)
1063INSN_LSX(vmulwev_q_du, vvv)
1064INSN_LSX(vmulwod_h_bu, vvv)
1065INSN_LSX(vmulwod_w_hu, vvv)
1066INSN_LSX(vmulwod_d_wu, vvv)
1067INSN_LSX(vmulwod_q_du, vvv)
1068INSN_LSX(vmulwev_h_bu_b, vvv)
1069INSN_LSX(vmulwev_w_hu_h, vvv)
1070INSN_LSX(vmulwev_d_wu_w, vvv)
1071INSN_LSX(vmulwev_q_du_d, vvv)
1072INSN_LSX(vmulwod_h_bu_b, vvv)
1073INSN_LSX(vmulwod_w_hu_h, vvv)
1074INSN_LSX(vmulwod_d_wu_w, vvv)
1075INSN_LSX(vmulwod_q_du_d, vvv)
d3aec65b
SG
1076
1077INSN_LSX(vmadd_b, vvv)
1078INSN_LSX(vmadd_h, vvv)
1079INSN_LSX(vmadd_w, vvv)
1080INSN_LSX(vmadd_d, vvv)
1081INSN_LSX(vmsub_b, vvv)
1082INSN_LSX(vmsub_h, vvv)
1083INSN_LSX(vmsub_w, vvv)
1084INSN_LSX(vmsub_d, vvv)
1085
1086INSN_LSX(vmaddwev_h_b, vvv)
1087INSN_LSX(vmaddwev_w_h, vvv)
1088INSN_LSX(vmaddwev_d_w, vvv)
1089INSN_LSX(vmaddwev_q_d, vvv)
1090INSN_LSX(vmaddwod_h_b, vvv)
1091INSN_LSX(vmaddwod_w_h, vvv)
1092INSN_LSX(vmaddwod_d_w, vvv)
1093INSN_LSX(vmaddwod_q_d, vvv)
1094INSN_LSX(vmaddwev_h_bu, vvv)
1095INSN_LSX(vmaddwev_w_hu, vvv)
1096INSN_LSX(vmaddwev_d_wu, vvv)
1097INSN_LSX(vmaddwev_q_du, vvv)
1098INSN_LSX(vmaddwod_h_bu, vvv)
1099INSN_LSX(vmaddwod_w_hu, vvv)
1100INSN_LSX(vmaddwod_d_wu, vvv)
1101INSN_LSX(vmaddwod_q_du, vvv)
1102INSN_LSX(vmaddwev_h_bu_b, vvv)
1103INSN_LSX(vmaddwev_w_hu_h, vvv)
1104INSN_LSX(vmaddwev_d_wu_w, vvv)
1105INSN_LSX(vmaddwev_q_du_d, vvv)
1106INSN_LSX(vmaddwod_h_bu_b, vvv)
1107INSN_LSX(vmaddwod_w_hu_h, vvv)
1108INSN_LSX(vmaddwod_d_wu_w, vvv)
1109INSN_LSX(vmaddwod_q_du_d, vvv)
4cc4c0f7
SG
1110
1111INSN_LSX(vdiv_b, vvv)
1112INSN_LSX(vdiv_h, vvv)
1113INSN_LSX(vdiv_w, vvv)
1114INSN_LSX(vdiv_d, vvv)
1115INSN_LSX(vdiv_bu, vvv)
1116INSN_LSX(vdiv_hu, vvv)
1117INSN_LSX(vdiv_wu, vvv)
1118INSN_LSX(vdiv_du, vvv)
1119INSN_LSX(vmod_b, vvv)
1120INSN_LSX(vmod_h, vvv)
1121INSN_LSX(vmod_w, vvv)
1122INSN_LSX(vmod_d, vvv)
1123INSN_LSX(vmod_bu, vvv)
1124INSN_LSX(vmod_hu, vvv)
1125INSN_LSX(vmod_wu, vvv)
1126INSN_LSX(vmod_du, vvv)
cbe44190
SG
1127
1128INSN_LSX(vsat_b, vv_i)
1129INSN_LSX(vsat_h, vv_i)
1130INSN_LSX(vsat_w, vv_i)
1131INSN_LSX(vsat_d, vv_i)
1132INSN_LSX(vsat_bu, vv_i)
1133INSN_LSX(vsat_hu, vv_i)
1134INSN_LSX(vsat_wu, vv_i)
1135INSN_LSX(vsat_du, vv_i)
3734ad93
SG
1136
1137INSN_LSX(vexth_h_b, vv)
1138INSN_LSX(vexth_w_h, vv)
1139INSN_LSX(vexth_d_w, vv)
1140INSN_LSX(vexth_q_d, vv)
1141INSN_LSX(vexth_hu_bu, vv)
1142INSN_LSX(vexth_wu_hu, vv)
1143INSN_LSX(vexth_du_wu, vv)
1144INSN_LSX(vexth_qu_du, vv)
f0e395df
SG
1145
1146INSN_LSX(vsigncov_b, vvv)
1147INSN_LSX(vsigncov_h, vvv)
1148INSN_LSX(vsigncov_w, vvv)
1149INSN_LSX(vsigncov_d, vvv)
789f4a4c
SG
1150
1151INSN_LSX(vmskltz_b, vv)
1152INSN_LSX(vmskltz_h, vv)
1153INSN_LSX(vmskltz_w, vv)
1154INSN_LSX(vmskltz_d, vv)
1155INSN_LSX(vmskgez_b, vv)
1156INSN_LSX(vmsknz_b, vv)
f205a539 1157
29bb5d72
SG
1158INSN_LSX(vldi, v_i)
1159
f205a539
SG
1160INSN_LSX(vand_v, vvv)
1161INSN_LSX(vor_v, vvv)
1162INSN_LSX(vxor_v, vvv)
1163INSN_LSX(vnor_v, vvv)
1164INSN_LSX(vandn_v, vvv)
1165INSN_LSX(vorn_v, vvv)
1166
1167INSN_LSX(vandi_b, vv_i)
1168INSN_LSX(vori_b, vv_i)
1169INSN_LSX(vxori_b, vv_i)
1170INSN_LSX(vnori_b, vv_i)
b281d696
SG
1171
1172INSN_LSX(vsll_b, vvv)
1173INSN_LSX(vsll_h, vvv)
1174INSN_LSX(vsll_w, vvv)
1175INSN_LSX(vsll_d, vvv)
1176INSN_LSX(vslli_b, vv_i)
1177INSN_LSX(vslli_h, vv_i)
1178INSN_LSX(vslli_w, vv_i)
1179INSN_LSX(vslli_d, vv_i)
1180
1181INSN_LSX(vsrl_b, vvv)
1182INSN_LSX(vsrl_h, vvv)
1183INSN_LSX(vsrl_w, vvv)
1184INSN_LSX(vsrl_d, vvv)
1185INSN_LSX(vsrli_b, vv_i)
1186INSN_LSX(vsrli_h, vv_i)
1187INSN_LSX(vsrli_w, vv_i)
1188INSN_LSX(vsrli_d, vv_i)
1189
1190INSN_LSX(vsra_b, vvv)
1191INSN_LSX(vsra_h, vvv)
1192INSN_LSX(vsra_w, vvv)
1193INSN_LSX(vsra_d, vvv)
1194INSN_LSX(vsrai_b, vv_i)
1195INSN_LSX(vsrai_h, vv_i)
1196INSN_LSX(vsrai_w, vv_i)
1197INSN_LSX(vsrai_d, vv_i)
1198
1199INSN_LSX(vrotr_b, vvv)
1200INSN_LSX(vrotr_h, vvv)
1201INSN_LSX(vrotr_w, vvv)
1202INSN_LSX(vrotr_d, vvv)
1203INSN_LSX(vrotri_b, vv_i)
1204INSN_LSX(vrotri_h, vv_i)
1205INSN_LSX(vrotri_w, vv_i)
1206INSN_LSX(vrotri_d, vv_i)
9b21a7a5
SG
1207
1208INSN_LSX(vsllwil_h_b, vv_i)
1209INSN_LSX(vsllwil_w_h, vv_i)
1210INSN_LSX(vsllwil_d_w, vv_i)
1211INSN_LSX(vextl_q_d, vv)
1212INSN_LSX(vsllwil_hu_bu, vv_i)
1213INSN_LSX(vsllwil_wu_hu, vv_i)
1214INSN_LSX(vsllwil_du_wu, vv_i)
1215INSN_LSX(vextl_qu_du, vv)
ecb93716
SG
1216
1217INSN_LSX(vsrlr_b, vvv)
1218INSN_LSX(vsrlr_h, vvv)
1219INSN_LSX(vsrlr_w, vvv)
1220INSN_LSX(vsrlr_d, vvv)
1221INSN_LSX(vsrlri_b, vv_i)
1222INSN_LSX(vsrlri_h, vv_i)
1223INSN_LSX(vsrlri_w, vv_i)
1224INSN_LSX(vsrlri_d, vv_i)
1225
1226INSN_LSX(vsrar_b, vvv)
1227INSN_LSX(vsrar_h, vvv)
1228INSN_LSX(vsrar_w, vvv)
1229INSN_LSX(vsrar_d, vvv)
1230INSN_LSX(vsrari_b, vv_i)
1231INSN_LSX(vsrari_h, vv_i)
1232INSN_LSX(vsrari_w, vv_i)
1233INSN_LSX(vsrari_d, vv_i)
d79fb8dd
SG
1234
1235INSN_LSX(vsrln_b_h, vvv)
1236INSN_LSX(vsrln_h_w, vvv)
1237INSN_LSX(vsrln_w_d, vvv)
1238INSN_LSX(vsran_b_h, vvv)
1239INSN_LSX(vsran_h_w, vvv)
1240INSN_LSX(vsran_w_d, vvv)
1241
1242INSN_LSX(vsrlni_b_h, vv_i)
1243INSN_LSX(vsrlni_h_w, vv_i)
1244INSN_LSX(vsrlni_w_d, vv_i)
1245INSN_LSX(vsrlni_d_q, vv_i)
1246INSN_LSX(vsrani_b_h, vv_i)
1247INSN_LSX(vsrani_h_w, vv_i)
1248INSN_LSX(vsrani_w_d, vv_i)
1249INSN_LSX(vsrani_d_q, vv_i)
a5200a17
SG
1250
1251INSN_LSX(vsrlrn_b_h, vvv)
1252INSN_LSX(vsrlrn_h_w, vvv)
1253INSN_LSX(vsrlrn_w_d, vvv)
1254INSN_LSX(vsrarn_b_h, vvv)
1255INSN_LSX(vsrarn_h_w, vvv)
1256INSN_LSX(vsrarn_w_d, vvv)
1257
1258INSN_LSX(vsrlrni_b_h, vv_i)
1259INSN_LSX(vsrlrni_h_w, vv_i)
1260INSN_LSX(vsrlrni_w_d, vv_i)
1261INSN_LSX(vsrlrni_d_q, vv_i)
1262INSN_LSX(vsrarni_b_h, vv_i)
1263INSN_LSX(vsrarni_h_w, vv_i)
1264INSN_LSX(vsrarni_w_d, vv_i)
1265INSN_LSX(vsrarni_d_q, vv_i)
83b3815d
SG
1266
1267INSN_LSX(vssrln_b_h, vvv)
1268INSN_LSX(vssrln_h_w, vvv)
1269INSN_LSX(vssrln_w_d, vvv)
1270INSN_LSX(vssran_b_h, vvv)
1271INSN_LSX(vssran_h_w, vvv)
1272INSN_LSX(vssran_w_d, vvv)
1273INSN_LSX(vssrln_bu_h, vvv)
1274INSN_LSX(vssrln_hu_w, vvv)
1275INSN_LSX(vssrln_wu_d, vvv)
1276INSN_LSX(vssran_bu_h, vvv)
1277INSN_LSX(vssran_hu_w, vvv)
1278INSN_LSX(vssran_wu_d, vvv)
1279
1280INSN_LSX(vssrlni_b_h, vv_i)
1281INSN_LSX(vssrlni_h_w, vv_i)
1282INSN_LSX(vssrlni_w_d, vv_i)
1283INSN_LSX(vssrlni_d_q, vv_i)
1284INSN_LSX(vssrani_b_h, vv_i)
1285INSN_LSX(vssrani_h_w, vv_i)
1286INSN_LSX(vssrani_w_d, vv_i)
1287INSN_LSX(vssrani_d_q, vv_i)
1288INSN_LSX(vssrlni_bu_h, vv_i)
1289INSN_LSX(vssrlni_hu_w, vv_i)
1290INSN_LSX(vssrlni_wu_d, vv_i)
1291INSN_LSX(vssrlni_du_q, vv_i)
1292INSN_LSX(vssrani_bu_h, vv_i)
1293INSN_LSX(vssrani_hu_w, vv_i)
1294INSN_LSX(vssrani_wu_d, vv_i)
1295INSN_LSX(vssrani_du_q, vv_i)
162cd32c
SG
1296
1297INSN_LSX(vssrlrn_b_h, vvv)
1298INSN_LSX(vssrlrn_h_w, vvv)
1299INSN_LSX(vssrlrn_w_d, vvv)
1300INSN_LSX(vssrarn_b_h, vvv)
1301INSN_LSX(vssrarn_h_w, vvv)
1302INSN_LSX(vssrarn_w_d, vvv)
1303INSN_LSX(vssrlrn_bu_h, vvv)
1304INSN_LSX(vssrlrn_hu_w, vvv)
1305INSN_LSX(vssrlrn_wu_d, vvv)
1306INSN_LSX(vssrarn_bu_h, vvv)
1307INSN_LSX(vssrarn_hu_w, vvv)
1308INSN_LSX(vssrarn_wu_d, vvv)
1309
1310INSN_LSX(vssrlrni_b_h, vv_i)
1311INSN_LSX(vssrlrni_h_w, vv_i)
1312INSN_LSX(vssrlrni_w_d, vv_i)
1313INSN_LSX(vssrlrni_d_q, vv_i)
1314INSN_LSX(vssrlrni_bu_h, vv_i)
1315INSN_LSX(vssrlrni_hu_w, vv_i)
1316INSN_LSX(vssrlrni_wu_d, vv_i)
1317INSN_LSX(vssrlrni_du_q, vv_i)
1318INSN_LSX(vssrarni_b_h, vv_i)
1319INSN_LSX(vssrarni_h_w, vv_i)
1320INSN_LSX(vssrarni_w_d, vv_i)
1321INSN_LSX(vssrarni_d_q, vv_i)
1322INSN_LSX(vssrarni_bu_h, vv_i)
1323INSN_LSX(vssrarni_hu_w, vv_i)
1324INSN_LSX(vssrarni_wu_d, vv_i)
1325INSN_LSX(vssrarni_du_q, vv_i)
2e105e12
SG
1326
1327INSN_LSX(vclo_b, vv)
1328INSN_LSX(vclo_h, vv)
1329INSN_LSX(vclo_w, vv)
1330INSN_LSX(vclo_d, vv)
1331INSN_LSX(vclz_b, vv)
1332INSN_LSX(vclz_h, vv)
1333INSN_LSX(vclz_w, vv)
1334INSN_LSX(vclz_d, vv)
bb22ee57
SG
1335
1336INSN_LSX(vpcnt_b, vv)
1337INSN_LSX(vpcnt_h, vv)
1338INSN_LSX(vpcnt_w, vv)
1339INSN_LSX(vpcnt_d, vv)
0b1e6705
SG
1340
1341INSN_LSX(vbitclr_b, vvv)
1342INSN_LSX(vbitclr_h, vvv)
1343INSN_LSX(vbitclr_w, vvv)
1344INSN_LSX(vbitclr_d, vvv)
1345INSN_LSX(vbitclri_b, vv_i)
1346INSN_LSX(vbitclri_h, vv_i)
1347INSN_LSX(vbitclri_w, vv_i)
1348INSN_LSX(vbitclri_d, vv_i)
1349INSN_LSX(vbitset_b, vvv)
1350INSN_LSX(vbitset_h, vvv)
1351INSN_LSX(vbitset_w, vvv)
1352INSN_LSX(vbitset_d, vvv)
1353INSN_LSX(vbitseti_b, vv_i)
1354INSN_LSX(vbitseti_h, vv_i)
1355INSN_LSX(vbitseti_w, vv_i)
1356INSN_LSX(vbitseti_d, vv_i)
1357INSN_LSX(vbitrev_b, vvv)
1358INSN_LSX(vbitrev_h, vvv)
1359INSN_LSX(vbitrev_w, vvv)
1360INSN_LSX(vbitrev_d, vvv)
1361INSN_LSX(vbitrevi_b, vv_i)
1362INSN_LSX(vbitrevi_h, vv_i)
1363INSN_LSX(vbitrevi_w, vv_i)
1364INSN_LSX(vbitrevi_d, vv_i)
ac95a0b9
SG
1365
1366INSN_LSX(vfrstp_b, vvv)
1367INSN_LSX(vfrstp_h, vvv)
1368INSN_LSX(vfrstpi_b, vv_i)
1369INSN_LSX(vfrstpi_h, vv_i)
aca67472
SG
1370
1371INSN_LSX(vfadd_s, vvv)
1372INSN_LSX(vfadd_d, vvv)
1373INSN_LSX(vfsub_s, vvv)
1374INSN_LSX(vfsub_d, vvv)
1375INSN_LSX(vfmul_s, vvv)
1376INSN_LSX(vfmul_d, vvv)
1377INSN_LSX(vfdiv_s, vvv)
1378INSN_LSX(vfdiv_d, vvv)
1379
1380INSN_LSX(vfmadd_s, vvvv)
1381INSN_LSX(vfmadd_d, vvvv)
1382INSN_LSX(vfmsub_s, vvvv)
1383INSN_LSX(vfmsub_d, vvvv)
1384INSN_LSX(vfnmadd_s, vvvv)
1385INSN_LSX(vfnmadd_d, vvvv)
1386INSN_LSX(vfnmsub_s, vvvv)
1387INSN_LSX(vfnmsub_d, vvvv)
1388
1389INSN_LSX(vfmax_s, vvv)
1390INSN_LSX(vfmax_d, vvv)
1391INSN_LSX(vfmin_s, vvv)
1392INSN_LSX(vfmin_d, vvv)
1393
1394INSN_LSX(vfmaxa_s, vvv)
1395INSN_LSX(vfmaxa_d, vvv)
1396INSN_LSX(vfmina_s, vvv)
1397INSN_LSX(vfmina_d, vvv)
1398
1399INSN_LSX(vflogb_s, vv)
1400INSN_LSX(vflogb_d, vv)
1401
1402INSN_LSX(vfclass_s, vv)
1403INSN_LSX(vfclass_d, vv)
1404
1405INSN_LSX(vfsqrt_s, vv)
1406INSN_LSX(vfsqrt_d, vv)
1407INSN_LSX(vfrecip_s, vv)
1408INSN_LSX(vfrecip_d, vv)
1409INSN_LSX(vfrsqrt_s, vv)
1410INSN_LSX(vfrsqrt_d, vv)
399665d2
SG
1411
1412INSN_LSX(vfcvtl_s_h, vv)
1413INSN_LSX(vfcvth_s_h, vv)
1414INSN_LSX(vfcvtl_d_s, vv)
1415INSN_LSX(vfcvth_d_s, vv)
1416INSN_LSX(vfcvt_h_s, vvv)
1417INSN_LSX(vfcvt_s_d, vvv)
1418
1419INSN_LSX(vfrint_s, vv)
1420INSN_LSX(vfrint_d, vv)
1421INSN_LSX(vfrintrm_s, vv)
1422INSN_LSX(vfrintrm_d, vv)
1423INSN_LSX(vfrintrp_s, vv)
1424INSN_LSX(vfrintrp_d, vv)
1425INSN_LSX(vfrintrz_s, vv)
1426INSN_LSX(vfrintrz_d, vv)
1427INSN_LSX(vfrintrne_s, vv)
1428INSN_LSX(vfrintrne_d, vv)
1429
1430INSN_LSX(vftint_w_s, vv)
1431INSN_LSX(vftint_l_d, vv)
1432INSN_LSX(vftintrm_w_s, vv)
1433INSN_LSX(vftintrm_l_d, vv)
1434INSN_LSX(vftintrp_w_s, vv)
1435INSN_LSX(vftintrp_l_d, vv)
1436INSN_LSX(vftintrz_w_s, vv)
1437INSN_LSX(vftintrz_l_d, vv)
1438INSN_LSX(vftintrne_w_s, vv)
1439INSN_LSX(vftintrne_l_d, vv)
1440INSN_LSX(vftint_wu_s, vv)
1441INSN_LSX(vftint_lu_d, vv)
1442INSN_LSX(vftintrz_wu_s, vv)
1443INSN_LSX(vftintrz_lu_d, vv)
1444INSN_LSX(vftint_w_d, vvv)
1445INSN_LSX(vftintrm_w_d, vvv)
1446INSN_LSX(vftintrp_w_d, vvv)
1447INSN_LSX(vftintrz_w_d, vvv)
1448INSN_LSX(vftintrne_w_d, vvv)
1449INSN_LSX(vftintl_l_s, vv)
1450INSN_LSX(vftinth_l_s, vv)
1451INSN_LSX(vftintrml_l_s, vv)
1452INSN_LSX(vftintrmh_l_s, vv)
1453INSN_LSX(vftintrpl_l_s, vv)
1454INSN_LSX(vftintrph_l_s, vv)
1455INSN_LSX(vftintrzl_l_s, vv)
1456INSN_LSX(vftintrzh_l_s, vv)
1457INSN_LSX(vftintrnel_l_s, vv)
1458INSN_LSX(vftintrneh_l_s, vv)
1459
1460INSN_LSX(vffint_s_w, vv)
1461INSN_LSX(vffint_s_wu, vv)
1462INSN_LSX(vffint_d_l, vv)
1463INSN_LSX(vffint_d_lu, vv)
1464INSN_LSX(vffintl_d_w, vv)
1465INSN_LSX(vffinth_d_w, vv)
1466INSN_LSX(vffint_s_l, vvv)
f435e1e5
SG
1467
1468INSN_LSX(vseq_b, vvv)
1469INSN_LSX(vseq_h, vvv)
1470INSN_LSX(vseq_w, vvv)
1471INSN_LSX(vseq_d, vvv)
1472INSN_LSX(vseqi_b, vv_i)
1473INSN_LSX(vseqi_h, vv_i)
1474INSN_LSX(vseqi_w, vv_i)
1475INSN_LSX(vseqi_d, vv_i)
1476
1477INSN_LSX(vsle_b, vvv)
1478INSN_LSX(vsle_h, vvv)
1479INSN_LSX(vsle_w, vvv)
1480INSN_LSX(vsle_d, vvv)
1481INSN_LSX(vslei_b, vv_i)
1482INSN_LSX(vslei_h, vv_i)
1483INSN_LSX(vslei_w, vv_i)
1484INSN_LSX(vslei_d, vv_i)
1485INSN_LSX(vsle_bu, vvv)
1486INSN_LSX(vsle_hu, vvv)
1487INSN_LSX(vsle_wu, vvv)
1488INSN_LSX(vsle_du, vvv)
1489INSN_LSX(vslei_bu, vv_i)
1490INSN_LSX(vslei_hu, vv_i)
1491INSN_LSX(vslei_wu, vv_i)
1492INSN_LSX(vslei_du, vv_i)
1493
1494INSN_LSX(vslt_b, vvv)
1495INSN_LSX(vslt_h, vvv)
1496INSN_LSX(vslt_w, vvv)
1497INSN_LSX(vslt_d, vvv)
1498INSN_LSX(vslti_b, vv_i)
1499INSN_LSX(vslti_h, vv_i)
1500INSN_LSX(vslti_w, vv_i)
1501INSN_LSX(vslti_d, vv_i)
1502INSN_LSX(vslt_bu, vvv)
1503INSN_LSX(vslt_hu, vvv)
1504INSN_LSX(vslt_wu, vvv)
1505INSN_LSX(vslt_du, vvv)
1506INSN_LSX(vslti_bu, vv_i)
1507INSN_LSX(vslti_hu, vv_i)
1508INSN_LSX(vslti_wu, vv_i)
1509INSN_LSX(vslti_du, vv_i)
386c4e86
SG
1510
1511#define output_vfcmp(C, PREFIX, SUFFIX) \
1512{ \
1513 (C)->info->fprintf_func((C)->info->stream, "%08x %s%s\t%d, f%d, f%d", \
1514 (C)->insn, PREFIX, SUFFIX, a->vd, \
1515 a->vj, a->vk); \
1516}
1517
1518static bool output_vvv_fcond(DisasContext *ctx, arg_vvv_fcond * a,
1519 const char *suffix)
1520{
1521 bool ret = true;
1522 switch (a->fcond) {
1523 case 0x0:
1524 output_vfcmp(ctx, "vfcmp_caf_", suffix);
1525 break;
1526 case 0x1:
1527 output_vfcmp(ctx, "vfcmp_saf_", suffix);
1528 break;
1529 case 0x2:
1530 output_vfcmp(ctx, "vfcmp_clt_", suffix);
1531 break;
1532 case 0x3:
1533 output_vfcmp(ctx, "vfcmp_slt_", suffix);
1534 break;
1535 case 0x4:
1536 output_vfcmp(ctx, "vfcmp_ceq_", suffix);
1537 break;
1538 case 0x5:
1539 output_vfcmp(ctx, "vfcmp_seq_", suffix);
1540 break;
1541 case 0x6:
1542 output_vfcmp(ctx, "vfcmp_cle_", suffix);
1543 break;
1544 case 0x7:
1545 output_vfcmp(ctx, "vfcmp_sle_", suffix);
1546 break;
1547 case 0x8:
1548 output_vfcmp(ctx, "vfcmp_cun_", suffix);
1549 break;
1550 case 0x9:
1551 output_vfcmp(ctx, "vfcmp_sun_", suffix);
1552 break;
1553 case 0xA:
1554 output_vfcmp(ctx, "vfcmp_cult_", suffix);
1555 break;
1556 case 0xB:
1557 output_vfcmp(ctx, "vfcmp_sult_", suffix);
1558 break;
1559 case 0xC:
1560 output_vfcmp(ctx, "vfcmp_cueq_", suffix);
1561 break;
1562 case 0xD:
1563 output_vfcmp(ctx, "vfcmp_sueq_", suffix);
1564 break;
1565 case 0xE:
1566 output_vfcmp(ctx, "vfcmp_cule_", suffix);
1567 break;
1568 case 0xF:
1569 output_vfcmp(ctx, "vfcmp_sule_", suffix);
1570 break;
1571 case 0x10:
1572 output_vfcmp(ctx, "vfcmp_cne_", suffix);
1573 break;
1574 case 0x11:
1575 output_vfcmp(ctx, "vfcmp_sne_", suffix);
1576 break;
1577 case 0x14:
1578 output_vfcmp(ctx, "vfcmp_cor_", suffix);
1579 break;
1580 case 0x15:
1581 output_vfcmp(ctx, "vfcmp_sor_", suffix);
1582 break;
1583 case 0x18:
1584 output_vfcmp(ctx, "vfcmp_cune_", suffix);
1585 break;
1586 case 0x19:
1587 output_vfcmp(ctx, "vfcmp_sune_", suffix);
1588 break;
1589 default:
1590 ret = false;
1591 }
1592 return ret;
1593}
1594
1595#define LSX_FCMP_INSN(suffix) \
1596static bool trans_vfcmp_cond_##suffix(DisasContext *ctx, \
1597 arg_vvv_fcond * a) \
1598{ \
1599 return output_vvv_fcond(ctx, a, #suffix); \
1600}
1601
1602LSX_FCMP_INSN(s)
1603LSX_FCMP_INSN(d)
d0dfa19a
SG
1604
1605INSN_LSX(vbitsel_v, vvvv)
1606INSN_LSX(vbitseli_b, vv_i)
1607
1608INSN_LSX(vseteqz_v, cv)
1609INSN_LSX(vsetnez_v, cv)
1610INSN_LSX(vsetanyeqz_b, cv)
1611INSN_LSX(vsetanyeqz_h, cv)
1612INSN_LSX(vsetanyeqz_w, cv)
1613INSN_LSX(vsetanyeqz_d, cv)
1614INSN_LSX(vsetallnez_b, cv)
1615INSN_LSX(vsetallnez_h, cv)
1616INSN_LSX(vsetallnez_w, cv)
1617INSN_LSX(vsetallnez_d, cv)
cdbdefbf
SG
1618
1619INSN_LSX(vinsgr2vr_b, vr_i)
1620INSN_LSX(vinsgr2vr_h, vr_i)
1621INSN_LSX(vinsgr2vr_w, vr_i)
1622INSN_LSX(vinsgr2vr_d, vr_i)
1623INSN_LSX(vpickve2gr_b, rv_i)
1624INSN_LSX(vpickve2gr_h, rv_i)
1625INSN_LSX(vpickve2gr_w, rv_i)
1626INSN_LSX(vpickve2gr_d, rv_i)
1627INSN_LSX(vpickve2gr_bu, rv_i)
1628INSN_LSX(vpickve2gr_hu, rv_i)
1629INSN_LSX(vpickve2gr_wu, rv_i)
1630INSN_LSX(vpickve2gr_du, rv_i)
1631
1632INSN_LSX(vreplgr2vr_b, vr)
1633INSN_LSX(vreplgr2vr_h, vr)
1634INSN_LSX(vreplgr2vr_w, vr)
1635INSN_LSX(vreplgr2vr_d, vr)
d5e5563c
SG
1636
1637INSN_LSX(vreplve_b, vvr)
1638INSN_LSX(vreplve_h, vvr)
1639INSN_LSX(vreplve_w, vvr)
1640INSN_LSX(vreplve_d, vvr)
1641INSN_LSX(vreplvei_b, vv_i)
1642INSN_LSX(vreplvei_h, vv_i)
1643INSN_LSX(vreplvei_w, vv_i)
1644INSN_LSX(vreplvei_d, vv_i)
1645
1646INSN_LSX(vbsll_v, vv_i)
1647INSN_LSX(vbsrl_v, vv_i)
1648
1649INSN_LSX(vpackev_b, vvv)
1650INSN_LSX(vpackev_h, vvv)
1651INSN_LSX(vpackev_w, vvv)
1652INSN_LSX(vpackev_d, vvv)
1653INSN_LSX(vpackod_b, vvv)
1654INSN_LSX(vpackod_h, vvv)
1655INSN_LSX(vpackod_w, vvv)
1656INSN_LSX(vpackod_d, vvv)
1657
1658INSN_LSX(vpickev_b, vvv)
1659INSN_LSX(vpickev_h, vvv)
1660INSN_LSX(vpickev_w, vvv)
1661INSN_LSX(vpickev_d, vvv)
1662INSN_LSX(vpickod_b, vvv)
1663INSN_LSX(vpickod_h, vvv)
1664INSN_LSX(vpickod_w, vvv)
1665INSN_LSX(vpickod_d, vvv)
e93dd431
SG
1666
1667INSN_LSX(vilvl_b, vvv)
1668INSN_LSX(vilvl_h, vvv)
1669INSN_LSX(vilvl_w, vvv)
1670INSN_LSX(vilvl_d, vvv)
1671INSN_LSX(vilvh_b, vvv)
1672INSN_LSX(vilvh_h, vvv)
1673INSN_LSX(vilvh_w, vvv)
1674INSN_LSX(vilvh_d, vvv)
1675
1676INSN_LSX(vshuf_b, vvvv)
1677INSN_LSX(vshuf_h, vvv)
1678INSN_LSX(vshuf_w, vvv)
1679INSN_LSX(vshuf_d, vvv)
1680INSN_LSX(vshuf4i_b, vv_i)
1681INSN_LSX(vshuf4i_h, vv_i)
1682INSN_LSX(vshuf4i_w, vv_i)
1683INSN_LSX(vshuf4i_d, vv_i)
1684
1685INSN_LSX(vpermi_w, vv_i)
1686
1687INSN_LSX(vextrins_d, vv_i)
1688INSN_LSX(vextrins_w, vv_i)
1689INSN_LSX(vextrins_h, vv_i)
1690INSN_LSX(vextrins_b, vv_i)
843b627a
SG
1691
1692INSN_LSX(vld, vr_i)
1693INSN_LSX(vst, vr_i)
1694INSN_LSX(vldx, vrr)
1695INSN_LSX(vstx, vrr)
1696
1697INSN_LSX(vldrepl_d, vr_i)
1698INSN_LSX(vldrepl_w, vr_i)
1699INSN_LSX(vldrepl_h, vr_i)
1700INSN_LSX(vldrepl_b, vr_i)
1701INSN_LSX(vstelm_d, vr_ii)
1702INSN_LSX(vstelm_w, vr_ii)
1703INSN_LSX(vstelm_h, vr_ii)
1704INSN_LSX(vstelm_b, vr_ii)
269ca39a
SG
1705
1706#define INSN_LASX(insn, type) \
1707static bool trans_##insn(DisasContext *ctx, arg_##type * a) \
1708{ \
1709 output_##type ## _x(ctx, a, #insn); \
1710 return true; \
1711}
1712
f3dfcc8b
SG
1713static void output_cv_x(DisasContext *ctx, arg_cv *a, const char *mnemonic)
1714{
1715 output(ctx, mnemonic, "fcc%d, x%d", a->cd, a->vj);
1716}
1717
a59098e3
SG
1718static void output_v_i_x(DisasContext *ctx, arg_v_i *a, const char *mnemonic)
1719{
1720 output(ctx, mnemonic, "x%d, 0x%x", a->vd, a->imm);
1721}
1722
c9caf158
SG
1723static void output_vvvv_x(DisasContext *ctx, arg_vvvv *a, const char *mnemonic)
1724{
1725 output(ctx, mnemonic, "x%d, x%d, x%d, x%d", a->vd, a->vj, a->vk, a->va);
1726}
1727
269ca39a
SG
1728static void output_vvv_x(DisasContext *ctx, arg_vvv * a, const char *mnemonic)
1729{
1730 output(ctx, mnemonic, "x%d, x%d, x%d", a->vd, a->vj, a->vk);
1731}
1732
73123406
SG
1733static void output_vr_x(DisasContext *ctx, arg_vr *a, const char *mnemonic)
1734{
1735 output(ctx, mnemonic, "x%d, r%d", a->vd, a->rj);
1736}
1737
34200421
SG
1738static void output_vv_i_x(DisasContext *ctx, arg_vv_i *a, const char *mnemonic)
1739{
1740 output(ctx, mnemonic, "x%d, x%d, 0x%x", a->vd, a->vj, a->imm);
1741}
1742
760f9647
SG
1743static void output_vv_x(DisasContext *ctx, arg_vv *a, const char *mnemonic)
1744{
1745 output(ctx, mnemonic, "x%d, x%d", a->vd, a->vj);
1746}
1747
f5ce2c8f
SG
1748static void output_vr_i_x(DisasContext *ctx, arg_vr_i *a, const char *mnemonic)
1749{
1750 output(ctx, mnemonic, "x%d, r%d, 0x%x", a->vd, a->rj, a->imm);
1751}
1752
1753static void output_rv_i_x(DisasContext *ctx, arg_rv_i *a, const char *mnemonic)
1754{
1755 output(ctx, mnemonic, "r%d, x%d, 0x%x", a->rd, a->vj, a->imm);
1756}
1757
df97f338
SG
1758static void output_vvr_x(DisasContext *ctx, arg_vvr *a, const char *mnemonic)
1759{
1760 output(ctx, mnemonic, "x%d, x%d, r%d", a->vd, a->vj, a->rk);
1761}
1762
4a26512f
SG
1763static void output_vrr_x(DisasContext *ctx, arg_vrr *a, const char *mnemonic)
1764{
1765 output(ctx, mnemonic, "x%d, r%d, r%d", a->vd, a->rj, a->rk);
1766}
1767
1768static void output_vr_ii_x(DisasContext *ctx, arg_vr_ii *a, const char *mnemonic)
1769{
1770 output(ctx, mnemonic, "x%d, r%d, 0x%x, 0x%x", a->vd, a->rj, a->imm, a->imm2);
1771}
1772
269ca39a
SG
1773INSN_LASX(xvadd_b, vvv)
1774INSN_LASX(xvadd_h, vvv)
1775INSN_LASX(xvadd_w, vvv)
1776INSN_LASX(xvadd_d, vvv)
1777INSN_LASX(xvadd_q, vvv)
1778INSN_LASX(xvsub_b, vvv)
1779INSN_LASX(xvsub_h, vvv)
1780INSN_LASX(xvsub_w, vvv)
1781INSN_LASX(xvsub_d, vvv)
1782INSN_LASX(xvsub_q, vvv)
73123406 1783
34200421
SG
1784INSN_LASX(xvaddi_bu, vv_i)
1785INSN_LASX(xvaddi_hu, vv_i)
1786INSN_LASX(xvaddi_wu, vv_i)
1787INSN_LASX(xvaddi_du, vv_i)
1788INSN_LASX(xvsubi_bu, vv_i)
1789INSN_LASX(xvsubi_hu, vv_i)
1790INSN_LASX(xvsubi_wu, vv_i)
1791INSN_LASX(xvsubi_du, vv_i)
1792
760f9647
SG
1793INSN_LASX(xvneg_b, vv)
1794INSN_LASX(xvneg_h, vv)
1795INSN_LASX(xvneg_w, vv)
1796INSN_LASX(xvneg_d, vv)
1797
d2df46d9
SG
1798INSN_LASX(xvsadd_b, vvv)
1799INSN_LASX(xvsadd_h, vvv)
1800INSN_LASX(xvsadd_w, vvv)
1801INSN_LASX(xvsadd_d, vvv)
1802INSN_LASX(xvsadd_bu, vvv)
1803INSN_LASX(xvsadd_hu, vvv)
1804INSN_LASX(xvsadd_wu, vvv)
1805INSN_LASX(xvsadd_du, vvv)
1806INSN_LASX(xvssub_b, vvv)
1807INSN_LASX(xvssub_h, vvv)
1808INSN_LASX(xvssub_w, vvv)
1809INSN_LASX(xvssub_d, vvv)
1810INSN_LASX(xvssub_bu, vvv)
1811INSN_LASX(xvssub_hu, vvv)
1812INSN_LASX(xvssub_wu, vvv)
1813INSN_LASX(xvssub_du, vvv)
1814
64cf6b99
SG
1815INSN_LASX(xvhaddw_h_b, vvv)
1816INSN_LASX(xvhaddw_w_h, vvv)
1817INSN_LASX(xvhaddw_d_w, vvv)
1818INSN_LASX(xvhaddw_q_d, vvv)
1819INSN_LASX(xvhaddw_hu_bu, vvv)
1820INSN_LASX(xvhaddw_wu_hu, vvv)
1821INSN_LASX(xvhaddw_du_wu, vvv)
1822INSN_LASX(xvhaddw_qu_du, vvv)
1823INSN_LASX(xvhsubw_h_b, vvv)
1824INSN_LASX(xvhsubw_w_h, vvv)
1825INSN_LASX(xvhsubw_d_w, vvv)
1826INSN_LASX(xvhsubw_q_d, vvv)
1827INSN_LASX(xvhsubw_hu_bu, vvv)
1828INSN_LASX(xvhsubw_wu_hu, vvv)
1829INSN_LASX(xvhsubw_du_wu, vvv)
1830INSN_LASX(xvhsubw_qu_du, vvv)
1831
85995f07
SG
1832INSN_LASX(xvaddwev_h_b, vvv)
1833INSN_LASX(xvaddwev_w_h, vvv)
1834INSN_LASX(xvaddwev_d_w, vvv)
1835INSN_LASX(xvaddwev_q_d, vvv)
1836INSN_LASX(xvaddwod_h_b, vvv)
1837INSN_LASX(xvaddwod_w_h, vvv)
1838INSN_LASX(xvaddwod_d_w, vvv)
1839INSN_LASX(xvaddwod_q_d, vvv)
1840INSN_LASX(xvsubwev_h_b, vvv)
1841INSN_LASX(xvsubwev_w_h, vvv)
1842INSN_LASX(xvsubwev_d_w, vvv)
1843INSN_LASX(xvsubwev_q_d, vvv)
1844INSN_LASX(xvsubwod_h_b, vvv)
1845INSN_LASX(xvsubwod_w_h, vvv)
1846INSN_LASX(xvsubwod_d_w, vvv)
1847INSN_LASX(xvsubwod_q_d, vvv)
1848
1849INSN_LASX(xvaddwev_h_bu, vvv)
1850INSN_LASX(xvaddwev_w_hu, vvv)
1851INSN_LASX(xvaddwev_d_wu, vvv)
1852INSN_LASX(xvaddwev_q_du, vvv)
1853INSN_LASX(xvaddwod_h_bu, vvv)
1854INSN_LASX(xvaddwod_w_hu, vvv)
1855INSN_LASX(xvaddwod_d_wu, vvv)
1856INSN_LASX(xvaddwod_q_du, vvv)
1857INSN_LASX(xvsubwev_h_bu, vvv)
1858INSN_LASX(xvsubwev_w_hu, vvv)
1859INSN_LASX(xvsubwev_d_wu, vvv)
1860INSN_LASX(xvsubwev_q_du, vvv)
1861INSN_LASX(xvsubwod_h_bu, vvv)
1862INSN_LASX(xvsubwod_w_hu, vvv)
1863INSN_LASX(xvsubwod_d_wu, vvv)
1864INSN_LASX(xvsubwod_q_du, vvv)
1865
1866INSN_LASX(xvaddwev_h_bu_b, vvv)
1867INSN_LASX(xvaddwev_w_hu_h, vvv)
1868INSN_LASX(xvaddwev_d_wu_w, vvv)
1869INSN_LASX(xvaddwev_q_du_d, vvv)
1870INSN_LASX(xvaddwod_h_bu_b, vvv)
1871INSN_LASX(xvaddwod_w_hu_h, vvv)
1872INSN_LASX(xvaddwod_d_wu_w, vvv)
1873INSN_LASX(xvaddwod_q_du_d, vvv)
1874
ee7250d0
SG
1875INSN_LASX(xvavg_b, vvv)
1876INSN_LASX(xvavg_h, vvv)
1877INSN_LASX(xvavg_w, vvv)
1878INSN_LASX(xvavg_d, vvv)
1879INSN_LASX(xvavg_bu, vvv)
1880INSN_LASX(xvavg_hu, vvv)
1881INSN_LASX(xvavg_wu, vvv)
1882INSN_LASX(xvavg_du, vvv)
1883INSN_LASX(xvavgr_b, vvv)
1884INSN_LASX(xvavgr_h, vvv)
1885INSN_LASX(xvavgr_w, vvv)
1886INSN_LASX(xvavgr_d, vvv)
1887INSN_LASX(xvavgr_bu, vvv)
1888INSN_LASX(xvavgr_hu, vvv)
1889INSN_LASX(xvavgr_wu, vvv)
1890INSN_LASX(xvavgr_du, vvv)
1891
ccc9fa26
SG
1892INSN_LASX(xvabsd_b, vvv)
1893INSN_LASX(xvabsd_h, vvv)
1894INSN_LASX(xvabsd_w, vvv)
1895INSN_LASX(xvabsd_d, vvv)
1896INSN_LASX(xvabsd_bu, vvv)
1897INSN_LASX(xvabsd_hu, vvv)
1898INSN_LASX(xvabsd_wu, vvv)
1899INSN_LASX(xvabsd_du, vvv)
1900
27f5485d
SG
1901INSN_LASX(xvadda_b, vvv)
1902INSN_LASX(xvadda_h, vvv)
1903INSN_LASX(xvadda_w, vvv)
1904INSN_LASX(xvadda_d, vvv)
1905
c09360fa
SG
1906INSN_LASX(xvmax_b, vvv)
1907INSN_LASX(xvmax_h, vvv)
1908INSN_LASX(xvmax_w, vvv)
1909INSN_LASX(xvmax_d, vvv)
1910INSN_LASX(xvmin_b, vvv)
1911INSN_LASX(xvmin_h, vvv)
1912INSN_LASX(xvmin_w, vvv)
1913INSN_LASX(xvmin_d, vvv)
1914INSN_LASX(xvmax_bu, vvv)
1915INSN_LASX(xvmax_hu, vvv)
1916INSN_LASX(xvmax_wu, vvv)
1917INSN_LASX(xvmax_du, vvv)
1918INSN_LASX(xvmin_bu, vvv)
1919INSN_LASX(xvmin_hu, vvv)
1920INSN_LASX(xvmin_wu, vvv)
1921INSN_LASX(xvmin_du, vvv)
1922
1923INSN_LASX(xvmaxi_b, vv_i)
1924INSN_LASX(xvmaxi_h, vv_i)
1925INSN_LASX(xvmaxi_w, vv_i)
1926INSN_LASX(xvmaxi_d, vv_i)
1927INSN_LASX(xvmini_b, vv_i)
1928INSN_LASX(xvmini_h, vv_i)
1929INSN_LASX(xvmini_w, vv_i)
1930INSN_LASX(xvmini_d, vv_i)
1931INSN_LASX(xvmaxi_bu, vv_i)
1932INSN_LASX(xvmaxi_hu, vv_i)
1933INSN_LASX(xvmaxi_wu, vv_i)
1934INSN_LASX(xvmaxi_du, vv_i)
1935INSN_LASX(xvmini_bu, vv_i)
1936INSN_LASX(xvmini_hu, vv_i)
1937INSN_LASX(xvmini_wu, vv_i)
1938INSN_LASX(xvmini_du, vv_i)
1939
342dc1cf
SG
1940INSN_LASX(xvmul_b, vvv)
1941INSN_LASX(xvmul_h, vvv)
1942INSN_LASX(xvmul_w, vvv)
1943INSN_LASX(xvmul_d, vvv)
1944INSN_LASX(xvmuh_b, vvv)
1945INSN_LASX(xvmuh_h, vvv)
1946INSN_LASX(xvmuh_w, vvv)
1947INSN_LASX(xvmuh_d, vvv)
1948INSN_LASX(xvmuh_bu, vvv)
1949INSN_LASX(xvmuh_hu, vvv)
1950INSN_LASX(xvmuh_wu, vvv)
1951INSN_LASX(xvmuh_du, vvv)
1952
1953INSN_LASX(xvmulwev_h_b, vvv)
1954INSN_LASX(xvmulwev_w_h, vvv)
1955INSN_LASX(xvmulwev_d_w, vvv)
1956INSN_LASX(xvmulwev_q_d, vvv)
1957INSN_LASX(xvmulwod_h_b, vvv)
1958INSN_LASX(xvmulwod_w_h, vvv)
1959INSN_LASX(xvmulwod_d_w, vvv)
1960INSN_LASX(xvmulwod_q_d, vvv)
1961INSN_LASX(xvmulwev_h_bu, vvv)
1962INSN_LASX(xvmulwev_w_hu, vvv)
1963INSN_LASX(xvmulwev_d_wu, vvv)
1964INSN_LASX(xvmulwev_q_du, vvv)
1965INSN_LASX(xvmulwod_h_bu, vvv)
1966INSN_LASX(xvmulwod_w_hu, vvv)
1967INSN_LASX(xvmulwod_d_wu, vvv)
1968INSN_LASX(xvmulwod_q_du, vvv)
1969INSN_LASX(xvmulwev_h_bu_b, vvv)
1970INSN_LASX(xvmulwev_w_hu_h, vvv)
1971INSN_LASX(xvmulwev_d_wu_w, vvv)
1972INSN_LASX(xvmulwev_q_du_d, vvv)
1973INSN_LASX(xvmulwod_h_bu_b, vvv)
1974INSN_LASX(xvmulwod_w_hu_h, vvv)
1975INSN_LASX(xvmulwod_d_wu_w, vvv)
1976INSN_LASX(xvmulwod_q_du_d, vvv)
1977
3f450c17
SG
1978INSN_LASX(xvmadd_b, vvv)
1979INSN_LASX(xvmadd_h, vvv)
1980INSN_LASX(xvmadd_w, vvv)
1981INSN_LASX(xvmadd_d, vvv)
1982INSN_LASX(xvmsub_b, vvv)
1983INSN_LASX(xvmsub_h, vvv)
1984INSN_LASX(xvmsub_w, vvv)
1985INSN_LASX(xvmsub_d, vvv)
1986
1987INSN_LASX(xvmaddwev_h_b, vvv)
1988INSN_LASX(xvmaddwev_w_h, vvv)
1989INSN_LASX(xvmaddwev_d_w, vvv)
1990INSN_LASX(xvmaddwev_q_d, vvv)
1991INSN_LASX(xvmaddwod_h_b, vvv)
1992INSN_LASX(xvmaddwod_w_h, vvv)
1993INSN_LASX(xvmaddwod_d_w, vvv)
1994INSN_LASX(xvmaddwod_q_d, vvv)
1995INSN_LASX(xvmaddwev_h_bu, vvv)
1996INSN_LASX(xvmaddwev_w_hu, vvv)
1997INSN_LASX(xvmaddwev_d_wu, vvv)
1998INSN_LASX(xvmaddwev_q_du, vvv)
1999INSN_LASX(xvmaddwod_h_bu, vvv)
2000INSN_LASX(xvmaddwod_w_hu, vvv)
2001INSN_LASX(xvmaddwod_d_wu, vvv)
2002INSN_LASX(xvmaddwod_q_du, vvv)
2003INSN_LASX(xvmaddwev_h_bu_b, vvv)
2004INSN_LASX(xvmaddwev_w_hu_h, vvv)
2005INSN_LASX(xvmaddwev_d_wu_w, vvv)
2006INSN_LASX(xvmaddwev_q_du_d, vvv)
2007INSN_LASX(xvmaddwod_h_bu_b, vvv)
2008INSN_LASX(xvmaddwod_w_hu_h, vvv)
2009INSN_LASX(xvmaddwod_d_wu_w, vvv)
2010INSN_LASX(xvmaddwod_q_du_d, vvv)
2011
abb693de
SG
2012INSN_LASX(xvdiv_b, vvv)
2013INSN_LASX(xvdiv_h, vvv)
2014INSN_LASX(xvdiv_w, vvv)
2015INSN_LASX(xvdiv_d, vvv)
2016INSN_LASX(xvdiv_bu, vvv)
2017INSN_LASX(xvdiv_hu, vvv)
2018INSN_LASX(xvdiv_wu, vvv)
2019INSN_LASX(xvdiv_du, vvv)
2020INSN_LASX(xvmod_b, vvv)
2021INSN_LASX(xvmod_h, vvv)
2022INSN_LASX(xvmod_w, vvv)
2023INSN_LASX(xvmod_d, vvv)
2024INSN_LASX(xvmod_bu, vvv)
2025INSN_LASX(xvmod_hu, vvv)
2026INSN_LASX(xvmod_wu, vvv)
2027INSN_LASX(xvmod_du, vvv)
2028
e5c7f031
SG
2029INSN_LASX(xvsat_b, vv_i)
2030INSN_LASX(xvsat_h, vv_i)
2031INSN_LASX(xvsat_w, vv_i)
2032INSN_LASX(xvsat_d, vv_i)
2033INSN_LASX(xvsat_bu, vv_i)
2034INSN_LASX(xvsat_hu, vv_i)
2035INSN_LASX(xvsat_wu, vv_i)
2036INSN_LASX(xvsat_du, vv_i)
2037
f0db0beb
SG
2038INSN_LASX(xvexth_h_b, vv)
2039INSN_LASX(xvexth_w_h, vv)
2040INSN_LASX(xvexth_d_w, vv)
2041INSN_LASX(xvexth_q_d, vv)
2042INSN_LASX(xvexth_hu_bu, vv)
2043INSN_LASX(xvexth_wu_hu, vv)
2044INSN_LASX(xvexth_du_wu, vv)
2045INSN_LASX(xvexth_qu_du, vv)
2046
790acb2a
SG
2047INSN_LASX(vext2xv_h_b, vv)
2048INSN_LASX(vext2xv_w_b, vv)
2049INSN_LASX(vext2xv_d_b, vv)
2050INSN_LASX(vext2xv_w_h, vv)
2051INSN_LASX(vext2xv_d_h, vv)
2052INSN_LASX(vext2xv_d_w, vv)
2053INSN_LASX(vext2xv_hu_bu, vv)
2054INSN_LASX(vext2xv_wu_bu, vv)
2055INSN_LASX(vext2xv_du_bu, vv)
2056INSN_LASX(vext2xv_wu_hu, vv)
2057INSN_LASX(vext2xv_du_hu, vv)
2058INSN_LASX(vext2xv_du_wu, vv)
2059
3a275217
SG
2060INSN_LASX(xvsigncov_b, vvv)
2061INSN_LASX(xvsigncov_h, vvv)
2062INSN_LASX(xvsigncov_w, vvv)
2063INSN_LASX(xvsigncov_d, vvv)
2064
97074674
SG
2065INSN_LASX(xvmskltz_b, vv)
2066INSN_LASX(xvmskltz_h, vv)
2067INSN_LASX(xvmskltz_w, vv)
2068INSN_LASX(xvmskltz_d, vv)
2069INSN_LASX(xvmskgez_b, vv)
2070INSN_LASX(xvmsknz_b, vv)
2071
a59098e3
SG
2072INSN_LASX(xvldi, v_i)
2073
4472a45a
SG
2074INSN_LASX(xvand_v, vvv)
2075INSN_LASX(xvor_v, vvv)
2076INSN_LASX(xvxor_v, vvv)
2077INSN_LASX(xvnor_v, vvv)
2078INSN_LASX(xvandn_v, vvv)
2079INSN_LASX(xvorn_v, vvv)
2080
2081INSN_LASX(xvandi_b, vv_i)
2082INSN_LASX(xvori_b, vv_i)
2083INSN_LASX(xvxori_b, vv_i)
2084INSN_LASX(xvnori_b, vv_i)
2085
ad6dc718
SG
2086INSN_LASX(xvsll_b, vvv)
2087INSN_LASX(xvsll_h, vvv)
2088INSN_LASX(xvsll_w, vvv)
2089INSN_LASX(xvsll_d, vvv)
2090INSN_LASX(xvslli_b, vv_i)
2091INSN_LASX(xvslli_h, vv_i)
2092INSN_LASX(xvslli_w, vv_i)
2093INSN_LASX(xvslli_d, vv_i)
2094
2095INSN_LASX(xvsrl_b, vvv)
2096INSN_LASX(xvsrl_h, vvv)
2097INSN_LASX(xvsrl_w, vvv)
2098INSN_LASX(xvsrl_d, vvv)
2099INSN_LASX(xvsrli_b, vv_i)
2100INSN_LASX(xvsrli_h, vv_i)
2101INSN_LASX(xvsrli_w, vv_i)
2102INSN_LASX(xvsrli_d, vv_i)
2103
2104INSN_LASX(xvsra_b, vvv)
2105INSN_LASX(xvsra_h, vvv)
2106INSN_LASX(xvsra_w, vvv)
2107INSN_LASX(xvsra_d, vvv)
2108INSN_LASX(xvsrai_b, vv_i)
2109INSN_LASX(xvsrai_h, vv_i)
2110INSN_LASX(xvsrai_w, vv_i)
2111INSN_LASX(xvsrai_d, vv_i)
2112
2113INSN_LASX(xvrotr_b, vvv)
2114INSN_LASX(xvrotr_h, vvv)
2115INSN_LASX(xvrotr_w, vvv)
2116INSN_LASX(xvrotr_d, vvv)
2117INSN_LASX(xvrotri_b, vv_i)
2118INSN_LASX(xvrotri_h, vv_i)
2119INSN_LASX(xvrotri_w, vv_i)
2120INSN_LASX(xvrotri_d, vv_i)
2121
6567eac7
SG
2122INSN_LASX(xvsllwil_h_b, vv_i)
2123INSN_LASX(xvsllwil_w_h, vv_i)
2124INSN_LASX(xvsllwil_d_w, vv_i)
2125INSN_LASX(xvextl_q_d, vv)
2126INSN_LASX(xvsllwil_hu_bu, vv_i)
2127INSN_LASX(xvsllwil_wu_hu, vv_i)
2128INSN_LASX(xvsllwil_du_wu, vv_i)
2129INSN_LASX(xvextl_qu_du, vv)
2130
8c272fe8
SG
2131INSN_LASX(xvsrlr_b, vvv)
2132INSN_LASX(xvsrlr_h, vvv)
2133INSN_LASX(xvsrlr_w, vvv)
2134INSN_LASX(xvsrlr_d, vvv)
2135INSN_LASX(xvsrlri_b, vv_i)
2136INSN_LASX(xvsrlri_h, vv_i)
2137INSN_LASX(xvsrlri_w, vv_i)
2138INSN_LASX(xvsrlri_d, vv_i)
2139
2140INSN_LASX(xvsrar_b, vvv)
2141INSN_LASX(xvsrar_h, vvv)
2142INSN_LASX(xvsrar_w, vvv)
2143INSN_LASX(xvsrar_d, vvv)
2144INSN_LASX(xvsrari_b, vv_i)
2145INSN_LASX(xvsrari_h, vv_i)
2146INSN_LASX(xvsrari_w, vv_i)
2147INSN_LASX(xvsrari_d, vv_i)
2148
40c7674e
SG
2149INSN_LASX(xvsrln_b_h, vvv)
2150INSN_LASX(xvsrln_h_w, vvv)
2151INSN_LASX(xvsrln_w_d, vvv)
2152INSN_LASX(xvsran_b_h, vvv)
2153INSN_LASX(xvsran_h_w, vvv)
2154INSN_LASX(xvsran_w_d, vvv)
2155
2156INSN_LASX(xvsrlni_b_h, vv_i)
2157INSN_LASX(xvsrlni_h_w, vv_i)
2158INSN_LASX(xvsrlni_w_d, vv_i)
2159INSN_LASX(xvsrlni_d_q, vv_i)
2160INSN_LASX(xvsrani_b_h, vv_i)
2161INSN_LASX(xvsrani_h_w, vv_i)
2162INSN_LASX(xvsrani_w_d, vv_i)
2163INSN_LASX(xvsrani_d_q, vv_i)
2164
c50ce38a
SG
2165INSN_LASX(xvsrlrn_b_h, vvv)
2166INSN_LASX(xvsrlrn_h_w, vvv)
2167INSN_LASX(xvsrlrn_w_d, vvv)
2168INSN_LASX(xvsrarn_b_h, vvv)
2169INSN_LASX(xvsrarn_h_w, vvv)
2170INSN_LASX(xvsrarn_w_d, vvv)
2171
2172INSN_LASX(xvsrlrni_b_h, vv_i)
2173INSN_LASX(xvsrlrni_h_w, vv_i)
2174INSN_LASX(xvsrlrni_w_d, vv_i)
2175INSN_LASX(xvsrlrni_d_q, vv_i)
2176INSN_LASX(xvsrarni_b_h, vv_i)
2177INSN_LASX(xvsrarni_h_w, vv_i)
2178INSN_LASX(xvsrarni_w_d, vv_i)
2179INSN_LASX(xvsrarni_d_q, vv_i)
2180
6256c8ca
SG
2181INSN_LASX(xvssrln_b_h, vvv)
2182INSN_LASX(xvssrln_h_w, vvv)
2183INSN_LASX(xvssrln_w_d, vvv)
2184INSN_LASX(xvssran_b_h, vvv)
2185INSN_LASX(xvssran_h_w, vvv)
2186INSN_LASX(xvssran_w_d, vvv)
2187INSN_LASX(xvssrln_bu_h, vvv)
2188INSN_LASX(xvssrln_hu_w, vvv)
2189INSN_LASX(xvssrln_wu_d, vvv)
2190INSN_LASX(xvssran_bu_h, vvv)
2191INSN_LASX(xvssran_hu_w, vvv)
2192INSN_LASX(xvssran_wu_d, vvv)
2193
2194INSN_LASX(xvssrlni_b_h, vv_i)
2195INSN_LASX(xvssrlni_h_w, vv_i)
2196INSN_LASX(xvssrlni_w_d, vv_i)
2197INSN_LASX(xvssrlni_d_q, vv_i)
2198INSN_LASX(xvssrani_b_h, vv_i)
2199INSN_LASX(xvssrani_h_w, vv_i)
2200INSN_LASX(xvssrani_w_d, vv_i)
2201INSN_LASX(xvssrani_d_q, vv_i)
2202INSN_LASX(xvssrlni_bu_h, vv_i)
2203INSN_LASX(xvssrlni_hu_w, vv_i)
2204INSN_LASX(xvssrlni_wu_d, vv_i)
2205INSN_LASX(xvssrlni_du_q, vv_i)
2206INSN_LASX(xvssrani_bu_h, vv_i)
2207INSN_LASX(xvssrani_hu_w, vv_i)
2208INSN_LASX(xvssrani_wu_d, vv_i)
2209INSN_LASX(xvssrani_du_q, vv_i)
2210
77fca794
SG
2211INSN_LASX(xvssrlrn_b_h, vvv)
2212INSN_LASX(xvssrlrn_h_w, vvv)
2213INSN_LASX(xvssrlrn_w_d, vvv)
2214INSN_LASX(xvssrarn_b_h, vvv)
2215INSN_LASX(xvssrarn_h_w, vvv)
2216INSN_LASX(xvssrarn_w_d, vvv)
2217INSN_LASX(xvssrlrn_bu_h, vvv)
2218INSN_LASX(xvssrlrn_hu_w, vvv)
2219INSN_LASX(xvssrlrn_wu_d, vvv)
2220INSN_LASX(xvssrarn_bu_h, vvv)
2221INSN_LASX(xvssrarn_hu_w, vvv)
2222INSN_LASX(xvssrarn_wu_d, vvv)
2223
2224INSN_LASX(xvssrlrni_b_h, vv_i)
2225INSN_LASX(xvssrlrni_h_w, vv_i)
2226INSN_LASX(xvssrlrni_w_d, vv_i)
2227INSN_LASX(xvssrlrni_d_q, vv_i)
2228INSN_LASX(xvssrlrni_bu_h, vv_i)
2229INSN_LASX(xvssrlrni_hu_w, vv_i)
2230INSN_LASX(xvssrlrni_wu_d, vv_i)
2231INSN_LASX(xvssrlrni_du_q, vv_i)
2232INSN_LASX(xvssrarni_b_h, vv_i)
2233INSN_LASX(xvssrarni_h_w, vv_i)
2234INSN_LASX(xvssrarni_w_d, vv_i)
2235INSN_LASX(xvssrarni_d_q, vv_i)
2236INSN_LASX(xvssrarni_bu_h, vv_i)
2237INSN_LASX(xvssrarni_hu_w, vv_i)
2238INSN_LASX(xvssrarni_wu_d, vv_i)
2239INSN_LASX(xvssrarni_du_q, vv_i)
2240
12ad133f
SG
2241INSN_LASX(xvclo_b, vv)
2242INSN_LASX(xvclo_h, vv)
2243INSN_LASX(xvclo_w, vv)
2244INSN_LASX(xvclo_d, vv)
2245INSN_LASX(xvclz_b, vv)
2246INSN_LASX(xvclz_h, vv)
2247INSN_LASX(xvclz_w, vv)
2248INSN_LASX(xvclz_d, vv)
2249
956dec74
SG
2250INSN_LASX(xvpcnt_b, vv)
2251INSN_LASX(xvpcnt_h, vv)
2252INSN_LASX(xvpcnt_w, vv)
2253INSN_LASX(xvpcnt_d, vv)
2254
1b3e242f
SG
2255INSN_LASX(xvbitclr_b, vvv)
2256INSN_LASX(xvbitclr_h, vvv)
2257INSN_LASX(xvbitclr_w, vvv)
2258INSN_LASX(xvbitclr_d, vvv)
2259INSN_LASX(xvbitclri_b, vv_i)
2260INSN_LASX(xvbitclri_h, vv_i)
2261INSN_LASX(xvbitclri_w, vv_i)
2262INSN_LASX(xvbitclri_d, vv_i)
2263INSN_LASX(xvbitset_b, vvv)
2264INSN_LASX(xvbitset_h, vvv)
2265INSN_LASX(xvbitset_w, vvv)
2266INSN_LASX(xvbitset_d, vvv)
2267INSN_LASX(xvbitseti_b, vv_i)
2268INSN_LASX(xvbitseti_h, vv_i)
2269INSN_LASX(xvbitseti_w, vv_i)
2270INSN_LASX(xvbitseti_d, vv_i)
2271INSN_LASX(xvbitrev_b, vvv)
2272INSN_LASX(xvbitrev_h, vvv)
2273INSN_LASX(xvbitrev_w, vvv)
2274INSN_LASX(xvbitrev_d, vvv)
2275INSN_LASX(xvbitrevi_b, vv_i)
2276INSN_LASX(xvbitrevi_h, vv_i)
2277INSN_LASX(xvbitrevi_w, vv_i)
2278INSN_LASX(xvbitrevi_d, vv_i)
2279
abee168e
SG
2280INSN_LASX(xvfrstp_b, vvv)
2281INSN_LASX(xvfrstp_h, vvv)
2282INSN_LASX(xvfrstpi_b, vv_i)
2283INSN_LASX(xvfrstpi_h, vv_i)
2284
c9caf158
SG
2285INSN_LASX(xvfadd_s, vvv)
2286INSN_LASX(xvfadd_d, vvv)
2287INSN_LASX(xvfsub_s, vvv)
2288INSN_LASX(xvfsub_d, vvv)
2289INSN_LASX(xvfmul_s, vvv)
2290INSN_LASX(xvfmul_d, vvv)
2291INSN_LASX(xvfdiv_s, vvv)
2292INSN_LASX(xvfdiv_d, vvv)
2293
2294INSN_LASX(xvfmadd_s, vvvv)
2295INSN_LASX(xvfmadd_d, vvvv)
2296INSN_LASX(xvfmsub_s, vvvv)
2297INSN_LASX(xvfmsub_d, vvvv)
2298INSN_LASX(xvfnmadd_s, vvvv)
2299INSN_LASX(xvfnmadd_d, vvvv)
2300INSN_LASX(xvfnmsub_s, vvvv)
2301INSN_LASX(xvfnmsub_d, vvvv)
2302
2303INSN_LASX(xvfmax_s, vvv)
2304INSN_LASX(xvfmax_d, vvv)
2305INSN_LASX(xvfmin_s, vvv)
2306INSN_LASX(xvfmin_d, vvv)
2307
2308INSN_LASX(xvfmaxa_s, vvv)
2309INSN_LASX(xvfmaxa_d, vvv)
2310INSN_LASX(xvfmina_s, vvv)
2311INSN_LASX(xvfmina_d, vvv)
2312
2313INSN_LASX(xvflogb_s, vv)
2314INSN_LASX(xvflogb_d, vv)
2315
2316INSN_LASX(xvfclass_s, vv)
2317INSN_LASX(xvfclass_d, vv)
2318
2319INSN_LASX(xvfsqrt_s, vv)
2320INSN_LASX(xvfsqrt_d, vv)
2321INSN_LASX(xvfrecip_s, vv)
2322INSN_LASX(xvfrecip_d, vv)
2323INSN_LASX(xvfrsqrt_s, vv)
2324INSN_LASX(xvfrsqrt_d, vv)
2325
60df31a2
SG
2326INSN_LASX(xvfcvtl_s_h, vv)
2327INSN_LASX(xvfcvth_s_h, vv)
2328INSN_LASX(xvfcvtl_d_s, vv)
2329INSN_LASX(xvfcvth_d_s, vv)
2330INSN_LASX(xvfcvt_h_s, vvv)
2331INSN_LASX(xvfcvt_s_d, vvv)
2332
2333INSN_LASX(xvfrint_s, vv)
2334INSN_LASX(xvfrint_d, vv)
2335INSN_LASX(xvfrintrm_s, vv)
2336INSN_LASX(xvfrintrm_d, vv)
2337INSN_LASX(xvfrintrp_s, vv)
2338INSN_LASX(xvfrintrp_d, vv)
2339INSN_LASX(xvfrintrz_s, vv)
2340INSN_LASX(xvfrintrz_d, vv)
2341INSN_LASX(xvfrintrne_s, vv)
2342INSN_LASX(xvfrintrne_d, vv)
2343
2344INSN_LASX(xvftint_w_s, vv)
2345INSN_LASX(xvftint_l_d, vv)
2346INSN_LASX(xvftintrm_w_s, vv)
2347INSN_LASX(xvftintrm_l_d, vv)
2348INSN_LASX(xvftintrp_w_s, vv)
2349INSN_LASX(xvftintrp_l_d, vv)
2350INSN_LASX(xvftintrz_w_s, vv)
2351INSN_LASX(xvftintrz_l_d, vv)
2352INSN_LASX(xvftintrne_w_s, vv)
2353INSN_LASX(xvftintrne_l_d, vv)
2354INSN_LASX(xvftint_wu_s, vv)
2355INSN_LASX(xvftint_lu_d, vv)
2356INSN_LASX(xvftintrz_wu_s, vv)
2357INSN_LASX(xvftintrz_lu_d, vv)
2358INSN_LASX(xvftint_w_d, vvv)
2359INSN_LASX(xvftintrm_w_d, vvv)
2360INSN_LASX(xvftintrp_w_d, vvv)
2361INSN_LASX(xvftintrz_w_d, vvv)
2362INSN_LASX(xvftintrne_w_d, vvv)
2363INSN_LASX(xvftintl_l_s, vv)
2364INSN_LASX(xvftinth_l_s, vv)
2365INSN_LASX(xvftintrml_l_s, vv)
2366INSN_LASX(xvftintrmh_l_s, vv)
2367INSN_LASX(xvftintrpl_l_s, vv)
2368INSN_LASX(xvftintrph_l_s, vv)
2369INSN_LASX(xvftintrzl_l_s, vv)
2370INSN_LASX(xvftintrzh_l_s, vv)
2371INSN_LASX(xvftintrnel_l_s, vv)
2372INSN_LASX(xvftintrneh_l_s, vv)
2373
2374INSN_LASX(xvffint_s_w, vv)
2375INSN_LASX(xvffint_s_wu, vv)
2376INSN_LASX(xvffint_d_l, vv)
2377INSN_LASX(xvffint_d_lu, vv)
2378INSN_LASX(xvffintl_d_w, vv)
2379INSN_LASX(xvffinth_d_w, vv)
2380INSN_LASX(xvffint_s_l, vvv)
2381
4da72d43
SG
2382INSN_LASX(xvseq_b, vvv)
2383INSN_LASX(xvseq_h, vvv)
2384INSN_LASX(xvseq_w, vvv)
2385INSN_LASX(xvseq_d, vvv)
2386INSN_LASX(xvseqi_b, vv_i)
2387INSN_LASX(xvseqi_h, vv_i)
2388INSN_LASX(xvseqi_w, vv_i)
2389INSN_LASX(xvseqi_d, vv_i)
2390
2391INSN_LASX(xvsle_b, vvv)
2392INSN_LASX(xvsle_h, vvv)
2393INSN_LASX(xvsle_w, vvv)
2394INSN_LASX(xvsle_d, vvv)
2395INSN_LASX(xvslei_b, vv_i)
2396INSN_LASX(xvslei_h, vv_i)
2397INSN_LASX(xvslei_w, vv_i)
2398INSN_LASX(xvslei_d, vv_i)
2399INSN_LASX(xvsle_bu, vvv)
2400INSN_LASX(xvsle_hu, vvv)
2401INSN_LASX(xvsle_wu, vvv)
2402INSN_LASX(xvsle_du, vvv)
2403INSN_LASX(xvslei_bu, vv_i)
2404INSN_LASX(xvslei_hu, vv_i)
2405INSN_LASX(xvslei_wu, vv_i)
2406INSN_LASX(xvslei_du, vv_i)
2407
2408INSN_LASX(xvslt_b, vvv)
2409INSN_LASX(xvslt_h, vvv)
2410INSN_LASX(xvslt_w, vvv)
2411INSN_LASX(xvslt_d, vvv)
2412INSN_LASX(xvslti_b, vv_i)
2413INSN_LASX(xvslti_h, vv_i)
2414INSN_LASX(xvslti_w, vv_i)
2415INSN_LASX(xvslti_d, vv_i)
2416INSN_LASX(xvslt_bu, vvv)
2417INSN_LASX(xvslt_hu, vvv)
2418INSN_LASX(xvslt_wu, vvv)
2419INSN_LASX(xvslt_du, vvv)
2420INSN_LASX(xvslti_bu, vv_i)
2421INSN_LASX(xvslti_hu, vv_i)
2422INSN_LASX(xvslti_wu, vv_i)
2423INSN_LASX(xvslti_du, vv_i)
2424
3eeda5fe
SG
2425#define output_xvfcmp(C, PREFIX, SUFFIX) \
2426{ \
2427 (C)->info->fprintf_func((C)->info->stream, "%08x %s%s\tx%d, x%d, x%d", \
2428 (C)->insn, PREFIX, SUFFIX, a->vd, \
2429 a->vj, a->vk); \
2430}
2431static bool output_xxx_fcond(DisasContext *ctx, arg_vvv_fcond * a,
2432 const char *suffix)
2433{
2434 bool ret = true;
2435 switch (a->fcond) {
2436 case 0x0:
2437 output_xvfcmp(ctx, "xvfcmp_caf_", suffix);
2438 break;
2439 case 0x1:
2440 output_xvfcmp(ctx, "xvfcmp_saf_", suffix);
2441 break;
2442 case 0x2:
2443 output_xvfcmp(ctx, "xvfcmp_clt_", suffix);
2444 break;
2445 case 0x3:
2446 output_xvfcmp(ctx, "xvfcmp_slt_", suffix);
2447 break;
2448 case 0x4:
2449 output_xvfcmp(ctx, "xvfcmp_ceq_", suffix);
2450 break;
2451 case 0x5:
2452 output_xvfcmp(ctx, "xvfcmp_seq_", suffix);
2453 break;
2454 case 0x6:
2455 output_xvfcmp(ctx, "xvfcmp_cle_", suffix);
2456 break;
2457 case 0x7:
2458 output_xvfcmp(ctx, "xvfcmp_sle_", suffix);
2459 break;
2460 case 0x8:
2461 output_xvfcmp(ctx, "xvfcmp_cun_", suffix);
2462 break;
2463 case 0x9:
2464 output_xvfcmp(ctx, "xvfcmp_sun_", suffix);
2465 break;
2466 case 0xA:
2467 output_xvfcmp(ctx, "xvfcmp_cult_", suffix);
2468 break;
2469 case 0xB:
2470 output_xvfcmp(ctx, "xvfcmp_sult_", suffix);
2471 break;
2472 case 0xC:
2473 output_xvfcmp(ctx, "xvfcmp_cueq_", suffix);
2474 break;
2475 case 0xD:
2476 output_xvfcmp(ctx, "xvfcmp_sueq_", suffix);
2477 break;
2478 case 0xE:
2479 output_xvfcmp(ctx, "xvfcmp_cule_", suffix);
2480 break;
2481 case 0xF:
2482 output_xvfcmp(ctx, "xvfcmp_sule_", suffix);
2483 break;
2484 case 0x10:
2485 output_xvfcmp(ctx, "xvfcmp_cne_", suffix);
2486 break;
2487 case 0x11:
2488 output_xvfcmp(ctx, "xvfcmp_sne_", suffix);
2489 break;
2490 case 0x14:
2491 output_xvfcmp(ctx, "xvfcmp_cor_", suffix);
2492 break;
2493 case 0x15:
2494 output_xvfcmp(ctx, "xvfcmp_sor_", suffix);
2495 break;
2496 case 0x18:
2497 output_xvfcmp(ctx, "xvfcmp_cune_", suffix);
2498 break;
2499 case 0x19:
2500 output_xvfcmp(ctx, "xvfcmp_sune_", suffix);
2501 break;
2502 default:
2503 ret = false;
2504 }
2505 return ret;
2506}
2507
2508#define LASX_FCMP_INSN(suffix) \
2509static bool trans_xvfcmp_cond_##suffix(DisasContext *ctx, \
2510 arg_vvv_fcond * a) \
2511{ \
2512 return output_xxx_fcond(ctx, a, #suffix); \
2513}
2514
2515LASX_FCMP_INSN(s)
2516LASX_FCMP_INSN(d)
2517
f3dfcc8b
SG
2518INSN_LASX(xvbitsel_v, vvvv)
2519INSN_LASX(xvbitseli_b, vv_i)
2520
2521INSN_LASX(xvseteqz_v, cv)
2522INSN_LASX(xvsetnez_v, cv)
2523INSN_LASX(xvsetanyeqz_b, cv)
2524INSN_LASX(xvsetanyeqz_h, cv)
2525INSN_LASX(xvsetanyeqz_w, cv)
2526INSN_LASX(xvsetanyeqz_d, cv)
2527INSN_LASX(xvsetallnez_b, cv)
2528INSN_LASX(xvsetallnez_h, cv)
2529INSN_LASX(xvsetallnez_w, cv)
2530INSN_LASX(xvsetallnez_d, cv)
2531
f5ce2c8f
SG
2532INSN_LASX(xvinsgr2vr_w, vr_i)
2533INSN_LASX(xvinsgr2vr_d, vr_i)
2534INSN_LASX(xvpickve2gr_w, rv_i)
2535INSN_LASX(xvpickve2gr_d, rv_i)
2536INSN_LASX(xvpickve2gr_wu, rv_i)
2537INSN_LASX(xvpickve2gr_du, rv_i)
2538
73123406
SG
2539INSN_LASX(xvreplgr2vr_b, vr)
2540INSN_LASX(xvreplgr2vr_h, vr)
2541INSN_LASX(xvreplgr2vr_w, vr)
2542INSN_LASX(xvreplgr2vr_d, vr)
df97f338
SG
2543
2544INSN_LASX(xvreplve_b, vvr)
2545INSN_LASX(xvreplve_h, vvr)
2546INSN_LASX(xvreplve_w, vvr)
2547INSN_LASX(xvreplve_d, vvr)
2548INSN_LASX(xvrepl128vei_b, vv_i)
2549INSN_LASX(xvrepl128vei_h, vv_i)
2550INSN_LASX(xvrepl128vei_w, vv_i)
2551INSN_LASX(xvrepl128vei_d, vv_i)
2552
2553INSN_LASX(xvreplve0_b, vv)
2554INSN_LASX(xvreplve0_h, vv)
2555INSN_LASX(xvreplve0_w, vv)
2556INSN_LASX(xvreplve0_d, vv)
2557INSN_LASX(xvreplve0_q, vv)
2558
2559INSN_LASX(xvinsve0_w, vv_i)
2560INSN_LASX(xvinsve0_d, vv_i)
2561
2562INSN_LASX(xvpickve_w, vv_i)
2563INSN_LASX(xvpickve_d, vv_i)
2564
2565INSN_LASX(xvbsll_v, vv_i)
2566INSN_LASX(xvbsrl_v, vv_i)
ad292148
SG
2567
2568INSN_LASX(xvpackev_b, vvv)
2569INSN_LASX(xvpackev_h, vvv)
2570INSN_LASX(xvpackev_w, vvv)
2571INSN_LASX(xvpackev_d, vvv)
2572INSN_LASX(xvpackod_b, vvv)
2573INSN_LASX(xvpackod_h, vvv)
2574INSN_LASX(xvpackod_w, vvv)
2575INSN_LASX(xvpackod_d, vvv)
2576
2577INSN_LASX(xvpickev_b, vvv)
2578INSN_LASX(xvpickev_h, vvv)
2579INSN_LASX(xvpickev_w, vvv)
2580INSN_LASX(xvpickev_d, vvv)
2581INSN_LASX(xvpickod_b, vvv)
2582INSN_LASX(xvpickod_h, vvv)
2583INSN_LASX(xvpickod_w, vvv)
2584INSN_LASX(xvpickod_d, vvv)
2585
2586INSN_LASX(xvilvl_b, vvv)
2587INSN_LASX(xvilvl_h, vvv)
2588INSN_LASX(xvilvl_w, vvv)
2589INSN_LASX(xvilvl_d, vvv)
2590INSN_LASX(xvilvh_b, vvv)
2591INSN_LASX(xvilvh_h, vvv)
2592INSN_LASX(xvilvh_w, vvv)
2593INSN_LASX(xvilvh_d, vvv)
513e88a2
SG
2594
2595INSN_LASX(xvshuf_b, vvvv)
2596INSN_LASX(xvshuf_h, vvv)
2597INSN_LASX(xvshuf_w, vvv)
2598INSN_LASX(xvshuf_d, vvv)
2599
2600INSN_LASX(xvperm_w, vvv)
2601
2602INSN_LASX(xvshuf4i_b, vv_i)
2603INSN_LASX(xvshuf4i_h, vv_i)
2604INSN_LASX(xvshuf4i_w, vv_i)
2605INSN_LASX(xvshuf4i_d, vv_i)
2606
2607INSN_LASX(xvpermi_w, vv_i)
2608INSN_LASX(xvpermi_d, vv_i)
2609INSN_LASX(xvpermi_q, vv_i)
2610
2611INSN_LASX(xvextrins_d, vv_i)
2612INSN_LASX(xvextrins_w, vv_i)
2613INSN_LASX(xvextrins_h, vv_i)
2614INSN_LASX(xvextrins_b, vv_i)
4a26512f
SG
2615
2616INSN_LASX(xvld, vr_i)
2617INSN_LASX(xvst, vr_i)
2618INSN_LASX(xvldx, vrr)
2619INSN_LASX(xvstx, vrr)
2620
2621INSN_LASX(xvldrepl_d, vr_i)
2622INSN_LASX(xvldrepl_w, vr_i)
2623INSN_LASX(xvldrepl_h, vr_i)
2624INSN_LASX(xvldrepl_b, vr_i)
2625INSN_LASX(xvstelm_d, vr_ii)
2626INSN_LASX(xvstelm_w, vr_ii)
2627INSN_LASX(xvstelm_h, vr_ii)
2628INSN_LASX(xvstelm_b, vr_ii)