xref: /qemu/disas/riscv.c (revision 98624d137321c5cda021437c0f02cdf40ee7f752)
1ea103259SMichael Clark /*
2ea103259SMichael Clark  * QEMU RISC-V Disassembler
3ea103259SMichael Clark  *
4ea103259SMichael Clark  * Copyright (c) 2016-2017 Michael Clark <michaeljclark@mac.com>
5ea103259SMichael Clark  * Copyright (c) 2017-2018 SiFive, Inc.
6ea103259SMichael Clark  *
7ea103259SMichael Clark  * This program is free software; you can redistribute it and/or modify it
8ea103259SMichael Clark  * under the terms and conditions of the GNU General Public License,
9ea103259SMichael Clark  * version 2 or later, as published by the Free Software Foundation.
10ea103259SMichael Clark  *
11ea103259SMichael Clark  * This program is distributed in the hope it will be useful, but WITHOUT
12ea103259SMichael Clark  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13ea103259SMichael Clark  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
14ea103259SMichael Clark  * more details.
15ea103259SMichael Clark  *
16ea103259SMichael Clark  * You should have received a copy of the GNU General Public License along with
17ea103259SMichael Clark  * this program.  If not, see <http://www.gnu.org/licenses/>.
18ea103259SMichael Clark  */
19ea103259SMichael Clark 
20ea103259SMichael Clark #include "qemu/osdep.h"
213979fca4SMarkus Armbruster #include "disas/dis-asm.h"
22454c2201SWeiwei Li #include "target/riscv/cpu_cfg.h"
23ea103259SMichael Clark 
24ea103259SMichael Clark /* types */
25ea103259SMichael Clark 
26ea103259SMichael Clark typedef uint64_t rv_inst;
27ea103259SMichael Clark typedef uint16_t rv_opcode;
28ea103259SMichael Clark 
29ea103259SMichael Clark /* enums */
30ea103259SMichael Clark 
31ea103259SMichael Clark typedef enum {
32ea103259SMichael Clark     rv32,
33ea103259SMichael Clark     rv64,
34ea103259SMichael Clark     rv128
35ea103259SMichael Clark } rv_isa;
36ea103259SMichael Clark 
37ea103259SMichael Clark typedef enum {
38ea103259SMichael Clark     rv_rm_rne = 0,
39ea103259SMichael Clark     rv_rm_rtz = 1,
40ea103259SMichael Clark     rv_rm_rdn = 2,
41ea103259SMichael Clark     rv_rm_rup = 3,
42ea103259SMichael Clark     rv_rm_rmm = 4,
43ea103259SMichael Clark     rv_rm_dyn = 7,
44ea103259SMichael Clark } rv_rm;
45ea103259SMichael Clark 
46ea103259SMichael Clark typedef enum {
47ea103259SMichael Clark     rv_fence_i = 8,
48ea103259SMichael Clark     rv_fence_o = 4,
49ea103259SMichael Clark     rv_fence_r = 2,
50ea103259SMichael Clark     rv_fence_w = 1,
51ea103259SMichael Clark } rv_fence;
52ea103259SMichael Clark 
53ea103259SMichael Clark typedef enum {
54ea103259SMichael Clark     rv_ireg_zero,
55ea103259SMichael Clark     rv_ireg_ra,
56ea103259SMichael Clark     rv_ireg_sp,
57ea103259SMichael Clark     rv_ireg_gp,
58ea103259SMichael Clark     rv_ireg_tp,
59ea103259SMichael Clark     rv_ireg_t0,
60ea103259SMichael Clark     rv_ireg_t1,
61ea103259SMichael Clark     rv_ireg_t2,
62ea103259SMichael Clark     rv_ireg_s0,
63ea103259SMichael Clark     rv_ireg_s1,
64ea103259SMichael Clark     rv_ireg_a0,
65ea103259SMichael Clark     rv_ireg_a1,
66ea103259SMichael Clark     rv_ireg_a2,
67ea103259SMichael Clark     rv_ireg_a3,
68ea103259SMichael Clark     rv_ireg_a4,
69ea103259SMichael Clark     rv_ireg_a5,
70ea103259SMichael Clark     rv_ireg_a6,
71ea103259SMichael Clark     rv_ireg_a7,
72ea103259SMichael Clark     rv_ireg_s2,
73ea103259SMichael Clark     rv_ireg_s3,
74ea103259SMichael Clark     rv_ireg_s4,
75ea103259SMichael Clark     rv_ireg_s5,
76ea103259SMichael Clark     rv_ireg_s6,
77ea103259SMichael Clark     rv_ireg_s7,
78ea103259SMichael Clark     rv_ireg_s8,
79ea103259SMichael Clark     rv_ireg_s9,
80ea103259SMichael Clark     rv_ireg_s10,
81ea103259SMichael Clark     rv_ireg_s11,
82ea103259SMichael Clark     rv_ireg_t3,
83ea103259SMichael Clark     rv_ireg_t4,
84ea103259SMichael Clark     rv_ireg_t5,
85ea103259SMichael Clark     rv_ireg_t6,
86ea103259SMichael Clark } rv_ireg;
87ea103259SMichael Clark 
88ea103259SMichael Clark typedef enum {
89ea103259SMichael Clark     rvc_end,
90ea103259SMichael Clark     rvc_rd_eq_ra,
91ea103259SMichael Clark     rvc_rd_eq_x0,
92ea103259SMichael Clark     rvc_rs1_eq_x0,
93ea103259SMichael Clark     rvc_rs2_eq_x0,
94ea103259SMichael Clark     rvc_rs2_eq_rs1,
95ea103259SMichael Clark     rvc_rs1_eq_ra,
96ea103259SMichael Clark     rvc_imm_eq_zero,
97ea103259SMichael Clark     rvc_imm_eq_n1,
98ea103259SMichael Clark     rvc_imm_eq_p1,
99ea103259SMichael Clark     rvc_csr_eq_0x001,
100ea103259SMichael Clark     rvc_csr_eq_0x002,
101ea103259SMichael Clark     rvc_csr_eq_0x003,
102ea103259SMichael Clark     rvc_csr_eq_0xc00,
103ea103259SMichael Clark     rvc_csr_eq_0xc01,
104ea103259SMichael Clark     rvc_csr_eq_0xc02,
105ea103259SMichael Clark     rvc_csr_eq_0xc80,
106ea103259SMichael Clark     rvc_csr_eq_0xc81,
107ea103259SMichael Clark     rvc_csr_eq_0xc82,
108ea103259SMichael Clark } rvc_constraint;
109ea103259SMichael Clark 
110ea103259SMichael Clark typedef enum {
111ea103259SMichael Clark     rv_codec_illegal,
112ea103259SMichael Clark     rv_codec_none,
113ea103259SMichael Clark     rv_codec_u,
114ea103259SMichael Clark     rv_codec_uj,
115ea103259SMichael Clark     rv_codec_i,
116ea103259SMichael Clark     rv_codec_i_sh5,
117ea103259SMichael Clark     rv_codec_i_sh6,
118ea103259SMichael Clark     rv_codec_i_sh7,
119ea103259SMichael Clark     rv_codec_i_csr,
120ea103259SMichael Clark     rv_codec_s,
121ea103259SMichael Clark     rv_codec_sb,
122ea103259SMichael Clark     rv_codec_r,
123ea103259SMichael Clark     rv_codec_r_m,
124ea103259SMichael Clark     rv_codec_r4_m,
125ea103259SMichael Clark     rv_codec_r_a,
126ea103259SMichael Clark     rv_codec_r_l,
127ea103259SMichael Clark     rv_codec_r_f,
128ea103259SMichael Clark     rv_codec_cb,
129ea103259SMichael Clark     rv_codec_cb_imm,
130ea103259SMichael Clark     rv_codec_cb_sh5,
131ea103259SMichael Clark     rv_codec_cb_sh6,
132ea103259SMichael Clark     rv_codec_ci,
133ea103259SMichael Clark     rv_codec_ci_sh5,
134ea103259SMichael Clark     rv_codec_ci_sh6,
135ea103259SMichael Clark     rv_codec_ci_16sp,
136ea103259SMichael Clark     rv_codec_ci_lwsp,
137ea103259SMichael Clark     rv_codec_ci_ldsp,
138ea103259SMichael Clark     rv_codec_ci_lqsp,
139ea103259SMichael Clark     rv_codec_ci_li,
140ea103259SMichael Clark     rv_codec_ci_lui,
141ea103259SMichael Clark     rv_codec_ci_none,
142ea103259SMichael Clark     rv_codec_ciw_4spn,
143ea103259SMichael Clark     rv_codec_cj,
144ea103259SMichael Clark     rv_codec_cj_jal,
145ea103259SMichael Clark     rv_codec_cl_lw,
146ea103259SMichael Clark     rv_codec_cl_ld,
147ea103259SMichael Clark     rv_codec_cl_lq,
148ea103259SMichael Clark     rv_codec_cr,
149ea103259SMichael Clark     rv_codec_cr_mv,
150ea103259SMichael Clark     rv_codec_cr_jalr,
151ea103259SMichael Clark     rv_codec_cr_jr,
152ea103259SMichael Clark     rv_codec_cs,
153ea103259SMichael Clark     rv_codec_cs_sw,
154ea103259SMichael Clark     rv_codec_cs_sd,
155ea103259SMichael Clark     rv_codec_cs_sq,
156ea103259SMichael Clark     rv_codec_css_swsp,
157ea103259SMichael Clark     rv_codec_css_sdsp,
158ea103259SMichael Clark     rv_codec_css_sqsp,
1595748c886SWeiwei Li     rv_codec_k_bs,
1605748c886SWeiwei Li     rv_codec_k_rnum,
16107f4964dSYang Liu     rv_codec_v_r,
16207f4964dSYang Liu     rv_codec_v_ldst,
16307f4964dSYang Liu     rv_codec_v_i,
16407f4964dSYang Liu     rv_codec_vsetvli,
16507f4964dSYang Liu     rv_codec_vsetivli,
1662c71d02eSWeiwei Li     rv_codec_zcb_ext,
1672c71d02eSWeiwei Li     rv_codec_zcb_mul,
1682c71d02eSWeiwei Li     rv_codec_zcb_lb,
1692c71d02eSWeiwei Li     rv_codec_zcb_lh,
1702c71d02eSWeiwei Li     rv_codec_zcmp_cm_pushpop,
1712c71d02eSWeiwei Li     rv_codec_zcmp_cm_mv,
1722c71d02eSWeiwei Li     rv_codec_zcmt_jt,
173ea103259SMichael Clark } rv_codec;
174ea103259SMichael Clark 
175ea103259SMichael Clark typedef enum {
176ea103259SMichael Clark     rv_op_illegal = 0,
177ea103259SMichael Clark     rv_op_lui = 1,
178ea103259SMichael Clark     rv_op_auipc = 2,
179ea103259SMichael Clark     rv_op_jal = 3,
180ea103259SMichael Clark     rv_op_jalr = 4,
181ea103259SMichael Clark     rv_op_beq = 5,
182ea103259SMichael Clark     rv_op_bne = 6,
183ea103259SMichael Clark     rv_op_blt = 7,
184ea103259SMichael Clark     rv_op_bge = 8,
185ea103259SMichael Clark     rv_op_bltu = 9,
186ea103259SMichael Clark     rv_op_bgeu = 10,
187ea103259SMichael Clark     rv_op_lb = 11,
188ea103259SMichael Clark     rv_op_lh = 12,
189ea103259SMichael Clark     rv_op_lw = 13,
190ea103259SMichael Clark     rv_op_lbu = 14,
191ea103259SMichael Clark     rv_op_lhu = 15,
192ea103259SMichael Clark     rv_op_sb = 16,
193ea103259SMichael Clark     rv_op_sh = 17,
194ea103259SMichael Clark     rv_op_sw = 18,
195ea103259SMichael Clark     rv_op_addi = 19,
196ea103259SMichael Clark     rv_op_slti = 20,
197ea103259SMichael Clark     rv_op_sltiu = 21,
198ea103259SMichael Clark     rv_op_xori = 22,
199ea103259SMichael Clark     rv_op_ori = 23,
200ea103259SMichael Clark     rv_op_andi = 24,
201ea103259SMichael Clark     rv_op_slli = 25,
202ea103259SMichael Clark     rv_op_srli = 26,
203ea103259SMichael Clark     rv_op_srai = 27,
204ea103259SMichael Clark     rv_op_add = 28,
205ea103259SMichael Clark     rv_op_sub = 29,
206ea103259SMichael Clark     rv_op_sll = 30,
207ea103259SMichael Clark     rv_op_slt = 31,
208ea103259SMichael Clark     rv_op_sltu = 32,
209ea103259SMichael Clark     rv_op_xor = 33,
210ea103259SMichael Clark     rv_op_srl = 34,
211ea103259SMichael Clark     rv_op_sra = 35,
212ea103259SMichael Clark     rv_op_or = 36,
213ea103259SMichael Clark     rv_op_and = 37,
214ea103259SMichael Clark     rv_op_fence = 38,
215ea103259SMichael Clark     rv_op_fence_i = 39,
216ea103259SMichael Clark     rv_op_lwu = 40,
217ea103259SMichael Clark     rv_op_ld = 41,
218ea103259SMichael Clark     rv_op_sd = 42,
219ea103259SMichael Clark     rv_op_addiw = 43,
220ea103259SMichael Clark     rv_op_slliw = 44,
221ea103259SMichael Clark     rv_op_srliw = 45,
222ea103259SMichael Clark     rv_op_sraiw = 46,
223ea103259SMichael Clark     rv_op_addw = 47,
224ea103259SMichael Clark     rv_op_subw = 48,
225ea103259SMichael Clark     rv_op_sllw = 49,
226ea103259SMichael Clark     rv_op_srlw = 50,
227ea103259SMichael Clark     rv_op_sraw = 51,
228ea103259SMichael Clark     rv_op_ldu = 52,
229ea103259SMichael Clark     rv_op_lq = 53,
230ea103259SMichael Clark     rv_op_sq = 54,
231ea103259SMichael Clark     rv_op_addid = 55,
232ea103259SMichael Clark     rv_op_sllid = 56,
233ea103259SMichael Clark     rv_op_srlid = 57,
234ea103259SMichael Clark     rv_op_sraid = 58,
235ea103259SMichael Clark     rv_op_addd = 59,
236ea103259SMichael Clark     rv_op_subd = 60,
237ea103259SMichael Clark     rv_op_slld = 61,
238ea103259SMichael Clark     rv_op_srld = 62,
239ea103259SMichael Clark     rv_op_srad = 63,
240ea103259SMichael Clark     rv_op_mul = 64,
241ea103259SMichael Clark     rv_op_mulh = 65,
242ea103259SMichael Clark     rv_op_mulhsu = 66,
243ea103259SMichael Clark     rv_op_mulhu = 67,
244ea103259SMichael Clark     rv_op_div = 68,
245ea103259SMichael Clark     rv_op_divu = 69,
246ea103259SMichael Clark     rv_op_rem = 70,
247ea103259SMichael Clark     rv_op_remu = 71,
248ea103259SMichael Clark     rv_op_mulw = 72,
249ea103259SMichael Clark     rv_op_divw = 73,
250ea103259SMichael Clark     rv_op_divuw = 74,
251ea103259SMichael Clark     rv_op_remw = 75,
252ea103259SMichael Clark     rv_op_remuw = 76,
253ea103259SMichael Clark     rv_op_muld = 77,
254ea103259SMichael Clark     rv_op_divd = 78,
255ea103259SMichael Clark     rv_op_divud = 79,
256ea103259SMichael Clark     rv_op_remd = 80,
257ea103259SMichael Clark     rv_op_remud = 81,
258ea103259SMichael Clark     rv_op_lr_w = 82,
259ea103259SMichael Clark     rv_op_sc_w = 83,
260ea103259SMichael Clark     rv_op_amoswap_w = 84,
261ea103259SMichael Clark     rv_op_amoadd_w = 85,
262ea103259SMichael Clark     rv_op_amoxor_w = 86,
263ea103259SMichael Clark     rv_op_amoor_w = 87,
264ea103259SMichael Clark     rv_op_amoand_w = 88,
265ea103259SMichael Clark     rv_op_amomin_w = 89,
266ea103259SMichael Clark     rv_op_amomax_w = 90,
267ea103259SMichael Clark     rv_op_amominu_w = 91,
268ea103259SMichael Clark     rv_op_amomaxu_w = 92,
269ea103259SMichael Clark     rv_op_lr_d = 93,
270ea103259SMichael Clark     rv_op_sc_d = 94,
271ea103259SMichael Clark     rv_op_amoswap_d = 95,
272ea103259SMichael Clark     rv_op_amoadd_d = 96,
273ea103259SMichael Clark     rv_op_amoxor_d = 97,
274ea103259SMichael Clark     rv_op_amoor_d = 98,
275ea103259SMichael Clark     rv_op_amoand_d = 99,
276ea103259SMichael Clark     rv_op_amomin_d = 100,
277ea103259SMichael Clark     rv_op_amomax_d = 101,
278ea103259SMichael Clark     rv_op_amominu_d = 102,
279ea103259SMichael Clark     rv_op_amomaxu_d = 103,
280ea103259SMichael Clark     rv_op_lr_q = 104,
281ea103259SMichael Clark     rv_op_sc_q = 105,
282ea103259SMichael Clark     rv_op_amoswap_q = 106,
283ea103259SMichael Clark     rv_op_amoadd_q = 107,
284ea103259SMichael Clark     rv_op_amoxor_q = 108,
285ea103259SMichael Clark     rv_op_amoor_q = 109,
286ea103259SMichael Clark     rv_op_amoand_q = 110,
287ea103259SMichael Clark     rv_op_amomin_q = 111,
288ea103259SMichael Clark     rv_op_amomax_q = 112,
289ea103259SMichael Clark     rv_op_amominu_q = 113,
290ea103259SMichael Clark     rv_op_amomaxu_q = 114,
291ea103259SMichael Clark     rv_op_ecall = 115,
292ea103259SMichael Clark     rv_op_ebreak = 116,
293ea103259SMichael Clark     rv_op_uret = 117,
294ea103259SMichael Clark     rv_op_sret = 118,
295ea103259SMichael Clark     rv_op_hret = 119,
296ea103259SMichael Clark     rv_op_mret = 120,
297ea103259SMichael Clark     rv_op_dret = 121,
298ea103259SMichael Clark     rv_op_sfence_vm = 122,
299ea103259SMichael Clark     rv_op_sfence_vma = 123,
300ea103259SMichael Clark     rv_op_wfi = 124,
301ea103259SMichael Clark     rv_op_csrrw = 125,
302ea103259SMichael Clark     rv_op_csrrs = 126,
303ea103259SMichael Clark     rv_op_csrrc = 127,
304ea103259SMichael Clark     rv_op_csrrwi = 128,
305ea103259SMichael Clark     rv_op_csrrsi = 129,
306ea103259SMichael Clark     rv_op_csrrci = 130,
307ea103259SMichael Clark     rv_op_flw = 131,
308ea103259SMichael Clark     rv_op_fsw = 132,
309ea103259SMichael Clark     rv_op_fmadd_s = 133,
310ea103259SMichael Clark     rv_op_fmsub_s = 134,
311ea103259SMichael Clark     rv_op_fnmsub_s = 135,
312ea103259SMichael Clark     rv_op_fnmadd_s = 136,
313ea103259SMichael Clark     rv_op_fadd_s = 137,
314ea103259SMichael Clark     rv_op_fsub_s = 138,
315ea103259SMichael Clark     rv_op_fmul_s = 139,
316ea103259SMichael Clark     rv_op_fdiv_s = 140,
317ea103259SMichael Clark     rv_op_fsgnj_s = 141,
318ea103259SMichael Clark     rv_op_fsgnjn_s = 142,
319ea103259SMichael Clark     rv_op_fsgnjx_s = 143,
320ea103259SMichael Clark     rv_op_fmin_s = 144,
321ea103259SMichael Clark     rv_op_fmax_s = 145,
322ea103259SMichael Clark     rv_op_fsqrt_s = 146,
323ea103259SMichael Clark     rv_op_fle_s = 147,
324ea103259SMichael Clark     rv_op_flt_s = 148,
325ea103259SMichael Clark     rv_op_feq_s = 149,
326ea103259SMichael Clark     rv_op_fcvt_w_s = 150,
327ea103259SMichael Clark     rv_op_fcvt_wu_s = 151,
328ea103259SMichael Clark     rv_op_fcvt_s_w = 152,
329ea103259SMichael Clark     rv_op_fcvt_s_wu = 153,
330ea103259SMichael Clark     rv_op_fmv_x_s = 154,
331ea103259SMichael Clark     rv_op_fclass_s = 155,
332ea103259SMichael Clark     rv_op_fmv_s_x = 156,
333ea103259SMichael Clark     rv_op_fcvt_l_s = 157,
334ea103259SMichael Clark     rv_op_fcvt_lu_s = 158,
335ea103259SMichael Clark     rv_op_fcvt_s_l = 159,
336ea103259SMichael Clark     rv_op_fcvt_s_lu = 160,
337ea103259SMichael Clark     rv_op_fld = 161,
338ea103259SMichael Clark     rv_op_fsd = 162,
339ea103259SMichael Clark     rv_op_fmadd_d = 163,
340ea103259SMichael Clark     rv_op_fmsub_d = 164,
341ea103259SMichael Clark     rv_op_fnmsub_d = 165,
342ea103259SMichael Clark     rv_op_fnmadd_d = 166,
343ea103259SMichael Clark     rv_op_fadd_d = 167,
344ea103259SMichael Clark     rv_op_fsub_d = 168,
345ea103259SMichael Clark     rv_op_fmul_d = 169,
346ea103259SMichael Clark     rv_op_fdiv_d = 170,
347ea103259SMichael Clark     rv_op_fsgnj_d = 171,
348ea103259SMichael Clark     rv_op_fsgnjn_d = 172,
349ea103259SMichael Clark     rv_op_fsgnjx_d = 173,
350ea103259SMichael Clark     rv_op_fmin_d = 174,
351ea103259SMichael Clark     rv_op_fmax_d = 175,
352ea103259SMichael Clark     rv_op_fcvt_s_d = 176,
353ea103259SMichael Clark     rv_op_fcvt_d_s = 177,
354ea103259SMichael Clark     rv_op_fsqrt_d = 178,
355ea103259SMichael Clark     rv_op_fle_d = 179,
356ea103259SMichael Clark     rv_op_flt_d = 180,
357ea103259SMichael Clark     rv_op_feq_d = 181,
358ea103259SMichael Clark     rv_op_fcvt_w_d = 182,
359ea103259SMichael Clark     rv_op_fcvt_wu_d = 183,
360ea103259SMichael Clark     rv_op_fcvt_d_w = 184,
361ea103259SMichael Clark     rv_op_fcvt_d_wu = 185,
362ea103259SMichael Clark     rv_op_fclass_d = 186,
363ea103259SMichael Clark     rv_op_fcvt_l_d = 187,
364ea103259SMichael Clark     rv_op_fcvt_lu_d = 188,
365ea103259SMichael Clark     rv_op_fmv_x_d = 189,
366ea103259SMichael Clark     rv_op_fcvt_d_l = 190,
367ea103259SMichael Clark     rv_op_fcvt_d_lu = 191,
368ea103259SMichael Clark     rv_op_fmv_d_x = 192,
369ea103259SMichael Clark     rv_op_flq = 193,
370ea103259SMichael Clark     rv_op_fsq = 194,
371ea103259SMichael Clark     rv_op_fmadd_q = 195,
372ea103259SMichael Clark     rv_op_fmsub_q = 196,
373ea103259SMichael Clark     rv_op_fnmsub_q = 197,
374ea103259SMichael Clark     rv_op_fnmadd_q = 198,
375ea103259SMichael Clark     rv_op_fadd_q = 199,
376ea103259SMichael Clark     rv_op_fsub_q = 200,
377ea103259SMichael Clark     rv_op_fmul_q = 201,
378ea103259SMichael Clark     rv_op_fdiv_q = 202,
379ea103259SMichael Clark     rv_op_fsgnj_q = 203,
380ea103259SMichael Clark     rv_op_fsgnjn_q = 204,
381ea103259SMichael Clark     rv_op_fsgnjx_q = 205,
382ea103259SMichael Clark     rv_op_fmin_q = 206,
383ea103259SMichael Clark     rv_op_fmax_q = 207,
384ea103259SMichael Clark     rv_op_fcvt_s_q = 208,
385ea103259SMichael Clark     rv_op_fcvt_q_s = 209,
386ea103259SMichael Clark     rv_op_fcvt_d_q = 210,
387ea103259SMichael Clark     rv_op_fcvt_q_d = 211,
388ea103259SMichael Clark     rv_op_fsqrt_q = 212,
389ea103259SMichael Clark     rv_op_fle_q = 213,
390ea103259SMichael Clark     rv_op_flt_q = 214,
391ea103259SMichael Clark     rv_op_feq_q = 215,
392ea103259SMichael Clark     rv_op_fcvt_w_q = 216,
393ea103259SMichael Clark     rv_op_fcvt_wu_q = 217,
394ea103259SMichael Clark     rv_op_fcvt_q_w = 218,
395ea103259SMichael Clark     rv_op_fcvt_q_wu = 219,
396ea103259SMichael Clark     rv_op_fclass_q = 220,
397ea103259SMichael Clark     rv_op_fcvt_l_q = 221,
398ea103259SMichael Clark     rv_op_fcvt_lu_q = 222,
399ea103259SMichael Clark     rv_op_fcvt_q_l = 223,
400ea103259SMichael Clark     rv_op_fcvt_q_lu = 224,
401ea103259SMichael Clark     rv_op_fmv_x_q = 225,
402ea103259SMichael Clark     rv_op_fmv_q_x = 226,
403ea103259SMichael Clark     rv_op_c_addi4spn = 227,
404ea103259SMichael Clark     rv_op_c_fld = 228,
405ea103259SMichael Clark     rv_op_c_lw = 229,
406ea103259SMichael Clark     rv_op_c_flw = 230,
407ea103259SMichael Clark     rv_op_c_fsd = 231,
408ea103259SMichael Clark     rv_op_c_sw = 232,
409ea103259SMichael Clark     rv_op_c_fsw = 233,
410ea103259SMichael Clark     rv_op_c_nop = 234,
411ea103259SMichael Clark     rv_op_c_addi = 235,
412ea103259SMichael Clark     rv_op_c_jal = 236,
413ea103259SMichael Clark     rv_op_c_li = 237,
414ea103259SMichael Clark     rv_op_c_addi16sp = 238,
415ea103259SMichael Clark     rv_op_c_lui = 239,
416ea103259SMichael Clark     rv_op_c_srli = 240,
417ea103259SMichael Clark     rv_op_c_srai = 241,
418ea103259SMichael Clark     rv_op_c_andi = 242,
419ea103259SMichael Clark     rv_op_c_sub = 243,
420ea103259SMichael Clark     rv_op_c_xor = 244,
421ea103259SMichael Clark     rv_op_c_or = 245,
422ea103259SMichael Clark     rv_op_c_and = 246,
423ea103259SMichael Clark     rv_op_c_subw = 247,
424ea103259SMichael Clark     rv_op_c_addw = 248,
425ea103259SMichael Clark     rv_op_c_j = 249,
426ea103259SMichael Clark     rv_op_c_beqz = 250,
427ea103259SMichael Clark     rv_op_c_bnez = 251,
428ea103259SMichael Clark     rv_op_c_slli = 252,
429ea103259SMichael Clark     rv_op_c_fldsp = 253,
430ea103259SMichael Clark     rv_op_c_lwsp = 254,
431ea103259SMichael Clark     rv_op_c_flwsp = 255,
432ea103259SMichael Clark     rv_op_c_jr = 256,
433ea103259SMichael Clark     rv_op_c_mv = 257,
434ea103259SMichael Clark     rv_op_c_ebreak = 258,
435ea103259SMichael Clark     rv_op_c_jalr = 259,
436ea103259SMichael Clark     rv_op_c_add = 260,
437ea103259SMichael Clark     rv_op_c_fsdsp = 261,
438ea103259SMichael Clark     rv_op_c_swsp = 262,
439ea103259SMichael Clark     rv_op_c_fswsp = 263,
440ea103259SMichael Clark     rv_op_c_ld = 264,
441ea103259SMichael Clark     rv_op_c_sd = 265,
442ea103259SMichael Clark     rv_op_c_addiw = 266,
443ea103259SMichael Clark     rv_op_c_ldsp = 267,
444ea103259SMichael Clark     rv_op_c_sdsp = 268,
445ea103259SMichael Clark     rv_op_c_lq = 269,
446ea103259SMichael Clark     rv_op_c_sq = 270,
447ea103259SMichael Clark     rv_op_c_lqsp = 271,
448ea103259SMichael Clark     rv_op_c_sqsp = 272,
449ea103259SMichael Clark     rv_op_nop = 273,
450ea103259SMichael Clark     rv_op_mv = 274,
451ea103259SMichael Clark     rv_op_not = 275,
452ea103259SMichael Clark     rv_op_neg = 276,
453ea103259SMichael Clark     rv_op_negw = 277,
454ea103259SMichael Clark     rv_op_sext_w = 278,
455ea103259SMichael Clark     rv_op_seqz = 279,
456ea103259SMichael Clark     rv_op_snez = 280,
457ea103259SMichael Clark     rv_op_sltz = 281,
458ea103259SMichael Clark     rv_op_sgtz = 282,
459ea103259SMichael Clark     rv_op_fmv_s = 283,
460ea103259SMichael Clark     rv_op_fabs_s = 284,
461ea103259SMichael Clark     rv_op_fneg_s = 285,
462ea103259SMichael Clark     rv_op_fmv_d = 286,
463ea103259SMichael Clark     rv_op_fabs_d = 287,
464ea103259SMichael Clark     rv_op_fneg_d = 288,
465ea103259SMichael Clark     rv_op_fmv_q = 289,
466ea103259SMichael Clark     rv_op_fabs_q = 290,
467ea103259SMichael Clark     rv_op_fneg_q = 291,
468ea103259SMichael Clark     rv_op_beqz = 292,
469ea103259SMichael Clark     rv_op_bnez = 293,
470ea103259SMichael Clark     rv_op_blez = 294,
471ea103259SMichael Clark     rv_op_bgez = 295,
472ea103259SMichael Clark     rv_op_bltz = 296,
473ea103259SMichael Clark     rv_op_bgtz = 297,
474ea103259SMichael Clark     rv_op_ble = 298,
475ea103259SMichael Clark     rv_op_bleu = 299,
476ea103259SMichael Clark     rv_op_bgt = 300,
477ea103259SMichael Clark     rv_op_bgtu = 301,
478ea103259SMichael Clark     rv_op_j = 302,
479ea103259SMichael Clark     rv_op_ret = 303,
480ea103259SMichael Clark     rv_op_jr = 304,
481ea103259SMichael Clark     rv_op_rdcycle = 305,
482ea103259SMichael Clark     rv_op_rdtime = 306,
483ea103259SMichael Clark     rv_op_rdinstret = 307,
484ea103259SMichael Clark     rv_op_rdcycleh = 308,
485ea103259SMichael Clark     rv_op_rdtimeh = 309,
486ea103259SMichael Clark     rv_op_rdinstreth = 310,
487ea103259SMichael Clark     rv_op_frcsr = 311,
488ea103259SMichael Clark     rv_op_frrm = 312,
489ea103259SMichael Clark     rv_op_frflags = 313,
490ea103259SMichael Clark     rv_op_fscsr = 314,
491ea103259SMichael Clark     rv_op_fsrm = 315,
492ea103259SMichael Clark     rv_op_fsflags = 316,
493ea103259SMichael Clark     rv_op_fsrmi = 317,
494ea103259SMichael Clark     rv_op_fsflagsi = 318,
49502c1b569SPhilipp Tomsich     rv_op_bseti = 319,
49602c1b569SPhilipp Tomsich     rv_op_bclri = 320,
49702c1b569SPhilipp Tomsich     rv_op_binvi = 321,
49802c1b569SPhilipp Tomsich     rv_op_bexti = 322,
49902c1b569SPhilipp Tomsich     rv_op_rori = 323,
50002c1b569SPhilipp Tomsich     rv_op_clz = 324,
50102c1b569SPhilipp Tomsich     rv_op_ctz = 325,
50202c1b569SPhilipp Tomsich     rv_op_cpop = 326,
50302c1b569SPhilipp Tomsich     rv_op_sext_h = 327,
50402c1b569SPhilipp Tomsich     rv_op_sext_b = 328,
50502c1b569SPhilipp Tomsich     rv_op_xnor = 329,
50602c1b569SPhilipp Tomsich     rv_op_orn = 330,
50702c1b569SPhilipp Tomsich     rv_op_andn = 331,
50802c1b569SPhilipp Tomsich     rv_op_rol = 332,
50902c1b569SPhilipp Tomsich     rv_op_ror = 333,
51002c1b569SPhilipp Tomsich     rv_op_sh1add = 334,
51102c1b569SPhilipp Tomsich     rv_op_sh2add = 335,
51202c1b569SPhilipp Tomsich     rv_op_sh3add = 336,
51302c1b569SPhilipp Tomsich     rv_op_sh1add_uw = 337,
51402c1b569SPhilipp Tomsich     rv_op_sh2add_uw = 338,
51502c1b569SPhilipp Tomsich     rv_op_sh3add_uw = 339,
51602c1b569SPhilipp Tomsich     rv_op_clmul = 340,
51702c1b569SPhilipp Tomsich     rv_op_clmulr = 341,
51802c1b569SPhilipp Tomsich     rv_op_clmulh = 342,
51902c1b569SPhilipp Tomsich     rv_op_min = 343,
52002c1b569SPhilipp Tomsich     rv_op_minu = 344,
52102c1b569SPhilipp Tomsich     rv_op_max = 345,
52202c1b569SPhilipp Tomsich     rv_op_maxu = 346,
52302c1b569SPhilipp Tomsich     rv_op_clzw = 347,
52402c1b569SPhilipp Tomsich     rv_op_ctzw = 348,
52502c1b569SPhilipp Tomsich     rv_op_cpopw = 349,
52602c1b569SPhilipp Tomsich     rv_op_slli_uw = 350,
52702c1b569SPhilipp Tomsich     rv_op_add_uw = 351,
52802c1b569SPhilipp Tomsich     rv_op_rolw = 352,
52902c1b569SPhilipp Tomsich     rv_op_rorw = 353,
53002c1b569SPhilipp Tomsich     rv_op_rev8 = 354,
53102c1b569SPhilipp Tomsich     rv_op_zext_h = 355,
53202c1b569SPhilipp Tomsich     rv_op_roriw = 356,
53302c1b569SPhilipp Tomsich     rv_op_orc_b = 357,
53402c1b569SPhilipp Tomsich     rv_op_bset = 358,
53502c1b569SPhilipp Tomsich     rv_op_bclr = 359,
53602c1b569SPhilipp Tomsich     rv_op_binv = 360,
53702c1b569SPhilipp Tomsich     rv_op_bext = 361,
5385748c886SWeiwei Li     rv_op_aes32esmi = 362,
5395748c886SWeiwei Li     rv_op_aes32esi = 363,
5405748c886SWeiwei Li     rv_op_aes32dsmi = 364,
5415748c886SWeiwei Li     rv_op_aes32dsi = 365,
5425748c886SWeiwei Li     rv_op_aes64ks1i = 366,
5435748c886SWeiwei Li     rv_op_aes64ks2 = 367,
5445748c886SWeiwei Li     rv_op_aes64im = 368,
5455748c886SWeiwei Li     rv_op_aes64esm = 369,
5465748c886SWeiwei Li     rv_op_aes64es = 370,
5475748c886SWeiwei Li     rv_op_aes64dsm = 371,
5485748c886SWeiwei Li     rv_op_aes64ds = 372,
5495748c886SWeiwei Li     rv_op_sha256sig0 = 373,
5505748c886SWeiwei Li     rv_op_sha256sig1 = 374,
5515748c886SWeiwei Li     rv_op_sha256sum0 = 375,
5525748c886SWeiwei Li     rv_op_sha256sum1 = 376,
5535748c886SWeiwei Li     rv_op_sha512sig0 = 377,
5545748c886SWeiwei Li     rv_op_sha512sig1 = 378,
5555748c886SWeiwei Li     rv_op_sha512sum0 = 379,
5565748c886SWeiwei Li     rv_op_sha512sum1 = 380,
5575748c886SWeiwei Li     rv_op_sha512sum0r = 381,
5585748c886SWeiwei Li     rv_op_sha512sum1r = 382,
5595748c886SWeiwei Li     rv_op_sha512sig0l = 383,
5605748c886SWeiwei Li     rv_op_sha512sig0h = 384,
5615748c886SWeiwei Li     rv_op_sha512sig1l = 385,
5625748c886SWeiwei Li     rv_op_sha512sig1h = 386,
5635748c886SWeiwei Li     rv_op_sm3p0 = 387,
5645748c886SWeiwei Li     rv_op_sm3p1 = 388,
5655748c886SWeiwei Li     rv_op_sm4ed = 389,
5665748c886SWeiwei Li     rv_op_sm4ks = 390,
5675748c886SWeiwei Li     rv_op_brev8 = 391,
5685748c886SWeiwei Li     rv_op_pack = 392,
5695748c886SWeiwei Li     rv_op_packh = 393,
5705748c886SWeiwei Li     rv_op_packw = 394,
5715748c886SWeiwei Li     rv_op_unzip = 395,
5725748c886SWeiwei Li     rv_op_zip = 396,
5735748c886SWeiwei Li     rv_op_xperm4 = 397,
5745748c886SWeiwei Li     rv_op_xperm8 = 398,
57507f4964dSYang Liu     rv_op_vle8_v = 399,
57607f4964dSYang Liu     rv_op_vle16_v = 400,
57707f4964dSYang Liu     rv_op_vle32_v = 401,
57807f4964dSYang Liu     rv_op_vle64_v = 402,
57907f4964dSYang Liu     rv_op_vse8_v = 403,
58007f4964dSYang Liu     rv_op_vse16_v = 404,
58107f4964dSYang Liu     rv_op_vse32_v = 405,
58207f4964dSYang Liu     rv_op_vse64_v = 406,
58307f4964dSYang Liu     rv_op_vlm_v = 407,
58407f4964dSYang Liu     rv_op_vsm_v = 408,
58507f4964dSYang Liu     rv_op_vlse8_v = 409,
58607f4964dSYang Liu     rv_op_vlse16_v = 410,
58707f4964dSYang Liu     rv_op_vlse32_v = 411,
58807f4964dSYang Liu     rv_op_vlse64_v = 412,
58907f4964dSYang Liu     rv_op_vsse8_v = 413,
59007f4964dSYang Liu     rv_op_vsse16_v = 414,
59107f4964dSYang Liu     rv_op_vsse32_v = 415,
59207f4964dSYang Liu     rv_op_vsse64_v = 416,
59307f4964dSYang Liu     rv_op_vluxei8_v = 417,
59407f4964dSYang Liu     rv_op_vluxei16_v = 418,
59507f4964dSYang Liu     rv_op_vluxei32_v = 419,
59607f4964dSYang Liu     rv_op_vluxei64_v = 420,
59707f4964dSYang Liu     rv_op_vloxei8_v = 421,
59807f4964dSYang Liu     rv_op_vloxei16_v = 422,
59907f4964dSYang Liu     rv_op_vloxei32_v = 423,
60007f4964dSYang Liu     rv_op_vloxei64_v = 424,
60107f4964dSYang Liu     rv_op_vsuxei8_v = 425,
60207f4964dSYang Liu     rv_op_vsuxei16_v = 426,
60307f4964dSYang Liu     rv_op_vsuxei32_v = 427,
60407f4964dSYang Liu     rv_op_vsuxei64_v = 428,
60507f4964dSYang Liu     rv_op_vsoxei8_v = 429,
60607f4964dSYang Liu     rv_op_vsoxei16_v = 430,
60707f4964dSYang Liu     rv_op_vsoxei32_v = 431,
60807f4964dSYang Liu     rv_op_vsoxei64_v = 432,
60907f4964dSYang Liu     rv_op_vle8ff_v = 433,
61007f4964dSYang Liu     rv_op_vle16ff_v = 434,
61107f4964dSYang Liu     rv_op_vle32ff_v = 435,
61207f4964dSYang Liu     rv_op_vle64ff_v = 436,
61307f4964dSYang Liu     rv_op_vl1re8_v = 437,
61407f4964dSYang Liu     rv_op_vl1re16_v = 438,
61507f4964dSYang Liu     rv_op_vl1re32_v = 439,
61607f4964dSYang Liu     rv_op_vl1re64_v = 440,
61707f4964dSYang Liu     rv_op_vl2re8_v = 441,
61807f4964dSYang Liu     rv_op_vl2re16_v = 442,
61907f4964dSYang Liu     rv_op_vl2re32_v = 443,
62007f4964dSYang Liu     rv_op_vl2re64_v = 444,
62107f4964dSYang Liu     rv_op_vl4re8_v = 445,
62207f4964dSYang Liu     rv_op_vl4re16_v = 446,
62307f4964dSYang Liu     rv_op_vl4re32_v = 447,
62407f4964dSYang Liu     rv_op_vl4re64_v = 448,
62507f4964dSYang Liu     rv_op_vl8re8_v = 449,
62607f4964dSYang Liu     rv_op_vl8re16_v = 450,
62707f4964dSYang Liu     rv_op_vl8re32_v = 451,
62807f4964dSYang Liu     rv_op_vl8re64_v = 452,
62907f4964dSYang Liu     rv_op_vs1r_v = 453,
63007f4964dSYang Liu     rv_op_vs2r_v = 454,
63107f4964dSYang Liu     rv_op_vs4r_v = 455,
63207f4964dSYang Liu     rv_op_vs8r_v = 456,
63307f4964dSYang Liu     rv_op_vadd_vv = 457,
63407f4964dSYang Liu     rv_op_vadd_vx = 458,
63507f4964dSYang Liu     rv_op_vadd_vi = 459,
63607f4964dSYang Liu     rv_op_vsub_vv = 460,
63707f4964dSYang Liu     rv_op_vsub_vx = 461,
63807f4964dSYang Liu     rv_op_vrsub_vx = 462,
63907f4964dSYang Liu     rv_op_vrsub_vi = 463,
64007f4964dSYang Liu     rv_op_vwaddu_vv = 464,
64107f4964dSYang Liu     rv_op_vwaddu_vx = 465,
64207f4964dSYang Liu     rv_op_vwadd_vv = 466,
64307f4964dSYang Liu     rv_op_vwadd_vx = 467,
64407f4964dSYang Liu     rv_op_vwsubu_vv = 468,
64507f4964dSYang Liu     rv_op_vwsubu_vx = 469,
64607f4964dSYang Liu     rv_op_vwsub_vv = 470,
64707f4964dSYang Liu     rv_op_vwsub_vx = 471,
64807f4964dSYang Liu     rv_op_vwaddu_wv = 472,
64907f4964dSYang Liu     rv_op_vwaddu_wx = 473,
65007f4964dSYang Liu     rv_op_vwadd_wv = 474,
65107f4964dSYang Liu     rv_op_vwadd_wx = 475,
65207f4964dSYang Liu     rv_op_vwsubu_wv = 476,
65307f4964dSYang Liu     rv_op_vwsubu_wx = 477,
65407f4964dSYang Liu     rv_op_vwsub_wv = 478,
65507f4964dSYang Liu     rv_op_vwsub_wx = 479,
65607f4964dSYang Liu     rv_op_vadc_vvm = 480,
65707f4964dSYang Liu     rv_op_vadc_vxm = 481,
65807f4964dSYang Liu     rv_op_vadc_vim = 482,
65907f4964dSYang Liu     rv_op_vmadc_vvm = 483,
66007f4964dSYang Liu     rv_op_vmadc_vxm = 484,
66107f4964dSYang Liu     rv_op_vmadc_vim = 485,
66207f4964dSYang Liu     rv_op_vsbc_vvm = 486,
66307f4964dSYang Liu     rv_op_vsbc_vxm = 487,
66407f4964dSYang Liu     rv_op_vmsbc_vvm = 488,
66507f4964dSYang Liu     rv_op_vmsbc_vxm = 489,
66607f4964dSYang Liu     rv_op_vand_vv = 490,
66707f4964dSYang Liu     rv_op_vand_vx = 491,
66807f4964dSYang Liu     rv_op_vand_vi = 492,
66907f4964dSYang Liu     rv_op_vor_vv = 493,
67007f4964dSYang Liu     rv_op_vor_vx = 494,
67107f4964dSYang Liu     rv_op_vor_vi = 495,
67207f4964dSYang Liu     rv_op_vxor_vv = 496,
67307f4964dSYang Liu     rv_op_vxor_vx = 497,
67407f4964dSYang Liu     rv_op_vxor_vi = 498,
67507f4964dSYang Liu     rv_op_vsll_vv = 499,
67607f4964dSYang Liu     rv_op_vsll_vx = 500,
67707f4964dSYang Liu     rv_op_vsll_vi = 501,
67807f4964dSYang Liu     rv_op_vsrl_vv = 502,
67907f4964dSYang Liu     rv_op_vsrl_vx = 503,
68007f4964dSYang Liu     rv_op_vsrl_vi = 504,
68107f4964dSYang Liu     rv_op_vsra_vv = 505,
68207f4964dSYang Liu     rv_op_vsra_vx = 506,
68307f4964dSYang Liu     rv_op_vsra_vi = 507,
68407f4964dSYang Liu     rv_op_vnsrl_wv = 508,
68507f4964dSYang Liu     rv_op_vnsrl_wx = 509,
68607f4964dSYang Liu     rv_op_vnsrl_wi = 510,
68707f4964dSYang Liu     rv_op_vnsra_wv = 511,
68807f4964dSYang Liu     rv_op_vnsra_wx = 512,
68907f4964dSYang Liu     rv_op_vnsra_wi = 513,
69007f4964dSYang Liu     rv_op_vmseq_vv = 514,
69107f4964dSYang Liu     rv_op_vmseq_vx = 515,
69207f4964dSYang Liu     rv_op_vmseq_vi = 516,
69307f4964dSYang Liu     rv_op_vmsne_vv = 517,
69407f4964dSYang Liu     rv_op_vmsne_vx = 518,
69507f4964dSYang Liu     rv_op_vmsne_vi = 519,
69607f4964dSYang Liu     rv_op_vmsltu_vv = 520,
69707f4964dSYang Liu     rv_op_vmsltu_vx = 521,
69807f4964dSYang Liu     rv_op_vmslt_vv = 522,
69907f4964dSYang Liu     rv_op_vmslt_vx = 523,
70007f4964dSYang Liu     rv_op_vmsleu_vv = 524,
70107f4964dSYang Liu     rv_op_vmsleu_vx = 525,
70207f4964dSYang Liu     rv_op_vmsleu_vi = 526,
70307f4964dSYang Liu     rv_op_vmsle_vv = 527,
70407f4964dSYang Liu     rv_op_vmsle_vx = 528,
70507f4964dSYang Liu     rv_op_vmsle_vi = 529,
70607f4964dSYang Liu     rv_op_vmsgtu_vx = 530,
70707f4964dSYang Liu     rv_op_vmsgtu_vi = 531,
70807f4964dSYang Liu     rv_op_vmsgt_vx = 532,
70907f4964dSYang Liu     rv_op_vmsgt_vi = 533,
71007f4964dSYang Liu     rv_op_vminu_vv = 534,
71107f4964dSYang Liu     rv_op_vminu_vx = 535,
71207f4964dSYang Liu     rv_op_vmin_vv = 536,
71307f4964dSYang Liu     rv_op_vmin_vx = 537,
71407f4964dSYang Liu     rv_op_vmaxu_vv = 538,
71507f4964dSYang Liu     rv_op_vmaxu_vx = 539,
71607f4964dSYang Liu     rv_op_vmax_vv = 540,
71707f4964dSYang Liu     rv_op_vmax_vx = 541,
71807f4964dSYang Liu     rv_op_vmul_vv = 542,
71907f4964dSYang Liu     rv_op_vmul_vx = 543,
72007f4964dSYang Liu     rv_op_vmulh_vv = 544,
72107f4964dSYang Liu     rv_op_vmulh_vx = 545,
72207f4964dSYang Liu     rv_op_vmulhu_vv = 546,
72307f4964dSYang Liu     rv_op_vmulhu_vx = 547,
72407f4964dSYang Liu     rv_op_vmulhsu_vv = 548,
72507f4964dSYang Liu     rv_op_vmulhsu_vx = 549,
72607f4964dSYang Liu     rv_op_vdivu_vv = 550,
72707f4964dSYang Liu     rv_op_vdivu_vx = 551,
72807f4964dSYang Liu     rv_op_vdiv_vv = 552,
72907f4964dSYang Liu     rv_op_vdiv_vx = 553,
73007f4964dSYang Liu     rv_op_vremu_vv = 554,
73107f4964dSYang Liu     rv_op_vremu_vx = 555,
73207f4964dSYang Liu     rv_op_vrem_vv = 556,
73307f4964dSYang Liu     rv_op_vrem_vx = 557,
73407f4964dSYang Liu     rv_op_vwmulu_vv = 558,
73507f4964dSYang Liu     rv_op_vwmulu_vx = 559,
73607f4964dSYang Liu     rv_op_vwmulsu_vv = 560,
73707f4964dSYang Liu     rv_op_vwmulsu_vx = 561,
73807f4964dSYang Liu     rv_op_vwmul_vv = 562,
73907f4964dSYang Liu     rv_op_vwmul_vx = 563,
74007f4964dSYang Liu     rv_op_vmacc_vv = 564,
74107f4964dSYang Liu     rv_op_vmacc_vx = 565,
74207f4964dSYang Liu     rv_op_vnmsac_vv = 566,
74307f4964dSYang Liu     rv_op_vnmsac_vx = 567,
74407f4964dSYang Liu     rv_op_vmadd_vv = 568,
74507f4964dSYang Liu     rv_op_vmadd_vx = 569,
74607f4964dSYang Liu     rv_op_vnmsub_vv = 570,
74707f4964dSYang Liu     rv_op_vnmsub_vx = 571,
74807f4964dSYang Liu     rv_op_vwmaccu_vv = 572,
74907f4964dSYang Liu     rv_op_vwmaccu_vx = 573,
75007f4964dSYang Liu     rv_op_vwmacc_vv = 574,
75107f4964dSYang Liu     rv_op_vwmacc_vx = 575,
75207f4964dSYang Liu     rv_op_vwmaccsu_vv = 576,
75307f4964dSYang Liu     rv_op_vwmaccsu_vx = 577,
75407f4964dSYang Liu     rv_op_vwmaccus_vx = 578,
75507f4964dSYang Liu     rv_op_vmv_v_v = 579,
75607f4964dSYang Liu     rv_op_vmv_v_x = 580,
75707f4964dSYang Liu     rv_op_vmv_v_i = 581,
75807f4964dSYang Liu     rv_op_vmerge_vvm = 582,
75907f4964dSYang Liu     rv_op_vmerge_vxm = 583,
76007f4964dSYang Liu     rv_op_vmerge_vim = 584,
76107f4964dSYang Liu     rv_op_vsaddu_vv = 585,
76207f4964dSYang Liu     rv_op_vsaddu_vx = 586,
76307f4964dSYang Liu     rv_op_vsaddu_vi = 587,
76407f4964dSYang Liu     rv_op_vsadd_vv = 588,
76507f4964dSYang Liu     rv_op_vsadd_vx = 589,
76607f4964dSYang Liu     rv_op_vsadd_vi = 590,
76707f4964dSYang Liu     rv_op_vssubu_vv = 591,
76807f4964dSYang Liu     rv_op_vssubu_vx = 592,
76907f4964dSYang Liu     rv_op_vssub_vv = 593,
77007f4964dSYang Liu     rv_op_vssub_vx = 594,
77107f4964dSYang Liu     rv_op_vaadd_vv = 595,
77207f4964dSYang Liu     rv_op_vaadd_vx = 596,
77307f4964dSYang Liu     rv_op_vaaddu_vv = 597,
77407f4964dSYang Liu     rv_op_vaaddu_vx = 598,
77507f4964dSYang Liu     rv_op_vasub_vv = 599,
77607f4964dSYang Liu     rv_op_vasub_vx = 600,
77707f4964dSYang Liu     rv_op_vasubu_vv = 601,
77807f4964dSYang Liu     rv_op_vasubu_vx = 602,
77907f4964dSYang Liu     rv_op_vsmul_vv = 603,
78007f4964dSYang Liu     rv_op_vsmul_vx = 604,
78107f4964dSYang Liu     rv_op_vssrl_vv = 605,
78207f4964dSYang Liu     rv_op_vssrl_vx = 606,
78307f4964dSYang Liu     rv_op_vssrl_vi = 607,
78407f4964dSYang Liu     rv_op_vssra_vv = 608,
78507f4964dSYang Liu     rv_op_vssra_vx = 609,
78607f4964dSYang Liu     rv_op_vssra_vi = 610,
78707f4964dSYang Liu     rv_op_vnclipu_wv = 611,
78807f4964dSYang Liu     rv_op_vnclipu_wx = 612,
78907f4964dSYang Liu     rv_op_vnclipu_wi = 613,
79007f4964dSYang Liu     rv_op_vnclip_wv = 614,
79107f4964dSYang Liu     rv_op_vnclip_wx = 615,
79207f4964dSYang Liu     rv_op_vnclip_wi = 616,
79307f4964dSYang Liu     rv_op_vfadd_vv = 617,
79407f4964dSYang Liu     rv_op_vfadd_vf = 618,
79507f4964dSYang Liu     rv_op_vfsub_vv = 619,
79607f4964dSYang Liu     rv_op_vfsub_vf = 620,
79707f4964dSYang Liu     rv_op_vfrsub_vf = 621,
79807f4964dSYang Liu     rv_op_vfwadd_vv = 622,
79907f4964dSYang Liu     rv_op_vfwadd_vf = 623,
80007f4964dSYang Liu     rv_op_vfwadd_wv = 624,
80107f4964dSYang Liu     rv_op_vfwadd_wf = 625,
80207f4964dSYang Liu     rv_op_vfwsub_vv = 626,
80307f4964dSYang Liu     rv_op_vfwsub_vf = 627,
80407f4964dSYang Liu     rv_op_vfwsub_wv = 628,
80507f4964dSYang Liu     rv_op_vfwsub_wf = 629,
80607f4964dSYang Liu     rv_op_vfmul_vv = 630,
80707f4964dSYang Liu     rv_op_vfmul_vf = 631,
80807f4964dSYang Liu     rv_op_vfdiv_vv = 632,
80907f4964dSYang Liu     rv_op_vfdiv_vf = 633,
81007f4964dSYang Liu     rv_op_vfrdiv_vf = 634,
81107f4964dSYang Liu     rv_op_vfwmul_vv = 635,
81207f4964dSYang Liu     rv_op_vfwmul_vf = 636,
81307f4964dSYang Liu     rv_op_vfmacc_vv = 637,
81407f4964dSYang Liu     rv_op_vfmacc_vf = 638,
81507f4964dSYang Liu     rv_op_vfnmacc_vv = 639,
81607f4964dSYang Liu     rv_op_vfnmacc_vf = 640,
81707f4964dSYang Liu     rv_op_vfmsac_vv = 641,
81807f4964dSYang Liu     rv_op_vfmsac_vf = 642,
81907f4964dSYang Liu     rv_op_vfnmsac_vv = 643,
82007f4964dSYang Liu     rv_op_vfnmsac_vf = 644,
82107f4964dSYang Liu     rv_op_vfmadd_vv = 645,
82207f4964dSYang Liu     rv_op_vfmadd_vf = 646,
82307f4964dSYang Liu     rv_op_vfnmadd_vv = 647,
82407f4964dSYang Liu     rv_op_vfnmadd_vf = 648,
82507f4964dSYang Liu     rv_op_vfmsub_vv = 649,
82607f4964dSYang Liu     rv_op_vfmsub_vf = 650,
82707f4964dSYang Liu     rv_op_vfnmsub_vv = 651,
82807f4964dSYang Liu     rv_op_vfnmsub_vf = 652,
82907f4964dSYang Liu     rv_op_vfwmacc_vv = 653,
83007f4964dSYang Liu     rv_op_vfwmacc_vf = 654,
83107f4964dSYang Liu     rv_op_vfwnmacc_vv = 655,
83207f4964dSYang Liu     rv_op_vfwnmacc_vf = 656,
83307f4964dSYang Liu     rv_op_vfwmsac_vv = 657,
83407f4964dSYang Liu     rv_op_vfwmsac_vf = 658,
83507f4964dSYang Liu     rv_op_vfwnmsac_vv = 659,
83607f4964dSYang Liu     rv_op_vfwnmsac_vf = 660,
83707f4964dSYang Liu     rv_op_vfsqrt_v = 661,
83807f4964dSYang Liu     rv_op_vfrsqrt7_v = 662,
83907f4964dSYang Liu     rv_op_vfrec7_v = 663,
84007f4964dSYang Liu     rv_op_vfmin_vv = 664,
84107f4964dSYang Liu     rv_op_vfmin_vf = 665,
84207f4964dSYang Liu     rv_op_vfmax_vv = 666,
84307f4964dSYang Liu     rv_op_vfmax_vf = 667,
84407f4964dSYang Liu     rv_op_vfsgnj_vv = 668,
84507f4964dSYang Liu     rv_op_vfsgnj_vf = 669,
84607f4964dSYang Liu     rv_op_vfsgnjn_vv = 670,
84707f4964dSYang Liu     rv_op_vfsgnjn_vf = 671,
84807f4964dSYang Liu     rv_op_vfsgnjx_vv = 672,
84907f4964dSYang Liu     rv_op_vfsgnjx_vf = 673,
85007f4964dSYang Liu     rv_op_vfslide1up_vf = 674,
85107f4964dSYang Liu     rv_op_vfslide1down_vf = 675,
85207f4964dSYang Liu     rv_op_vmfeq_vv = 676,
85307f4964dSYang Liu     rv_op_vmfeq_vf = 677,
85407f4964dSYang Liu     rv_op_vmfne_vv = 678,
85507f4964dSYang Liu     rv_op_vmfne_vf = 679,
85607f4964dSYang Liu     rv_op_vmflt_vv = 680,
85707f4964dSYang Liu     rv_op_vmflt_vf = 681,
85807f4964dSYang Liu     rv_op_vmfle_vv = 682,
85907f4964dSYang Liu     rv_op_vmfle_vf = 683,
86007f4964dSYang Liu     rv_op_vmfgt_vf = 684,
86107f4964dSYang Liu     rv_op_vmfge_vf = 685,
86207f4964dSYang Liu     rv_op_vfclass_v = 686,
86307f4964dSYang Liu     rv_op_vfmerge_vfm = 687,
86407f4964dSYang Liu     rv_op_vfmv_v_f = 688,
86507f4964dSYang Liu     rv_op_vfcvt_xu_f_v = 689,
86607f4964dSYang Liu     rv_op_vfcvt_x_f_v = 690,
86707f4964dSYang Liu     rv_op_vfcvt_f_xu_v = 691,
86807f4964dSYang Liu     rv_op_vfcvt_f_x_v = 692,
86907f4964dSYang Liu     rv_op_vfcvt_rtz_xu_f_v = 693,
87007f4964dSYang Liu     rv_op_vfcvt_rtz_x_f_v = 694,
87107f4964dSYang Liu     rv_op_vfwcvt_xu_f_v = 695,
87207f4964dSYang Liu     rv_op_vfwcvt_x_f_v = 696,
87307f4964dSYang Liu     rv_op_vfwcvt_f_xu_v = 697,
87407f4964dSYang Liu     rv_op_vfwcvt_f_x_v = 698,
87507f4964dSYang Liu     rv_op_vfwcvt_f_f_v = 699,
87607f4964dSYang Liu     rv_op_vfwcvt_rtz_xu_f_v = 700,
87707f4964dSYang Liu     rv_op_vfwcvt_rtz_x_f_v = 701,
87807f4964dSYang Liu     rv_op_vfncvt_xu_f_w = 702,
87907f4964dSYang Liu     rv_op_vfncvt_x_f_w = 703,
88007f4964dSYang Liu     rv_op_vfncvt_f_xu_w = 704,
88107f4964dSYang Liu     rv_op_vfncvt_f_x_w = 705,
88207f4964dSYang Liu     rv_op_vfncvt_f_f_w = 706,
88307f4964dSYang Liu     rv_op_vfncvt_rod_f_f_w = 707,
88407f4964dSYang Liu     rv_op_vfncvt_rtz_xu_f_w = 708,
88507f4964dSYang Liu     rv_op_vfncvt_rtz_x_f_w = 709,
88607f4964dSYang Liu     rv_op_vredsum_vs = 710,
88707f4964dSYang Liu     rv_op_vredand_vs = 711,
88807f4964dSYang Liu     rv_op_vredor_vs = 712,
88907f4964dSYang Liu     rv_op_vredxor_vs = 713,
89007f4964dSYang Liu     rv_op_vredminu_vs = 714,
89107f4964dSYang Liu     rv_op_vredmin_vs = 715,
89207f4964dSYang Liu     rv_op_vredmaxu_vs = 716,
89307f4964dSYang Liu     rv_op_vredmax_vs = 717,
89407f4964dSYang Liu     rv_op_vwredsumu_vs = 718,
89507f4964dSYang Liu     rv_op_vwredsum_vs = 719,
89607f4964dSYang Liu     rv_op_vfredusum_vs = 720,
89707f4964dSYang Liu     rv_op_vfredosum_vs = 721,
89807f4964dSYang Liu     rv_op_vfredmin_vs = 722,
89907f4964dSYang Liu     rv_op_vfredmax_vs = 723,
90007f4964dSYang Liu     rv_op_vfwredusum_vs = 724,
90107f4964dSYang Liu     rv_op_vfwredosum_vs = 725,
90207f4964dSYang Liu     rv_op_vmand_mm = 726,
90307f4964dSYang Liu     rv_op_vmnand_mm = 727,
90407f4964dSYang Liu     rv_op_vmandn_mm = 728,
90507f4964dSYang Liu     rv_op_vmxor_mm = 729,
90607f4964dSYang Liu     rv_op_vmor_mm = 730,
90707f4964dSYang Liu     rv_op_vmnor_mm = 731,
90807f4964dSYang Liu     rv_op_vmorn_mm = 732,
90907f4964dSYang Liu     rv_op_vmxnor_mm = 733,
91007f4964dSYang Liu     rv_op_vcpop_m = 734,
91107f4964dSYang Liu     rv_op_vfirst_m = 735,
91207f4964dSYang Liu     rv_op_vmsbf_m = 736,
91307f4964dSYang Liu     rv_op_vmsif_m = 737,
91407f4964dSYang Liu     rv_op_vmsof_m = 738,
91507f4964dSYang Liu     rv_op_viota_m = 739,
91607f4964dSYang Liu     rv_op_vid_v = 740,
91707f4964dSYang Liu     rv_op_vmv_x_s = 741,
91807f4964dSYang Liu     rv_op_vmv_s_x = 742,
91907f4964dSYang Liu     rv_op_vfmv_f_s = 743,
92007f4964dSYang Liu     rv_op_vfmv_s_f = 744,
92107f4964dSYang Liu     rv_op_vslideup_vx = 745,
92207f4964dSYang Liu     rv_op_vslideup_vi = 746,
92307f4964dSYang Liu     rv_op_vslide1up_vx = 747,
92407f4964dSYang Liu     rv_op_vslidedown_vx = 748,
92507f4964dSYang Liu     rv_op_vslidedown_vi = 749,
92607f4964dSYang Liu     rv_op_vslide1down_vx = 750,
92707f4964dSYang Liu     rv_op_vrgather_vv = 751,
92807f4964dSYang Liu     rv_op_vrgatherei16_vv = 752,
92907f4964dSYang Liu     rv_op_vrgather_vx = 753,
93007f4964dSYang Liu     rv_op_vrgather_vi = 754,
93107f4964dSYang Liu     rv_op_vcompress_vm = 755,
93207f4964dSYang Liu     rv_op_vmv1r_v = 756,
93307f4964dSYang Liu     rv_op_vmv2r_v = 757,
93407f4964dSYang Liu     rv_op_vmv4r_v = 758,
93507f4964dSYang Liu     rv_op_vmv8r_v = 759,
93607f4964dSYang Liu     rv_op_vzext_vf2 = 760,
93707f4964dSYang Liu     rv_op_vzext_vf4 = 761,
93807f4964dSYang Liu     rv_op_vzext_vf8 = 762,
93907f4964dSYang Liu     rv_op_vsext_vf2 = 763,
94007f4964dSYang Liu     rv_op_vsext_vf4 = 764,
94107f4964dSYang Liu     rv_op_vsext_vf8 = 765,
94207f4964dSYang Liu     rv_op_vsetvli = 766,
94307f4964dSYang Liu     rv_op_vsetivli = 767,
94407f4964dSYang Liu     rv_op_vsetvl = 768,
9452c71d02eSWeiwei Li     rv_op_c_zext_b = 769,
9462c71d02eSWeiwei Li     rv_op_c_sext_b = 770,
9472c71d02eSWeiwei Li     rv_op_c_zext_h = 771,
9482c71d02eSWeiwei Li     rv_op_c_sext_h = 772,
9492c71d02eSWeiwei Li     rv_op_c_zext_w = 773,
9502c71d02eSWeiwei Li     rv_op_c_not = 774,
9512c71d02eSWeiwei Li     rv_op_c_mul = 775,
9522c71d02eSWeiwei Li     rv_op_c_lbu = 776,
9532c71d02eSWeiwei Li     rv_op_c_lhu = 777,
9542c71d02eSWeiwei Li     rv_op_c_lh = 778,
9552c71d02eSWeiwei Li     rv_op_c_sb = 779,
9562c71d02eSWeiwei Li     rv_op_c_sh = 780,
9572c71d02eSWeiwei Li     rv_op_cm_push = 781,
9582c71d02eSWeiwei Li     rv_op_cm_pop = 782,
9592c71d02eSWeiwei Li     rv_op_cm_popret = 783,
9602c71d02eSWeiwei Li     rv_op_cm_popretz = 784,
9612c71d02eSWeiwei Li     rv_op_cm_mva01s = 785,
9622c71d02eSWeiwei Li     rv_op_cm_mvsa01 = 786,
9632c71d02eSWeiwei Li     rv_op_cm_jt = 787,
9642c71d02eSWeiwei Li     rv_op_cm_jalt = 788,
965d397be9aSRichard Henderson     rv_op_czero_eqz = 789,
966d397be9aSRichard Henderson     rv_op_czero_nez = 790,
967ea103259SMichael Clark } rv_op;
968ea103259SMichael Clark 
969ea103259SMichael Clark /* structures */
970ea103259SMichael Clark 
971ea103259SMichael Clark typedef struct {
972454c2201SWeiwei Li     RISCVCPUConfig *cfg;
973ea103259SMichael Clark     uint64_t  pc;
974ea103259SMichael Clark     uint64_t  inst;
975ea103259SMichael Clark     int32_t   imm;
976ea103259SMichael Clark     uint16_t  op;
977ea103259SMichael Clark     uint8_t   codec;
978ea103259SMichael Clark     uint8_t   rd;
979ea103259SMichael Clark     uint8_t   rs1;
980ea103259SMichael Clark     uint8_t   rs2;
981ea103259SMichael Clark     uint8_t   rs3;
982ea103259SMichael Clark     uint8_t   rm;
983ea103259SMichael Clark     uint8_t   pred;
984ea103259SMichael Clark     uint8_t   succ;
985ea103259SMichael Clark     uint8_t   aq;
986ea103259SMichael Clark     uint8_t   rl;
9875748c886SWeiwei Li     uint8_t   bs;
9885748c886SWeiwei Li     uint8_t   rnum;
98907f4964dSYang Liu     uint8_t   vm;
99007f4964dSYang Liu     uint32_t  vzimm;
9912c71d02eSWeiwei Li     uint8_t   rlist;
992ea103259SMichael Clark } rv_decode;
993ea103259SMichael Clark 
994ea103259SMichael Clark typedef struct {
995ea103259SMichael Clark     const int op;
996ea103259SMichael Clark     const rvc_constraint *constraints;
997ea103259SMichael Clark } rv_comp_data;
998ea103259SMichael Clark 
999f88222daSMichael Clark enum {
1000f88222daSMichael Clark     rvcd_imm_nz = 0x1
1001f88222daSMichael Clark };
1002f88222daSMichael Clark 
1003ea103259SMichael Clark typedef struct {
1004ea103259SMichael Clark     const char * const name;
1005ea103259SMichael Clark     const rv_codec codec;
1006ea103259SMichael Clark     const char * const format;
1007ea103259SMichael Clark     const rv_comp_data *pseudo;
1008f88222daSMichael Clark     const short decomp_rv32;
1009f88222daSMichael Clark     const short decomp_rv64;
1010f88222daSMichael Clark     const short decomp_rv128;
1011f88222daSMichael Clark     const short decomp_data;
1012ea103259SMichael Clark } rv_opcode_data;
1013ea103259SMichael Clark 
1014ea103259SMichael Clark /* register names */
1015ea103259SMichael Clark 
1016ea103259SMichael Clark static const char rv_ireg_name_sym[32][5] = {
1017ea103259SMichael Clark     "zero", "ra",   "sp",   "gp",   "tp",   "t0",   "t1",   "t2",
1018ea103259SMichael Clark     "s0",   "s1",   "a0",   "a1",   "a2",   "a3",   "a4",   "a5",
1019ea103259SMichael Clark     "a6",   "a7",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
1020ea103259SMichael Clark     "s8",   "s9",   "s10",  "s11",  "t3",   "t4",   "t5",   "t6",
1021ea103259SMichael Clark };
1022ea103259SMichael Clark 
1023ea103259SMichael Clark static const char rv_freg_name_sym[32][5] = {
1024ea103259SMichael Clark     "ft0",  "ft1",  "ft2",  "ft3",  "ft4",  "ft5",  "ft6",  "ft7",
1025ea103259SMichael Clark     "fs0",  "fs1",  "fa0",  "fa1",  "fa2",  "fa3",  "fa4",  "fa5",
1026ea103259SMichael Clark     "fa6",  "fa7",  "fs2",  "fs3",  "fs4",  "fs5",  "fs6",  "fs7",
1027ea103259SMichael Clark     "fs8",  "fs9",  "fs10", "fs11", "ft8",  "ft9",  "ft10", "ft11",
1028ea103259SMichael Clark };
1029ea103259SMichael Clark 
103007f4964dSYang Liu static const char rv_vreg_name_sym[32][4] = {
103107f4964dSYang Liu     "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",
103207f4964dSYang Liu     "v8",  "v9",  "v10", "v11", "v12", "v13", "v14", "v15",
103307f4964dSYang Liu     "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
103407f4964dSYang Liu     "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"
103507f4964dSYang Liu };
103607f4964dSYang Liu 
1037ea103259SMichael Clark /* instruction formats */
1038ea103259SMichael Clark 
1039ea103259SMichael Clark #define rv_fmt_none                   "O\t"
1040ea103259SMichael Clark #define rv_fmt_rs1                    "O\t1"
1041ea103259SMichael Clark #define rv_fmt_offset                 "O\to"
1042ea103259SMichael Clark #define rv_fmt_pred_succ              "O\tp,s"
1043ea103259SMichael Clark #define rv_fmt_rs1_rs2                "O\t1,2"
1044ea103259SMichael Clark #define rv_fmt_rd_imm                 "O\t0,i"
1045ea103259SMichael Clark #define rv_fmt_rd_offset              "O\t0,o"
1046ea103259SMichael Clark #define rv_fmt_rd_rs1_rs2             "O\t0,1,2"
1047ea103259SMichael Clark #define rv_fmt_frd_rs1                "O\t3,1"
10480d581506SMikhail Tyutin #define rv_fmt_frd_frs1               "O\t3,4"
1049ea103259SMichael Clark #define rv_fmt_rd_frs1                "O\t0,4"
1050ea103259SMichael Clark #define rv_fmt_rd_frs1_frs2           "O\t0,4,5"
1051ea103259SMichael Clark #define rv_fmt_frd_frs1_frs2          "O\t3,4,5"
1052ea103259SMichael Clark #define rv_fmt_rm_frd_frs1            "O\tr,3,4"
1053ea103259SMichael Clark #define rv_fmt_rm_frd_rs1             "O\tr,3,1"
1054ea103259SMichael Clark #define rv_fmt_rm_rd_frs1             "O\tr,0,4"
1055ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2       "O\tr,3,4,5"
1056ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2_frs3  "O\tr,3,4,5,6"
1057ea103259SMichael Clark #define rv_fmt_rd_rs1_imm             "O\t0,1,i"
1058ea103259SMichael Clark #define rv_fmt_rd_rs1_offset          "O\t0,1,i"
1059ea103259SMichael Clark #define rv_fmt_rd_offset_rs1          "O\t0,i(1)"
1060ea103259SMichael Clark #define rv_fmt_frd_offset_rs1         "O\t3,i(1)"
1061ea103259SMichael Clark #define rv_fmt_rd_csr_rs1             "O\t0,c,1"
1062ea103259SMichael Clark #define rv_fmt_rd_csr_zimm            "O\t0,c,7"
1063ea103259SMichael Clark #define rv_fmt_rs2_offset_rs1         "O\t2,i(1)"
1064ea103259SMichael Clark #define rv_fmt_frs2_offset_rs1        "O\t5,i(1)"
1065ea103259SMichael Clark #define rv_fmt_rs1_rs2_offset         "O\t1,2,o"
1066ea103259SMichael Clark #define rv_fmt_rs2_rs1_offset         "O\t2,1,o"
1067ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs2_rs1        "OAR\t0,2,(1)"
1068ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs1            "OAR\t0,(1)"
1069ea103259SMichael Clark #define rv_fmt_rd                     "O\t0"
1070ea103259SMichael Clark #define rv_fmt_rd_zimm                "O\t0,7"
1071ea103259SMichael Clark #define rv_fmt_rd_rs1                 "O\t0,1"
1072ea103259SMichael Clark #define rv_fmt_rd_rs2                 "O\t0,2"
1073ea103259SMichael Clark #define rv_fmt_rs1_offset             "O\t1,o"
1074ea103259SMichael Clark #define rv_fmt_rs2_offset             "O\t2,o"
10755748c886SWeiwei Li #define rv_fmt_rs1_rs2_bs             "O\t1,2,b"
10765748c886SWeiwei Li #define rv_fmt_rd_rs1_rnum            "O\t0,1,n"
107707f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vm         "O\tD,(1)m"
107807f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_rs2_vm     "O\tD,(1),2m"
107907f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vs2_vm     "O\tD,(1),Fm"
108007f4964dSYang Liu #define rv_fmt_vd_vs2_vs1             "O\tD,F,E"
108107f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vl          "O\tD,F,El"
108207f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vm          "O\tD,F,Em"
108307f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vl          "O\tD,F,1l"
108407f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vl          "O\tD,F,4l"
108507f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vm          "O\tD,F,1m"
108607f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vm          "O\tD,F,4m"
108707f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vl          "O\tD,F,il"
108807f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vm          "O\tD,F,im"
108907f4964dSYang Liu #define rv_fmt_vd_vs2_uimm_vm         "O\tD,F,um"
109007f4964dSYang Liu #define rv_fmt_vd_vs1_vs2_vm          "O\tD,E,Fm"
109107f4964dSYang Liu #define rv_fmt_vd_rs1_vs2_vm          "O\tD,1,Fm"
109207f4964dSYang Liu #define rv_fmt_vd_fs1_vs2_vm          "O\tD,4,Fm"
109307f4964dSYang Liu #define rv_fmt_vd_vs1                 "O\tD,E"
109407f4964dSYang Liu #define rv_fmt_vd_rs1                 "O\tD,1"
109507f4964dSYang Liu #define rv_fmt_vd_fs1                 "O\tD,4"
109607f4964dSYang Liu #define rv_fmt_vd_imm                 "O\tD,i"
109707f4964dSYang Liu #define rv_fmt_vd_vs2                 "O\tD,F"
109807f4964dSYang Liu #define rv_fmt_vd_vs2_vm              "O\tD,Fm"
109907f4964dSYang Liu #define rv_fmt_rd_vs2_vm              "O\t0,Fm"
110007f4964dSYang Liu #define rv_fmt_rd_vs2                 "O\t0,F"
110107f4964dSYang Liu #define rv_fmt_fd_vs2                 "O\t3,F"
110207f4964dSYang Liu #define rv_fmt_vd_vm                  "O\tDm"
110307f4964dSYang Liu #define rv_fmt_vsetvli                "O\t0,1,v"
110407f4964dSYang Liu #define rv_fmt_vsetivli               "O\t0,u,v"
11052c71d02eSWeiwei Li #define rv_fmt_rs1_rs2_zce_ldst       "O\t2,i(1)"
11062c71d02eSWeiwei Li #define rv_fmt_push_rlist             "O\tx,-i"
11072c71d02eSWeiwei Li #define rv_fmt_pop_rlist              "O\tx,i"
11082c71d02eSWeiwei Li #define rv_fmt_zcmt_index             "O\ti"
1109ea103259SMichael Clark 
1110ea103259SMichael Clark /* pseudo-instruction constraints */
1111ea103259SMichael Clark 
1112ea103259SMichael Clark static const rvc_constraint rvcc_jal[] = { rvc_rd_eq_ra, rvc_end };
1113*98624d13SWeiwei Li static const rvc_constraint rvcc_jalr[] = { rvc_rd_eq_ra, rvc_imm_eq_zero,
1114*98624d13SWeiwei Li                                             rvc_end };
1115*98624d13SWeiwei Li static const rvc_constraint rvcc_nop[] = { rvc_rd_eq_x0, rvc_rs1_eq_x0,
1116*98624d13SWeiwei Li                                            rvc_imm_eq_zero, rvc_end };
1117ea103259SMichael Clark static const rvc_constraint rvcc_mv[] = { rvc_imm_eq_zero, rvc_end };
1118ea103259SMichael Clark static const rvc_constraint rvcc_not[] = { rvc_imm_eq_n1, rvc_end };
1119ea103259SMichael Clark static const rvc_constraint rvcc_neg[] = { rvc_rs1_eq_x0, rvc_end };
1120ea103259SMichael Clark static const rvc_constraint rvcc_negw[] = { rvc_rs1_eq_x0, rvc_end };
112133b4f859SMichael Clark static const rvc_constraint rvcc_sext_w[] = { rvc_imm_eq_zero, rvc_end };
1122ea103259SMichael Clark static const rvc_constraint rvcc_seqz[] = { rvc_imm_eq_p1, rvc_end };
1123ea103259SMichael Clark static const rvc_constraint rvcc_snez[] = { rvc_rs1_eq_x0, rvc_end };
1124ea103259SMichael Clark static const rvc_constraint rvcc_sltz[] = { rvc_rs2_eq_x0, rvc_end };
1125ea103259SMichael Clark static const rvc_constraint rvcc_sgtz[] = { rvc_rs1_eq_x0, rvc_end };
1126ea103259SMichael Clark static const rvc_constraint rvcc_fmv_s[] = { rvc_rs2_eq_rs1, rvc_end };
1127ea103259SMichael Clark static const rvc_constraint rvcc_fabs_s[] = { rvc_rs2_eq_rs1, rvc_end };
1128ea103259SMichael Clark static const rvc_constraint rvcc_fneg_s[] = { rvc_rs2_eq_rs1, rvc_end };
1129ea103259SMichael Clark static const rvc_constraint rvcc_fmv_d[] = { rvc_rs2_eq_rs1, rvc_end };
1130ea103259SMichael Clark static const rvc_constraint rvcc_fabs_d[] = { rvc_rs2_eq_rs1, rvc_end };
1131ea103259SMichael Clark static const rvc_constraint rvcc_fneg_d[] = { rvc_rs2_eq_rs1, rvc_end };
1132ea103259SMichael Clark static const rvc_constraint rvcc_fmv_q[] = { rvc_rs2_eq_rs1, rvc_end };
1133ea103259SMichael Clark static const rvc_constraint rvcc_fabs_q[] = { rvc_rs2_eq_rs1, rvc_end };
1134ea103259SMichael Clark static const rvc_constraint rvcc_fneg_q[] = { rvc_rs2_eq_rs1, rvc_end };
1135ea103259SMichael Clark static const rvc_constraint rvcc_beqz[] = { rvc_rs2_eq_x0, rvc_end };
1136ea103259SMichael Clark static const rvc_constraint rvcc_bnez[] = { rvc_rs2_eq_x0, rvc_end };
1137ea103259SMichael Clark static const rvc_constraint rvcc_blez[] = { rvc_rs1_eq_x0, rvc_end };
1138ea103259SMichael Clark static const rvc_constraint rvcc_bgez[] = { rvc_rs2_eq_x0, rvc_end };
1139ea103259SMichael Clark static const rvc_constraint rvcc_bltz[] = { rvc_rs2_eq_x0, rvc_end };
1140ea103259SMichael Clark static const rvc_constraint rvcc_bgtz[] = { rvc_rs1_eq_x0, rvc_end };
1141ea103259SMichael Clark static const rvc_constraint rvcc_ble[] = { rvc_end };
1142ea103259SMichael Clark static const rvc_constraint rvcc_bleu[] = { rvc_end };
1143ea103259SMichael Clark static const rvc_constraint rvcc_bgt[] = { rvc_end };
1144ea103259SMichael Clark static const rvc_constraint rvcc_bgtu[] = { rvc_end };
1145ea103259SMichael Clark static const rvc_constraint rvcc_j[] = { rvc_rd_eq_x0, rvc_end };
1146*98624d13SWeiwei Li static const rvc_constraint rvcc_ret[] = { rvc_rd_eq_x0, rvc_rs1_eq_ra,
1147*98624d13SWeiwei Li                                            rvc_end };
1148*98624d13SWeiwei Li static const rvc_constraint rvcc_jr[] = { rvc_rd_eq_x0, rvc_imm_eq_zero,
1149*98624d13SWeiwei Li                                           rvc_end };
1150*98624d13SWeiwei Li static const rvc_constraint rvcc_rdcycle[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc00,
1151*98624d13SWeiwei Li                                                rvc_end };
1152*98624d13SWeiwei Li static const rvc_constraint rvcc_rdtime[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc01,
1153*98624d13SWeiwei Li                                               rvc_end };
1154*98624d13SWeiwei Li static const rvc_constraint rvcc_rdinstret[] = { rvc_rs1_eq_x0,
1155*98624d13SWeiwei Li                                                  rvc_csr_eq_0xc02, rvc_end };
1156*98624d13SWeiwei Li static const rvc_constraint rvcc_rdcycleh[] = { rvc_rs1_eq_x0,
1157*98624d13SWeiwei Li                                                 rvc_csr_eq_0xc80, rvc_end };
1158*98624d13SWeiwei Li static const rvc_constraint rvcc_rdtimeh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc81,
1159*98624d13SWeiwei Li                                                rvc_end };
11602e3df911SWladimir J. van der Laan static const rvc_constraint rvcc_rdinstreth[] = { rvc_rs1_eq_x0,
11612e3df911SWladimir J. van der Laan                                                   rvc_csr_eq_0xc82, rvc_end };
1162*98624d13SWeiwei Li static const rvc_constraint rvcc_frcsr[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x003,
1163*98624d13SWeiwei Li                                              rvc_end };
1164*98624d13SWeiwei Li static const rvc_constraint rvcc_frrm[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x002,
1165*98624d13SWeiwei Li                                             rvc_end };
1166*98624d13SWeiwei Li static const rvc_constraint rvcc_frflags[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x001,
1167*98624d13SWeiwei Li                                                rvc_end };
1168ea103259SMichael Clark static const rvc_constraint rvcc_fscsr[] = { rvc_csr_eq_0x003, rvc_end };
1169ea103259SMichael Clark static const rvc_constraint rvcc_fsrm[] = { rvc_csr_eq_0x002, rvc_end };
1170ea103259SMichael Clark static const rvc_constraint rvcc_fsflags[] = { rvc_csr_eq_0x001, rvc_end };
1171ea103259SMichael Clark static const rvc_constraint rvcc_fsrmi[] = { rvc_csr_eq_0x002, rvc_end };
1172ea103259SMichael Clark static const rvc_constraint rvcc_fsflagsi[] = { rvc_csr_eq_0x001, rvc_end };
1173ea103259SMichael Clark 
1174ea103259SMichael Clark /* pseudo-instruction metadata */
1175ea103259SMichael Clark 
1176ea103259SMichael Clark static const rv_comp_data rvcp_jal[] = {
1177ea103259SMichael Clark     { rv_op_j, rvcc_j },
1178ea103259SMichael Clark     { rv_op_jal, rvcc_jal },
1179ea103259SMichael Clark     { rv_op_illegal, NULL }
1180ea103259SMichael Clark };
1181ea103259SMichael Clark 
1182ea103259SMichael Clark static const rv_comp_data rvcp_jalr[] = {
1183ea103259SMichael Clark     { rv_op_ret, rvcc_ret },
1184ea103259SMichael Clark     { rv_op_jr, rvcc_jr },
1185ea103259SMichael Clark     { rv_op_jalr, rvcc_jalr },
1186ea103259SMichael Clark     { rv_op_illegal, NULL }
1187ea103259SMichael Clark };
1188ea103259SMichael Clark 
1189ea103259SMichael Clark static const rv_comp_data rvcp_beq[] = {
1190ea103259SMichael Clark     { rv_op_beqz, rvcc_beqz },
1191ea103259SMichael Clark     { rv_op_illegal, NULL }
1192ea103259SMichael Clark };
1193ea103259SMichael Clark 
1194ea103259SMichael Clark static const rv_comp_data rvcp_bne[] = {
1195ea103259SMichael Clark     { rv_op_bnez, rvcc_bnez },
1196ea103259SMichael Clark     { rv_op_illegal, NULL }
1197ea103259SMichael Clark };
1198ea103259SMichael Clark 
1199ea103259SMichael Clark static const rv_comp_data rvcp_blt[] = {
1200ea103259SMichael Clark     { rv_op_bltz, rvcc_bltz },
1201ea103259SMichael Clark     { rv_op_bgtz, rvcc_bgtz },
1202ea103259SMichael Clark     { rv_op_bgt, rvcc_bgt },
1203ea103259SMichael Clark     { rv_op_illegal, NULL }
1204ea103259SMichael Clark };
1205ea103259SMichael Clark 
1206ea103259SMichael Clark static const rv_comp_data rvcp_bge[] = {
1207ea103259SMichael Clark     { rv_op_blez, rvcc_blez },
1208ea103259SMichael Clark     { rv_op_bgez, rvcc_bgez },
1209ea103259SMichael Clark     { rv_op_ble, rvcc_ble },
1210ea103259SMichael Clark     { rv_op_illegal, NULL }
1211ea103259SMichael Clark };
1212ea103259SMichael Clark 
1213ea103259SMichael Clark static const rv_comp_data rvcp_bltu[] = {
1214ea103259SMichael Clark     { rv_op_bgtu, rvcc_bgtu },
1215ea103259SMichael Clark     { rv_op_illegal, NULL }
1216ea103259SMichael Clark };
1217ea103259SMichael Clark 
1218ea103259SMichael Clark static const rv_comp_data rvcp_bgeu[] = {
1219ea103259SMichael Clark     { rv_op_bleu, rvcc_bleu },
1220ea103259SMichael Clark     { rv_op_illegal, NULL }
1221ea103259SMichael Clark };
1222ea103259SMichael Clark 
1223ea103259SMichael Clark static const rv_comp_data rvcp_addi[] = {
1224ea103259SMichael Clark     { rv_op_nop, rvcc_nop },
1225ea103259SMichael Clark     { rv_op_mv, rvcc_mv },
1226ea103259SMichael Clark     { rv_op_illegal, NULL }
1227ea103259SMichael Clark };
1228ea103259SMichael Clark 
1229ea103259SMichael Clark static const rv_comp_data rvcp_sltiu[] = {
1230ea103259SMichael Clark     { rv_op_seqz, rvcc_seqz },
1231ea103259SMichael Clark     { rv_op_illegal, NULL }
1232ea103259SMichael Clark };
1233ea103259SMichael Clark 
1234ea103259SMichael Clark static const rv_comp_data rvcp_xori[] = {
1235ea103259SMichael Clark     { rv_op_not, rvcc_not },
1236ea103259SMichael Clark     { rv_op_illegal, NULL }
1237ea103259SMichael Clark };
1238ea103259SMichael Clark 
1239ea103259SMichael Clark static const rv_comp_data rvcp_sub[] = {
1240ea103259SMichael Clark     { rv_op_neg, rvcc_neg },
1241ea103259SMichael Clark     { rv_op_illegal, NULL }
1242ea103259SMichael Clark };
1243ea103259SMichael Clark 
1244ea103259SMichael Clark static const rv_comp_data rvcp_slt[] = {
1245ea103259SMichael Clark     { rv_op_sltz, rvcc_sltz },
1246ea103259SMichael Clark     { rv_op_sgtz, rvcc_sgtz },
1247ea103259SMichael Clark     { rv_op_illegal, NULL }
1248ea103259SMichael Clark };
1249ea103259SMichael Clark 
1250ea103259SMichael Clark static const rv_comp_data rvcp_sltu[] = {
1251ea103259SMichael Clark     { rv_op_snez, rvcc_snez },
1252ea103259SMichael Clark     { rv_op_illegal, NULL }
1253ea103259SMichael Clark };
1254ea103259SMichael Clark 
1255ea103259SMichael Clark static const rv_comp_data rvcp_addiw[] = {
1256ea103259SMichael Clark     { rv_op_sext_w, rvcc_sext_w },
1257ea103259SMichael Clark     { rv_op_illegal, NULL }
1258ea103259SMichael Clark };
1259ea103259SMichael Clark 
1260ea103259SMichael Clark static const rv_comp_data rvcp_subw[] = {
1261ea103259SMichael Clark     { rv_op_negw, rvcc_negw },
1262ea103259SMichael Clark     { rv_op_illegal, NULL }
1263ea103259SMichael Clark };
1264ea103259SMichael Clark 
1265ea103259SMichael Clark static const rv_comp_data rvcp_csrrw[] = {
1266ea103259SMichael Clark     { rv_op_fscsr, rvcc_fscsr },
1267ea103259SMichael Clark     { rv_op_fsrm, rvcc_fsrm },
1268ea103259SMichael Clark     { rv_op_fsflags, rvcc_fsflags },
1269ea103259SMichael Clark     { rv_op_illegal, NULL }
1270ea103259SMichael Clark };
1271ea103259SMichael Clark 
12725748c886SWeiwei Li 
1273ea103259SMichael Clark static const rv_comp_data rvcp_csrrs[] = {
1274ea103259SMichael Clark     { rv_op_rdcycle, rvcc_rdcycle },
1275ea103259SMichael Clark     { rv_op_rdtime, rvcc_rdtime },
1276ea103259SMichael Clark     { rv_op_rdinstret, rvcc_rdinstret },
1277ea103259SMichael Clark     { rv_op_rdcycleh, rvcc_rdcycleh },
1278ea103259SMichael Clark     { rv_op_rdtimeh, rvcc_rdtimeh },
1279ea103259SMichael Clark     { rv_op_rdinstreth, rvcc_rdinstreth },
1280ea103259SMichael Clark     { rv_op_frcsr, rvcc_frcsr },
1281ea103259SMichael Clark     { rv_op_frrm, rvcc_frrm },
1282ea103259SMichael Clark     { rv_op_frflags, rvcc_frflags },
1283ea103259SMichael Clark     { rv_op_illegal, NULL }
1284ea103259SMichael Clark };
1285ea103259SMichael Clark 
1286ea103259SMichael Clark static const rv_comp_data rvcp_csrrwi[] = {
1287ea103259SMichael Clark     { rv_op_fsrmi, rvcc_fsrmi },
1288ea103259SMichael Clark     { rv_op_fsflagsi, rvcc_fsflagsi },
1289ea103259SMichael Clark     { rv_op_illegal, NULL }
1290ea103259SMichael Clark };
1291ea103259SMichael Clark 
1292ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_s[] = {
1293ea103259SMichael Clark     { rv_op_fmv_s, rvcc_fmv_s },
1294ea103259SMichael Clark     { rv_op_illegal, NULL }
1295ea103259SMichael Clark };
1296ea103259SMichael Clark 
1297ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_s[] = {
1298ea103259SMichael Clark     { rv_op_fneg_s, rvcc_fneg_s },
1299ea103259SMichael Clark     { rv_op_illegal, NULL }
1300ea103259SMichael Clark };
1301ea103259SMichael Clark 
1302ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_s[] = {
1303ea103259SMichael Clark     { rv_op_fabs_s, rvcc_fabs_s },
1304ea103259SMichael Clark     { rv_op_illegal, NULL }
1305ea103259SMichael Clark };
1306ea103259SMichael Clark 
1307ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_d[] = {
1308ea103259SMichael Clark     { rv_op_fmv_d, rvcc_fmv_d },
1309ea103259SMichael Clark     { rv_op_illegal, NULL }
1310ea103259SMichael Clark };
1311ea103259SMichael Clark 
1312ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_d[] = {
1313ea103259SMichael Clark     { rv_op_fneg_d, rvcc_fneg_d },
1314ea103259SMichael Clark     { rv_op_illegal, NULL }
1315ea103259SMichael Clark };
1316ea103259SMichael Clark 
1317ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_d[] = {
1318ea103259SMichael Clark     { rv_op_fabs_d, rvcc_fabs_d },
1319ea103259SMichael Clark     { rv_op_illegal, NULL }
1320ea103259SMichael Clark };
1321ea103259SMichael Clark 
1322ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_q[] = {
1323ea103259SMichael Clark     { rv_op_fmv_q, rvcc_fmv_q },
1324ea103259SMichael Clark     { rv_op_illegal, NULL }
1325ea103259SMichael Clark };
1326ea103259SMichael Clark 
1327ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_q[] = {
1328ea103259SMichael Clark     { rv_op_fneg_q, rvcc_fneg_q },
1329ea103259SMichael Clark     { rv_op_illegal, NULL }
1330ea103259SMichael Clark };
1331ea103259SMichael Clark 
1332ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_q[] = {
1333ea103259SMichael Clark     { rv_op_fabs_q, rvcc_fabs_q },
1334ea103259SMichael Clark     { rv_op_illegal, NULL }
1335ea103259SMichael Clark };
1336ea103259SMichael Clark 
1337ea103259SMichael Clark /* instruction metadata */
1338ea103259SMichael Clark 
1339ea103259SMichael Clark const rv_opcode_data opcode_data[] = {
1340ea103259SMichael Clark     { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
1341ea103259SMichael Clark     { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 },
1342ea103259SMichael Clark     { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 },
1343ea103259SMichael Clark     { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 },
1344ea103259SMichael Clark     { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 },
1345ea103259SMichael Clark     { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 },
1346ea103259SMichael Clark     { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 },
1347ea103259SMichael Clark     { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 },
1348ea103259SMichael Clark     { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 },
1349ea103259SMichael Clark     { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 },
1350ea103259SMichael Clark     { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 },
1351ea103259SMichael Clark     { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1352ea103259SMichael Clark     { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1353ea103259SMichael Clark     { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1354ea103259SMichael Clark     { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1355ea103259SMichael Clark     { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1356ea103259SMichael Clark     { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1357ea103259SMichael Clark     { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1358ea103259SMichael Clark     { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1359ea103259SMichael Clark     { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 },
1360ea103259SMichael Clark     { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1361ea103259SMichael Clark     { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 },
1362ea103259SMichael Clark     { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 },
1363ea103259SMichael Clark     { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1364ea103259SMichael Clark     { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1365ea103259SMichael Clark     { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1366ea103259SMichael Clark     { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1367ea103259SMichael Clark     { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1368ea103259SMichael Clark     { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1369ea103259SMichael Clark     { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 },
1370ea103259SMichael Clark     { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1371ea103259SMichael Clark     { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 },
1372ea103259SMichael Clark     { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 },
1373ea103259SMichael Clark     { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1374ea103259SMichael Clark     { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1375ea103259SMichael Clark     { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1376ea103259SMichael Clark     { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1377ea103259SMichael Clark     { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1378ea103259SMichael Clark     { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 },
1379ea103259SMichael Clark     { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1380ea103259SMichael Clark     { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1381ea103259SMichael Clark     { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1382ea103259SMichael Clark     { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1383ea103259SMichael Clark     { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 },
1384ea103259SMichael Clark     { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1385ea103259SMichael Clark     { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1386ea103259SMichael Clark     { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1387ea103259SMichael Clark     { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1388ea103259SMichael Clark     { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 },
1389ea103259SMichael Clark     { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1390ea103259SMichael Clark     { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1391ea103259SMichael Clark     { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1392ea103259SMichael Clark     { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1393ea103259SMichael Clark     { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1394ea103259SMichael Clark     { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1395ea103259SMichael Clark     { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1396ea103259SMichael Clark     { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1397ea103259SMichael Clark     { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1398ea103259SMichael Clark     { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1399ea103259SMichael Clark     { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1400ea103259SMichael Clark     { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1401ea103259SMichael Clark     { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1402ea103259SMichael Clark     { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1403ea103259SMichael Clark     { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1404ea103259SMichael Clark     { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1405ea103259SMichael Clark     { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1406ea103259SMichael Clark     { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1407ea103259SMichael Clark     { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1408ea103259SMichael Clark     { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1409ea103259SMichael Clark     { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1410ea103259SMichael Clark     { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1411ea103259SMichael Clark     { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1412ea103259SMichael Clark     { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1413ea103259SMichael Clark     { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1414ea103259SMichael Clark     { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1415ea103259SMichael Clark     { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1416ea103259SMichael Clark     { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1417ea103259SMichael Clark     { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1418ea103259SMichael Clark     { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1419ea103259SMichael Clark     { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1420ea103259SMichael Clark     { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1421ea103259SMichael Clark     { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1422ea103259SMichael Clark     { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1423ea103259SMichael Clark     { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1424ea103259SMichael Clark     { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1425ea103259SMichael Clark     { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1426ea103259SMichael Clark     { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1427ea103259SMichael Clark     { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1428ea103259SMichael Clark     { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1429ea103259SMichael Clark     { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1430ea103259SMichael Clark     { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1431ea103259SMichael Clark     { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1432ea103259SMichael Clark     { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1433ea103259SMichael Clark     { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1434ea103259SMichael Clark     { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1435ea103259SMichael Clark     { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1436ea103259SMichael Clark     { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1437ea103259SMichael Clark     { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1438ea103259SMichael Clark     { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1439ea103259SMichael Clark     { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1440ea103259SMichael Clark     { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1441ea103259SMichael Clark     { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1442ea103259SMichael Clark     { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1443ea103259SMichael Clark     { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1444ea103259SMichael Clark     { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1445ea103259SMichael Clark     { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1446ea103259SMichael Clark     { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1447ea103259SMichael Clark     { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1448ea103259SMichael Clark     { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1449ea103259SMichael Clark     { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1450ea103259SMichael Clark     { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1451ea103259SMichael Clark     { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1452ea103259SMichael Clark     { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1453ea103259SMichael Clark     { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1454ea103259SMichael Clark     { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1455ea103259SMichael Clark     { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1456ea103259SMichael Clark     { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1457ea103259SMichael Clark     { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1458ea103259SMichael Clark     { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1459ea103259SMichael Clark     { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1460ea103259SMichael Clark     { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1461ea103259SMichael Clark     { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1462ea103259SMichael Clark     { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
1463ea103259SMichael Clark     { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 },
1464ea103259SMichael Clark     { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1465ea103259SMichael Clark     { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 },
1466ea103259SMichael Clark     { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 },
1467ea103259SMichael Clark     { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 },
1468ea103259SMichael Clark     { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 },
1469ea103259SMichael Clark     { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 },
1470ea103259SMichael Clark     { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 },
1471ea103259SMichael Clark     { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1472ea103259SMichael Clark     { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1473ea103259SMichael Clark     { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1474ea103259SMichael Clark     { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1475ea103259SMichael Clark     { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1476ea103259SMichael Clark     { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1477ea103259SMichael Clark     { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1478ea103259SMichael Clark     { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1479ea103259SMichael Clark     { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1480ea103259SMichael Clark     { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1481ea103259SMichael Clark     { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 },
1482ea103259SMichael Clark     { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 },
1483ea103259SMichael Clark     { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 },
1484ea103259SMichael Clark     { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1485ea103259SMichael Clark     { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1486ea103259SMichael Clark     { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1487ea103259SMichael Clark     { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1488ea103259SMichael Clark     { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1489ea103259SMichael Clark     { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1490ea103259SMichael Clark     { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1491ea103259SMichael Clark     { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1492ea103259SMichael Clark     { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1493ea103259SMichael Clark     { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1494ea103259SMichael Clark     { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1495ea103259SMichael Clark     { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1496ea103259SMichael Clark     { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1497ea103259SMichael Clark     { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1498ea103259SMichael Clark     { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1499ea103259SMichael Clark     { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1500ea103259SMichael Clark     { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1501ea103259SMichael Clark     { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1502ea103259SMichael Clark     { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1503ea103259SMichael Clark     { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1504ea103259SMichael Clark     { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1505ea103259SMichael Clark     { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1506ea103259SMichael Clark     { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1507ea103259SMichael Clark     { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1508ea103259SMichael Clark     { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1509ea103259SMichael Clark     { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1510ea103259SMichael Clark     { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1511ea103259SMichael Clark     { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 },
1512ea103259SMichael Clark     { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 },
1513ea103259SMichael Clark     { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 },
1514ea103259SMichael Clark     { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1515ea103259SMichael Clark     { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1516ea103259SMichael Clark     { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1517ea103259SMichael Clark     { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1518ea103259SMichael Clark     { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1519ea103259SMichael Clark     { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1520ea103259SMichael Clark     { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1521ea103259SMichael Clark     { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1522ea103259SMichael Clark     { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1523ea103259SMichael Clark     { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1524ea103259SMichael Clark     { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1525ea103259SMichael Clark     { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1526ea103259SMichael Clark     { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1527ea103259SMichael Clark     { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1528ea103259SMichael Clark     { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1529ea103259SMichael Clark     { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1530ea103259SMichael Clark     { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1531ea103259SMichael Clark     { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1532ea103259SMichael Clark     { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1533ea103259SMichael Clark     { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1534ea103259SMichael Clark     { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1535ea103259SMichael Clark     { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1536ea103259SMichael Clark     { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1537ea103259SMichael Clark     { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1538ea103259SMichael Clark     { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1539ea103259SMichael Clark     { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1540ea103259SMichael Clark     { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1541ea103259SMichael Clark     { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1542ea103259SMichael Clark     { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1543ea103259SMichael Clark     { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 },
1544ea103259SMichael Clark     { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 },
1545ea103259SMichael Clark     { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 },
1546ea103259SMichael Clark     { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1547ea103259SMichael Clark     { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1548ea103259SMichael Clark     { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1549ea103259SMichael Clark     { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1550ea103259SMichael Clark     { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1551ea103259SMichael Clark     { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1552ea103259SMichael Clark     { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1553ea103259SMichael Clark     { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1554ea103259SMichael Clark     { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1555ea103259SMichael Clark     { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1556ea103259SMichael Clark     { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1557ea103259SMichael Clark     { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1558ea103259SMichael Clark     { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1559ea103259SMichael Clark     { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1560ea103259SMichael Clark     { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1561ea103259SMichael Clark     { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1562ea103259SMichael Clark     { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1563ea103259SMichael Clark     { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1564ea103259SMichael Clark     { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1565ea103259SMichael Clark     { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1566ea103259SMichael Clark     { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1567f88222daSMichael Clark     { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,
1568f88222daSMichael Clark       rv_op_addi, rv_op_addi, rvcd_imm_nz },
1569*98624d13SWeiwei Li     { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,
1570*98624d13SWeiwei Li       rv_op_fld, 0 },
1571*98624d13SWeiwei Li     { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw,
1572*98624d13SWeiwei Li       rv_op_lw },
1573ea103259SMichael Clark     { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 },
1574*98624d13SWeiwei Li     { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd,
1575*98624d13SWeiwei Li       rv_op_fsd, 0 },
1576*98624d13SWeiwei Li     { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw,
1577*98624d13SWeiwei Li       rv_op_sw },
1578ea103259SMichael Clark     { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 },
1579*98624d13SWeiwei Li     { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi,
1580*98624d13SWeiwei Li       rv_op_addi },
1581f88222daSMichael Clark     { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi,
1582f88222daSMichael Clark       rv_op_addi, rvcd_imm_nz },
1583ea103259SMichael Clark     { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 },
1584*98624d13SWeiwei Li     { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi,
1585*98624d13SWeiwei Li       rv_op_addi },
1586f88222daSMichael Clark     { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,
1587f88222daSMichael Clark       rv_op_addi, rv_op_addi, rvcd_imm_nz },
1588f88222daSMichael Clark     { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui,
1589f88222daSMichael Clark       rv_op_lui, rvcd_imm_nz },
1590f88222daSMichael Clark     { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli,
1591f88222daSMichael Clark       rv_op_srli, rv_op_srli, rvcd_imm_nz },
1592f88222daSMichael Clark     { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai,
1593f88222daSMichael Clark       rv_op_srai, rv_op_srai, rvcd_imm_nz },
1594f88222daSMichael Clark     { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi,
15952e3df911SWladimir J. van der Laan       rv_op_andi, rv_op_andi },
1596*98624d13SWeiwei Li     { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub,
1597*98624d13SWeiwei Li       rv_op_sub },
1598*98624d13SWeiwei Li     { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor,
1599*98624d13SWeiwei Li       rv_op_xor },
1600*98624d13SWeiwei Li     { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or,
1601*98624d13SWeiwei Li       rv_op_or },
1602*98624d13SWeiwei Li     { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and,
1603*98624d13SWeiwei Li       rv_op_and },
1604*98624d13SWeiwei Li     { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_subw,
1605*98624d13SWeiwei Li       rv_op_subw },
1606*98624d13SWeiwei Li     { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_addw,
1607*98624d13SWeiwei Li       rv_op_addw },
1608*98624d13SWeiwei Li     { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal,
1609*98624d13SWeiwei Li       rv_op_jal },
1610*98624d13SWeiwei Li     { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op_beq,
1611*98624d13SWeiwei Li       rv_op_beq },
1612*98624d13SWeiwei Li     { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne,
1613*98624d13SWeiwei Li       rv_op_bne },
1614f88222daSMichael Clark     { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli,
1615f88222daSMichael Clark       rv_op_slli, rv_op_slli, rvcd_imm_nz },
1616*98624d13SWeiwei Li     { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,
1617*98624d13SWeiwei Li       rv_op_fld, rv_op_fld },
1618*98624d13SWeiwei Li     { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw,
1619*98624d13SWeiwei Li       rv_op_lw, rv_op_lw },
1620*98624d13SWeiwei Li     { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0,
1621*98624d13SWeiwei Li       0 },
1622*98624d13SWeiwei Li     { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr,
1623*98624d13SWeiwei Li       rv_op_jalr, rv_op_jalr },
1624*98624d13SWeiwei Li     { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_addi,
1625*98624d13SWeiwei Li       rv_op_addi },
1626*98624d13SWeiwei Li     { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak,
1627*98624d13SWeiwei Li       rv_op_ebreak, rv_op_ebreak },
1628*98624d13SWeiwei Li     { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr,
1629*98624d13SWeiwei Li       rv_op_jalr, rv_op_jalr },
1630*98624d13SWeiwei Li     { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add,
1631*98624d13SWeiwei Li       rv_op_add },
1632*98624d13SWeiwei Li     { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd,
1633*98624d13SWeiwei Li       rv_op_fsd, rv_op_fsd },
1634*98624d13SWeiwei Li     { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw,
1635*98624d13SWeiwei Li       rv_op_sw, rv_op_sw },
1636*98624d13SWeiwei Li     { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0,
1637*98624d13SWeiwei Li       0 },
1638*98624d13SWeiwei Li     { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld,
1639*98624d13SWeiwei Li       rv_op_ld },
1640*98624d13SWeiwei Li     { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd,
1641*98624d13SWeiwei Li       rv_op_sd },
1642*98624d13SWeiwei Li     { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw,
1643*98624d13SWeiwei Li       rv_op_addiw },
1644*98624d13SWeiwei Li     { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld,
1645*98624d13SWeiwei Li       rv_op_ld },
1646*98624d13SWeiwei Li     { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd,
1647*98624d13SWeiwei Li       rv_op_sd },
1648ea103259SMichael Clark     { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq },
1649ea103259SMichael Clark     { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq },
1650ea103259SMichael Clark     { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq },
1651*98624d13SWeiwei Li     { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0,
1652*98624d13SWeiwei Li       rv_op_sq },
1653ea103259SMichael Clark     { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 },
1654ea103259SMichael Clark     { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1655ea103259SMichael Clark     { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1656ea103259SMichael Clark     { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1657ea103259SMichael Clark     { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1658ea103259SMichael Clark     { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1659ea103259SMichael Clark     { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1660ea103259SMichael Clark     { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1661ea103259SMichael Clark     { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1662ea103259SMichael Clark     { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
16630d581506SMikhail Tyutin     { "fmv.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16640d581506SMikhail Tyutin     { "fabs.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16650d581506SMikhail Tyutin     { "fneg.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16660d581506SMikhail Tyutin     { "fmv.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16670d581506SMikhail Tyutin     { "fabs.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16680d581506SMikhail Tyutin     { "fneg.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16690d581506SMikhail Tyutin     { "fmv.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16700d581506SMikhail Tyutin     { "fabs.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
16710d581506SMikhail Tyutin     { "fneg.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
1672ea103259SMichael Clark     { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1673ea103259SMichael Clark     { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1674ea103259SMichael Clark     { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 },
1675ea103259SMichael Clark     { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1676ea103259SMichael Clark     { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1677ea103259SMichael Clark     { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 },
1678ea103259SMichael Clark     { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1679ea103259SMichael Clark     { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1680ea103259SMichael Clark     { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1681ea103259SMichael Clark     { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1682ea103259SMichael Clark     { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 },
1683ea103259SMichael Clark     { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 },
1684ea103259SMichael Clark     { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 },
1685ea103259SMichael Clark     { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1686ea103259SMichael Clark     { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1687ea103259SMichael Clark     { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1688ea103259SMichael Clark     { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1689ea103259SMichael Clark     { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1690ea103259SMichael Clark     { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1691ea103259SMichael Clark     { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1692ea103259SMichael Clark     { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1693ea103259SMichael Clark     { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1694ea103259SMichael Clark     { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1695ea103259SMichael Clark     { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1696ea103259SMichael Clark     { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1697ea103259SMichael Clark     { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 },
1698ea103259SMichael Clark     { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 },
169902c1b569SPhilipp Tomsich     { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
170002c1b569SPhilipp Tomsich     { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
170102c1b569SPhilipp Tomsich     { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
170202c1b569SPhilipp Tomsich     { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
170302c1b569SPhilipp Tomsich     { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
170402c1b569SPhilipp Tomsich     { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
170502c1b569SPhilipp Tomsich     { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
170602c1b569SPhilipp Tomsich     { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
170702c1b569SPhilipp Tomsich     { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
170802c1b569SPhilipp Tomsich     { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
17093de1fb71SPhilipp Tomsich     { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17103de1fb71SPhilipp Tomsich     { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17113de1fb71SPhilipp Tomsich     { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171202c1b569SPhilipp Tomsich     { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171302c1b569SPhilipp Tomsich     { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171402c1b569SPhilipp Tomsich     { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171502c1b569SPhilipp Tomsich     { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171602c1b569SPhilipp Tomsich     { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171702c1b569SPhilipp Tomsich     { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171802c1b569SPhilipp Tomsich     { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
171902c1b569SPhilipp Tomsich     { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172002c1b569SPhilipp Tomsich     { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172102c1b569SPhilipp Tomsich     { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172202c1b569SPhilipp Tomsich     { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172302c1b569SPhilipp Tomsich     { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172402c1b569SPhilipp Tomsich     { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172502c1b569SPhilipp Tomsich     { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172602c1b569SPhilipp Tomsich     { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
172702c1b569SPhilipp Tomsich     { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
172827062902SIvan Klokov     { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
172902c1b569SPhilipp Tomsich     { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
173013e269f6SIvan Klokov     { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
173102c1b569SPhilipp Tomsich     { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
173202c1b569SPhilipp Tomsich     { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
173302c1b569SPhilipp Tomsich     { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
173402c1b569SPhilipp Tomsich     { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
173502c1b569SPhilipp Tomsich     { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
173602c1b569SPhilipp Tomsich     { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
173702c1b569SPhilipp Tomsich     { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
173802c1b569SPhilipp Tomsich     { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
173902c1b569SPhilipp Tomsich     { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
174002c1b569SPhilipp Tomsich     { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
174102c1b569SPhilipp Tomsich     { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17425748c886SWeiwei Li     { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17435748c886SWeiwei Li     { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17445748c886SWeiwei Li     { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17455748c886SWeiwei Li     { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17465748c886SWeiwei Li     { "aes64ks1i", rv_codec_k_rnum,  rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 },
17475748c886SWeiwei Li     { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17485748c886SWeiwei Li     { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17495748c886SWeiwei Li     { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17505748c886SWeiwei Li     { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17515748c886SWeiwei Li     { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17525748c886SWeiwei Li     { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17535748c886SWeiwei Li     { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17545748c886SWeiwei Li     { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17555748c886SWeiwei Li     { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17565748c886SWeiwei Li     { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17575748c886SWeiwei Li     { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17585748c886SWeiwei Li     { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17595748c886SWeiwei Li     { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17605748c886SWeiwei Li     { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17615748c886SWeiwei Li     { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17625748c886SWeiwei Li     { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17635748c886SWeiwei Li     { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17645748c886SWeiwei Li     { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17655748c886SWeiwei Li     { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17665748c886SWeiwei Li     { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17675748c886SWeiwei Li     { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17685748c886SWeiwei Li     { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
17695748c886SWeiwei Li     { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17705748c886SWeiwei Li     { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
17715748c886SWeiwei Li     { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
17725748c886SWeiwei Li     { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17735748c886SWeiwei Li     { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17745748c886SWeiwei Li     { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
17755748c886SWeiwei Li     { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
17765748c886SWeiwei Li     { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
17775748c886SWeiwei Li     { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
177807f4964dSYang Liu     { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
17798deb4756SWeiwei Li     { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17808deb4756SWeiwei Li     { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17818deb4756SWeiwei Li     { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17828deb4756SWeiwei Li     { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17838deb4756SWeiwei Li     { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17848deb4756SWeiwei Li     { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17858deb4756SWeiwei Li     { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17868deb4756SWeiwei Li     { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17878deb4756SWeiwei Li     { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17888deb4756SWeiwei Li     { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17898deb4756SWeiwei Li     { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17908deb4756SWeiwei Li     { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17918deb4756SWeiwei Li     { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17928deb4756SWeiwei Li     { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17938deb4756SWeiwei Li     { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17948deb4756SWeiwei Li     { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17958deb4756SWeiwei Li     { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17968deb4756SWeiwei Li     { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17978deb4756SWeiwei Li     { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17988deb4756SWeiwei Li     { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17998deb4756SWeiwei Li     { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18008deb4756SWeiwei Li     { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18018deb4756SWeiwei Li     { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18028deb4756SWeiwei Li     { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18038deb4756SWeiwei Li     { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18048deb4756SWeiwei Li     { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18058deb4756SWeiwei Li     { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18068deb4756SWeiwei Li     { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18078deb4756SWeiwei Li     { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18088deb4756SWeiwei Li     { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18098deb4756SWeiwei Li     { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18108deb4756SWeiwei Li     { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18118deb4756SWeiwei Li     { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18128deb4756SWeiwei Li     { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18138deb4756SWeiwei Li     { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18148deb4756SWeiwei Li     { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18158deb4756SWeiwei Li     { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18168deb4756SWeiwei Li     { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18178deb4756SWeiwei Li     { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18188deb4756SWeiwei Li     { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18198deb4756SWeiwei Li     { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18208deb4756SWeiwei Li     { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18218deb4756SWeiwei Li     { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18228deb4756SWeiwei Li     { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18238deb4756SWeiwei Li     { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18248deb4756SWeiwei Li     { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18258deb4756SWeiwei Li     { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18268deb4756SWeiwei Li     { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18278deb4756SWeiwei Li     { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18288deb4756SWeiwei Li     { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18298deb4756SWeiwei Li     { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18308deb4756SWeiwei Li     { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18318deb4756SWeiwei Li     { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18328deb4756SWeiwei Li     { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18338deb4756SWeiwei Li     { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18348deb4756SWeiwei Li     { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18358deb4756SWeiwei Li     { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18368deb4756SWeiwei Li     { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
18378deb4756SWeiwei Li     { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18388deb4756SWeiwei Li     { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18398deb4756SWeiwei Li     { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18408deb4756SWeiwei Li     { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18418deb4756SWeiwei Li     { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18428deb4756SWeiwei Li     { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18438deb4756SWeiwei Li     { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18448deb4756SWeiwei Li     { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18458deb4756SWeiwei Li     { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18468deb4756SWeiwei Li     { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18478deb4756SWeiwei Li     { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18488deb4756SWeiwei Li     { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18498deb4756SWeiwei Li     { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18508deb4756SWeiwei Li     { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18518deb4756SWeiwei Li     { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18528deb4756SWeiwei Li     { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18538deb4756SWeiwei Li     { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18548deb4756SWeiwei Li     { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18558deb4756SWeiwei Li     { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18568deb4756SWeiwei Li     { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18578deb4756SWeiwei Li     { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18588deb4756SWeiwei Li     { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18598deb4756SWeiwei Li     { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18608deb4756SWeiwei Li     { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
18618deb4756SWeiwei Li     { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
18628deb4756SWeiwei Li     { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
18638deb4756SWeiwei Li     { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
18648deb4756SWeiwei Li     { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
18658deb4756SWeiwei Li     { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
18668deb4756SWeiwei Li     { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
18678deb4756SWeiwei Li     { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
18688deb4756SWeiwei Li     { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
18698deb4756SWeiwei Li     { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
18708deb4756SWeiwei Li     { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18718deb4756SWeiwei Li     { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18728deb4756SWeiwei Li     { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18738deb4756SWeiwei Li     { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18748deb4756SWeiwei Li     { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18758deb4756SWeiwei Li     { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18768deb4756SWeiwei Li     { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18778deb4756SWeiwei Li     { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18788deb4756SWeiwei Li     { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18798deb4756SWeiwei Li     { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18808deb4756SWeiwei Li     { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18818deb4756SWeiwei Li     { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18828deb4756SWeiwei Li     { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18838deb4756SWeiwei Li     { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18848deb4756SWeiwei Li     { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18858deb4756SWeiwei Li     { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18868deb4756SWeiwei Li     { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18878deb4756SWeiwei Li     { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18888deb4756SWeiwei Li     { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18898deb4756SWeiwei Li     { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18908deb4756SWeiwei Li     { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18918deb4756SWeiwei Li     { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18928deb4756SWeiwei Li     { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18938deb4756SWeiwei Li     { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18948deb4756SWeiwei Li     { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18958deb4756SWeiwei Li     { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18968deb4756SWeiwei Li     { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18978deb4756SWeiwei Li     { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18988deb4756SWeiwei Li     { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18998deb4756SWeiwei Li     { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19008deb4756SWeiwei Li     { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19018deb4756SWeiwei Li     { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19028deb4756SWeiwei Li     { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19038deb4756SWeiwei Li     { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19048deb4756SWeiwei Li     { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19058deb4756SWeiwei Li     { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19068deb4756SWeiwei Li     { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19078deb4756SWeiwei Li     { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19088deb4756SWeiwei Li     { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19098deb4756SWeiwei Li     { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19108deb4756SWeiwei Li     { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19118deb4756SWeiwei Li     { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19128deb4756SWeiwei Li     { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19138deb4756SWeiwei Li     { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19148deb4756SWeiwei Li     { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19158deb4756SWeiwei Li     { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19168deb4756SWeiwei Li     { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19178deb4756SWeiwei Li     { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19188deb4756SWeiwei Li     { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19198deb4756SWeiwei Li     { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19208deb4756SWeiwei Li     { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19218deb4756SWeiwei Li     { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19228deb4756SWeiwei Li     { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19238deb4756SWeiwei Li     { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19248deb4756SWeiwei Li     { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19258deb4756SWeiwei Li     { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19268deb4756SWeiwei Li     { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19278deb4756SWeiwei Li     { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19288deb4756SWeiwei Li     { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19298deb4756SWeiwei Li     { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19308deb4756SWeiwei Li     { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19318deb4756SWeiwei Li     { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19328deb4756SWeiwei Li     { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19338deb4756SWeiwei Li     { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19348deb4756SWeiwei Li     { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19358deb4756SWeiwei Li     { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19368deb4756SWeiwei Li     { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19378deb4756SWeiwei Li     { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19388deb4756SWeiwei Li     { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19398deb4756SWeiwei Li     { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19408deb4756SWeiwei Li     { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19418deb4756SWeiwei Li     { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19428deb4756SWeiwei Li     { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19438deb4756SWeiwei Li     { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19448deb4756SWeiwei Li     { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19458deb4756SWeiwei Li     { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19468deb4756SWeiwei Li     { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19478deb4756SWeiwei Li     { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19488deb4756SWeiwei Li     { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19498deb4756SWeiwei Li     { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19508deb4756SWeiwei Li     { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19518deb4756SWeiwei Li     { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19528deb4756SWeiwei Li     { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19538deb4756SWeiwei Li     { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19548deb4756SWeiwei Li     { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19558deb4756SWeiwei Li     { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19568deb4756SWeiwei Li     { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19578deb4756SWeiwei Li     { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19588deb4756SWeiwei Li     { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
19598deb4756SWeiwei Li     { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, 0, 0, 0 },
19608deb4756SWeiwei Li     { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 },
19618deb4756SWeiwei Li     { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, 0, 0, 0 },
19628deb4756SWeiwei Li     { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
19638deb4756SWeiwei Li     { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
19648deb4756SWeiwei Li     { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
19658deb4756SWeiwei Li     { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19668deb4756SWeiwei Li     { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19678deb4756SWeiwei Li     { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19688deb4756SWeiwei Li     { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19698deb4756SWeiwei Li     { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19708deb4756SWeiwei Li     { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
19718deb4756SWeiwei Li     { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19728deb4756SWeiwei Li     { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19738deb4756SWeiwei Li     { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19748deb4756SWeiwei Li     { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19758deb4756SWeiwei Li     { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19768deb4756SWeiwei Li     { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19778deb4756SWeiwei Li     { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19788deb4756SWeiwei Li     { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19798deb4756SWeiwei Li     { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19808deb4756SWeiwei Li     { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19818deb4756SWeiwei Li     { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19828deb4756SWeiwei Li     { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19838deb4756SWeiwei Li     { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19848deb4756SWeiwei Li     { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19858deb4756SWeiwei Li     { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19868deb4756SWeiwei Li     { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19878deb4756SWeiwei Li     { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19888deb4756SWeiwei Li     { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19898deb4756SWeiwei Li     { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19908deb4756SWeiwei Li     { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19918deb4756SWeiwei Li     { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19928deb4756SWeiwei Li     { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19938deb4756SWeiwei Li     { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19948deb4756SWeiwei Li     { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19958deb4756SWeiwei Li     { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19968deb4756SWeiwei Li     { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19978deb4756SWeiwei Li     { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19988deb4756SWeiwei Li     { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19998deb4756SWeiwei Li     { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20008deb4756SWeiwei Li     { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20018deb4756SWeiwei Li     { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20028deb4756SWeiwei Li     { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20038deb4756SWeiwei Li     { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20048deb4756SWeiwei Li     { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20058deb4756SWeiwei Li     { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20068deb4756SWeiwei Li     { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20078deb4756SWeiwei Li     { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20088deb4756SWeiwei Li     { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20098deb4756SWeiwei Li     { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20108deb4756SWeiwei Li     { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20118deb4756SWeiwei Li     { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20128deb4756SWeiwei Li     { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20138deb4756SWeiwei Li     { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20148deb4756SWeiwei Li     { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20158deb4756SWeiwei Li     { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20168deb4756SWeiwei Li     { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20178deb4756SWeiwei Li     { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20188deb4756SWeiwei Li     { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20198deb4756SWeiwei Li     { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20208deb4756SWeiwei Li     { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20218deb4756SWeiwei Li     { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20228deb4756SWeiwei Li     { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20238deb4756SWeiwei Li     { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20248deb4756SWeiwei Li     { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20258deb4756SWeiwei Li     { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20268deb4756SWeiwei Li     { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20278deb4756SWeiwei Li     { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20288deb4756SWeiwei Li     { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20298deb4756SWeiwei Li     { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20308deb4756SWeiwei Li     { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20318deb4756SWeiwei Li     { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20328deb4756SWeiwei Li     { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20338deb4756SWeiwei Li     { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20348deb4756SWeiwei Li     { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20358deb4756SWeiwei Li     { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20368deb4756SWeiwei Li     { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20378deb4756SWeiwei Li     { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20388deb4756SWeiwei Li     { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20398deb4756SWeiwei Li     { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
20408deb4756SWeiwei Li     { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
20418deb4756SWeiwei Li     { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20428deb4756SWeiwei Li     { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20438deb4756SWeiwei Li     { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20448deb4756SWeiwei Li     { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20458deb4756SWeiwei Li     { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20468deb4756SWeiwei Li     { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20478deb4756SWeiwei Li     { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20488deb4756SWeiwei Li     { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20498deb4756SWeiwei Li     { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20508deb4756SWeiwei Li     { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20518deb4756SWeiwei Li     { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20528deb4756SWeiwei Li     { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20538deb4756SWeiwei Li     { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20548deb4756SWeiwei Li     { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20558deb4756SWeiwei Li     { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20568deb4756SWeiwei Li     { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20578deb4756SWeiwei Li     { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20588deb4756SWeiwei Li     { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20598deb4756SWeiwei Li     { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20608deb4756SWeiwei Li     { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20618deb4756SWeiwei Li     { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20628deb4756SWeiwei Li     { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20638deb4756SWeiwei Li     { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20648deb4756SWeiwei Li     { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20658deb4756SWeiwei Li     { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
20668deb4756SWeiwei Li     { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20678deb4756SWeiwei Li     { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, 0, 0, 0 },
20688deb4756SWeiwei Li     { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 },
20698deb4756SWeiwei Li     { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20708deb4756SWeiwei Li     { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20718deb4756SWeiwei Li     { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20728deb4756SWeiwei Li     { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20738deb4756SWeiwei Li     { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20748deb4756SWeiwei Li     { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20758deb4756SWeiwei Li     { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20768deb4756SWeiwei Li     { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20778deb4756SWeiwei Li     { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20788deb4756SWeiwei Li     { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20798deb4756SWeiwei Li     { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20808deb4756SWeiwei Li     { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20818deb4756SWeiwei Li     { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20828deb4756SWeiwei Li     { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20838deb4756SWeiwei Li     { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20848deb4756SWeiwei Li     { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20858deb4756SWeiwei Li     { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20868deb4756SWeiwei Li     { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20878deb4756SWeiwei Li     { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20888deb4756SWeiwei Li     { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20898deb4756SWeiwei Li     { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20908deb4756SWeiwei Li     { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20918deb4756SWeiwei Li     { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20928deb4756SWeiwei Li     { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20938deb4756SWeiwei Li     { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20948deb4756SWeiwei Li     { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20958deb4756SWeiwei Li     { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20968deb4756SWeiwei Li     { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20978deb4756SWeiwei Li     { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20988deb4756SWeiwei Li     { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20998deb4756SWeiwei Li     { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21008deb4756SWeiwei Li     { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21018deb4756SWeiwei Li     { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21028deb4756SWeiwei Li     { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21038deb4756SWeiwei Li     { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21048deb4756SWeiwei Li     { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21058deb4756SWeiwei Li     { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21068deb4756SWeiwei Li     { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21078deb4756SWeiwei Li     { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21088deb4756SWeiwei Li     { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21098deb4756SWeiwei Li     { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21108deb4756SWeiwei Li     { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21118deb4756SWeiwei Li     { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21128deb4756SWeiwei Li     { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21138deb4756SWeiwei Li     { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21148deb4756SWeiwei Li     { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 },
21158deb4756SWeiwei Li     { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 },
21168deb4756SWeiwei Li     { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21178deb4756SWeiwei Li     { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21188deb4756SWeiwei Li     { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21198deb4756SWeiwei Li     { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21208deb4756SWeiwei Li     { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, 0, 0, 0 },
21218deb4756SWeiwei Li     { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, 0, 0, 0 },
21228deb4756SWeiwei Li     { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 },
21238deb4756SWeiwei Li     { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, 0, 0, 0 },
21248deb4756SWeiwei Li     { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 },
21258deb4756SWeiwei Li     { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21268deb4756SWeiwei Li     { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
21278deb4756SWeiwei Li     { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21288deb4756SWeiwei Li     { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21298deb4756SWeiwei Li     { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
21308deb4756SWeiwei Li     { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21318deb4756SWeiwei Li     { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21328deb4756SWeiwei Li     { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21338deb4756SWeiwei Li     { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21348deb4756SWeiwei Li     { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
21358deb4756SWeiwei Li     { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21368deb4756SWeiwei Li     { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21378deb4756SWeiwei Li     { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21388deb4756SWeiwei Li     { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21398deb4756SWeiwei Li     { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21408deb4756SWeiwei Li     { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21418deb4756SWeiwei Li     { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21428deb4756SWeiwei Li     { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21438deb4756SWeiwei Li     { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21448deb4756SWeiwei Li     { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21458deb4756SWeiwei Li     { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21468deb4756SWeiwei Li     { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, 0, 0, 0 },
21478deb4756SWeiwei Li     { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, 0, 0, 0 },
21488deb4756SWeiwei Li     { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
21492c71d02eSWeiwei Li     { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21502c71d02eSWeiwei Li     { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21512c71d02eSWeiwei Li     { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21522c71d02eSWeiwei Li     { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21532c71d02eSWeiwei Li     { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21542c71d02eSWeiwei Li     { "c.not", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
21552c71d02eSWeiwei Li     { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2, NULL, 0, 0 },
21562c71d02eSWeiwei Li     { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
21572c71d02eSWeiwei Li     { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
21582c71d02eSWeiwei Li     { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
21592c71d02eSWeiwei Li     { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
21602c71d02eSWeiwei Li     { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
21612c71d02eSWeiwei Li     { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist, NULL, 0, 0 },
21622c71d02eSWeiwei Li     { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 },
21632c71d02eSWeiwei Li     { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0, 0 },
21642c71d02eSWeiwei Li     { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 },
21652c71d02eSWeiwei Li     { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
21662c71d02eSWeiwei Li     { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
21672c71d02eSWeiwei Li     { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 },
21682c71d02eSWeiwei Li     { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 },
2169d397be9aSRichard Henderson     { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2170d397be9aSRichard Henderson     { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2171ea103259SMichael Clark };
2172ea103259SMichael Clark 
2173ea103259SMichael Clark /* CSR names */
2174ea103259SMichael Clark 
2175ea103259SMichael Clark static const char *csr_name(int csrno)
2176ea103259SMichael Clark {
2177ea103259SMichael Clark     switch (csrno) {
2178ea103259SMichael Clark     case 0x0000: return "ustatus";
2179ea103259SMichael Clark     case 0x0001: return "fflags";
2180ea103259SMichael Clark     case 0x0002: return "frm";
2181ea103259SMichael Clark     case 0x0003: return "fcsr";
2182ea103259SMichael Clark     case 0x0004: return "uie";
2183ea103259SMichael Clark     case 0x0005: return "utvec";
218407f4964dSYang Liu     case 0x0008: return "vstart";
218507f4964dSYang Liu     case 0x0009: return "vxsat";
218607f4964dSYang Liu     case 0x000a: return "vxrm";
218707f4964dSYang Liu     case 0x000f: return "vcsr";
21885748c886SWeiwei Li     case 0x0015: return "seed";
21892c71d02eSWeiwei Li     case 0x0017: return "jvt";
2190ea103259SMichael Clark     case 0x0040: return "uscratch";
2191ea103259SMichael Clark     case 0x0041: return "uepc";
2192ea103259SMichael Clark     case 0x0042: return "ucause";
2193ea103259SMichael Clark     case 0x0043: return "utval";
2194ea103259SMichael Clark     case 0x0044: return "uip";
2195ea103259SMichael Clark     case 0x0100: return "sstatus";
2196ea103259SMichael Clark     case 0x0104: return "sie";
2197ea103259SMichael Clark     case 0x0105: return "stvec";
2198ea103259SMichael Clark     case 0x0106: return "scounteren";
2199ea103259SMichael Clark     case 0x0140: return "sscratch";
2200ea103259SMichael Clark     case 0x0141: return "sepc";
2201ea103259SMichael Clark     case 0x0142: return "scause";
2202ea103259SMichael Clark     case 0x0143: return "stval";
2203ea103259SMichael Clark     case 0x0144: return "sip";
2204ea103259SMichael Clark     case 0x0180: return "satp";
2205ea103259SMichael Clark     case 0x0200: return "hstatus";
2206ea103259SMichael Clark     case 0x0202: return "hedeleg";
2207ea103259SMichael Clark     case 0x0203: return "hideleg";
2208ea103259SMichael Clark     case 0x0204: return "hie";
2209ea103259SMichael Clark     case 0x0205: return "htvec";
2210ea103259SMichael Clark     case 0x0240: return "hscratch";
2211ea103259SMichael Clark     case 0x0241: return "hepc";
2212ea103259SMichael Clark     case 0x0242: return "hcause";
2213ea103259SMichael Clark     case 0x0243: return "hbadaddr";
2214ea103259SMichael Clark     case 0x0244: return "hip";
2215ea103259SMichael Clark     case 0x0300: return "mstatus";
2216ea103259SMichael Clark     case 0x0301: return "misa";
2217ea103259SMichael Clark     case 0x0302: return "medeleg";
2218ea103259SMichael Clark     case 0x0303: return "mideleg";
2219ea103259SMichael Clark     case 0x0304: return "mie";
2220ea103259SMichael Clark     case 0x0305: return "mtvec";
2221ea103259SMichael Clark     case 0x0306: return "mcounteren";
2222ea103259SMichael Clark     case 0x0320: return "mucounteren";
2223ea103259SMichael Clark     case 0x0321: return "mscounteren";
2224ea103259SMichael Clark     case 0x0322: return "mhcounteren";
2225ea103259SMichael Clark     case 0x0323: return "mhpmevent3";
2226ea103259SMichael Clark     case 0x0324: return "mhpmevent4";
2227ea103259SMichael Clark     case 0x0325: return "mhpmevent5";
2228ea103259SMichael Clark     case 0x0326: return "mhpmevent6";
2229ea103259SMichael Clark     case 0x0327: return "mhpmevent7";
2230ea103259SMichael Clark     case 0x0328: return "mhpmevent8";
2231ea103259SMichael Clark     case 0x0329: return "mhpmevent9";
2232ea103259SMichael Clark     case 0x032a: return "mhpmevent10";
2233ea103259SMichael Clark     case 0x032b: return "mhpmevent11";
2234ea103259SMichael Clark     case 0x032c: return "mhpmevent12";
2235ea103259SMichael Clark     case 0x032d: return "mhpmevent13";
2236ea103259SMichael Clark     case 0x032e: return "mhpmevent14";
2237ea103259SMichael Clark     case 0x032f: return "mhpmevent15";
2238ea103259SMichael Clark     case 0x0330: return "mhpmevent16";
2239ea103259SMichael Clark     case 0x0331: return "mhpmevent17";
2240ea103259SMichael Clark     case 0x0332: return "mhpmevent18";
2241ea103259SMichael Clark     case 0x0333: return "mhpmevent19";
2242ea103259SMichael Clark     case 0x0334: return "mhpmevent20";
2243ea103259SMichael Clark     case 0x0335: return "mhpmevent21";
2244ea103259SMichael Clark     case 0x0336: return "mhpmevent22";
2245ea103259SMichael Clark     case 0x0337: return "mhpmevent23";
2246ea103259SMichael Clark     case 0x0338: return "mhpmevent24";
2247ea103259SMichael Clark     case 0x0339: return "mhpmevent25";
2248ea103259SMichael Clark     case 0x033a: return "mhpmevent26";
2249ea103259SMichael Clark     case 0x033b: return "mhpmevent27";
2250ea103259SMichael Clark     case 0x033c: return "mhpmevent28";
2251ea103259SMichael Clark     case 0x033d: return "mhpmevent29";
2252ea103259SMichael Clark     case 0x033e: return "mhpmevent30";
2253ea103259SMichael Clark     case 0x033f: return "mhpmevent31";
2254ea103259SMichael Clark     case 0x0340: return "mscratch";
2255ea103259SMichael Clark     case 0x0341: return "mepc";
2256ea103259SMichael Clark     case 0x0342: return "mcause";
2257ea103259SMichael Clark     case 0x0343: return "mtval";
2258ea103259SMichael Clark     case 0x0344: return "mip";
2259ea103259SMichael Clark     case 0x0380: return "mbase";
2260ea103259SMichael Clark     case 0x0381: return "mbound";
2261ea103259SMichael Clark     case 0x0382: return "mibase";
2262ea103259SMichael Clark     case 0x0383: return "mibound";
2263ea103259SMichael Clark     case 0x0384: return "mdbase";
2264ea103259SMichael Clark     case 0x0385: return "mdbound";
2265ea103259SMichael Clark     case 0x03a0: return "pmpcfg3";
2266ea103259SMichael Clark     case 0x03b0: return "pmpaddr0";
2267ea103259SMichael Clark     case 0x03b1: return "pmpaddr1";
2268ea103259SMichael Clark     case 0x03b2: return "pmpaddr2";
2269ea103259SMichael Clark     case 0x03b3: return "pmpaddr3";
2270ea103259SMichael Clark     case 0x03b4: return "pmpaddr4";
2271ea103259SMichael Clark     case 0x03b5: return "pmpaddr5";
2272ea103259SMichael Clark     case 0x03b6: return "pmpaddr6";
2273ea103259SMichael Clark     case 0x03b7: return "pmpaddr7";
2274ea103259SMichael Clark     case 0x03b8: return "pmpaddr8";
2275ea103259SMichael Clark     case 0x03b9: return "pmpaddr9";
2276ea103259SMichael Clark     case 0x03ba: return "pmpaddr10";
2277ea103259SMichael Clark     case 0x03bb: return "pmpaddr11";
2278ea103259SMichael Clark     case 0x03bc: return "pmpaddr12";
2279ea103259SMichael Clark     case 0x03bd: return "pmpaddr14";
2280ea103259SMichael Clark     case 0x03be: return "pmpaddr13";
2281ea103259SMichael Clark     case 0x03bf: return "pmpaddr15";
2282ea103259SMichael Clark     case 0x0780: return "mtohost";
2283ea103259SMichael Clark     case 0x0781: return "mfromhost";
2284ea103259SMichael Clark     case 0x0782: return "mreset";
2285ea103259SMichael Clark     case 0x0783: return "mipi";
2286ea103259SMichael Clark     case 0x0784: return "miobase";
2287ea103259SMichael Clark     case 0x07a0: return "tselect";
2288ea103259SMichael Clark     case 0x07a1: return "tdata1";
2289ea103259SMichael Clark     case 0x07a2: return "tdata2";
2290ea103259SMichael Clark     case 0x07a3: return "tdata3";
2291ea103259SMichael Clark     case 0x07b0: return "dcsr";
2292ea103259SMichael Clark     case 0x07b1: return "dpc";
2293ea103259SMichael Clark     case 0x07b2: return "dscratch";
2294ea103259SMichael Clark     case 0x0b00: return "mcycle";
2295ea103259SMichael Clark     case 0x0b01: return "mtime";
2296ea103259SMichael Clark     case 0x0b02: return "minstret";
2297ea103259SMichael Clark     case 0x0b03: return "mhpmcounter3";
2298ea103259SMichael Clark     case 0x0b04: return "mhpmcounter4";
2299ea103259SMichael Clark     case 0x0b05: return "mhpmcounter5";
2300ea103259SMichael Clark     case 0x0b06: return "mhpmcounter6";
2301ea103259SMichael Clark     case 0x0b07: return "mhpmcounter7";
2302ea103259SMichael Clark     case 0x0b08: return "mhpmcounter8";
2303ea103259SMichael Clark     case 0x0b09: return "mhpmcounter9";
2304ea103259SMichael Clark     case 0x0b0a: return "mhpmcounter10";
2305ea103259SMichael Clark     case 0x0b0b: return "mhpmcounter11";
2306ea103259SMichael Clark     case 0x0b0c: return "mhpmcounter12";
2307ea103259SMichael Clark     case 0x0b0d: return "mhpmcounter13";
2308ea103259SMichael Clark     case 0x0b0e: return "mhpmcounter14";
2309ea103259SMichael Clark     case 0x0b0f: return "mhpmcounter15";
2310ea103259SMichael Clark     case 0x0b10: return "mhpmcounter16";
2311ea103259SMichael Clark     case 0x0b11: return "mhpmcounter17";
2312ea103259SMichael Clark     case 0x0b12: return "mhpmcounter18";
2313ea103259SMichael Clark     case 0x0b13: return "mhpmcounter19";
2314ea103259SMichael Clark     case 0x0b14: return "mhpmcounter20";
2315ea103259SMichael Clark     case 0x0b15: return "mhpmcounter21";
2316ea103259SMichael Clark     case 0x0b16: return "mhpmcounter22";
2317ea103259SMichael Clark     case 0x0b17: return "mhpmcounter23";
2318ea103259SMichael Clark     case 0x0b18: return "mhpmcounter24";
2319ea103259SMichael Clark     case 0x0b19: return "mhpmcounter25";
2320ea103259SMichael Clark     case 0x0b1a: return "mhpmcounter26";
2321ea103259SMichael Clark     case 0x0b1b: return "mhpmcounter27";
2322ea103259SMichael Clark     case 0x0b1c: return "mhpmcounter28";
2323ea103259SMichael Clark     case 0x0b1d: return "mhpmcounter29";
2324ea103259SMichael Clark     case 0x0b1e: return "mhpmcounter30";
2325ea103259SMichael Clark     case 0x0b1f: return "mhpmcounter31";
2326ea103259SMichael Clark     case 0x0b80: return "mcycleh";
2327ea103259SMichael Clark     case 0x0b81: return "mtimeh";
2328ea103259SMichael Clark     case 0x0b82: return "minstreth";
2329ea103259SMichael Clark     case 0x0b83: return "mhpmcounter3h";
2330ea103259SMichael Clark     case 0x0b84: return "mhpmcounter4h";
2331ea103259SMichael Clark     case 0x0b85: return "mhpmcounter5h";
2332ea103259SMichael Clark     case 0x0b86: return "mhpmcounter6h";
2333ea103259SMichael Clark     case 0x0b87: return "mhpmcounter7h";
2334ea103259SMichael Clark     case 0x0b88: return "mhpmcounter8h";
2335ea103259SMichael Clark     case 0x0b89: return "mhpmcounter9h";
2336ea103259SMichael Clark     case 0x0b8a: return "mhpmcounter10h";
2337ea103259SMichael Clark     case 0x0b8b: return "mhpmcounter11h";
2338ea103259SMichael Clark     case 0x0b8c: return "mhpmcounter12h";
2339ea103259SMichael Clark     case 0x0b8d: return "mhpmcounter13h";
2340ea103259SMichael Clark     case 0x0b8e: return "mhpmcounter14h";
2341ea103259SMichael Clark     case 0x0b8f: return "mhpmcounter15h";
2342ea103259SMichael Clark     case 0x0b90: return "mhpmcounter16h";
2343ea103259SMichael Clark     case 0x0b91: return "mhpmcounter17h";
2344ea103259SMichael Clark     case 0x0b92: return "mhpmcounter18h";
2345ea103259SMichael Clark     case 0x0b93: return "mhpmcounter19h";
2346ea103259SMichael Clark     case 0x0b94: return "mhpmcounter20h";
2347ea103259SMichael Clark     case 0x0b95: return "mhpmcounter21h";
2348ea103259SMichael Clark     case 0x0b96: return "mhpmcounter22h";
2349ea103259SMichael Clark     case 0x0b97: return "mhpmcounter23h";
2350ea103259SMichael Clark     case 0x0b98: return "mhpmcounter24h";
2351ea103259SMichael Clark     case 0x0b99: return "mhpmcounter25h";
2352ea103259SMichael Clark     case 0x0b9a: return "mhpmcounter26h";
2353ea103259SMichael Clark     case 0x0b9b: return "mhpmcounter27h";
2354ea103259SMichael Clark     case 0x0b9c: return "mhpmcounter28h";
2355ea103259SMichael Clark     case 0x0b9d: return "mhpmcounter29h";
2356ea103259SMichael Clark     case 0x0b9e: return "mhpmcounter30h";
2357ea103259SMichael Clark     case 0x0b9f: return "mhpmcounter31h";
2358ea103259SMichael Clark     case 0x0c00: return "cycle";
2359ea103259SMichael Clark     case 0x0c01: return "time";
2360ea103259SMichael Clark     case 0x0c02: return "instret";
236107f4964dSYang Liu     case 0x0c20: return "vl";
236207f4964dSYang Liu     case 0x0c21: return "vtype";
236307f4964dSYang Liu     case 0x0c22: return "vlenb";
2364ea103259SMichael Clark     case 0x0c80: return "cycleh";
2365ea103259SMichael Clark     case 0x0c81: return "timeh";
2366ea103259SMichael Clark     case 0x0c82: return "instreth";
2367ea103259SMichael Clark     case 0x0d00: return "scycle";
2368ea103259SMichael Clark     case 0x0d01: return "stime";
2369ea103259SMichael Clark     case 0x0d02: return "sinstret";
2370ea103259SMichael Clark     case 0x0d80: return "scycleh";
2371ea103259SMichael Clark     case 0x0d81: return "stimeh";
2372ea103259SMichael Clark     case 0x0d82: return "sinstreth";
2373ea103259SMichael Clark     case 0x0e00: return "hcycle";
2374ea103259SMichael Clark     case 0x0e01: return "htime";
2375ea103259SMichael Clark     case 0x0e02: return "hinstret";
2376ea103259SMichael Clark     case 0x0e80: return "hcycleh";
2377ea103259SMichael Clark     case 0x0e81: return "htimeh";
2378ea103259SMichael Clark     case 0x0e82: return "hinstreth";
2379ea103259SMichael Clark     case 0x0f11: return "mvendorid";
2380ea103259SMichael Clark     case 0x0f12: return "marchid";
2381ea103259SMichael Clark     case 0x0f13: return "mimpid";
2382ea103259SMichael Clark     case 0x0f14: return "mhartid";
2383ea103259SMichael Clark     default: return NULL;
2384ea103259SMichael Clark     }
2385ea103259SMichael Clark }
2386ea103259SMichael Clark 
2387ea103259SMichael Clark /* decode opcode */
2388ea103259SMichael Clark 
2389ea103259SMichael Clark static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
2390ea103259SMichael Clark {
2391ea103259SMichael Clark     rv_inst inst = dec->inst;
2392ea103259SMichael Clark     rv_opcode op = rv_op_illegal;
2393ea103259SMichael Clark     switch (((inst >> 0) & 0b11)) {
2394ea103259SMichael Clark     case 0:
2395ea103259SMichael Clark         switch (((inst >> 13) & 0b111)) {
2396ea103259SMichael Clark         case 0: op = rv_op_c_addi4spn; break;
2397ea103259SMichael Clark         case 1:
2398ea103259SMichael Clark             if (isa == rv128) {
2399ea103259SMichael Clark                 op = rv_op_c_lq;
2400ea103259SMichael Clark             } else {
2401ea103259SMichael Clark                 op = rv_op_c_fld;
2402ea103259SMichael Clark             }
2403ea103259SMichael Clark             break;
2404ea103259SMichael Clark         case 2: op = rv_op_c_lw; break;
2405ea103259SMichael Clark         case 3:
2406ea103259SMichael Clark             if (isa == rv32) {
2407ea103259SMichael Clark                 op = rv_op_c_flw;
2408ea103259SMichael Clark             } else {
2409ea103259SMichael Clark                 op = rv_op_c_ld;
2410ea103259SMichael Clark             }
2411ea103259SMichael Clark             break;
24122c71d02eSWeiwei Li         case 4:
24132c71d02eSWeiwei Li             switch ((inst >> 10) & 0b111) {
24142c71d02eSWeiwei Li             case 0: op = rv_op_c_lbu; break;
24152c71d02eSWeiwei Li             case 1:
24162c71d02eSWeiwei Li                 if (((inst >> 6) & 1) == 0) {
24172c71d02eSWeiwei Li                     op = rv_op_c_lhu;
24182c71d02eSWeiwei Li                 } else {
24192c71d02eSWeiwei Li                     op = rv_op_c_lh;
24202c71d02eSWeiwei Li                 }
24212c71d02eSWeiwei Li                 break;
24222c71d02eSWeiwei Li             case 2: op = rv_op_c_sb; break;
24232c71d02eSWeiwei Li             case 3:
24242c71d02eSWeiwei Li                 if (((inst >> 6) & 1) == 0) {
24252c71d02eSWeiwei Li                     op = rv_op_c_sh;
24262c71d02eSWeiwei Li                 }
24272c71d02eSWeiwei Li                 break;
24282c71d02eSWeiwei Li             }
24292c71d02eSWeiwei Li             break;
2430ea103259SMichael Clark         case 5:
2431ea103259SMichael Clark             if (isa == rv128) {
2432ea103259SMichael Clark                 op = rv_op_c_sq;
2433ea103259SMichael Clark             } else {
2434ea103259SMichael Clark                 op = rv_op_c_fsd;
2435ea103259SMichael Clark             }
2436ea103259SMichael Clark             break;
2437ea103259SMichael Clark         case 6: op = rv_op_c_sw; break;
2438ea103259SMichael Clark         case 7:
2439ea103259SMichael Clark             if (isa == rv32) {
2440ea103259SMichael Clark                 op = rv_op_c_fsw;
2441ea103259SMichael Clark             } else {
2442ea103259SMichael Clark                 op = rv_op_c_sd;
2443ea103259SMichael Clark             }
2444ea103259SMichael Clark             break;
2445ea103259SMichael Clark         }
2446ea103259SMichael Clark         break;
2447ea103259SMichael Clark     case 1:
2448ea103259SMichael Clark         switch (((inst >> 13) & 0b111)) {
2449ea103259SMichael Clark         case 0:
2450ea103259SMichael Clark             switch (((inst >> 2) & 0b11111111111)) {
2451ea103259SMichael Clark             case 0: op = rv_op_c_nop; break;
2452ea103259SMichael Clark             default: op = rv_op_c_addi; break;
2453ea103259SMichael Clark             }
2454ea103259SMichael Clark             break;
2455ea103259SMichael Clark         case 1:
2456ea103259SMichael Clark             if (isa == rv32) {
2457ea103259SMichael Clark                 op = rv_op_c_jal;
2458ea103259SMichael Clark             } else {
2459ea103259SMichael Clark                 op = rv_op_c_addiw;
2460ea103259SMichael Clark             }
2461ea103259SMichael Clark             break;
2462ea103259SMichael Clark         case 2: op = rv_op_c_li; break;
2463ea103259SMichael Clark         case 3:
2464ea103259SMichael Clark             switch (((inst >> 7) & 0b11111)) {
2465ea103259SMichael Clark             case 2: op = rv_op_c_addi16sp; break;
2466ea103259SMichael Clark             default: op = rv_op_c_lui; break;
2467ea103259SMichael Clark             }
2468ea103259SMichael Clark             break;
2469ea103259SMichael Clark         case 4:
2470ea103259SMichael Clark             switch (((inst >> 10) & 0b11)) {
2471ea103259SMichael Clark             case 0:
2472ea103259SMichael Clark                 op = rv_op_c_srli;
2473ea103259SMichael Clark                 break;
2474ea103259SMichael Clark             case 1:
2475ea103259SMichael Clark                 op = rv_op_c_srai;
2476ea103259SMichael Clark                 break;
2477ea103259SMichael Clark             case 2: op = rv_op_c_andi; break;
2478ea103259SMichael Clark             case 3:
2479ea103259SMichael Clark                 switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) {
2480ea103259SMichael Clark                 case 0: op = rv_op_c_sub; break;
2481ea103259SMichael Clark                 case 1: op = rv_op_c_xor; break;
2482ea103259SMichael Clark                 case 2: op = rv_op_c_or; break;
2483ea103259SMichael Clark                 case 3: op = rv_op_c_and; break;
2484ea103259SMichael Clark                 case 4: op = rv_op_c_subw; break;
2485ea103259SMichael Clark                 case 5: op = rv_op_c_addw; break;
24862c71d02eSWeiwei Li                 case 6: op = rv_op_c_mul; break;
24872c71d02eSWeiwei Li                 case 7:
24882c71d02eSWeiwei Li                     switch ((inst >> 2) & 0b111) {
24892c71d02eSWeiwei Li                     case 0: op = rv_op_c_zext_b; break;
24902c71d02eSWeiwei Li                     case 1: op = rv_op_c_sext_b; break;
24912c71d02eSWeiwei Li                     case 2: op = rv_op_c_zext_h; break;
24922c71d02eSWeiwei Li                     case 3: op = rv_op_c_sext_h; break;
24932c71d02eSWeiwei Li                     case 4: op = rv_op_c_zext_w; break;
24942c71d02eSWeiwei Li                     case 5: op = rv_op_c_not; break;
24952c71d02eSWeiwei Li                     }
24962c71d02eSWeiwei Li                     break;
2497ea103259SMichael Clark                 }
2498ea103259SMichael Clark                 break;
2499ea103259SMichael Clark             }
2500ea103259SMichael Clark             break;
2501ea103259SMichael Clark         case 5: op = rv_op_c_j; break;
2502ea103259SMichael Clark         case 6: op = rv_op_c_beqz; break;
2503ea103259SMichael Clark         case 7: op = rv_op_c_bnez; break;
2504ea103259SMichael Clark         }
2505ea103259SMichael Clark         break;
2506ea103259SMichael Clark     case 2:
2507ea103259SMichael Clark         switch (((inst >> 13) & 0b111)) {
2508ea103259SMichael Clark         case 0:
2509ea103259SMichael Clark             op = rv_op_c_slli;
2510ea103259SMichael Clark             break;
2511ea103259SMichael Clark         case 1:
2512ea103259SMichael Clark             if (isa == rv128) {
2513ea103259SMichael Clark                 op = rv_op_c_lqsp;
2514ea103259SMichael Clark             } else {
2515ea103259SMichael Clark                 op = rv_op_c_fldsp;
2516ea103259SMichael Clark             }
2517ea103259SMichael Clark             break;
2518ea103259SMichael Clark         case 2: op = rv_op_c_lwsp; break;
2519ea103259SMichael Clark         case 3:
2520ea103259SMichael Clark             if (isa == rv32) {
2521ea103259SMichael Clark                 op = rv_op_c_flwsp;
2522ea103259SMichael Clark             } else {
2523ea103259SMichael Clark                 op = rv_op_c_ldsp;
2524ea103259SMichael Clark             }
2525ea103259SMichael Clark             break;
2526ea103259SMichael Clark         case 4:
2527ea103259SMichael Clark             switch (((inst >> 12) & 0b1)) {
2528ea103259SMichael Clark             case 0:
2529ea103259SMichael Clark                 switch (((inst >> 2) & 0b11111)) {
2530ea103259SMichael Clark                 case 0: op = rv_op_c_jr; break;
2531ea103259SMichael Clark                 default: op = rv_op_c_mv; break;
2532ea103259SMichael Clark                 }
2533ea103259SMichael Clark                 break;
2534ea103259SMichael Clark             case 1:
2535ea103259SMichael Clark                 switch (((inst >> 2) & 0b11111)) {
2536ea103259SMichael Clark                 case 0:
2537ea103259SMichael Clark                     switch (((inst >> 7) & 0b11111)) {
2538ea103259SMichael Clark                     case 0: op = rv_op_c_ebreak; break;
2539ea103259SMichael Clark                     default: op = rv_op_c_jalr; break;
2540ea103259SMichael Clark                     }
2541ea103259SMichael Clark                     break;
2542ea103259SMichael Clark                 default: op = rv_op_c_add; break;
2543ea103259SMichael Clark                 }
2544ea103259SMichael Clark                 break;
2545ea103259SMichael Clark             }
2546ea103259SMichael Clark             break;
2547ea103259SMichael Clark         case 5:
2548ea103259SMichael Clark             if (isa == rv128) {
2549ea103259SMichael Clark                 op = rv_op_c_sqsp;
2550ea103259SMichael Clark             } else {
25511dc34be1SMichael Clark                 op = rv_op_c_fsdsp;
25522a2b221bSWeiwei Li                 if (dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) {
25532c71d02eSWeiwei Li                     switch ((inst >> 8) & 0b01111) {
25542c71d02eSWeiwei Li                     case 8:
25552c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
25562c71d02eSWeiwei Li                             op = rv_op_cm_push;
25572c71d02eSWeiwei Li                         }
25582c71d02eSWeiwei Li                         break;
25592c71d02eSWeiwei Li                     case 10:
25602c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
25612c71d02eSWeiwei Li                             op = rv_op_cm_pop;
25622c71d02eSWeiwei Li                         }
25632c71d02eSWeiwei Li                         break;
25642c71d02eSWeiwei Li                     case 12:
25652c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
25662c71d02eSWeiwei Li                             op = rv_op_cm_popretz;
25672c71d02eSWeiwei Li                         }
25682c71d02eSWeiwei Li                         break;
25692c71d02eSWeiwei Li                     case 14:
25702c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
25712c71d02eSWeiwei Li                             op = rv_op_cm_popret;
25722c71d02eSWeiwei Li                         }
25732c71d02eSWeiwei Li                         break;
25742c71d02eSWeiwei Li                     }
25752c71d02eSWeiwei Li                 } else {
25762c71d02eSWeiwei Li                     switch ((inst >> 10) & 0b011) {
25772c71d02eSWeiwei Li                     case 0:
25782a2b221bSWeiwei Li                         if (!dec->cfg->ext_zcmt) {
25792a2b221bSWeiwei Li                             break;
25802a2b221bSWeiwei Li                         }
25812c71d02eSWeiwei Li                         if (((inst >> 2) & 0xFF) >= 32) {
25822c71d02eSWeiwei Li                             op = rv_op_cm_jalt;
25832c71d02eSWeiwei Li                         } else {
25842c71d02eSWeiwei Li                             op = rv_op_cm_jt;
25852c71d02eSWeiwei Li                         }
25862c71d02eSWeiwei Li                         break;
25872c71d02eSWeiwei Li                     case 3:
25882a2b221bSWeiwei Li                         if (!dec->cfg->ext_zcmp) {
25892a2b221bSWeiwei Li                             break;
25902a2b221bSWeiwei Li                         }
25912c71d02eSWeiwei Li                         switch ((inst >> 5) & 0b011) {
25922c71d02eSWeiwei Li                         case 1: op = rv_op_cm_mvsa01; break;
25932c71d02eSWeiwei Li                         case 3: op = rv_op_cm_mva01s; break;
25942c71d02eSWeiwei Li                         }
25952c71d02eSWeiwei Li                         break;
25962c71d02eSWeiwei Li                     }
25972c71d02eSWeiwei Li                 }
2598ea103259SMichael Clark             }
25991dc34be1SMichael Clark             break;
2600ea103259SMichael Clark         case 6: op = rv_op_c_swsp; break;
2601ea103259SMichael Clark         case 7:
2602ea103259SMichael Clark             if (isa == rv32) {
2603ea103259SMichael Clark                 op = rv_op_c_fswsp;
2604ea103259SMichael Clark             } else {
2605ea103259SMichael Clark                 op = rv_op_c_sdsp;
2606ea103259SMichael Clark             }
2607ea103259SMichael Clark             break;
2608ea103259SMichael Clark         }
2609ea103259SMichael Clark         break;
2610ea103259SMichael Clark     case 3:
2611ea103259SMichael Clark         switch (((inst >> 2) & 0b11111)) {
2612ea103259SMichael Clark         case 0:
2613ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
2614ea103259SMichael Clark             case 0: op = rv_op_lb; break;
2615ea103259SMichael Clark             case 1: op = rv_op_lh; break;
2616ea103259SMichael Clark             case 2: op = rv_op_lw; break;
2617ea103259SMichael Clark             case 3: op = rv_op_ld; break;
2618ea103259SMichael Clark             case 4: op = rv_op_lbu; break;
2619ea103259SMichael Clark             case 5: op = rv_op_lhu; break;
2620ea103259SMichael Clark             case 6: op = rv_op_lwu; break;
2621ea103259SMichael Clark             case 7: op = rv_op_ldu; break;
2622ea103259SMichael Clark             }
2623ea103259SMichael Clark             break;
2624ea103259SMichael Clark         case 1:
2625ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
262607f4964dSYang Liu             case 0:
262707f4964dSYang Liu                 switch (((inst >> 20) & 0b111111111111)) {
262807f4964dSYang Liu                 case 40: op = rv_op_vl1re8_v; break;
262907f4964dSYang Liu                 case 552: op = rv_op_vl2re8_v; break;
263007f4964dSYang Liu                 case 1576: op = rv_op_vl4re8_v; break;
263107f4964dSYang Liu                 case 3624: op = rv_op_vl8re8_v; break;
263207f4964dSYang Liu                 }
263307f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
263407f4964dSYang Liu                 case 0:
263507f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
263607f4964dSYang Liu                     case 0: op = rv_op_vle8_v; break;
263707f4964dSYang Liu                     case 11: op = rv_op_vlm_v; break;
263807f4964dSYang Liu                     case 16: op = rv_op_vle8ff_v; break;
263907f4964dSYang Liu                     }
264007f4964dSYang Liu                     break;
264107f4964dSYang Liu                 case 1: op = rv_op_vluxei8_v; break;
264207f4964dSYang Liu                 case 2: op = rv_op_vlse8_v; break;
264307f4964dSYang Liu                 case 3: op = rv_op_vloxei8_v; break;
264407f4964dSYang Liu                 }
264507f4964dSYang Liu                 break;
2646ea103259SMichael Clark             case 2: op = rv_op_flw; break;
2647ea103259SMichael Clark             case 3: op = rv_op_fld; break;
2648ea103259SMichael Clark             case 4: op = rv_op_flq; break;
264907f4964dSYang Liu             case 5:
265007f4964dSYang Liu                 switch (((inst >> 20) & 0b111111111111)) {
265107f4964dSYang Liu                 case 40: op = rv_op_vl1re16_v; break;
265207f4964dSYang Liu                 case 552: op = rv_op_vl2re16_v; break;
265307f4964dSYang Liu                 case 1576: op = rv_op_vl4re16_v; break;
265407f4964dSYang Liu                 case 3624: op = rv_op_vl8re16_v; break;
265507f4964dSYang Liu                 }
265607f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
265707f4964dSYang Liu                 case 0:
265807f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
265907f4964dSYang Liu                     case 0: op = rv_op_vle16_v; break;
266007f4964dSYang Liu                     case 16: op = rv_op_vle16ff_v; break;
266107f4964dSYang Liu                     }
266207f4964dSYang Liu                     break;
266307f4964dSYang Liu                 case 1: op = rv_op_vluxei16_v; break;
266407f4964dSYang Liu                 case 2: op = rv_op_vlse16_v; break;
266507f4964dSYang Liu                 case 3: op = rv_op_vloxei16_v; break;
266607f4964dSYang Liu                 }
266707f4964dSYang Liu                 break;
266807f4964dSYang Liu             case 6:
266907f4964dSYang Liu                 switch (((inst >> 20) & 0b111111111111)) {
267007f4964dSYang Liu                 case 40: op = rv_op_vl1re32_v; break;
267107f4964dSYang Liu                 case 552: op = rv_op_vl2re32_v; break;
267207f4964dSYang Liu                 case 1576: op = rv_op_vl4re32_v; break;
267307f4964dSYang Liu                 case 3624: op = rv_op_vl8re32_v; break;
267407f4964dSYang Liu                 }
267507f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
267607f4964dSYang Liu                 case 0:
267707f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
267807f4964dSYang Liu                     case 0: op = rv_op_vle32_v; break;
267907f4964dSYang Liu                     case 16: op = rv_op_vle32ff_v; break;
268007f4964dSYang Liu                     }
268107f4964dSYang Liu                     break;
268207f4964dSYang Liu                 case 1: op = rv_op_vluxei32_v; break;
268307f4964dSYang Liu                 case 2: op = rv_op_vlse32_v; break;
268407f4964dSYang Liu                 case 3: op = rv_op_vloxei32_v; break;
268507f4964dSYang Liu                 }
268607f4964dSYang Liu                 break;
268707f4964dSYang Liu             case 7:
268807f4964dSYang Liu                 switch (((inst >> 20) & 0b111111111111)) {
268907f4964dSYang Liu                 case 40: op = rv_op_vl1re64_v; break;
269007f4964dSYang Liu                 case 552: op = rv_op_vl2re64_v; break;
269107f4964dSYang Liu                 case 1576: op = rv_op_vl4re64_v; break;
269207f4964dSYang Liu                 case 3624: op = rv_op_vl8re64_v; break;
269307f4964dSYang Liu                 }
269407f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
269507f4964dSYang Liu                 case 0:
269607f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
269707f4964dSYang Liu                     case 0: op = rv_op_vle64_v; break;
269807f4964dSYang Liu                     case 16: op = rv_op_vle64ff_v; break;
269907f4964dSYang Liu                     }
270007f4964dSYang Liu                     break;
270107f4964dSYang Liu                 case 1: op = rv_op_vluxei64_v; break;
270207f4964dSYang Liu                 case 2: op = rv_op_vlse64_v; break;
270307f4964dSYang Liu                 case 3: op = rv_op_vloxei64_v; break;
270407f4964dSYang Liu                 }
270507f4964dSYang Liu                 break;
2706ea103259SMichael Clark             }
2707ea103259SMichael Clark             break;
2708ea103259SMichael Clark         case 3:
2709ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
2710ea103259SMichael Clark             case 0: op = rv_op_fence; break;
2711ea103259SMichael Clark             case 1: op = rv_op_fence_i; break;
2712ea103259SMichael Clark             case 2: op = rv_op_lq; break;
2713ea103259SMichael Clark             }
2714ea103259SMichael Clark             break;
2715ea103259SMichael Clark         case 4:
2716ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
2717ea103259SMichael Clark             case 0: op = rv_op_addi; break;
2718ea103259SMichael Clark             case 1:
2719ea103259SMichael Clark                 switch (((inst >> 27) & 0b11111)) {
272002c1b569SPhilipp Tomsich                 case 0b00000: op = rv_op_slli; break;
27215748c886SWeiwei Li                 case 0b00001:
27225748c886SWeiwei Li                     switch (((inst >> 20) & 0b1111111)) {
27235748c886SWeiwei Li                     case 0b0001111: op = rv_op_zip; break;
27245748c886SWeiwei Li                     }
27255748c886SWeiwei Li                     break;
27265748c886SWeiwei Li                 case 0b00010:
27275748c886SWeiwei Li                     switch (((inst >> 20) & 0b1111111)) {
27285748c886SWeiwei Li                     case 0b0000000: op = rv_op_sha256sum0; break;
27295748c886SWeiwei Li                     case 0b0000001: op = rv_op_sha256sum1; break;
27305748c886SWeiwei Li                     case 0b0000010: op = rv_op_sha256sig0; break;
27315748c886SWeiwei Li                     case 0b0000011: op = rv_op_sha256sig1; break;
27325748c886SWeiwei Li                     case 0b0000100: op = rv_op_sha512sum0; break;
27335748c886SWeiwei Li                     case 0b0000101: op = rv_op_sha512sum1; break;
27345748c886SWeiwei Li                     case 0b0000110: op = rv_op_sha512sig0; break;
27355748c886SWeiwei Li                     case 0b0000111: op = rv_op_sha512sig1; break;
27365748c886SWeiwei Li                     case 0b0001000: op = rv_op_sm3p0; break;
27375748c886SWeiwei Li                     case 0b0001001: op = rv_op_sm3p1; break;
27385748c886SWeiwei Li                     }
27395748c886SWeiwei Li                     break;
274002c1b569SPhilipp Tomsich                 case 0b00101: op = rv_op_bseti; break;
27415748c886SWeiwei Li                 case 0b00110:
27425748c886SWeiwei Li                     switch (((inst >> 20) & 0b1111111)) {
27435748c886SWeiwei Li                     case 0b0000000: op = rv_op_aes64im; break;
27445748c886SWeiwei Li                     default:
27455748c886SWeiwei Li                         if (((inst >> 24) & 0b0111) == 0b001) {
27465748c886SWeiwei Li                             op = rv_op_aes64ks1i;
27475748c886SWeiwei Li                         }
27485748c886SWeiwei Li                         break;
27495748c886SWeiwei Li                      }
27505748c886SWeiwei Li                      break;
275102c1b569SPhilipp Tomsich                 case 0b01001: op = rv_op_bclri; break;
275202c1b569SPhilipp Tomsich                 case 0b01101: op = rv_op_binvi; break;
275302c1b569SPhilipp Tomsich                 case 0b01100:
275402c1b569SPhilipp Tomsich                     switch (((inst >> 20) & 0b1111111)) {
275502c1b569SPhilipp Tomsich                     case 0b0000000: op = rv_op_clz; break;
275602c1b569SPhilipp Tomsich                     case 0b0000001: op = rv_op_ctz; break;
275702c1b569SPhilipp Tomsich                     case 0b0000010: op = rv_op_cpop; break;
275802c1b569SPhilipp Tomsich                       /* 0b0000011 */
275902c1b569SPhilipp Tomsich                     case 0b0000100: op = rv_op_sext_b; break;
276002c1b569SPhilipp Tomsich                     case 0b0000101: op = rv_op_sext_h; break;
276102c1b569SPhilipp Tomsich                     }
276202c1b569SPhilipp Tomsich                     break;
2763ea103259SMichael Clark                 }
2764ea103259SMichael Clark                 break;
2765ea103259SMichael Clark             case 2: op = rv_op_slti; break;
2766ea103259SMichael Clark             case 3: op = rv_op_sltiu; break;
2767ea103259SMichael Clark             case 4: op = rv_op_xori; break;
2768ea103259SMichael Clark             case 5:
2769ea103259SMichael Clark                 switch (((inst >> 27) & 0b11111)) {
277002c1b569SPhilipp Tomsich                 case 0b00000: op = rv_op_srli; break;
27715748c886SWeiwei Li                 case 0b00001:
27725748c886SWeiwei Li                     switch (((inst >> 20) & 0b1111111)) {
27735748c886SWeiwei Li                     case 0b0001111: op = rv_op_unzip; break;
27745748c886SWeiwei Li                     }
27755748c886SWeiwei Li                     break;
277602c1b569SPhilipp Tomsich                 case 0b00101: op = rv_op_orc_b; break;
277702c1b569SPhilipp Tomsich                 case 0b01000: op = rv_op_srai; break;
277802c1b569SPhilipp Tomsich                 case 0b01001: op = rv_op_bexti; break;
277902c1b569SPhilipp Tomsich                 case 0b01100: op = rv_op_rori; break;
278002c1b569SPhilipp Tomsich                 case 0b01101:
278102c1b569SPhilipp Tomsich                     switch ((inst >> 20) & 0b1111111) {
27825748c886SWeiwei Li                     case 0b0011000: op = rv_op_rev8; break;
278302c1b569SPhilipp Tomsich                     case 0b0111000: op = rv_op_rev8; break;
27845748c886SWeiwei Li                     case 0b0000111: op = rv_op_brev8; break;
278502c1b569SPhilipp Tomsich                     }
278602c1b569SPhilipp Tomsich                     break;
2787ea103259SMichael Clark                 }
2788ea103259SMichael Clark                 break;
2789ea103259SMichael Clark             case 6: op = rv_op_ori; break;
2790ea103259SMichael Clark             case 7: op = rv_op_andi; break;
2791ea103259SMichael Clark             }
2792ea103259SMichael Clark             break;
2793ea103259SMichael Clark         case 5: op = rv_op_auipc; break;
2794ea103259SMichael Clark         case 6:
2795ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
2796ea103259SMichael Clark             case 0: op = rv_op_addiw; break;
2797ea103259SMichael Clark             case 1:
279813e269f6SIvan Klokov                 switch (((inst >> 26) & 0b111111)) {
2799ea103259SMichael Clark                 case 0: op = rv_op_slliw; break;
280013e269f6SIvan Klokov                 case 2: op = rv_op_slli_uw; break;
280113e269f6SIvan Klokov                 case 24:
280202c1b569SPhilipp Tomsich                     switch ((inst >> 20) & 0b11111) {
280302c1b569SPhilipp Tomsich                     case 0b00000: op = rv_op_clzw; break;
280402c1b569SPhilipp Tomsich                     case 0b00001: op = rv_op_ctzw; break;
280502c1b569SPhilipp Tomsich                     case 0b00010: op = rv_op_cpopw; break;
280602c1b569SPhilipp Tomsich                     }
280702c1b569SPhilipp Tomsich                     break;
2808ea103259SMichael Clark                 }
2809ea103259SMichael Clark                 break;
2810ea103259SMichael Clark             case 5:
2811ea103259SMichael Clark                 switch (((inst >> 25) & 0b1111111)) {
2812ea103259SMichael Clark                 case 0: op = rv_op_srliw; break;
2813ea103259SMichael Clark                 case 32: op = rv_op_sraiw; break;
281402c1b569SPhilipp Tomsich                 case 48: op = rv_op_roriw; break;
2815ea103259SMichael Clark                 }
2816ea103259SMichael Clark                 break;
2817ea103259SMichael Clark             }
2818ea103259SMichael Clark             break;
2819ea103259SMichael Clark         case 8:
2820ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
2821ea103259SMichael Clark             case 0: op = rv_op_sb; break;
2822ea103259SMichael Clark             case 1: op = rv_op_sh; break;
2823ea103259SMichael Clark             case 2: op = rv_op_sw; break;
2824ea103259SMichael Clark             case 3: op = rv_op_sd; break;
2825ea103259SMichael Clark             case 4: op = rv_op_sq; break;
2826ea103259SMichael Clark             }
2827ea103259SMichael Clark             break;
2828ea103259SMichael Clark         case 9:
2829ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
283007f4964dSYang Liu             case 0:
283107f4964dSYang Liu                 switch (((inst >> 20) & 0b111111111111)) {
283207f4964dSYang Liu                 case 40: op = rv_op_vs1r_v; break;
283307f4964dSYang Liu                 case 552: op = rv_op_vs2r_v; break;
283407f4964dSYang Liu                 case 1576: op = rv_op_vs4r_v; break;
283507f4964dSYang Liu                 case 3624: op = rv_op_vs8r_v; break;
283607f4964dSYang Liu                 }
283707f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
283807f4964dSYang Liu                 case 0:
283907f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
284007f4964dSYang Liu                     case 0: op = rv_op_vse8_v; break;
284107f4964dSYang Liu                     case 11: op = rv_op_vsm_v; break;
284207f4964dSYang Liu                     }
284307f4964dSYang Liu                     break;
284407f4964dSYang Liu                 case 1: op = rv_op_vsuxei8_v; break;
284507f4964dSYang Liu                 case 2: op = rv_op_vsse8_v; break;
284607f4964dSYang Liu                 case 3: op = rv_op_vsoxei8_v; break;
284707f4964dSYang Liu                 }
284807f4964dSYang Liu                 break;
2849ea103259SMichael Clark             case 2: op = rv_op_fsw; break;
2850ea103259SMichael Clark             case 3: op = rv_op_fsd; break;
2851ea103259SMichael Clark             case 4: op = rv_op_fsq; break;
285207f4964dSYang Liu             case 5:
285307f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
285407f4964dSYang Liu                 case 0:
285507f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
285607f4964dSYang Liu                     case 0: op = rv_op_vse16_v; break;
285707f4964dSYang Liu                     }
285807f4964dSYang Liu                     break;
285907f4964dSYang Liu                 case 1: op = rv_op_vsuxei16_v; break;
286007f4964dSYang Liu                 case 2: op = rv_op_vsse16_v; break;
286107f4964dSYang Liu                 case 3: op = rv_op_vsoxei16_v; break;
286207f4964dSYang Liu                 }
286307f4964dSYang Liu                 break;
286407f4964dSYang Liu             case 6:
286507f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
286607f4964dSYang Liu                 case 0:
286707f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
286807f4964dSYang Liu                     case 0: op = rv_op_vse32_v; break;
286907f4964dSYang Liu                     }
287007f4964dSYang Liu                     break;
287107f4964dSYang Liu                 case 1: op = rv_op_vsuxei32_v; break;
287207f4964dSYang Liu                 case 2: op = rv_op_vsse32_v; break;
287307f4964dSYang Liu                 case 3: op = rv_op_vsoxei32_v; break;
287407f4964dSYang Liu                 }
287507f4964dSYang Liu                 break;
287607f4964dSYang Liu             case 7:
287707f4964dSYang Liu                 switch (((inst >> 26) & 0b111)) {
287807f4964dSYang Liu                 case 0:
287907f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
288007f4964dSYang Liu                     case 0: op = rv_op_vse64_v; break;
288107f4964dSYang Liu                     }
288207f4964dSYang Liu                     break;
288307f4964dSYang Liu                 case 1: op = rv_op_vsuxei64_v; break;
288407f4964dSYang Liu                 case 2: op = rv_op_vsse64_v; break;
288507f4964dSYang Liu                 case 3: op = rv_op_vsoxei64_v; break;
288607f4964dSYang Liu                 }
288707f4964dSYang Liu                 break;
2888ea103259SMichael Clark             }
2889ea103259SMichael Clark             break;
2890ea103259SMichael Clark         case 11:
2891*98624d13SWeiwei Li             switch (((inst >> 24) & 0b11111000) |
2892*98624d13SWeiwei Li                     ((inst >> 12) & 0b00000111)) {
2893ea103259SMichael Clark             case 2: op = rv_op_amoadd_w; break;
2894ea103259SMichael Clark             case 3: op = rv_op_amoadd_d; break;
2895ea103259SMichael Clark             case 4: op = rv_op_amoadd_q; break;
2896ea103259SMichael Clark             case 10: op = rv_op_amoswap_w; break;
2897ea103259SMichael Clark             case 11: op = rv_op_amoswap_d; break;
2898ea103259SMichael Clark             case 12: op = rv_op_amoswap_q; break;
2899ea103259SMichael Clark             case 18:
2900ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
2901ea103259SMichael Clark                 case 0: op = rv_op_lr_w; break;
2902ea103259SMichael Clark                 }
2903ea103259SMichael Clark                 break;
2904ea103259SMichael Clark             case 19:
2905ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
2906ea103259SMichael Clark                 case 0: op = rv_op_lr_d; break;
2907ea103259SMichael Clark                 }
2908ea103259SMichael Clark                 break;
2909ea103259SMichael Clark             case 20:
2910ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
2911ea103259SMichael Clark                 case 0: op = rv_op_lr_q; break;
2912ea103259SMichael Clark                 }
2913ea103259SMichael Clark                 break;
2914ea103259SMichael Clark             case 26: op = rv_op_sc_w; break;
2915ea103259SMichael Clark             case 27: op = rv_op_sc_d; break;
2916ea103259SMichael Clark             case 28: op = rv_op_sc_q; break;
2917ea103259SMichael Clark             case 34: op = rv_op_amoxor_w; break;
2918ea103259SMichael Clark             case 35: op = rv_op_amoxor_d; break;
2919ea103259SMichael Clark             case 36: op = rv_op_amoxor_q; break;
2920ea103259SMichael Clark             case 66: op = rv_op_amoor_w; break;
2921ea103259SMichael Clark             case 67: op = rv_op_amoor_d; break;
2922ea103259SMichael Clark             case 68: op = rv_op_amoor_q; break;
2923ea103259SMichael Clark             case 98: op = rv_op_amoand_w; break;
2924ea103259SMichael Clark             case 99: op = rv_op_amoand_d; break;
2925ea103259SMichael Clark             case 100: op = rv_op_amoand_q; break;
2926ea103259SMichael Clark             case 130: op = rv_op_amomin_w; break;
2927ea103259SMichael Clark             case 131: op = rv_op_amomin_d; break;
2928ea103259SMichael Clark             case 132: op = rv_op_amomin_q; break;
2929ea103259SMichael Clark             case 162: op = rv_op_amomax_w; break;
2930ea103259SMichael Clark             case 163: op = rv_op_amomax_d; break;
2931ea103259SMichael Clark             case 164: op = rv_op_amomax_q; break;
2932ea103259SMichael Clark             case 194: op = rv_op_amominu_w; break;
2933ea103259SMichael Clark             case 195: op = rv_op_amominu_d; break;
2934ea103259SMichael Clark             case 196: op = rv_op_amominu_q; break;
2935ea103259SMichael Clark             case 226: op = rv_op_amomaxu_w; break;
2936ea103259SMichael Clark             case 227: op = rv_op_amomaxu_d; break;
2937ea103259SMichael Clark             case 228: op = rv_op_amomaxu_q; break;
2938ea103259SMichael Clark             }
2939ea103259SMichael Clark             break;
2940ea103259SMichael Clark         case 12:
2941*98624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
2942*98624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
2943ea103259SMichael Clark             case 0: op = rv_op_add; break;
2944ea103259SMichael Clark             case 1: op = rv_op_sll; break;
2945ea103259SMichael Clark             case 2: op = rv_op_slt; break;
2946ea103259SMichael Clark             case 3: op = rv_op_sltu; break;
2947ea103259SMichael Clark             case 4: op = rv_op_xor; break;
2948ea103259SMichael Clark             case 5: op = rv_op_srl; break;
2949ea103259SMichael Clark             case 6: op = rv_op_or; break;
2950ea103259SMichael Clark             case 7: op = rv_op_and; break;
2951ea103259SMichael Clark             case 8: op = rv_op_mul; break;
2952ea103259SMichael Clark             case 9: op = rv_op_mulh; break;
2953ea103259SMichael Clark             case 10: op = rv_op_mulhsu; break;
2954ea103259SMichael Clark             case 11: op = rv_op_mulhu; break;
2955ea103259SMichael Clark             case 12: op = rv_op_div; break;
2956ea103259SMichael Clark             case 13: op = rv_op_divu; break;
2957ea103259SMichael Clark             case 14: op = rv_op_rem; break;
2958ea103259SMichael Clark             case 15: op = rv_op_remu; break;
295902c1b569SPhilipp Tomsich             case 36:
296002c1b569SPhilipp Tomsich                 switch ((inst >> 20) & 0b11111) {
296102c1b569SPhilipp Tomsich                 case 0: op = rv_op_zext_h; break;
29625748c886SWeiwei Li                 default: op = rv_op_pack; break;
296302c1b569SPhilipp Tomsich                 }
296402c1b569SPhilipp Tomsich                 break;
29655748c886SWeiwei Li             case 39: op = rv_op_packh; break;
29665748c886SWeiwei Li 
296702c1b569SPhilipp Tomsich             case 41: op = rv_op_clmul; break;
296802c1b569SPhilipp Tomsich             case 42: op = rv_op_clmulr; break;
296902c1b569SPhilipp Tomsich             case 43: op = rv_op_clmulh; break;
297002c1b569SPhilipp Tomsich             case 44: op = rv_op_min; break;
297102c1b569SPhilipp Tomsich             case 45: op = rv_op_minu; break;
297202c1b569SPhilipp Tomsich             case 46: op = rv_op_max; break;
297302c1b569SPhilipp Tomsich             case 47: op = rv_op_maxu; break;
2974d397be9aSRichard Henderson             case 075: op = rv_op_czero_eqz; break;
2975d397be9aSRichard Henderson             case 077: op = rv_op_czero_nez; break;
297602c1b569SPhilipp Tomsich             case 130: op = rv_op_sh1add; break;
297702c1b569SPhilipp Tomsich             case 132: op = rv_op_sh2add; break;
297802c1b569SPhilipp Tomsich             case 134: op = rv_op_sh3add; break;
297902c1b569SPhilipp Tomsich             case 161: op = rv_op_bset; break;
29805748c886SWeiwei Li             case 162: op = rv_op_xperm4; break;
29815748c886SWeiwei Li             case 164: op = rv_op_xperm8; break;
29825748c886SWeiwei Li             case 200: op = rv_op_aes64es; break;
29835748c886SWeiwei Li             case 216: op = rv_op_aes64esm; break;
29845748c886SWeiwei Li             case 232: op = rv_op_aes64ds; break;
29855748c886SWeiwei Li             case 248: op = rv_op_aes64dsm; break;
2986ea103259SMichael Clark             case 256: op = rv_op_sub; break;
298702c1b569SPhilipp Tomsich             case 260: op = rv_op_xnor; break;
2988ea103259SMichael Clark             case 261: op = rv_op_sra; break;
298902c1b569SPhilipp Tomsich             case 262: op = rv_op_orn; break;
299002c1b569SPhilipp Tomsich             case 263: op = rv_op_andn; break;
299102c1b569SPhilipp Tomsich             case 289: op = rv_op_bclr; break;
299202c1b569SPhilipp Tomsich             case 293: op = rv_op_bext; break;
29935748c886SWeiwei Li             case 320: op = rv_op_sha512sum0r; break;
29945748c886SWeiwei Li             case 328: op = rv_op_sha512sum1r; break;
29955748c886SWeiwei Li             case 336: op = rv_op_sha512sig0l; break;
29965748c886SWeiwei Li             case 344: op = rv_op_sha512sig1l; break;
29975748c886SWeiwei Li             case 368: op = rv_op_sha512sig0h; break;
29985748c886SWeiwei Li             case 376: op = rv_op_sha512sig1h; break;
299902c1b569SPhilipp Tomsich             case 385: op = rv_op_rol; break;
30005748c886SWeiwei Li             case 389: op = rv_op_ror; break;
300102c1b569SPhilipp Tomsich             case 417: op = rv_op_binv; break;
30025748c886SWeiwei Li             case 504: op = rv_op_aes64ks2; break;
30035748c886SWeiwei Li             }
30045748c886SWeiwei Li             switch ((inst >> 25) & 0b0011111) {
30055748c886SWeiwei Li             case 17: op = rv_op_aes32esi; break;
30065748c886SWeiwei Li             case 19: op = rv_op_aes32esmi; break;
30075748c886SWeiwei Li             case 21: op = rv_op_aes32dsi; break;
30085748c886SWeiwei Li             case 23: op = rv_op_aes32dsmi; break;
30095748c886SWeiwei Li             case 24: op = rv_op_sm4ed; break;
30105748c886SWeiwei Li             case 26: op = rv_op_sm4ks; break;
3011ea103259SMichael Clark             }
3012ea103259SMichael Clark             break;
3013ea103259SMichael Clark         case 13: op = rv_op_lui; break;
3014ea103259SMichael Clark         case 14:
3015*98624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
3016*98624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
3017ea103259SMichael Clark             case 0: op = rv_op_addw; break;
3018ea103259SMichael Clark             case 1: op = rv_op_sllw; break;
3019ea103259SMichael Clark             case 5: op = rv_op_srlw; break;
3020ea103259SMichael Clark             case 8: op = rv_op_mulw; break;
3021ea103259SMichael Clark             case 12: op = rv_op_divw; break;
3022ea103259SMichael Clark             case 13: op = rv_op_divuw; break;
3023ea103259SMichael Clark             case 14: op = rv_op_remw; break;
3024ea103259SMichael Clark             case 15: op = rv_op_remuw; break;
302502c1b569SPhilipp Tomsich             case 32: op = rv_op_add_uw; break;
302602c1b569SPhilipp Tomsich             case 36:
302702c1b569SPhilipp Tomsich                 switch ((inst >> 20) & 0b11111) {
302802c1b569SPhilipp Tomsich                 case 0: op = rv_op_zext_h; break;
30295748c886SWeiwei Li                 default: op = rv_op_packw; break;
303002c1b569SPhilipp Tomsich                 }
303102c1b569SPhilipp Tomsich                 break;
303202c1b569SPhilipp Tomsich             case 130: op = rv_op_sh1add_uw; break;
303302c1b569SPhilipp Tomsich             case 132: op = rv_op_sh2add_uw; break;
303402c1b569SPhilipp Tomsich             case 134: op = rv_op_sh3add_uw; break;
3035ea103259SMichael Clark             case 256: op = rv_op_subw; break;
3036ea103259SMichael Clark             case 261: op = rv_op_sraw; break;
303702c1b569SPhilipp Tomsich             case 385: op = rv_op_rolw; break;
303802c1b569SPhilipp Tomsich             case 389: op = rv_op_rorw; break;
3039ea103259SMichael Clark             }
3040ea103259SMichael Clark             break;
3041ea103259SMichael Clark         case 16:
3042ea103259SMichael Clark             switch (((inst >> 25) & 0b11)) {
3043ea103259SMichael Clark             case 0: op = rv_op_fmadd_s; break;
3044ea103259SMichael Clark             case 1: op = rv_op_fmadd_d; break;
3045ea103259SMichael Clark             case 3: op = rv_op_fmadd_q; break;
3046ea103259SMichael Clark             }
3047ea103259SMichael Clark             break;
3048ea103259SMichael Clark         case 17:
3049ea103259SMichael Clark             switch (((inst >> 25) & 0b11)) {
3050ea103259SMichael Clark             case 0: op = rv_op_fmsub_s; break;
3051ea103259SMichael Clark             case 1: op = rv_op_fmsub_d; break;
3052ea103259SMichael Clark             case 3: op = rv_op_fmsub_q; break;
3053ea103259SMichael Clark             }
3054ea103259SMichael Clark             break;
3055ea103259SMichael Clark         case 18:
3056ea103259SMichael Clark             switch (((inst >> 25) & 0b11)) {
3057ea103259SMichael Clark             case 0: op = rv_op_fnmsub_s; break;
3058ea103259SMichael Clark             case 1: op = rv_op_fnmsub_d; break;
3059ea103259SMichael Clark             case 3: op = rv_op_fnmsub_q; break;
3060ea103259SMichael Clark             }
3061ea103259SMichael Clark             break;
3062ea103259SMichael Clark         case 19:
3063ea103259SMichael Clark             switch (((inst >> 25) & 0b11)) {
3064ea103259SMichael Clark             case 0: op = rv_op_fnmadd_s; break;
3065ea103259SMichael Clark             case 1: op = rv_op_fnmadd_d; break;
3066ea103259SMichael Clark             case 3: op = rv_op_fnmadd_q; break;
3067ea103259SMichael Clark             }
3068ea103259SMichael Clark             break;
3069ea103259SMichael Clark         case 20:
3070ea103259SMichael Clark             switch (((inst >> 25) & 0b1111111)) {
3071ea103259SMichael Clark             case 0: op = rv_op_fadd_s; break;
3072ea103259SMichael Clark             case 1: op = rv_op_fadd_d; break;
3073ea103259SMichael Clark             case 3: op = rv_op_fadd_q; break;
3074ea103259SMichael Clark             case 4: op = rv_op_fsub_s; break;
3075ea103259SMichael Clark             case 5: op = rv_op_fsub_d; break;
3076ea103259SMichael Clark             case 7: op = rv_op_fsub_q; break;
3077ea103259SMichael Clark             case 8: op = rv_op_fmul_s; break;
3078ea103259SMichael Clark             case 9: op = rv_op_fmul_d; break;
3079ea103259SMichael Clark             case 11: op = rv_op_fmul_q; break;
3080ea103259SMichael Clark             case 12: op = rv_op_fdiv_s; break;
3081ea103259SMichael Clark             case 13: op = rv_op_fdiv_d; break;
3082ea103259SMichael Clark             case 15: op = rv_op_fdiv_q; break;
3083ea103259SMichael Clark             case 16:
3084ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3085ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_s; break;
3086ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_s; break;
3087ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_s; break;
3088ea103259SMichael Clark                 }
3089ea103259SMichael Clark                 break;
3090ea103259SMichael Clark             case 17:
3091ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3092ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_d; break;
3093ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_d; break;
3094ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_d; break;
3095ea103259SMichael Clark                 }
3096ea103259SMichael Clark                 break;
3097ea103259SMichael Clark             case 19:
3098ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3099ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_q; break;
3100ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_q; break;
3101ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_q; break;
3102ea103259SMichael Clark                 }
3103ea103259SMichael Clark                 break;
3104ea103259SMichael Clark             case 20:
3105ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3106ea103259SMichael Clark                 case 0: op = rv_op_fmin_s; break;
3107ea103259SMichael Clark                 case 1: op = rv_op_fmax_s; break;
3108ea103259SMichael Clark                 }
3109ea103259SMichael Clark                 break;
3110ea103259SMichael Clark             case 21:
3111ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3112ea103259SMichael Clark                 case 0: op = rv_op_fmin_d; break;
3113ea103259SMichael Clark                 case 1: op = rv_op_fmax_d; break;
3114ea103259SMichael Clark                 }
3115ea103259SMichael Clark                 break;
3116ea103259SMichael Clark             case 23:
3117ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3118ea103259SMichael Clark                 case 0: op = rv_op_fmin_q; break;
3119ea103259SMichael Clark                 case 1: op = rv_op_fmax_q; break;
3120ea103259SMichael Clark                 }
3121ea103259SMichael Clark                 break;
3122ea103259SMichael Clark             case 32:
3123ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3124ea103259SMichael Clark                 case 1: op = rv_op_fcvt_s_d; break;
3125ea103259SMichael Clark                 case 3: op = rv_op_fcvt_s_q; break;
3126ea103259SMichael Clark                 }
3127ea103259SMichael Clark                 break;
3128ea103259SMichael Clark             case 33:
3129ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3130ea103259SMichael Clark                 case 0: op = rv_op_fcvt_d_s; break;
3131ea103259SMichael Clark                 case 3: op = rv_op_fcvt_d_q; break;
3132ea103259SMichael Clark                 }
3133ea103259SMichael Clark                 break;
3134ea103259SMichael Clark             case 35:
3135ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3136ea103259SMichael Clark                 case 0: op = rv_op_fcvt_q_s; break;
3137ea103259SMichael Clark                 case 1: op = rv_op_fcvt_q_d; break;
3138ea103259SMichael Clark                 }
3139ea103259SMichael Clark                 break;
3140ea103259SMichael Clark             case 44:
3141ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3142ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_s; break;
3143ea103259SMichael Clark                 }
3144ea103259SMichael Clark                 break;
3145ea103259SMichael Clark             case 45:
3146ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3147ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_d; break;
3148ea103259SMichael Clark                 }
3149ea103259SMichael Clark                 break;
3150ea103259SMichael Clark             case 47:
3151ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3152ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_q; break;
3153ea103259SMichael Clark                 }
3154ea103259SMichael Clark                 break;
3155ea103259SMichael Clark             case 80:
3156ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3157ea103259SMichael Clark                 case 0: op = rv_op_fle_s; break;
3158ea103259SMichael Clark                 case 1: op = rv_op_flt_s; break;
3159ea103259SMichael Clark                 case 2: op = rv_op_feq_s; break;
3160ea103259SMichael Clark                 }
3161ea103259SMichael Clark                 break;
3162ea103259SMichael Clark             case 81:
3163ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3164ea103259SMichael Clark                 case 0: op = rv_op_fle_d; break;
3165ea103259SMichael Clark                 case 1: op = rv_op_flt_d; break;
3166ea103259SMichael Clark                 case 2: op = rv_op_feq_d; break;
3167ea103259SMichael Clark                 }
3168ea103259SMichael Clark                 break;
3169ea103259SMichael Clark             case 83:
3170ea103259SMichael Clark                 switch (((inst >> 12) & 0b111)) {
3171ea103259SMichael Clark                 case 0: op = rv_op_fle_q; break;
3172ea103259SMichael Clark                 case 1: op = rv_op_flt_q; break;
3173ea103259SMichael Clark                 case 2: op = rv_op_feq_q; break;
3174ea103259SMichael Clark                 }
3175ea103259SMichael Clark                 break;
3176ea103259SMichael Clark             case 96:
3177ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3178ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_s; break;
3179ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_s; break;
3180ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_s; break;
3181ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_s; break;
3182ea103259SMichael Clark                 }
3183ea103259SMichael Clark                 break;
3184ea103259SMichael Clark             case 97:
3185ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3186ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_d; break;
3187ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_d; break;
3188ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_d; break;
3189ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_d; break;
3190ea103259SMichael Clark                 }
3191ea103259SMichael Clark                 break;
3192ea103259SMichael Clark             case 99:
3193ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3194ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_q; break;
3195ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_q; break;
3196ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_q; break;
3197ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_q; break;
3198ea103259SMichael Clark                 }
3199ea103259SMichael Clark                 break;
3200ea103259SMichael Clark             case 104:
3201ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3202ea103259SMichael Clark                 case 0: op = rv_op_fcvt_s_w; break;
3203ea103259SMichael Clark                 case 1: op = rv_op_fcvt_s_wu; break;
3204ea103259SMichael Clark                 case 2: op = rv_op_fcvt_s_l; break;
3205ea103259SMichael Clark                 case 3: op = rv_op_fcvt_s_lu; break;
3206ea103259SMichael Clark                 }
3207ea103259SMichael Clark                 break;
3208ea103259SMichael Clark             case 105:
3209ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3210ea103259SMichael Clark                 case 0: op = rv_op_fcvt_d_w; break;
3211ea103259SMichael Clark                 case 1: op = rv_op_fcvt_d_wu; break;
3212ea103259SMichael Clark                 case 2: op = rv_op_fcvt_d_l; break;
3213ea103259SMichael Clark                 case 3: op = rv_op_fcvt_d_lu; break;
3214ea103259SMichael Clark                 }
3215ea103259SMichael Clark                 break;
3216ea103259SMichael Clark             case 107:
3217ea103259SMichael Clark                 switch (((inst >> 20) & 0b11111)) {
3218ea103259SMichael Clark                 case 0: op = rv_op_fcvt_q_w; break;
3219ea103259SMichael Clark                 case 1: op = rv_op_fcvt_q_wu; break;
3220ea103259SMichael Clark                 case 2: op = rv_op_fcvt_q_l; break;
3221ea103259SMichael Clark                 case 3: op = rv_op_fcvt_q_lu; break;
3222ea103259SMichael Clark                 }
3223ea103259SMichael Clark                 break;
3224ea103259SMichael Clark             case 112:
3225*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3226*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3227ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_s; break;
3228ea103259SMichael Clark                 case 1: op = rv_op_fclass_s; break;
3229ea103259SMichael Clark                 }
3230ea103259SMichael Clark                 break;
3231ea103259SMichael Clark             case 113:
3232*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3233*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3234ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_d; break;
3235ea103259SMichael Clark                 case 1: op = rv_op_fclass_d; break;
3236ea103259SMichael Clark                 }
3237ea103259SMichael Clark                 break;
3238ea103259SMichael Clark             case 115:
3239*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3240*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3241ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_q; break;
3242ea103259SMichael Clark                 case 1: op = rv_op_fclass_q; break;
3243ea103259SMichael Clark                 }
3244ea103259SMichael Clark                 break;
3245ea103259SMichael Clark             case 120:
3246*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3247*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3248ea103259SMichael Clark                 case 0: op = rv_op_fmv_s_x; break;
3249ea103259SMichael Clark                 }
3250ea103259SMichael Clark                 break;
3251ea103259SMichael Clark             case 121:
3252*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3253*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3254ea103259SMichael Clark                 case 0: op = rv_op_fmv_d_x; break;
3255ea103259SMichael Clark                 }
3256ea103259SMichael Clark                 break;
3257ea103259SMichael Clark             case 123:
3258*98624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
3259*98624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3260ea103259SMichael Clark                 case 0: op = rv_op_fmv_q_x; break;
3261ea103259SMichael Clark                 }
3262ea103259SMichael Clark                 break;
3263ea103259SMichael Clark             }
3264ea103259SMichael Clark             break;
326507f4964dSYang Liu         case 21:
326607f4964dSYang Liu             switch (((inst >> 12) & 0b111)) {
326707f4964dSYang Liu             case 0:
326807f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
326907f4964dSYang Liu                 case 0: op = rv_op_vadd_vv; break;
327007f4964dSYang Liu                 case 2: op = rv_op_vsub_vv; break;
327107f4964dSYang Liu                 case 4: op = rv_op_vminu_vv; break;
327207f4964dSYang Liu                 case 5: op = rv_op_vmin_vv; break;
327307f4964dSYang Liu                 case 6: op = rv_op_vmaxu_vv; break;
327407f4964dSYang Liu                 case 7: op = rv_op_vmax_vv; break;
327507f4964dSYang Liu                 case 9: op = rv_op_vand_vv; break;
327607f4964dSYang Liu                 case 10: op = rv_op_vor_vv; break;
327707f4964dSYang Liu                 case 11: op = rv_op_vxor_vv; break;
327807f4964dSYang Liu                 case 12: op = rv_op_vrgather_vv; break;
327907f4964dSYang Liu                 case 14: op = rv_op_vrgatherei16_vv; break;
3280*98624d13SWeiwei Li                 case 16:
3281*98624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
3282*98624d13SWeiwei Li                         op = rv_op_vadc_vvm;
3283*98624d13SWeiwei Li                     }
3284*98624d13SWeiwei Li                     break;
328507f4964dSYang Liu                 case 17: op = rv_op_vmadc_vvm; break;
3286*98624d13SWeiwei Li                 case 18:
3287*98624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
3288*98624d13SWeiwei Li                         op = rv_op_vsbc_vvm;
3289*98624d13SWeiwei Li                     }
3290*98624d13SWeiwei Li                     break;
329107f4964dSYang Liu                 case 19: op = rv_op_vmsbc_vvm; break;
329207f4964dSYang Liu                 case 23:
329307f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
329407f4964dSYang Liu                         op = rv_op_vmv_v_v;
329507f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
329607f4964dSYang Liu                         op = rv_op_vmerge_vvm;
329707f4964dSYang Liu                     break;
329807f4964dSYang Liu                 case 24: op = rv_op_vmseq_vv; break;
329907f4964dSYang Liu                 case 25: op = rv_op_vmsne_vv; break;
330007f4964dSYang Liu                 case 26: op = rv_op_vmsltu_vv; break;
330107f4964dSYang Liu                 case 27: op = rv_op_vmslt_vv; break;
330207f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vv; break;
330307f4964dSYang Liu                 case 29: op = rv_op_vmsle_vv; break;
330407f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vv; break;
330507f4964dSYang Liu                 case 33: op = rv_op_vsadd_vv; break;
330607f4964dSYang Liu                 case 34: op = rv_op_vssubu_vv; break;
330707f4964dSYang Liu                 case 35: op = rv_op_vssub_vv; break;
330807f4964dSYang Liu                 case 37: op = rv_op_vsll_vv; break;
330907f4964dSYang Liu                 case 39: op = rv_op_vsmul_vv; break;
331007f4964dSYang Liu                 case 40: op = rv_op_vsrl_vv; break;
331107f4964dSYang Liu                 case 41: op = rv_op_vsra_vv; break;
331207f4964dSYang Liu                 case 42: op = rv_op_vssrl_vv; break;
331307f4964dSYang Liu                 case 43: op = rv_op_vssra_vv; break;
331407f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wv; break;
331507f4964dSYang Liu                 case 45: op = rv_op_vnsra_wv; break;
331607f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wv; break;
331707f4964dSYang Liu                 case 47: op = rv_op_vnclip_wv; break;
331807f4964dSYang Liu                 case 48: op = rv_op_vwredsumu_vs; break;
331907f4964dSYang Liu                 case 49: op = rv_op_vwredsum_vs; break;
332007f4964dSYang Liu                 }
332107f4964dSYang Liu                 break;
332207f4964dSYang Liu             case 1:
332307f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
332407f4964dSYang Liu                 case 0: op = rv_op_vfadd_vv; break;
332507f4964dSYang Liu                 case 1: op = rv_op_vfredusum_vs; break;
332607f4964dSYang Liu                 case 2: op = rv_op_vfsub_vv; break;
332707f4964dSYang Liu                 case 3: op = rv_op_vfredosum_vs; break;
332807f4964dSYang Liu                 case 4: op = rv_op_vfmin_vv; break;
332907f4964dSYang Liu                 case 5: op = rv_op_vfredmin_vs; break;
333007f4964dSYang Liu                 case 6: op = rv_op_vfmax_vv; break;
333107f4964dSYang Liu                 case 7: op = rv_op_vfredmax_vs; break;
333207f4964dSYang Liu                 case 8: op = rv_op_vfsgnj_vv; break;
333307f4964dSYang Liu                 case 9: op = rv_op_vfsgnjn_vv; break;
333407f4964dSYang Liu                 case 10: op = rv_op_vfsgnjx_vv; break;
333507f4964dSYang Liu                 case 16:
333607f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
333707f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break;
333807f4964dSYang Liu                     }
333907f4964dSYang Liu                     break;
334007f4964dSYang Liu                 case 18:
334107f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
334207f4964dSYang Liu                     case 0: op = rv_op_vfcvt_xu_f_v; break;
334307f4964dSYang Liu                     case 1: op = rv_op_vfcvt_x_f_v; break;
334407f4964dSYang Liu                     case 2: op = rv_op_vfcvt_f_xu_v; break;
334507f4964dSYang Liu                     case 3: op = rv_op_vfcvt_f_x_v; break;
334607f4964dSYang Liu                     case 6: op = rv_op_vfcvt_rtz_xu_f_v; break;
334707f4964dSYang Liu                     case 7: op = rv_op_vfcvt_rtz_x_f_v; break;
334807f4964dSYang Liu                     case 8: op = rv_op_vfwcvt_xu_f_v; break;
334907f4964dSYang Liu                     case 9: op = rv_op_vfwcvt_x_f_v; break;
335007f4964dSYang Liu                     case 10: op = rv_op_vfwcvt_f_xu_v; break;
335107f4964dSYang Liu                     case 11: op = rv_op_vfwcvt_f_x_v; break;
335207f4964dSYang Liu                     case 12: op = rv_op_vfwcvt_f_f_v; break;
335307f4964dSYang Liu                     case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break;
335407f4964dSYang Liu                     case 15: op = rv_op_vfwcvt_rtz_x_f_v; break;
335507f4964dSYang Liu                     case 16: op = rv_op_vfncvt_xu_f_w; break;
335607f4964dSYang Liu                     case 17: op = rv_op_vfncvt_x_f_w; break;
335707f4964dSYang Liu                     case 18: op = rv_op_vfncvt_f_xu_w; break;
335807f4964dSYang Liu                     case 19: op = rv_op_vfncvt_f_x_w; break;
335907f4964dSYang Liu                     case 20: op = rv_op_vfncvt_f_f_w; break;
336007f4964dSYang Liu                     case 21: op = rv_op_vfncvt_rod_f_f_w; break;
336107f4964dSYang Liu                     case 22: op = rv_op_vfncvt_rtz_xu_f_w; break;
336207f4964dSYang Liu                     case 23: op = rv_op_vfncvt_rtz_x_f_w; break;
336307f4964dSYang Liu                     }
336407f4964dSYang Liu                     break;
336507f4964dSYang Liu                 case 19:
336607f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
336707f4964dSYang Liu                     case 0: op = rv_op_vfsqrt_v; break;
336807f4964dSYang Liu                     case 4: op = rv_op_vfrsqrt7_v; break;
336907f4964dSYang Liu                     case 5: op = rv_op_vfrec7_v; break;
337007f4964dSYang Liu                     case 16: op = rv_op_vfclass_v; break;
337107f4964dSYang Liu                     }
337207f4964dSYang Liu                     break;
337307f4964dSYang Liu                 case 24: op = rv_op_vmfeq_vv; break;
337407f4964dSYang Liu                 case 25: op = rv_op_vmfle_vv; break;
337507f4964dSYang Liu                 case 27: op = rv_op_vmflt_vv; break;
337607f4964dSYang Liu                 case 28: op = rv_op_vmfne_vv; break;
337707f4964dSYang Liu                 case 32: op = rv_op_vfdiv_vv; break;
337807f4964dSYang Liu                 case 36: op = rv_op_vfmul_vv; break;
337907f4964dSYang Liu                 case 40: op = rv_op_vfmadd_vv; break;
338007f4964dSYang Liu                 case 41: op = rv_op_vfnmadd_vv; break;
338107f4964dSYang Liu                 case 42: op = rv_op_vfmsub_vv; break;
338207f4964dSYang Liu                 case 43: op = rv_op_vfnmsub_vv; break;
338307f4964dSYang Liu                 case 44: op = rv_op_vfmacc_vv; break;
338407f4964dSYang Liu                 case 45: op = rv_op_vfnmacc_vv; break;
338507f4964dSYang Liu                 case 46: op = rv_op_vfmsac_vv; break;
338607f4964dSYang Liu                 case 47: op = rv_op_vfnmsac_vv; break;
338707f4964dSYang Liu                 case 48: op = rv_op_vfwadd_vv; break;
338807f4964dSYang Liu                 case 49: op = rv_op_vfwredusum_vs; break;
338907f4964dSYang Liu                 case 50: op = rv_op_vfwsub_vv; break;
339007f4964dSYang Liu                 case 51: op = rv_op_vfwredosum_vs; break;
339107f4964dSYang Liu                 case 52: op = rv_op_vfwadd_wv; break;
339207f4964dSYang Liu                 case 54: op = rv_op_vfwsub_wv; break;
339307f4964dSYang Liu                 case 56: op = rv_op_vfwmul_vv; break;
339407f4964dSYang Liu                 case 60: op = rv_op_vfwmacc_vv; break;
339507f4964dSYang Liu                 case 61: op = rv_op_vfwnmacc_vv; break;
339607f4964dSYang Liu                 case 62: op = rv_op_vfwmsac_vv; break;
339707f4964dSYang Liu                 case 63: op = rv_op_vfwnmsac_vv; break;
339807f4964dSYang Liu                 }
339907f4964dSYang Liu                 break;
340007f4964dSYang Liu             case 2:
340107f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
340207f4964dSYang Liu                 case 0: op = rv_op_vredsum_vs; break;
340307f4964dSYang Liu                 case 1: op = rv_op_vredand_vs; break;
340407f4964dSYang Liu                 case 2: op = rv_op_vredor_vs; break;
340507f4964dSYang Liu                 case 3: op = rv_op_vredxor_vs; break;
340607f4964dSYang Liu                 case 4: op = rv_op_vredminu_vs; break;
340707f4964dSYang Liu                 case 5: op = rv_op_vredmin_vs; break;
340807f4964dSYang Liu                 case 6: op = rv_op_vredmaxu_vs; break;
340907f4964dSYang Liu                 case 7: op = rv_op_vredmax_vs; break;
341007f4964dSYang Liu                 case 8: op = rv_op_vaaddu_vv; break;
341107f4964dSYang Liu                 case 9: op = rv_op_vaadd_vv; break;
341207f4964dSYang Liu                 case 10: op = rv_op_vasubu_vv; break;
341307f4964dSYang Liu                 case 11: op = rv_op_vasub_vv; break;
341407f4964dSYang Liu                 case 16:
341507f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
341607f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break;
341707f4964dSYang Liu                     case 16: op = rv_op_vcpop_m; break;
341807f4964dSYang Liu                     case 17: op = rv_op_vfirst_m; break;
341907f4964dSYang Liu                     }
342007f4964dSYang Liu                     break;
342107f4964dSYang Liu                 case 18:
342207f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
342307f4964dSYang Liu                     case 2: op = rv_op_vzext_vf8; break;
342407f4964dSYang Liu                     case 3: op = rv_op_vsext_vf8; break;
342507f4964dSYang Liu                     case 4: op = rv_op_vzext_vf4; break;
342607f4964dSYang Liu                     case 5: op = rv_op_vsext_vf4; break;
342707f4964dSYang Liu                     case 6: op = rv_op_vzext_vf2; break;
342807f4964dSYang Liu                     case 7: op = rv_op_vsext_vf2; break;
342907f4964dSYang Liu                     }
343007f4964dSYang Liu                     break;
343107f4964dSYang Liu                 case 20:
343207f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
343307f4964dSYang Liu                     case 1: op = rv_op_vmsbf_m;  break;
343407f4964dSYang Liu                     case 2: op = rv_op_vmsof_m; break;
343507f4964dSYang Liu                     case 3: op = rv_op_vmsif_m; break;
343607f4964dSYang Liu                     case 16: op = rv_op_viota_m; break;
3437*98624d13SWeiwei Li                     case 17:
3438*98624d13SWeiwei Li                         if (((inst >> 20) & 0b11111) == 0) {
3439*98624d13SWeiwei Li                             op = rv_op_vid_v;
3440*98624d13SWeiwei Li                         }
3441*98624d13SWeiwei Li                         break;
344207f4964dSYang Liu                     }
344307f4964dSYang Liu                     break;
344407f4964dSYang Liu                 case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break;
344507f4964dSYang Liu                 case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break;
344607f4964dSYang Liu                 case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break;
344707f4964dSYang Liu                 case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break;
344807f4964dSYang Liu                 case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break;
344907f4964dSYang Liu                 case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break;
345007f4964dSYang Liu                 case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break;
345107f4964dSYang Liu                 case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break;
345207f4964dSYang Liu                 case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break;
345307f4964dSYang Liu                 case 32: op = rv_op_vdivu_vv; break;
345407f4964dSYang Liu                 case 33: op = rv_op_vdiv_vv; break;
345507f4964dSYang Liu                 case 34: op = rv_op_vremu_vv; break;
345607f4964dSYang Liu                 case 35: op = rv_op_vrem_vv; break;
345707f4964dSYang Liu                 case 36: op = rv_op_vmulhu_vv; break;
345807f4964dSYang Liu                 case 37: op = rv_op_vmul_vv; break;
345907f4964dSYang Liu                 case 38: op = rv_op_vmulhsu_vv; break;
346007f4964dSYang Liu                 case 39: op = rv_op_vmulh_vv; break;
346107f4964dSYang Liu                 case 41: op = rv_op_vmadd_vv; break;
346207f4964dSYang Liu                 case 43: op = rv_op_vnmsub_vv; break;
346307f4964dSYang Liu                 case 45: op = rv_op_vmacc_vv; break;
346407f4964dSYang Liu                 case 47: op = rv_op_vnmsac_vv; break;
346507f4964dSYang Liu                 case 48: op = rv_op_vwaddu_vv; break;
346607f4964dSYang Liu                 case 49: op = rv_op_vwadd_vv; break;
346707f4964dSYang Liu                 case 50: op = rv_op_vwsubu_vv; break;
346807f4964dSYang Liu                 case 51: op = rv_op_vwsub_vv; break;
346907f4964dSYang Liu                 case 52: op = rv_op_vwaddu_wv; break;
347007f4964dSYang Liu                 case 53: op = rv_op_vwadd_wv; break;
347107f4964dSYang Liu                 case 54: op = rv_op_vwsubu_wv; break;
347207f4964dSYang Liu                 case 55: op = rv_op_vwsub_wv; break;
347307f4964dSYang Liu                 case 56: op = rv_op_vwmulu_vv; break;
347407f4964dSYang Liu                 case 58: op = rv_op_vwmulsu_vv; break;
347507f4964dSYang Liu                 case 59: op = rv_op_vwmul_vv; break;
347607f4964dSYang Liu                 case 60: op = rv_op_vwmaccu_vv; break;
347707f4964dSYang Liu                 case 61: op = rv_op_vwmacc_vv; break;
347807f4964dSYang Liu                 case 63: op = rv_op_vwmaccsu_vv; break;
347907f4964dSYang Liu                 }
348007f4964dSYang Liu                 break;
348107f4964dSYang Liu             case 3:
348207f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
348307f4964dSYang Liu                 case 0: op = rv_op_vadd_vi; break;
348407f4964dSYang Liu                 case 3: op = rv_op_vrsub_vi; break;
348507f4964dSYang Liu                 case 9: op = rv_op_vand_vi; break;
348607f4964dSYang Liu                 case 10: op = rv_op_vor_vi; break;
348707f4964dSYang Liu                 case 11: op = rv_op_vxor_vi; break;
348807f4964dSYang Liu                 case 12: op = rv_op_vrgather_vi; break;
348907f4964dSYang Liu                 case 14: op = rv_op_vslideup_vi; break;
349007f4964dSYang Liu                 case 15: op = rv_op_vslidedown_vi; break;
3491*98624d13SWeiwei Li                 case 16:
3492*98624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
3493*98624d13SWeiwei Li                         op = rv_op_vadc_vim;
3494*98624d13SWeiwei Li                     }
3495*98624d13SWeiwei Li                     break;
349607f4964dSYang Liu                 case 17: op = rv_op_vmadc_vim; break;
349707f4964dSYang Liu                 case 23:
349807f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
349907f4964dSYang Liu                         op = rv_op_vmv_v_i;
350007f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
350107f4964dSYang Liu                         op = rv_op_vmerge_vim;
350207f4964dSYang Liu                     break;
350307f4964dSYang Liu                 case 24: op = rv_op_vmseq_vi; break;
350407f4964dSYang Liu                 case 25: op = rv_op_vmsne_vi; break;
350507f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vi; break;
350607f4964dSYang Liu                 case 29: op = rv_op_vmsle_vi; break;
350707f4964dSYang Liu                 case 30: op = rv_op_vmsgtu_vi; break;
350807f4964dSYang Liu                 case 31: op = rv_op_vmsgt_vi; break;
350907f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vi; break;
351007f4964dSYang Liu                 case 33: op = rv_op_vsadd_vi; break;
351107f4964dSYang Liu                 case 37: op = rv_op_vsll_vi; break;
351207f4964dSYang Liu                 case 39:
351307f4964dSYang Liu                     switch (((inst >> 15) & 0b11111)) {
351407f4964dSYang Liu                     case 0: op = rv_op_vmv1r_v; break;
351507f4964dSYang Liu                     case 1: op = rv_op_vmv2r_v; break;
351607f4964dSYang Liu                     case 3: op = rv_op_vmv4r_v; break;
351707f4964dSYang Liu                     case 7: op = rv_op_vmv8r_v; break;
351807f4964dSYang Liu                     }
351907f4964dSYang Liu                     break;
352007f4964dSYang Liu                 case 40: op = rv_op_vsrl_vi; break;
352107f4964dSYang Liu                 case 41: op = rv_op_vsra_vi; break;
352207f4964dSYang Liu                 case 42: op = rv_op_vssrl_vi; break;
352307f4964dSYang Liu                 case 43: op = rv_op_vssra_vi; break;
352407f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wi; break;
352507f4964dSYang Liu                 case 45: op = rv_op_vnsra_wi; break;
352607f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wi; break;
352707f4964dSYang Liu                 case 47: op = rv_op_vnclip_wi; break;
352807f4964dSYang Liu                 }
352907f4964dSYang Liu                 break;
353007f4964dSYang Liu             case 4:
353107f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
353207f4964dSYang Liu                 case 0: op = rv_op_vadd_vx; break;
353307f4964dSYang Liu                 case 2: op = rv_op_vsub_vx; break;
353407f4964dSYang Liu                 case 3: op = rv_op_vrsub_vx; break;
353507f4964dSYang Liu                 case 4: op = rv_op_vminu_vx; break;
353607f4964dSYang Liu                 case 5: op = rv_op_vmin_vx; break;
353707f4964dSYang Liu                 case 6: op = rv_op_vmaxu_vx; break;
353807f4964dSYang Liu                 case 7: op = rv_op_vmax_vx; break;
353907f4964dSYang Liu                 case 9: op = rv_op_vand_vx; break;
354007f4964dSYang Liu                 case 10: op = rv_op_vor_vx; break;
354107f4964dSYang Liu                 case 11: op = rv_op_vxor_vx; break;
354207f4964dSYang Liu                 case 12: op = rv_op_vrgather_vx; break;
354307f4964dSYang Liu                 case 14: op = rv_op_vslideup_vx; break;
354407f4964dSYang Liu                 case 15: op = rv_op_vslidedown_vx; break;
3545*98624d13SWeiwei Li                 case 16:
3546*98624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
3547*98624d13SWeiwei Li                         op = rv_op_vadc_vxm;
3548*98624d13SWeiwei Li                     }
3549*98624d13SWeiwei Li                     break;
355007f4964dSYang Liu                 case 17: op = rv_op_vmadc_vxm; break;
3551*98624d13SWeiwei Li                 case 18:
3552*98624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
3553*98624d13SWeiwei Li                         op = rv_op_vsbc_vxm;
3554*98624d13SWeiwei Li                     }
3555*98624d13SWeiwei Li                     break;
355607f4964dSYang Liu                 case 19: op = rv_op_vmsbc_vxm; break;
355707f4964dSYang Liu                 case 23:
355807f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
355907f4964dSYang Liu                         op = rv_op_vmv_v_x;
356007f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
356107f4964dSYang Liu                         op = rv_op_vmerge_vxm;
356207f4964dSYang Liu                     break;
356307f4964dSYang Liu                 case 24: op = rv_op_vmseq_vx; break;
356407f4964dSYang Liu                 case 25: op = rv_op_vmsne_vx; break;
356507f4964dSYang Liu                 case 26: op = rv_op_vmsltu_vx; break;
356607f4964dSYang Liu                 case 27: op = rv_op_vmslt_vx; break;
356707f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vx; break;
356807f4964dSYang Liu                 case 29: op = rv_op_vmsle_vx; break;
356907f4964dSYang Liu                 case 30: op = rv_op_vmsgtu_vx; break;
357007f4964dSYang Liu                 case 31: op = rv_op_vmsgt_vx; break;
357107f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vx; break;
357207f4964dSYang Liu                 case 33: op = rv_op_vsadd_vx; break;
357307f4964dSYang Liu                 case 34: op = rv_op_vssubu_vx; break;
357407f4964dSYang Liu                 case 35: op = rv_op_vssub_vx; break;
357507f4964dSYang Liu                 case 37: op = rv_op_vsll_vx; break;
357607f4964dSYang Liu                 case 39: op = rv_op_vsmul_vx; break;
357707f4964dSYang Liu                 case 40: op = rv_op_vsrl_vx; break;
357807f4964dSYang Liu                 case 41: op = rv_op_vsra_vx; break;
357907f4964dSYang Liu                 case 42: op = rv_op_vssrl_vx; break;
358007f4964dSYang Liu                 case 43: op = rv_op_vssra_vx; break;
358107f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wx; break;
358207f4964dSYang Liu                 case 45: op = rv_op_vnsra_wx; break;
358307f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wx; break;
358407f4964dSYang Liu                 case 47: op = rv_op_vnclip_wx; break;
358507f4964dSYang Liu                 }
358607f4964dSYang Liu                 break;
358707f4964dSYang Liu             case 5:
358807f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
358907f4964dSYang Liu                 case 0: op = rv_op_vfadd_vf; break;
359007f4964dSYang Liu                 case 2: op = rv_op_vfsub_vf; break;
359107f4964dSYang Liu                 case 4: op = rv_op_vfmin_vf; break;
359207f4964dSYang Liu                 case 6: op = rv_op_vfmax_vf; break;
359307f4964dSYang Liu                 case 8: op = rv_op_vfsgnj_vf; break;
359407f4964dSYang Liu                 case 9: op = rv_op_vfsgnjn_vf; break;
359507f4964dSYang Liu                 case 10: op = rv_op_vfsgnjx_vf; break;
359607f4964dSYang Liu                 case 14: op = rv_op_vfslide1up_vf; break;
359707f4964dSYang Liu                 case 15: op = rv_op_vfslide1down_vf; break;
359807f4964dSYang Liu                 case 16:
359907f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
360007f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break;
360107f4964dSYang Liu                     }
360207f4964dSYang Liu                     break;
360307f4964dSYang Liu                 case 23:
360407f4964dSYang Liu                     if (((inst >> 25) & 1) == 0)
360507f4964dSYang Liu                         op = rv_op_vfmerge_vfm;
360607f4964dSYang Liu                     else if (((inst >> 20) & 0b111111) == 32)
360707f4964dSYang Liu                         op = rv_op_vfmv_v_f;
360807f4964dSYang Liu                     break;
360907f4964dSYang Liu                 case 24: op = rv_op_vmfeq_vf; break;
361007f4964dSYang Liu                 case 25: op = rv_op_vmfle_vf; break;
361107f4964dSYang Liu                 case 27: op = rv_op_vmflt_vf; break;
361207f4964dSYang Liu                 case 28: op = rv_op_vmfne_vf; break;
361307f4964dSYang Liu                 case 29: op = rv_op_vmfgt_vf; break;
361407f4964dSYang Liu                 case 31: op = rv_op_vmfge_vf; break;
361507f4964dSYang Liu                 case 32: op = rv_op_vfdiv_vf; break;
361607f4964dSYang Liu                 case 33: op = rv_op_vfrdiv_vf; break;
361707f4964dSYang Liu                 case 36: op = rv_op_vfmul_vf; break;
361807f4964dSYang Liu                 case 39: op = rv_op_vfrsub_vf; break;
361907f4964dSYang Liu                 case 40: op = rv_op_vfmadd_vf; break;
362007f4964dSYang Liu                 case 41: op = rv_op_vfnmadd_vf; break;
362107f4964dSYang Liu                 case 42: op = rv_op_vfmsub_vf; break;
362207f4964dSYang Liu                 case 43: op = rv_op_vfnmsub_vf; break;
362307f4964dSYang Liu                 case 44: op = rv_op_vfmacc_vf; break;
362407f4964dSYang Liu                 case 45: op = rv_op_vfnmacc_vf; break;
362507f4964dSYang Liu                 case 46: op = rv_op_vfmsac_vf; break;
362607f4964dSYang Liu                 case 47: op = rv_op_vfnmsac_vf; break;
362707f4964dSYang Liu                 case 48: op = rv_op_vfwadd_vf; break;
362807f4964dSYang Liu                 case 50: op = rv_op_vfwsub_vf; break;
362907f4964dSYang Liu                 case 52: op = rv_op_vfwadd_wf; break;
363007f4964dSYang Liu                 case 54: op = rv_op_vfwsub_wf; break;
363107f4964dSYang Liu                 case 56: op = rv_op_vfwmul_vf; break;
363207f4964dSYang Liu                 case 60: op = rv_op_vfwmacc_vf; break;
363307f4964dSYang Liu                 case 61: op = rv_op_vfwnmacc_vf; break;
363407f4964dSYang Liu                 case 62: op = rv_op_vfwmsac_vf; break;
363507f4964dSYang Liu                 case 63: op = rv_op_vfwnmsac_vf; break;
363607f4964dSYang Liu                 }
363707f4964dSYang Liu                 break;
363807f4964dSYang Liu             case 6:
363907f4964dSYang Liu                 switch (((inst >> 26) & 0b111111)) {
364007f4964dSYang Liu                 case 8: op = rv_op_vaaddu_vx; break;
364107f4964dSYang Liu                 case 9: op = rv_op_vaadd_vx; break;
364207f4964dSYang Liu                 case 10: op = rv_op_vasubu_vx; break;
364307f4964dSYang Liu                 case 11: op = rv_op_vasub_vx; break;
364407f4964dSYang Liu                 case 14: op = rv_op_vslide1up_vx; break;
364507f4964dSYang Liu                 case 15: op = rv_op_vslide1down_vx; break;
364607f4964dSYang Liu                 case 16:
364707f4964dSYang Liu                     switch (((inst >> 20) & 0b11111)) {
364807f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break;
364907f4964dSYang Liu                     }
365007f4964dSYang Liu                     break;
365107f4964dSYang Liu                 case 32: op = rv_op_vdivu_vx; break;
365207f4964dSYang Liu                 case 33: op = rv_op_vdiv_vx; break;
365307f4964dSYang Liu                 case 34: op = rv_op_vremu_vx; break;
365407f4964dSYang Liu                 case 35: op = rv_op_vrem_vx; break;
365507f4964dSYang Liu                 case 36: op = rv_op_vmulhu_vx; break;
365607f4964dSYang Liu                 case 37: op = rv_op_vmul_vx; break;
365707f4964dSYang Liu                 case 38: op = rv_op_vmulhsu_vx; break;
365807f4964dSYang Liu                 case 39: op = rv_op_vmulh_vx; break;
365907f4964dSYang Liu                 case 41: op = rv_op_vmadd_vx; break;
366007f4964dSYang Liu                 case 43: op = rv_op_vnmsub_vx; break;
366107f4964dSYang Liu                 case 45: op = rv_op_vmacc_vx; break;
366207f4964dSYang Liu                 case 47: op = rv_op_vnmsac_vx; break;
366307f4964dSYang Liu                 case 48: op = rv_op_vwaddu_vx; break;
366407f4964dSYang Liu                 case 49: op = rv_op_vwadd_vx; break;
366507f4964dSYang Liu                 case 50: op = rv_op_vwsubu_vx; break;
366607f4964dSYang Liu                 case 51: op = rv_op_vwsub_vx; break;
366707f4964dSYang Liu                 case 52: op = rv_op_vwaddu_wx; break;
366807f4964dSYang Liu                 case 53: op = rv_op_vwadd_wx; break;
366907f4964dSYang Liu                 case 54: op = rv_op_vwsubu_wx; break;
367007f4964dSYang Liu                 case 55: op = rv_op_vwsub_wx; break;
367107f4964dSYang Liu                 case 56: op = rv_op_vwmulu_vx; break;
367207f4964dSYang Liu                 case 58: op = rv_op_vwmulsu_vx; break;
367307f4964dSYang Liu                 case 59: op = rv_op_vwmul_vx; break;
367407f4964dSYang Liu                 case 60: op = rv_op_vwmaccu_vx; break;
367507f4964dSYang Liu                 case 61: op = rv_op_vwmacc_vx; break;
367607f4964dSYang Liu                 case 62: op = rv_op_vwmaccus_vx; break;
367707f4964dSYang Liu                 case 63: op = rv_op_vwmaccsu_vx; break;
367807f4964dSYang Liu                 }
367907f4964dSYang Liu                 break;
368007f4964dSYang Liu             case 7:
368107f4964dSYang Liu                 if (((inst >> 31) & 1) == 0) {
368207f4964dSYang Liu                     op = rv_op_vsetvli;
368307f4964dSYang Liu                 } else if ((inst >> 30) & 1) {
368407f4964dSYang Liu                     op = rv_op_vsetivli;
368507f4964dSYang Liu                 } else if (((inst >> 25) & 0b11111) == 0) {
368607f4964dSYang Liu                     op = rv_op_vsetvl;
368707f4964dSYang Liu                 }
368807f4964dSYang Liu                 break;
368907f4964dSYang Liu             }
369007f4964dSYang Liu             break;
3691ea103259SMichael Clark         case 22:
3692ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
3693ea103259SMichael Clark             case 0: op = rv_op_addid; break;
3694ea103259SMichael Clark             case 1:
3695ea103259SMichael Clark                 switch (((inst >> 26) & 0b111111)) {
3696ea103259SMichael Clark                 case 0: op = rv_op_sllid; break;
3697ea103259SMichael Clark                 }
3698ea103259SMichael Clark                 break;
3699ea103259SMichael Clark             case 5:
3700ea103259SMichael Clark                 switch (((inst >> 26) & 0b111111)) {
3701ea103259SMichael Clark                 case 0: op = rv_op_srlid; break;
3702ea103259SMichael Clark                 case 16: op = rv_op_sraid; break;
3703ea103259SMichael Clark                 }
3704ea103259SMichael Clark                 break;
3705ea103259SMichael Clark             }
3706ea103259SMichael Clark             break;
3707ea103259SMichael Clark         case 24:
3708ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
3709ea103259SMichael Clark             case 0: op = rv_op_beq; break;
3710ea103259SMichael Clark             case 1: op = rv_op_bne; break;
3711ea103259SMichael Clark             case 4: op = rv_op_blt; break;
3712ea103259SMichael Clark             case 5: op = rv_op_bge; break;
3713ea103259SMichael Clark             case 6: op = rv_op_bltu; break;
3714ea103259SMichael Clark             case 7: op = rv_op_bgeu; break;
3715ea103259SMichael Clark             }
3716ea103259SMichael Clark             break;
3717ea103259SMichael Clark         case 25:
3718ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
3719ea103259SMichael Clark             case 0: op = rv_op_jalr; break;
3720ea103259SMichael Clark             }
3721ea103259SMichael Clark             break;
3722ea103259SMichael Clark         case 27: op = rv_op_jal; break;
3723ea103259SMichael Clark         case 28:
3724ea103259SMichael Clark             switch (((inst >> 12) & 0b111)) {
3725ea103259SMichael Clark             case 0:
3726*98624d13SWeiwei Li                 switch (((inst >> 20) & 0b111111100000) |
3727*98624d13SWeiwei Li                         ((inst >> 7) & 0b000000011111)) {
3728ea103259SMichael Clark                 case 0:
3729ea103259SMichael Clark                     switch (((inst >> 15) & 0b1111111111)) {
3730ea103259SMichael Clark                     case 0: op = rv_op_ecall; break;
3731ea103259SMichael Clark                     case 32: op = rv_op_ebreak; break;
3732ea103259SMichael Clark                     case 64: op = rv_op_uret; break;
3733ea103259SMichael Clark                     }
3734ea103259SMichael Clark                     break;
3735ea103259SMichael Clark                 case 256:
3736ea103259SMichael Clark                     switch (((inst >> 20) & 0b11111)) {
3737ea103259SMichael Clark                     case 2:
3738ea103259SMichael Clark                         switch (((inst >> 15) & 0b11111)) {
3739ea103259SMichael Clark                         case 0: op = rv_op_sret; break;
3740ea103259SMichael Clark                         }
3741ea103259SMichael Clark                         break;
3742ea103259SMichael Clark                     case 4: op = rv_op_sfence_vm; break;
3743ea103259SMichael Clark                     case 5:
3744ea103259SMichael Clark                         switch (((inst >> 15) & 0b11111)) {
3745ea103259SMichael Clark                         case 0: op = rv_op_wfi; break;
3746ea103259SMichael Clark                         }
3747ea103259SMichael Clark                         break;
3748ea103259SMichael Clark                     }
3749ea103259SMichael Clark                     break;
3750ea103259SMichael Clark                 case 288: op = rv_op_sfence_vma; break;
3751ea103259SMichael Clark                 case 512:
3752ea103259SMichael Clark                     switch (((inst >> 15) & 0b1111111111)) {
3753ea103259SMichael Clark                     case 64: op = rv_op_hret; break;
3754ea103259SMichael Clark                     }
3755ea103259SMichael Clark                     break;
3756ea103259SMichael Clark                 case 768:
3757ea103259SMichael Clark                     switch (((inst >> 15) & 0b1111111111)) {
3758ea103259SMichael Clark                     case 64: op = rv_op_mret; break;
3759ea103259SMichael Clark                     }
3760ea103259SMichael Clark                     break;
3761ea103259SMichael Clark                 case 1952:
3762ea103259SMichael Clark                     switch (((inst >> 15) & 0b1111111111)) {
3763ea103259SMichael Clark                     case 576: op = rv_op_dret; break;
3764ea103259SMichael Clark                     }
3765ea103259SMichael Clark                     break;
3766ea103259SMichael Clark                 }
3767ea103259SMichael Clark                 break;
3768ea103259SMichael Clark             case 1: op = rv_op_csrrw; break;
3769ea103259SMichael Clark             case 2: op = rv_op_csrrs; break;
3770ea103259SMichael Clark             case 3: op = rv_op_csrrc; break;
3771ea103259SMichael Clark             case 5: op = rv_op_csrrwi; break;
3772ea103259SMichael Clark             case 6: op = rv_op_csrrsi; break;
3773ea103259SMichael Clark             case 7: op = rv_op_csrrci; break;
3774ea103259SMichael Clark             }
3775ea103259SMichael Clark             break;
3776ea103259SMichael Clark         case 30:
3777*98624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
3778*98624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
3779ea103259SMichael Clark             case 0: op = rv_op_addd; break;
3780ea103259SMichael Clark             case 1: op = rv_op_slld; break;
3781ea103259SMichael Clark             case 5: op = rv_op_srld; break;
3782ea103259SMichael Clark             case 8: op = rv_op_muld; break;
3783ea103259SMichael Clark             case 12: op = rv_op_divd; break;
3784ea103259SMichael Clark             case 13: op = rv_op_divud; break;
3785ea103259SMichael Clark             case 14: op = rv_op_remd; break;
3786ea103259SMichael Clark             case 15: op = rv_op_remud; break;
3787ea103259SMichael Clark             case 256: op = rv_op_subd; break;
3788ea103259SMichael Clark             case 261: op = rv_op_srad; break;
3789ea103259SMichael Clark             }
3790ea103259SMichael Clark             break;
3791ea103259SMichael Clark         }
3792ea103259SMichael Clark         break;
3793ea103259SMichael Clark     }
3794ea103259SMichael Clark     dec->op = op;
3795ea103259SMichael Clark }
3796ea103259SMichael Clark 
3797ea103259SMichael Clark /* operand extractors */
3798ea103259SMichael Clark 
3799ea103259SMichael Clark static uint32_t operand_rd(rv_inst inst)
3800ea103259SMichael Clark {
3801ea103259SMichael Clark     return (inst << 52) >> 59;
3802ea103259SMichael Clark }
3803ea103259SMichael Clark 
3804ea103259SMichael Clark static uint32_t operand_rs1(rv_inst inst)
3805ea103259SMichael Clark {
3806ea103259SMichael Clark     return (inst << 44) >> 59;
3807ea103259SMichael Clark }
3808ea103259SMichael Clark 
3809ea103259SMichael Clark static uint32_t operand_rs2(rv_inst inst)
3810ea103259SMichael Clark {
3811ea103259SMichael Clark     return (inst << 39) >> 59;
3812ea103259SMichael Clark }
3813ea103259SMichael Clark 
3814ea103259SMichael Clark static uint32_t operand_rs3(rv_inst inst)
3815ea103259SMichael Clark {
3816ea103259SMichael Clark     return (inst << 32) >> 59;
3817ea103259SMichael Clark }
3818ea103259SMichael Clark 
3819ea103259SMichael Clark static uint32_t operand_aq(rv_inst inst)
3820ea103259SMichael Clark {
3821ea103259SMichael Clark     return (inst << 37) >> 63;
3822ea103259SMichael Clark }
3823ea103259SMichael Clark 
3824ea103259SMichael Clark static uint32_t operand_rl(rv_inst inst)
3825ea103259SMichael Clark {
3826ea103259SMichael Clark     return (inst << 38) >> 63;
3827ea103259SMichael Clark }
3828ea103259SMichael Clark 
3829ea103259SMichael Clark static uint32_t operand_pred(rv_inst inst)
3830ea103259SMichael Clark {
3831ea103259SMichael Clark     return (inst << 36) >> 60;
3832ea103259SMichael Clark }
3833ea103259SMichael Clark 
3834ea103259SMichael Clark static uint32_t operand_succ(rv_inst inst)
3835ea103259SMichael Clark {
3836ea103259SMichael Clark     return (inst << 40) >> 60;
3837ea103259SMichael Clark }
3838ea103259SMichael Clark 
3839ea103259SMichael Clark static uint32_t operand_rm(rv_inst inst)
3840ea103259SMichael Clark {
3841ea103259SMichael Clark     return (inst << 49) >> 61;
3842ea103259SMichael Clark }
3843ea103259SMichael Clark 
3844ea103259SMichael Clark static uint32_t operand_shamt5(rv_inst inst)
3845ea103259SMichael Clark {
3846ea103259SMichael Clark     return (inst << 39) >> 59;
3847ea103259SMichael Clark }
3848ea103259SMichael Clark 
3849ea103259SMichael Clark static uint32_t operand_shamt6(rv_inst inst)
3850ea103259SMichael Clark {
3851ea103259SMichael Clark     return (inst << 38) >> 58;
3852ea103259SMichael Clark }
3853ea103259SMichael Clark 
3854ea103259SMichael Clark static uint32_t operand_shamt7(rv_inst inst)
3855ea103259SMichael Clark {
3856ea103259SMichael Clark     return (inst << 37) >> 57;
3857ea103259SMichael Clark }
3858ea103259SMichael Clark 
3859ea103259SMichael Clark static uint32_t operand_crdq(rv_inst inst)
3860ea103259SMichael Clark {
3861ea103259SMichael Clark     return (inst << 59) >> 61;
3862ea103259SMichael Clark }
3863ea103259SMichael Clark 
3864ea103259SMichael Clark static uint32_t operand_crs1q(rv_inst inst)
3865ea103259SMichael Clark {
3866ea103259SMichael Clark     return (inst << 54) >> 61;
3867ea103259SMichael Clark }
3868ea103259SMichael Clark 
3869ea103259SMichael Clark static uint32_t operand_crs1rdq(rv_inst inst)
3870ea103259SMichael Clark {
3871ea103259SMichael Clark     return (inst << 54) >> 61;
3872ea103259SMichael Clark }
3873ea103259SMichael Clark 
3874ea103259SMichael Clark static uint32_t operand_crs2q(rv_inst inst)
3875ea103259SMichael Clark {
3876ea103259SMichael Clark     return (inst << 59) >> 61;
3877ea103259SMichael Clark }
3878ea103259SMichael Clark 
38792c71d02eSWeiwei Li static uint32_t calculate_xreg(uint32_t sreg)
38802c71d02eSWeiwei Li {
38812c71d02eSWeiwei Li     return sreg < 2 ? sreg + 8 : sreg + 16;
38822c71d02eSWeiwei Li }
38832c71d02eSWeiwei Li 
38842c71d02eSWeiwei Li static uint32_t operand_sreg1(rv_inst inst)
38852c71d02eSWeiwei Li {
38862c71d02eSWeiwei Li     return calculate_xreg((inst << 54) >> 61);
38872c71d02eSWeiwei Li }
38882c71d02eSWeiwei Li 
38892c71d02eSWeiwei Li static uint32_t operand_sreg2(rv_inst inst)
38902c71d02eSWeiwei Li {
38912c71d02eSWeiwei Li     return calculate_xreg((inst << 59) >> 61);
38922c71d02eSWeiwei Li }
38932c71d02eSWeiwei Li 
3894ea103259SMichael Clark static uint32_t operand_crd(rv_inst inst)
3895ea103259SMichael Clark {
3896ea103259SMichael Clark     return (inst << 52) >> 59;
3897ea103259SMichael Clark }
3898ea103259SMichael Clark 
3899ea103259SMichael Clark static uint32_t operand_crs1(rv_inst inst)
3900ea103259SMichael Clark {
3901ea103259SMichael Clark     return (inst << 52) >> 59;
3902ea103259SMichael Clark }
3903ea103259SMichael Clark 
3904ea103259SMichael Clark static uint32_t operand_crs1rd(rv_inst inst)
3905ea103259SMichael Clark {
3906ea103259SMichael Clark     return (inst << 52) >> 59;
3907ea103259SMichael Clark }
3908ea103259SMichael Clark 
3909ea103259SMichael Clark static uint32_t operand_crs2(rv_inst inst)
3910ea103259SMichael Clark {
3911ea103259SMichael Clark     return (inst << 57) >> 59;
3912ea103259SMichael Clark }
3913ea103259SMichael Clark 
3914ea103259SMichael Clark static uint32_t operand_cimmsh5(rv_inst inst)
3915ea103259SMichael Clark {
3916ea103259SMichael Clark     return (inst << 57) >> 59;
3917ea103259SMichael Clark }
3918ea103259SMichael Clark 
3919ea103259SMichael Clark static uint32_t operand_csr12(rv_inst inst)
3920ea103259SMichael Clark {
3921ea103259SMichael Clark     return (inst << 32) >> 52;
3922ea103259SMichael Clark }
3923ea103259SMichael Clark 
3924ea103259SMichael Clark static int32_t operand_imm12(rv_inst inst)
3925ea103259SMichael Clark {
3926ea103259SMichael Clark     return ((int64_t)inst << 32) >> 52;
3927ea103259SMichael Clark }
3928ea103259SMichael Clark 
3929ea103259SMichael Clark static int32_t operand_imm20(rv_inst inst)
3930ea103259SMichael Clark {
3931ea103259SMichael Clark     return (((int64_t)inst << 32) >> 44) << 12;
3932ea103259SMichael Clark }
3933ea103259SMichael Clark 
3934ea103259SMichael Clark static int32_t operand_jimm20(rv_inst inst)
3935ea103259SMichael Clark {
3936ea103259SMichael Clark     return (((int64_t)inst << 32) >> 63) << 20 |
3937ea103259SMichael Clark         ((inst << 33) >> 54) << 1 |
3938ea103259SMichael Clark         ((inst << 43) >> 63) << 11 |
3939ea103259SMichael Clark         ((inst << 44) >> 56) << 12;
3940ea103259SMichael Clark }
3941ea103259SMichael Clark 
3942ea103259SMichael Clark static int32_t operand_simm12(rv_inst inst)
3943ea103259SMichael Clark {
3944ea103259SMichael Clark     return (((int64_t)inst << 32) >> 57) << 5 |
3945ea103259SMichael Clark         (inst << 52) >> 59;
3946ea103259SMichael Clark }
3947ea103259SMichael Clark 
3948ea103259SMichael Clark static int32_t operand_sbimm12(rv_inst inst)
3949ea103259SMichael Clark {
3950ea103259SMichael Clark     return (((int64_t)inst << 32) >> 63) << 12 |
3951ea103259SMichael Clark         ((inst << 33) >> 58) << 5 |
3952ea103259SMichael Clark         ((inst << 52) >> 60) << 1 |
3953ea103259SMichael Clark         ((inst << 56) >> 63) << 11;
3954ea103259SMichael Clark }
3955ea103259SMichael Clark 
395633632775SFrédéric Pétrot static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa)
3957ea103259SMichael Clark {
395833632775SFrédéric Pétrot     int imm = ((inst << 51) >> 63) << 5 |
3959ea103259SMichael Clark         (inst << 57) >> 59;
396033632775SFrédéric Pétrot     if (isa == rv128) {
396133632775SFrédéric Pétrot         imm = imm ? imm : 64;
396233632775SFrédéric Pétrot     }
396333632775SFrédéric Pétrot     return imm;
396433632775SFrédéric Pétrot }
396533632775SFrédéric Pétrot 
396633632775SFrédéric Pétrot static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa)
396733632775SFrédéric Pétrot {
396833632775SFrédéric Pétrot     int imm = ((inst << 51) >> 63) << 5 |
396933632775SFrédéric Pétrot         (inst << 57) >> 59;
397033632775SFrédéric Pétrot     if (isa == rv128) {
397133632775SFrédéric Pétrot         imm = imm | (imm & 32) << 1;
397233632775SFrédéric Pétrot         imm = imm ? imm : 64;
397333632775SFrédéric Pétrot     }
397433632775SFrédéric Pétrot     return imm;
3975ea103259SMichael Clark }
3976ea103259SMichael Clark 
3977ea103259SMichael Clark static int32_t operand_cimmi(rv_inst inst)
3978ea103259SMichael Clark {
3979ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 5 |
3980ea103259SMichael Clark         (inst << 57) >> 59;
3981ea103259SMichael Clark }
3982ea103259SMichael Clark 
3983ea103259SMichael Clark static int32_t operand_cimmui(rv_inst inst)
3984ea103259SMichael Clark {
3985ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 17 |
3986ea103259SMichael Clark         ((inst << 57) >> 59) << 12;
3987ea103259SMichael Clark }
3988ea103259SMichael Clark 
3989ea103259SMichael Clark static uint32_t operand_cimmlwsp(rv_inst inst)
3990ea103259SMichael Clark {
3991ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
3992ea103259SMichael Clark         ((inst << 57) >> 61) << 2 |
3993ea103259SMichael Clark         ((inst << 60) >> 62) << 6;
3994ea103259SMichael Clark }
3995ea103259SMichael Clark 
3996ea103259SMichael Clark static uint32_t operand_cimmldsp(rv_inst inst)
3997ea103259SMichael Clark {
3998ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
3999ea103259SMichael Clark         ((inst << 57) >> 62) << 3 |
4000ea103259SMichael Clark         ((inst << 59) >> 61) << 6;
4001ea103259SMichael Clark }
4002ea103259SMichael Clark 
4003ea103259SMichael Clark static uint32_t operand_cimmlqsp(rv_inst inst)
4004ea103259SMichael Clark {
4005ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
4006ea103259SMichael Clark         ((inst << 57) >> 63) << 4 |
4007ea103259SMichael Clark         ((inst << 58) >> 60) << 6;
4008ea103259SMichael Clark }
4009ea103259SMichael Clark 
4010ea103259SMichael Clark static int32_t operand_cimm16sp(rv_inst inst)
4011ea103259SMichael Clark {
4012ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 9 |
4013ea103259SMichael Clark         ((inst << 57) >> 63) << 4 |
4014ea103259SMichael Clark         ((inst << 58) >> 63) << 6 |
4015ea103259SMichael Clark         ((inst << 59) >> 62) << 7 |
4016ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4017ea103259SMichael Clark }
4018ea103259SMichael Clark 
4019ea103259SMichael Clark static int32_t operand_cimmj(rv_inst inst)
4020ea103259SMichael Clark {
4021ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 11 |
4022ea103259SMichael Clark         ((inst << 52) >> 63) << 4 |
4023ea103259SMichael Clark         ((inst << 53) >> 62) << 8 |
4024ea103259SMichael Clark         ((inst << 55) >> 63) << 10 |
4025ea103259SMichael Clark         ((inst << 56) >> 63) << 6 |
4026ea103259SMichael Clark         ((inst << 57) >> 63) << 7 |
4027ea103259SMichael Clark         ((inst << 58) >> 61) << 1 |
4028ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4029ea103259SMichael Clark }
4030ea103259SMichael Clark 
4031ea103259SMichael Clark static int32_t operand_cimmb(rv_inst inst)
4032ea103259SMichael Clark {
4033ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 8 |
4034ea103259SMichael Clark         ((inst << 52) >> 62) << 3 |
4035ea103259SMichael Clark         ((inst << 57) >> 62) << 6 |
4036ea103259SMichael Clark         ((inst << 59) >> 62) << 1 |
4037ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4038ea103259SMichael Clark }
4039ea103259SMichael Clark 
4040ea103259SMichael Clark static uint32_t operand_cimmswsp(rv_inst inst)
4041ea103259SMichael Clark {
4042ea103259SMichael Clark     return ((inst << 51) >> 60) << 2 |
4043ea103259SMichael Clark         ((inst << 55) >> 62) << 6;
4044ea103259SMichael Clark }
4045ea103259SMichael Clark 
4046ea103259SMichael Clark static uint32_t operand_cimmsdsp(rv_inst inst)
4047ea103259SMichael Clark {
4048ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4049ea103259SMichael Clark         ((inst << 54) >> 61) << 6;
4050ea103259SMichael Clark }
4051ea103259SMichael Clark 
4052ea103259SMichael Clark static uint32_t operand_cimmsqsp(rv_inst inst)
4053ea103259SMichael Clark {
4054ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4055ea103259SMichael Clark         ((inst << 53) >> 60) << 6;
4056ea103259SMichael Clark }
4057ea103259SMichael Clark 
4058ea103259SMichael Clark static uint32_t operand_cimm4spn(rv_inst inst)
4059ea103259SMichael Clark {
4060ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4061ea103259SMichael Clark         ((inst << 53) >> 60) << 6 |
4062ea103259SMichael Clark         ((inst << 57) >> 63) << 2 |
4063ea103259SMichael Clark         ((inst << 58) >> 63) << 3;
4064ea103259SMichael Clark }
4065ea103259SMichael Clark 
4066ea103259SMichael Clark static uint32_t operand_cimmw(rv_inst inst)
4067ea103259SMichael Clark {
4068ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4069ea103259SMichael Clark         ((inst << 57) >> 63) << 2 |
4070ea103259SMichael Clark         ((inst << 58) >> 63) << 6;
4071ea103259SMichael Clark }
4072ea103259SMichael Clark 
4073ea103259SMichael Clark static uint32_t operand_cimmd(rv_inst inst)
4074ea103259SMichael Clark {
4075ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4076ea103259SMichael Clark         ((inst << 57) >> 62) << 6;
4077ea103259SMichael Clark }
4078ea103259SMichael Clark 
4079ea103259SMichael Clark static uint32_t operand_cimmq(rv_inst inst)
4080ea103259SMichael Clark {
4081ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4082ea103259SMichael Clark         ((inst << 53) >> 63) << 8 |
4083ea103259SMichael Clark         ((inst << 57) >> 62) << 6;
4084ea103259SMichael Clark }
4085ea103259SMichael Clark 
408607f4964dSYang Liu static uint32_t operand_vimm(rv_inst inst)
408707f4964dSYang Liu {
408807f4964dSYang Liu     return (int64_t)(inst << 44) >> 59;
408907f4964dSYang Liu }
409007f4964dSYang Liu 
409107f4964dSYang Liu static uint32_t operand_vzimm11(rv_inst inst)
409207f4964dSYang Liu {
409307f4964dSYang Liu     return (inst << 33) >> 53;
409407f4964dSYang Liu }
409507f4964dSYang Liu 
409607f4964dSYang Liu static uint32_t operand_vzimm10(rv_inst inst)
409707f4964dSYang Liu {
409807f4964dSYang Liu     return (inst << 34) >> 54;
409907f4964dSYang Liu }
410007f4964dSYang Liu 
41015748c886SWeiwei Li static uint32_t operand_bs(rv_inst inst)
41025748c886SWeiwei Li {
41035748c886SWeiwei Li     return (inst << 32) >> 62;
41045748c886SWeiwei Li }
41055748c886SWeiwei Li 
41065748c886SWeiwei Li static uint32_t operand_rnum(rv_inst inst)
41075748c886SWeiwei Li {
41085748c886SWeiwei Li     return (inst << 40) >> 60;
41095748c886SWeiwei Li }
41105748c886SWeiwei Li 
411107f4964dSYang Liu static uint32_t operand_vm(rv_inst inst)
411207f4964dSYang Liu {
411307f4964dSYang Liu     return (inst << 38) >> 63;
411407f4964dSYang Liu }
411507f4964dSYang Liu 
41162c71d02eSWeiwei Li static uint32_t operand_uimm_c_lb(rv_inst inst)
41172c71d02eSWeiwei Li {
41182c71d02eSWeiwei Li     return (((inst << 58) >> 63) << 1) |
41192c71d02eSWeiwei Li         ((inst << 57) >> 63);
41202c71d02eSWeiwei Li }
41212c71d02eSWeiwei Li 
41222c71d02eSWeiwei Li static uint32_t operand_uimm_c_lh(rv_inst inst)
41232c71d02eSWeiwei Li {
41242c71d02eSWeiwei Li     return (((inst << 58) >> 63) << 1);
41252c71d02eSWeiwei Li }
41262c71d02eSWeiwei Li 
41272c71d02eSWeiwei Li static uint32_t operand_zcmp_spimm(rv_inst inst)
41282c71d02eSWeiwei Li {
41292c71d02eSWeiwei Li     return ((inst << 60) >> 62) << 4;
41302c71d02eSWeiwei Li }
41312c71d02eSWeiwei Li 
41322c71d02eSWeiwei Li static uint32_t operand_zcmp_rlist(rv_inst inst)
41332c71d02eSWeiwei Li {
41342c71d02eSWeiwei Li     return ((inst << 56) >> 60);
41352c71d02eSWeiwei Li }
41362c71d02eSWeiwei Li 
41372c71d02eSWeiwei Li static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t spimm)
41382c71d02eSWeiwei Li {
41392c71d02eSWeiwei Li     int xlen_bytes_log2 = isa == rv64 ? 3 : 2;
41402c71d02eSWeiwei Li     int regs = rlist == 15 ? 13 : rlist - 3;
41412c71d02eSWeiwei Li     uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16);
41422c71d02eSWeiwei Li     return stack_adj_base + spimm;
41432c71d02eSWeiwei Li }
41442c71d02eSWeiwei Li 
41452c71d02eSWeiwei Li static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa)
41462c71d02eSWeiwei Li {
41472c71d02eSWeiwei Li     return calculate_stack_adj(isa, operand_zcmp_rlist(inst),
41482c71d02eSWeiwei Li                                operand_zcmp_spimm(inst));
41492c71d02eSWeiwei Li }
41502c71d02eSWeiwei Li 
41512c71d02eSWeiwei Li static uint32_t operand_tbl_index(rv_inst inst)
41522c71d02eSWeiwei Li {
41532c71d02eSWeiwei Li     return ((inst << 54) >> 56);
41542c71d02eSWeiwei Li }
41552c71d02eSWeiwei Li 
4156ea103259SMichael Clark /* decode operands */
4157ea103259SMichael Clark 
415833632775SFrédéric Pétrot static void decode_inst_operands(rv_decode *dec, rv_isa isa)
4159ea103259SMichael Clark {
4160ea103259SMichael Clark     rv_inst inst = dec->inst;
4161ea103259SMichael Clark     dec->codec = opcode_data[dec->op].codec;
4162ea103259SMichael Clark     switch (dec->codec) {
4163ea103259SMichael Clark     case rv_codec_none:
4164ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4165ea103259SMichael Clark         dec->imm = 0;
4166ea103259SMichael Clark         break;
4167ea103259SMichael Clark     case rv_codec_u:
4168ea103259SMichael Clark         dec->rd = operand_rd(inst);
4169ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4170ea103259SMichael Clark         dec->imm = operand_imm20(inst);
4171ea103259SMichael Clark         break;
4172ea103259SMichael Clark     case rv_codec_uj:
4173ea103259SMichael Clark         dec->rd = operand_rd(inst);
4174ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4175ea103259SMichael Clark         dec->imm = operand_jimm20(inst);
4176ea103259SMichael Clark         break;
4177ea103259SMichael Clark     case rv_codec_i:
4178ea103259SMichael Clark         dec->rd = operand_rd(inst);
4179ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4180ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4181ea103259SMichael Clark         dec->imm = operand_imm12(inst);
4182ea103259SMichael Clark         break;
4183ea103259SMichael Clark     case rv_codec_i_sh5:
4184ea103259SMichael Clark         dec->rd = operand_rd(inst);
4185ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4186ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4187ea103259SMichael Clark         dec->imm = operand_shamt5(inst);
4188ea103259SMichael Clark         break;
4189ea103259SMichael Clark     case rv_codec_i_sh6:
4190ea103259SMichael Clark         dec->rd = operand_rd(inst);
4191ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4192ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4193ea103259SMichael Clark         dec->imm = operand_shamt6(inst);
4194ea103259SMichael Clark         break;
4195ea103259SMichael Clark     case rv_codec_i_sh7:
4196ea103259SMichael Clark         dec->rd = operand_rd(inst);
4197ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4198ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4199ea103259SMichael Clark         dec->imm = operand_shamt7(inst);
4200ea103259SMichael Clark         break;
4201ea103259SMichael Clark     case rv_codec_i_csr:
4202ea103259SMichael Clark         dec->rd = operand_rd(inst);
4203ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4204ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4205ea103259SMichael Clark         dec->imm = operand_csr12(inst);
4206ea103259SMichael Clark         break;
4207ea103259SMichael Clark     case rv_codec_s:
4208ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4209ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4210ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4211ea103259SMichael Clark         dec->imm = operand_simm12(inst);
4212ea103259SMichael Clark         break;
4213ea103259SMichael Clark     case rv_codec_sb:
4214ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4215ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4216ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4217ea103259SMichael Clark         dec->imm = operand_sbimm12(inst);
4218ea103259SMichael Clark         break;
4219ea103259SMichael Clark     case rv_codec_r:
4220ea103259SMichael Clark         dec->rd = operand_rd(inst);
4221ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4222ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4223ea103259SMichael Clark         dec->imm = 0;
4224ea103259SMichael Clark         break;
4225ea103259SMichael Clark     case rv_codec_r_m:
4226ea103259SMichael Clark         dec->rd = operand_rd(inst);
4227ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4228ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4229ea103259SMichael Clark         dec->imm = 0;
4230ea103259SMichael Clark         dec->rm = operand_rm(inst);
4231ea103259SMichael Clark         break;
4232ea103259SMichael Clark     case rv_codec_r4_m:
4233ea103259SMichael Clark         dec->rd = operand_rd(inst);
4234ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4235ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4236ea103259SMichael Clark         dec->rs3 = operand_rs3(inst);
4237ea103259SMichael Clark         dec->imm = 0;
4238ea103259SMichael Clark         dec->rm = operand_rm(inst);
4239ea103259SMichael Clark         break;
4240ea103259SMichael Clark     case rv_codec_r_a:
4241ea103259SMichael Clark         dec->rd = operand_rd(inst);
4242ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4243ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4244ea103259SMichael Clark         dec->imm = 0;
4245ea103259SMichael Clark         dec->aq = operand_aq(inst);
4246ea103259SMichael Clark         dec->rl = operand_rl(inst);
4247ea103259SMichael Clark         break;
4248ea103259SMichael Clark     case rv_codec_r_l:
4249ea103259SMichael Clark         dec->rd = operand_rd(inst);
4250ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4251ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4252ea103259SMichael Clark         dec->imm = 0;
4253ea103259SMichael Clark         dec->aq = operand_aq(inst);
4254ea103259SMichael Clark         dec->rl = operand_rl(inst);
4255ea103259SMichael Clark         break;
4256ea103259SMichael Clark     case rv_codec_r_f:
4257ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4258ea103259SMichael Clark         dec->pred = operand_pred(inst);
4259ea103259SMichael Clark         dec->succ = operand_succ(inst);
4260ea103259SMichael Clark         dec->imm = 0;
4261ea103259SMichael Clark         break;
4262ea103259SMichael Clark     case rv_codec_cb:
4263ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4264ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4265ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4266ea103259SMichael Clark         dec->imm = operand_cimmb(inst);
4267ea103259SMichael Clark         break;
4268ea103259SMichael Clark     case rv_codec_cb_imm:
4269ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4270ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4271ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4272ea103259SMichael Clark         break;
4273ea103259SMichael Clark     case rv_codec_cb_sh5:
4274ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4275ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4276ea103259SMichael Clark         dec->imm = operand_cimmsh5(inst);
4277ea103259SMichael Clark         break;
4278ea103259SMichael Clark     case rv_codec_cb_sh6:
4279ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4280ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
428133632775SFrédéric Pétrot         dec->imm = operand_cimmshr6(inst, isa);
4282ea103259SMichael Clark         break;
4283ea103259SMichael Clark     case rv_codec_ci:
4284ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4285ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4286ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4287ea103259SMichael Clark         break;
4288ea103259SMichael Clark     case rv_codec_ci_sh5:
4289ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4290ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4291ea103259SMichael Clark         dec->imm = operand_cimmsh5(inst);
4292ea103259SMichael Clark         break;
4293ea103259SMichael Clark     case rv_codec_ci_sh6:
4294ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4295ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
429633632775SFrédéric Pétrot         dec->imm = operand_cimmshl6(inst, isa);
4297ea103259SMichael Clark         break;
4298ea103259SMichael Clark     case rv_codec_ci_16sp:
4299ea103259SMichael Clark         dec->rd = rv_ireg_sp;
4300ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4301ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4302ea103259SMichael Clark         dec->imm = operand_cimm16sp(inst);
4303ea103259SMichael Clark         break;
4304ea103259SMichael Clark     case rv_codec_ci_lwsp:
4305ea103259SMichael Clark         dec->rd = operand_crd(inst);
4306ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4307ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4308ea103259SMichael Clark         dec->imm = operand_cimmlwsp(inst);
4309ea103259SMichael Clark         break;
4310ea103259SMichael Clark     case rv_codec_ci_ldsp:
4311ea103259SMichael Clark         dec->rd = operand_crd(inst);
4312ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4313ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4314ea103259SMichael Clark         dec->imm = operand_cimmldsp(inst);
4315ea103259SMichael Clark         break;
4316ea103259SMichael Clark     case rv_codec_ci_lqsp:
4317ea103259SMichael Clark         dec->rd = operand_crd(inst);
4318ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4319ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4320ea103259SMichael Clark         dec->imm = operand_cimmlqsp(inst);
4321ea103259SMichael Clark         break;
4322ea103259SMichael Clark     case rv_codec_ci_li:
4323ea103259SMichael Clark         dec->rd = operand_crd(inst);
4324ea103259SMichael Clark         dec->rs1 = rv_ireg_zero;
4325ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4326ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4327ea103259SMichael Clark         break;
4328ea103259SMichael Clark     case rv_codec_ci_lui:
4329ea103259SMichael Clark         dec->rd = operand_crd(inst);
4330ea103259SMichael Clark         dec->rs1 = rv_ireg_zero;
4331ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4332ea103259SMichael Clark         dec->imm = operand_cimmui(inst);
4333ea103259SMichael Clark         break;
4334ea103259SMichael Clark     case rv_codec_ci_none:
4335ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4336ea103259SMichael Clark         dec->imm = 0;
4337ea103259SMichael Clark         break;
4338ea103259SMichael Clark     case rv_codec_ciw_4spn:
4339ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4340ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4341ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4342ea103259SMichael Clark         dec->imm = operand_cimm4spn(inst);
4343ea103259SMichael Clark         break;
4344ea103259SMichael Clark     case rv_codec_cj:
4345ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4346ea103259SMichael Clark         dec->imm = operand_cimmj(inst);
4347ea103259SMichael Clark         break;
4348ea103259SMichael Clark     case rv_codec_cj_jal:
4349ea103259SMichael Clark         dec->rd = rv_ireg_ra;
4350ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4351ea103259SMichael Clark         dec->imm = operand_cimmj(inst);
4352ea103259SMichael Clark         break;
4353ea103259SMichael Clark     case rv_codec_cl_lw:
4354ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4355ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4356ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4357ea103259SMichael Clark         dec->imm = operand_cimmw(inst);
4358ea103259SMichael Clark         break;
4359ea103259SMichael Clark     case rv_codec_cl_ld:
4360ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4361ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4362ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4363ea103259SMichael Clark         dec->imm = operand_cimmd(inst);
4364ea103259SMichael Clark         break;
4365ea103259SMichael Clark     case rv_codec_cl_lq:
4366ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4367ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4368ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4369ea103259SMichael Clark         dec->imm = operand_cimmq(inst);
4370ea103259SMichael Clark         break;
4371ea103259SMichael Clark     case rv_codec_cr:
4372ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4373ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4374ea103259SMichael Clark         dec->imm = 0;
4375ea103259SMichael Clark         break;
4376ea103259SMichael Clark     case rv_codec_cr_mv:
4377ea103259SMichael Clark         dec->rd = operand_crd(inst);
4378ea103259SMichael Clark         dec->rs1 = operand_crs2(inst);
4379ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4380ea103259SMichael Clark         dec->imm = 0;
4381ea103259SMichael Clark         break;
4382ea103259SMichael Clark     case rv_codec_cr_jalr:
4383ea103259SMichael Clark         dec->rd = rv_ireg_ra;
4384ea103259SMichael Clark         dec->rs1 = operand_crs1(inst);
4385ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4386ea103259SMichael Clark         dec->imm = 0;
4387ea103259SMichael Clark         break;
4388ea103259SMichael Clark     case rv_codec_cr_jr:
4389ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4390ea103259SMichael Clark         dec->rs1 = operand_crs1(inst);
4391ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4392ea103259SMichael Clark         dec->imm = 0;
4393ea103259SMichael Clark         break;
4394ea103259SMichael Clark     case rv_codec_cs:
4395ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4396ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4397ea103259SMichael Clark         dec->imm = 0;
4398ea103259SMichael Clark         break;
4399ea103259SMichael Clark     case rv_codec_cs_sw:
4400ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4401ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4402ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4403ea103259SMichael Clark         dec->imm = operand_cimmw(inst);
4404ea103259SMichael Clark         break;
4405ea103259SMichael Clark     case rv_codec_cs_sd:
4406ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4407ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4408ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4409ea103259SMichael Clark         dec->imm = operand_cimmd(inst);
4410ea103259SMichael Clark         break;
4411ea103259SMichael Clark     case rv_codec_cs_sq:
4412ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4413ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4414ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4415ea103259SMichael Clark         dec->imm = operand_cimmq(inst);
4416ea103259SMichael Clark         break;
4417ea103259SMichael Clark     case rv_codec_css_swsp:
4418ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4419ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4420ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4421ea103259SMichael Clark         dec->imm = operand_cimmswsp(inst);
4422ea103259SMichael Clark         break;
4423ea103259SMichael Clark     case rv_codec_css_sdsp:
4424ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4425ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4426ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4427ea103259SMichael Clark         dec->imm = operand_cimmsdsp(inst);
4428ea103259SMichael Clark         break;
4429ea103259SMichael Clark     case rv_codec_css_sqsp:
4430ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4431ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4432ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4433ea103259SMichael Clark         dec->imm = operand_cimmsqsp(inst);
4434ea103259SMichael Clark         break;
44355748c886SWeiwei Li     case rv_codec_k_bs:
44365748c886SWeiwei Li         dec->rs1 = operand_rs1(inst);
44375748c886SWeiwei Li         dec->rs2 = operand_rs2(inst);
44385748c886SWeiwei Li         dec->bs = operand_bs(inst);
44395748c886SWeiwei Li         break;
44405748c886SWeiwei Li     case rv_codec_k_rnum:
44415748c886SWeiwei Li         dec->rd = operand_rd(inst);
44425748c886SWeiwei Li         dec->rs1 = operand_rs1(inst);
44435748c886SWeiwei Li         dec->rnum = operand_rnum(inst);
44445748c886SWeiwei Li         break;
444507f4964dSYang Liu     case rv_codec_v_r:
444607f4964dSYang Liu         dec->rd = operand_rd(inst);
444707f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
444807f4964dSYang Liu         dec->rs2 = operand_rs2(inst);
444907f4964dSYang Liu         dec->vm = operand_vm(inst);
445007f4964dSYang Liu         break;
445107f4964dSYang Liu     case rv_codec_v_ldst:
445207f4964dSYang Liu         dec->rd = operand_rd(inst);
445307f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
445407f4964dSYang Liu         dec->vm = operand_vm(inst);
445507f4964dSYang Liu         break;
445607f4964dSYang Liu     case rv_codec_v_i:
445707f4964dSYang Liu         dec->rd = operand_rd(inst);
445807f4964dSYang Liu         dec->rs2 = operand_rs2(inst);
445907f4964dSYang Liu         dec->imm = operand_vimm(inst);
446007f4964dSYang Liu         dec->vm = operand_vm(inst);
446107f4964dSYang Liu         break;
446207f4964dSYang Liu     case rv_codec_vsetvli:
446307f4964dSYang Liu         dec->rd = operand_rd(inst);
446407f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
446507f4964dSYang Liu         dec->vzimm = operand_vzimm11(inst);
446607f4964dSYang Liu         break;
446707f4964dSYang Liu     case rv_codec_vsetivli:
446807f4964dSYang Liu         dec->rd = operand_rd(inst);
446907f4964dSYang Liu         dec->imm = operand_vimm(inst);
447007f4964dSYang Liu         dec->vzimm = operand_vzimm10(inst);
447107f4964dSYang Liu         break;
44722c71d02eSWeiwei Li     case rv_codec_zcb_lb:
44732c71d02eSWeiwei Li         dec->rs1 = operand_crs1q(inst) + 8;
44742c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
44752c71d02eSWeiwei Li         dec->imm = operand_uimm_c_lb(inst);
44762c71d02eSWeiwei Li         break;
44772c71d02eSWeiwei Li     case rv_codec_zcb_lh:
44782c71d02eSWeiwei Li         dec->rs1 = operand_crs1q(inst) + 8;
44792c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
44802c71d02eSWeiwei Li         dec->imm = operand_uimm_c_lh(inst);
44812c71d02eSWeiwei Li         break;
44822c71d02eSWeiwei Li     case rv_codec_zcb_ext:
44832c71d02eSWeiwei Li         dec->rd = operand_crs1q(inst) + 8;
44842c71d02eSWeiwei Li         break;
44852c71d02eSWeiwei Li     case rv_codec_zcb_mul:
44862c71d02eSWeiwei Li         dec->rd = operand_crs1rdq(inst) + 8;
44872c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
44882c71d02eSWeiwei Li         break;
44892c71d02eSWeiwei Li     case rv_codec_zcmp_cm_pushpop:
44902c71d02eSWeiwei Li         dec->imm = operand_zcmp_stack_adj(inst, isa);
44912c71d02eSWeiwei Li         dec->rlist = operand_zcmp_rlist(inst);
44922c71d02eSWeiwei Li         break;
44932c71d02eSWeiwei Li     case rv_codec_zcmp_cm_mv:
44942c71d02eSWeiwei Li         dec->rd = operand_sreg1(inst);
44952c71d02eSWeiwei Li         dec->rs2 = operand_sreg2(inst);
44962c71d02eSWeiwei Li         break;
44972c71d02eSWeiwei Li     case rv_codec_zcmt_jt:
44982c71d02eSWeiwei Li         dec->imm = operand_tbl_index(inst);
44992c71d02eSWeiwei Li         break;
4500ea103259SMichael Clark     };
4501ea103259SMichael Clark }
4502ea103259SMichael Clark 
4503ea103259SMichael Clark /* check constraint */
4504ea103259SMichael Clark 
4505ea103259SMichael Clark static bool check_constraints(rv_decode *dec, const rvc_constraint *c)
4506ea103259SMichael Clark {
4507ea103259SMichael Clark     int32_t imm = dec->imm;
4508ea103259SMichael Clark     uint8_t rd = dec->rd, rs1 = dec->rs1, rs2 = dec->rs2;
4509ea103259SMichael Clark     while (*c != rvc_end) {
4510ea103259SMichael Clark         switch (*c) {
4511ea103259SMichael Clark         case rvc_rd_eq_ra:
4512ea103259SMichael Clark             if (!(rd == 1)) {
4513ea103259SMichael Clark                 return false;
4514ea103259SMichael Clark             }
4515ea103259SMichael Clark             break;
4516ea103259SMichael Clark         case rvc_rd_eq_x0:
4517ea103259SMichael Clark             if (!(rd == 0)) {
4518ea103259SMichael Clark                 return false;
4519ea103259SMichael Clark             }
4520ea103259SMichael Clark             break;
4521ea103259SMichael Clark         case rvc_rs1_eq_x0:
4522ea103259SMichael Clark             if (!(rs1 == 0)) {
4523ea103259SMichael Clark                 return false;
4524ea103259SMichael Clark             }
4525ea103259SMichael Clark             break;
4526ea103259SMichael Clark         case rvc_rs2_eq_x0:
4527ea103259SMichael Clark             if (!(rs2 == 0)) {
4528ea103259SMichael Clark                 return false;
4529ea103259SMichael Clark             }
4530ea103259SMichael Clark             break;
4531ea103259SMichael Clark         case rvc_rs2_eq_rs1:
4532ea103259SMichael Clark             if (!(rs2 == rs1)) {
4533ea103259SMichael Clark                 return false;
4534ea103259SMichael Clark             }
4535ea103259SMichael Clark             break;
4536ea103259SMichael Clark         case rvc_rs1_eq_ra:
4537ea103259SMichael Clark             if (!(rs1 == 1)) {
4538ea103259SMichael Clark                 return false;
4539ea103259SMichael Clark             }
4540ea103259SMichael Clark             break;
4541ea103259SMichael Clark         case rvc_imm_eq_zero:
4542ea103259SMichael Clark             if (!(imm == 0)) {
4543ea103259SMichael Clark                 return false;
4544ea103259SMichael Clark             }
4545ea103259SMichael Clark             break;
4546ea103259SMichael Clark         case rvc_imm_eq_n1:
4547ea103259SMichael Clark             if (!(imm == -1)) {
4548ea103259SMichael Clark                 return false;
4549ea103259SMichael Clark             }
4550ea103259SMichael Clark             break;
4551ea103259SMichael Clark         case rvc_imm_eq_p1:
4552ea103259SMichael Clark             if (!(imm == 1)) {
4553ea103259SMichael Clark                 return false;
4554ea103259SMichael Clark             }
4555ea103259SMichael Clark             break;
4556ea103259SMichael Clark         case rvc_csr_eq_0x001:
4557ea103259SMichael Clark             if (!(imm == 0x001)) {
4558ea103259SMichael Clark                 return false;
4559ea103259SMichael Clark             }
4560ea103259SMichael Clark             break;
4561ea103259SMichael Clark         case rvc_csr_eq_0x002:
4562ea103259SMichael Clark             if (!(imm == 0x002)) {
4563ea103259SMichael Clark                 return false;
4564ea103259SMichael Clark             }
4565ea103259SMichael Clark             break;
4566ea103259SMichael Clark         case rvc_csr_eq_0x003:
4567ea103259SMichael Clark             if (!(imm == 0x003)) {
4568ea103259SMichael Clark                 return false;
4569ea103259SMichael Clark             }
4570ea103259SMichael Clark             break;
4571ea103259SMichael Clark         case rvc_csr_eq_0xc00:
4572ea103259SMichael Clark             if (!(imm == 0xc00)) {
4573ea103259SMichael Clark                 return false;
4574ea103259SMichael Clark             }
4575ea103259SMichael Clark             break;
4576ea103259SMichael Clark         case rvc_csr_eq_0xc01:
4577ea103259SMichael Clark             if (!(imm == 0xc01)) {
4578ea103259SMichael Clark                 return false;
4579ea103259SMichael Clark             }
4580ea103259SMichael Clark             break;
4581ea103259SMichael Clark         case rvc_csr_eq_0xc02:
4582ea103259SMichael Clark             if (!(imm == 0xc02)) {
4583ea103259SMichael Clark                 return false;
4584ea103259SMichael Clark             }
4585ea103259SMichael Clark             break;
4586ea103259SMichael Clark         case rvc_csr_eq_0xc80:
4587ea103259SMichael Clark             if (!(imm == 0xc80)) {
4588ea103259SMichael Clark                 return false;
4589ea103259SMichael Clark             }
4590ea103259SMichael Clark             break;
4591ea103259SMichael Clark         case rvc_csr_eq_0xc81:
4592ea103259SMichael Clark             if (!(imm == 0xc81)) {
4593ea103259SMichael Clark                 return false;
4594ea103259SMichael Clark             }
4595ea103259SMichael Clark             break;
4596ea103259SMichael Clark         case rvc_csr_eq_0xc82:
4597ea103259SMichael Clark             if (!(imm == 0xc82)) {
4598ea103259SMichael Clark                 return false;
4599ea103259SMichael Clark             }
4600ea103259SMichael Clark             break;
4601ea103259SMichael Clark         default: break;
4602ea103259SMichael Clark         }
4603ea103259SMichael Clark         c++;
4604ea103259SMichael Clark     }
4605ea103259SMichael Clark     return true;
4606ea103259SMichael Clark }
4607ea103259SMichael Clark 
4608ea103259SMichael Clark /* instruction length */
4609ea103259SMichael Clark 
4610ea103259SMichael Clark static size_t inst_length(rv_inst inst)
4611ea103259SMichael Clark {
4612ea103259SMichael Clark     /* NOTE: supports maximum instruction size of 64-bits */
4613ea103259SMichael Clark 
4614ea103259SMichael Clark     /* instruction length coding
4615ea103259SMichael Clark      *
4616ea103259SMichael Clark      *      aa - 16 bit aa != 11
4617ea103259SMichael Clark      *   bbb11 - 32 bit bbb != 111
4618ea103259SMichael Clark      *  011111 - 48 bit
4619ea103259SMichael Clark      * 0111111 - 64 bit
4620ea103259SMichael Clark      */
4621ea103259SMichael Clark 
4622ea103259SMichael Clark     return (inst &      0b11) != 0b11      ? 2
4623ea103259SMichael Clark          : (inst &   0b11100) != 0b11100   ? 4
4624ea103259SMichael Clark          : (inst &  0b111111) == 0b011111  ? 6
4625ea103259SMichael Clark          : (inst & 0b1111111) == 0b0111111 ? 8
4626ea103259SMichael Clark          : 0;
4627ea103259SMichael Clark }
4628ea103259SMichael Clark 
4629ea103259SMichael Clark /* format instruction */
4630ea103259SMichael Clark 
4631ea103259SMichael Clark static void append(char *s1, const char *s2, size_t n)
4632ea103259SMichael Clark {
4633ea103259SMichael Clark     size_t l1 = strlen(s1);
4634ea103259SMichael Clark     if (n - l1 - 1 > 0) {
4635ea103259SMichael Clark         strncat(s1, s2, n - l1);
4636ea103259SMichael Clark     }
4637ea103259SMichael Clark }
4638ea103259SMichael Clark 
4639ea103259SMichael Clark static void format_inst(char *buf, size_t buflen, size_t tab, rv_decode *dec)
4640ea103259SMichael Clark {
4641ea103259SMichael Clark     char tmp[64];
4642ea103259SMichael Clark     const char *fmt;
4643ea103259SMichael Clark 
4644ea103259SMichael Clark     fmt = opcode_data[dec->op].format;
4645ea103259SMichael Clark     while (*fmt) {
4646ea103259SMichael Clark         switch (*fmt) {
4647ea103259SMichael Clark         case 'O':
4648ea103259SMichael Clark             append(buf, opcode_data[dec->op].name, buflen);
4649ea103259SMichael Clark             break;
4650ea103259SMichael Clark         case '(':
4651ea103259SMichael Clark             append(buf, "(", buflen);
4652ea103259SMichael Clark             break;
4653ea103259SMichael Clark         case ',':
4654ea103259SMichael Clark             append(buf, ",", buflen);
4655ea103259SMichael Clark             break;
4656ea103259SMichael Clark         case ')':
4657ea103259SMichael Clark             append(buf, ")", buflen);
4658ea103259SMichael Clark             break;
46592c71d02eSWeiwei Li         case '-':
46602c71d02eSWeiwei Li             append(buf, "-", buflen);
46612c71d02eSWeiwei Li             break;
46625748c886SWeiwei Li         case 'b':
46635748c886SWeiwei Li             snprintf(tmp, sizeof(tmp), "%d", dec->bs);
46645748c886SWeiwei Li             append(buf, tmp, buflen);
46655748c886SWeiwei Li             break;
46665748c886SWeiwei Li         case 'n':
46675748c886SWeiwei Li             snprintf(tmp, sizeof(tmp), "%d", dec->rnum);
46685748c886SWeiwei Li             append(buf, tmp, buflen);
46695748c886SWeiwei Li             break;
4670ea103259SMichael Clark         case '0':
4671ea103259SMichael Clark             append(buf, rv_ireg_name_sym[dec->rd], buflen);
4672ea103259SMichael Clark             break;
4673ea103259SMichael Clark         case '1':
4674ea103259SMichael Clark             append(buf, rv_ireg_name_sym[dec->rs1], buflen);
4675ea103259SMichael Clark             break;
4676ea103259SMichael Clark         case '2':
4677ea103259SMichael Clark             append(buf, rv_ireg_name_sym[dec->rs2], buflen);
4678ea103259SMichael Clark             break;
4679ea103259SMichael Clark         case '3':
4680c54dab4cSWeiwei Li             append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rd] :
4681c54dab4cSWeiwei Li                                               rv_freg_name_sym[dec->rd],
4682c54dab4cSWeiwei Li                    buflen);
4683ea103259SMichael Clark             break;
4684ea103259SMichael Clark         case '4':
4685c54dab4cSWeiwei Li             append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs1] :
4686c54dab4cSWeiwei Li                                               rv_freg_name_sym[dec->rs1],
4687c54dab4cSWeiwei Li                    buflen);
4688ea103259SMichael Clark             break;
4689ea103259SMichael Clark         case '5':
4690c54dab4cSWeiwei Li             append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs2] :
4691c54dab4cSWeiwei Li                                               rv_freg_name_sym[dec->rs2],
4692c54dab4cSWeiwei Li                    buflen);
4693ea103259SMichael Clark             break;
4694ea103259SMichael Clark         case '6':
4695c54dab4cSWeiwei Li             append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs3] :
4696c54dab4cSWeiwei Li                                               rv_freg_name_sym[dec->rs3],
4697c54dab4cSWeiwei Li                    buflen);
4698ea103259SMichael Clark             break;
4699ea103259SMichael Clark         case '7':
4700ea103259SMichael Clark             snprintf(tmp, sizeof(tmp), "%d", dec->rs1);
4701ea103259SMichael Clark             append(buf, tmp, buflen);
4702ea103259SMichael Clark             break;
4703ea103259SMichael Clark         case 'i':
4704ea103259SMichael Clark             snprintf(tmp, sizeof(tmp), "%d", dec->imm);
4705ea103259SMichael Clark             append(buf, tmp, buflen);
4706ea103259SMichael Clark             break;
470707f4964dSYang Liu         case 'u':
470807f4964dSYang Liu             snprintf(tmp, sizeof(tmp), "%u", ((uint32_t)dec->imm & 0b11111));
470907f4964dSYang Liu             append(buf, tmp, buflen);
471007f4964dSYang Liu             break;
4711ea103259SMichael Clark         case 'o':
4712ea103259SMichael Clark             snprintf(tmp, sizeof(tmp), "%d", dec->imm);
4713ea103259SMichael Clark             append(buf, tmp, buflen);
4714ea103259SMichael Clark             while (strlen(buf) < tab * 2) {
4715ea103259SMichael Clark                 append(buf, " ", buflen);
4716ea103259SMichael Clark             }
4717ea103259SMichael Clark             snprintf(tmp, sizeof(tmp), "# 0x%" PRIx64,
4718ea103259SMichael Clark                 dec->pc + dec->imm);
4719ea103259SMichael Clark             append(buf, tmp, buflen);
4720ea103259SMichael Clark             break;
4721ea103259SMichael Clark         case 'c': {
4722ea103259SMichael Clark             const char *name = csr_name(dec->imm & 0xfff);
4723ea103259SMichael Clark             if (name) {
4724ea103259SMichael Clark                 append(buf, name, buflen);
4725ea103259SMichael Clark             } else {
4726ea103259SMichael Clark                 snprintf(tmp, sizeof(tmp), "0x%03x", dec->imm & 0xfff);
4727ea103259SMichael Clark                 append(buf, tmp, buflen);
4728ea103259SMichael Clark             }
4729ea103259SMichael Clark             break;
4730ea103259SMichael Clark         }
4731ea103259SMichael Clark         case 'r':
4732ea103259SMichael Clark             switch (dec->rm) {
4733ea103259SMichael Clark             case rv_rm_rne:
4734ea103259SMichael Clark                 append(buf, "rne", buflen);
4735ea103259SMichael Clark                 break;
4736ea103259SMichael Clark             case rv_rm_rtz:
4737ea103259SMichael Clark                 append(buf, "rtz", buflen);
4738ea103259SMichael Clark                 break;
4739ea103259SMichael Clark             case rv_rm_rdn:
4740ea103259SMichael Clark                 append(buf, "rdn", buflen);
4741ea103259SMichael Clark                 break;
4742ea103259SMichael Clark             case rv_rm_rup:
4743ea103259SMichael Clark                 append(buf, "rup", buflen);
4744ea103259SMichael Clark                 break;
4745ea103259SMichael Clark             case rv_rm_rmm:
4746ea103259SMichael Clark                 append(buf, "rmm", buflen);
4747ea103259SMichael Clark                 break;
4748ea103259SMichael Clark             case rv_rm_dyn:
4749ea103259SMichael Clark                 append(buf, "dyn", buflen);
4750ea103259SMichael Clark                 break;
4751ea103259SMichael Clark             default:
4752ea103259SMichael Clark                 append(buf, "inv", buflen);
4753ea103259SMichael Clark                 break;
4754ea103259SMichael Clark             }
4755ea103259SMichael Clark             break;
4756ea103259SMichael Clark         case 'p':
4757ea103259SMichael Clark             if (dec->pred & rv_fence_i) {
4758ea103259SMichael Clark                 append(buf, "i", buflen);
4759ea103259SMichael Clark             }
4760ea103259SMichael Clark             if (dec->pred & rv_fence_o) {
4761ea103259SMichael Clark                 append(buf, "o", buflen);
4762ea103259SMichael Clark             }
4763ea103259SMichael Clark             if (dec->pred & rv_fence_r) {
4764ea103259SMichael Clark                 append(buf, "r", buflen);
4765ea103259SMichael Clark             }
4766ea103259SMichael Clark             if (dec->pred & rv_fence_w) {
4767ea103259SMichael Clark                 append(buf, "w", buflen);
4768ea103259SMichael Clark             }
4769ea103259SMichael Clark             break;
4770ea103259SMichael Clark         case 's':
4771ea103259SMichael Clark             if (dec->succ & rv_fence_i) {
4772ea103259SMichael Clark                 append(buf, "i", buflen);
4773ea103259SMichael Clark             }
4774ea103259SMichael Clark             if (dec->succ & rv_fence_o) {
4775ea103259SMichael Clark                 append(buf, "o", buflen);
4776ea103259SMichael Clark             }
4777ea103259SMichael Clark             if (dec->succ & rv_fence_r) {
4778ea103259SMichael Clark                 append(buf, "r", buflen);
4779ea103259SMichael Clark             }
4780ea103259SMichael Clark             if (dec->succ & rv_fence_w) {
4781ea103259SMichael Clark                 append(buf, "w", buflen);
4782ea103259SMichael Clark             }
4783ea103259SMichael Clark             break;
4784ea103259SMichael Clark         case '\t':
4785ea103259SMichael Clark             while (strlen(buf) < tab) {
4786ea103259SMichael Clark                 append(buf, " ", buflen);
4787ea103259SMichael Clark             }
4788ea103259SMichael Clark             break;
4789ea103259SMichael Clark         case 'A':
4790ea103259SMichael Clark             if (dec->aq) {
4791ea103259SMichael Clark                 append(buf, ".aq", buflen);
4792ea103259SMichael Clark             }
4793ea103259SMichael Clark             break;
4794ea103259SMichael Clark         case 'R':
4795ea103259SMichael Clark             if (dec->rl) {
4796ea103259SMichael Clark                 append(buf, ".rl", buflen);
4797ea103259SMichael Clark             }
4798ea103259SMichael Clark             break;
479907f4964dSYang Liu         case 'l':
480007f4964dSYang Liu             append(buf, ",v0", buflen);
480107f4964dSYang Liu             break;
480207f4964dSYang Liu         case 'm':
480307f4964dSYang Liu             if (dec->vm == 0) {
480407f4964dSYang Liu                 append(buf, ",v0.t", buflen);
480507f4964dSYang Liu             }
480607f4964dSYang Liu             break;
480707f4964dSYang Liu         case 'D':
480807f4964dSYang Liu             append(buf, rv_vreg_name_sym[dec->rd], buflen);
480907f4964dSYang Liu             break;
481007f4964dSYang Liu         case 'E':
481107f4964dSYang Liu             append(buf, rv_vreg_name_sym[dec->rs1], buflen);
481207f4964dSYang Liu             break;
481307f4964dSYang Liu         case 'F':
481407f4964dSYang Liu             append(buf, rv_vreg_name_sym[dec->rs2], buflen);
481507f4964dSYang Liu             break;
481607f4964dSYang Liu         case 'G':
481707f4964dSYang Liu             append(buf, rv_vreg_name_sym[dec->rs3], buflen);
481807f4964dSYang Liu             break;
481907f4964dSYang Liu         case 'v': {
482007f4964dSYang Liu             char nbuf[32] = {0};
482107f4964dSYang Liu             const int sew = 1 << (((dec->vzimm >> 3) & 0b111) + 3);
482207f4964dSYang Liu             sprintf(nbuf, "%d", sew);
482307f4964dSYang Liu             const int lmul = dec->vzimm & 0b11;
482407f4964dSYang Liu             const int flmul = (dec->vzimm >> 2) & 1;
482507f4964dSYang Liu             const char *vta = (dec->vzimm >> 6) & 1 ? "ta" : "tu";
482607f4964dSYang Liu             const char *vma = (dec->vzimm >> 7) & 1 ? "ma" : "mu";
482707f4964dSYang Liu             append(buf, "e", buflen);
482807f4964dSYang Liu             append(buf, nbuf, buflen);
482907f4964dSYang Liu             append(buf, ",m", buflen);
483007f4964dSYang Liu             if (flmul) {
483107f4964dSYang Liu                 switch (lmul) {
483207f4964dSYang Liu                 case 3:
483307f4964dSYang Liu                     sprintf(nbuf, "f2");
483407f4964dSYang Liu                     break;
483507f4964dSYang Liu                 case 2:
483607f4964dSYang Liu                     sprintf(nbuf, "f4");
483707f4964dSYang Liu                     break;
483807f4964dSYang Liu                 case 1:
483907f4964dSYang Liu                     sprintf(nbuf, "f8");
484007f4964dSYang Liu                 break;
484107f4964dSYang Liu                 }
484207f4964dSYang Liu                 append(buf, nbuf, buflen);
484307f4964dSYang Liu             } else {
484407f4964dSYang Liu                 sprintf(nbuf, "%d", 1 << lmul);
484507f4964dSYang Liu                 append(buf, nbuf, buflen);
484607f4964dSYang Liu             }
484707f4964dSYang Liu             append(buf, ",", buflen);
484807f4964dSYang Liu             append(buf, vta, buflen);
484907f4964dSYang Liu             append(buf, ",", buflen);
485007f4964dSYang Liu             append(buf, vma, buflen);
485107f4964dSYang Liu             break;
485207f4964dSYang Liu         }
48532c71d02eSWeiwei Li         case 'x': {
48542c71d02eSWeiwei Li             switch (dec->rlist) {
48552c71d02eSWeiwei Li             case 4:
48562c71d02eSWeiwei Li                 snprintf(tmp, sizeof(tmp), "{ra}");
48572c71d02eSWeiwei Li                 break;
48582c71d02eSWeiwei Li             case 5:
48592c71d02eSWeiwei Li                 snprintf(tmp, sizeof(tmp), "{ra, s0}");
48602c71d02eSWeiwei Li                 break;
48612c71d02eSWeiwei Li             case 15:
48622c71d02eSWeiwei Li                 snprintf(tmp, sizeof(tmp), "{ra, s0-s11}");
48632c71d02eSWeiwei Li                 break;
48642c71d02eSWeiwei Li             default:
48652c71d02eSWeiwei Li                 snprintf(tmp, sizeof(tmp), "{ra, s0-s%d}", dec->rlist - 5);
48662c71d02eSWeiwei Li                 break;
48672c71d02eSWeiwei Li             }
48682c71d02eSWeiwei Li             append(buf, tmp, buflen);
48692c71d02eSWeiwei Li             break;
48702c71d02eSWeiwei Li         }
4871ea103259SMichael Clark         default:
4872ea103259SMichael Clark             break;
4873ea103259SMichael Clark         }
4874ea103259SMichael Clark         fmt++;
4875ea103259SMichael Clark     }
4876ea103259SMichael Clark }
4877ea103259SMichael Clark 
4878ea103259SMichael Clark /* lift instruction to pseudo-instruction */
4879ea103259SMichael Clark 
4880ea103259SMichael Clark static void decode_inst_lift_pseudo(rv_decode *dec)
4881ea103259SMichael Clark {
4882ea103259SMichael Clark     const rv_comp_data *comp_data = opcode_data[dec->op].pseudo;
4883ea103259SMichael Clark     if (!comp_data) {
4884ea103259SMichael Clark         return;
4885ea103259SMichael Clark     }
4886ea103259SMichael Clark     while (comp_data->constraints) {
4887ea103259SMichael Clark         if (check_constraints(dec, comp_data->constraints)) {
4888ea103259SMichael Clark             dec->op = comp_data->op;
4889ea103259SMichael Clark             dec->codec = opcode_data[dec->op].codec;
4890ea103259SMichael Clark             return;
4891ea103259SMichael Clark         }
4892ea103259SMichael Clark         comp_data++;
4893ea103259SMichael Clark     }
4894ea103259SMichael Clark }
4895ea103259SMichael Clark 
4896ea103259SMichael Clark /* decompress instruction */
4897ea103259SMichael Clark 
4898ea103259SMichael Clark static void decode_inst_decompress_rv32(rv_decode *dec)
4899ea103259SMichael Clark {
4900ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv32;
4901ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
4902f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
4903f88222daSMichael Clark             && dec->imm == 0) {
4904f88222daSMichael Clark             dec->op = rv_op_illegal;
4905f88222daSMichael Clark         } else {
4906ea103259SMichael Clark             dec->op = decomp_op;
4907ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
4908ea103259SMichael Clark         }
4909ea103259SMichael Clark     }
4910f88222daSMichael Clark }
4911ea103259SMichael Clark 
4912ea103259SMichael Clark static void decode_inst_decompress_rv64(rv_decode *dec)
4913ea103259SMichael Clark {
4914ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv64;
4915ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
4916f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
4917f88222daSMichael Clark             && dec->imm == 0) {
4918f88222daSMichael Clark             dec->op = rv_op_illegal;
4919f88222daSMichael Clark         } else {
4920ea103259SMichael Clark             dec->op = decomp_op;
4921ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
4922ea103259SMichael Clark         }
4923ea103259SMichael Clark     }
4924f88222daSMichael Clark }
4925ea103259SMichael Clark 
4926ea103259SMichael Clark static void decode_inst_decompress_rv128(rv_decode *dec)
4927ea103259SMichael Clark {
4928ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv128;
4929ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
4930f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
4931f88222daSMichael Clark             && dec->imm == 0) {
4932f88222daSMichael Clark             dec->op = rv_op_illegal;
4933f88222daSMichael Clark         } else {
4934ea103259SMichael Clark             dec->op = decomp_op;
4935ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
4936ea103259SMichael Clark         }
4937ea103259SMichael Clark     }
4938f88222daSMichael Clark }
4939ea103259SMichael Clark 
4940ea103259SMichael Clark static void decode_inst_decompress(rv_decode *dec, rv_isa isa)
4941ea103259SMichael Clark {
4942ea103259SMichael Clark     switch (isa) {
4943ea103259SMichael Clark     case rv32:
4944ea103259SMichael Clark         decode_inst_decompress_rv32(dec);
4945ea103259SMichael Clark         break;
4946ea103259SMichael Clark     case rv64:
4947ea103259SMichael Clark         decode_inst_decompress_rv64(dec);
4948ea103259SMichael Clark         break;
4949ea103259SMichael Clark     case rv128:
4950ea103259SMichael Clark         decode_inst_decompress_rv128(dec);
4951ea103259SMichael Clark         break;
4952ea103259SMichael Clark     }
4953ea103259SMichael Clark }
4954ea103259SMichael Clark 
4955ea103259SMichael Clark /* disassemble instruction */
4956ea103259SMichael Clark 
4957ea103259SMichael Clark static void
4958454c2201SWeiwei Li disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst,
4959454c2201SWeiwei Li             RISCVCPUConfig *cfg)
4960ea103259SMichael Clark {
4961ea103259SMichael Clark     rv_decode dec = { 0 };
4962ea103259SMichael Clark     dec.pc = pc;
4963ea103259SMichael Clark     dec.inst = inst;
4964454c2201SWeiwei Li     dec.cfg = cfg;
4965ea103259SMichael Clark     decode_inst_opcode(&dec, isa);
496633632775SFrédéric Pétrot     decode_inst_operands(&dec, isa);
4967ea103259SMichael Clark     decode_inst_decompress(&dec, isa);
4968ea103259SMichael Clark     decode_inst_lift_pseudo(&dec);
496907f4964dSYang Liu     format_inst(buf, buflen, 24, &dec);
4970ea103259SMichael Clark }
4971ea103259SMichael Clark 
49726296a799SMichael Clark #define INST_FMT_2 "%04" PRIx64 "              "
49736296a799SMichael Clark #define INST_FMT_4 "%08" PRIx64 "          "
49746296a799SMichael Clark #define INST_FMT_6 "%012" PRIx64 "      "
49756296a799SMichael Clark #define INST_FMT_8 "%016" PRIx64 "  "
49766296a799SMichael Clark 
4977ea103259SMichael Clark static int
4978ea103259SMichael Clark print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa)
4979ea103259SMichael Clark {
4980ea103259SMichael Clark     char buf[128] = { 0 };
4981ea103259SMichael Clark     bfd_byte packet[2];
4982ea103259SMichael Clark     rv_inst inst = 0;
4983ea103259SMichael Clark     size_t len = 2;
4984ea103259SMichael Clark     bfd_vma n;
4985ea103259SMichael Clark     int status;
4986ea103259SMichael Clark 
4987ea103259SMichael Clark     /* Instructions are made of 2-byte packets in little-endian order */
4988ea103259SMichael Clark     for (n = 0; n < len; n += 2) {
4989ea103259SMichael Clark         status = (*info->read_memory_func)(memaddr + n, packet, 2, info);
4990ea103259SMichael Clark         if (status != 0) {
4991ea103259SMichael Clark             /* Don't fail just because we fell off the end.  */
4992ea103259SMichael Clark             if (n > 0) {
4993ea103259SMichael Clark                 break;
4994ea103259SMichael Clark             }
4995ea103259SMichael Clark             (*info->memory_error_func)(status, memaddr, info);
4996ea103259SMichael Clark             return status;
4997ea103259SMichael Clark         }
4998ea103259SMichael Clark         inst |= ((rv_inst) bfd_getl16(packet)) << (8 * n);
4999ea103259SMichael Clark         if (n == 0) {
5000ea103259SMichael Clark             len = inst_length(inst);
5001ea103259SMichael Clark         }
5002ea103259SMichael Clark     }
5003ea103259SMichael Clark 
50046296a799SMichael Clark     switch (len) {
50056296a799SMichael Clark     case 2:
50066296a799SMichael Clark         (*info->fprintf_func)(info->stream, INST_FMT_2, inst);
50076296a799SMichael Clark         break;
50086296a799SMichael Clark     case 4:
50096296a799SMichael Clark         (*info->fprintf_func)(info->stream, INST_FMT_4, inst);
50106296a799SMichael Clark         break;
50116296a799SMichael Clark     case 6:
50126296a799SMichael Clark         (*info->fprintf_func)(info->stream, INST_FMT_6, inst);
50136296a799SMichael Clark         break;
50146296a799SMichael Clark     default:
50156296a799SMichael Clark         (*info->fprintf_func)(info->stream, INST_FMT_8, inst);
50166296a799SMichael Clark         break;
50176296a799SMichael Clark     }
50186296a799SMichael Clark 
5019454c2201SWeiwei Li     disasm_inst(buf, sizeof(buf), isa, memaddr, inst,
5020454c2201SWeiwei Li                 (RISCVCPUConfig *)info->target_info);
5021ea103259SMichael Clark     (*info->fprintf_func)(info->stream, "%s", buf);
5022ea103259SMichael Clark 
5023ea103259SMichael Clark     return len;
5024ea103259SMichael Clark }
5025ea103259SMichael Clark 
5026ea103259SMichael Clark int print_insn_riscv32(bfd_vma memaddr, struct disassemble_info *info)
5027ea103259SMichael Clark {
5028ea103259SMichael Clark     return print_insn_riscv(memaddr, info, rv32);
5029ea103259SMichael Clark }
5030ea103259SMichael Clark 
5031ea103259SMichael Clark int print_insn_riscv64(bfd_vma memaddr, struct disassemble_info *info)
5032ea103259SMichael Clark {
5033ea103259SMichael Clark     return print_insn_riscv(memaddr, info, rv64);
5034ea103259SMichael Clark }
5035332dab68SFrédéric Pétrot 
5036332dab68SFrédéric Pétrot int print_insn_riscv128(bfd_vma memaddr, struct disassemble_info *info)
5037332dab68SFrédéric Pétrot {
5038332dab68SFrédéric Pétrot     return print_insn_riscv(memaddr, info, rv128);
5039332dab68SFrédéric Pétrot }
5040