xref: /qemu/disas/riscv.c (revision 9ee727802012ddb32e193d84052a44e382088277)
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"
21318df723SChristoph Müllner #include "qemu/bitops.h"
223979fca4SMarkus Armbruster #include "disas/dis-asm.h"
23454c2201SWeiwei Li #include "target/riscv/cpu_cfg.h"
245d326db2SChristoph Müllner #include "disas/riscv.h"
25ea103259SMichael Clark 
26f6f72338SChristoph Müllner /* Vendor extensions */
27318df723SChristoph Müllner #include "disas/riscv-xthead.h"
28f6f72338SChristoph Müllner #include "disas/riscv-xventana.h"
29f6f72338SChristoph Müllner 
30ea103259SMichael Clark typedef enum {
3101b1361fSChristoph Müllner     /* 0 is reserved for rv_op_illegal. */
32ea103259SMichael Clark     rv_op_lui = 1,
33ea103259SMichael Clark     rv_op_auipc = 2,
34ea103259SMichael Clark     rv_op_jal = 3,
35ea103259SMichael Clark     rv_op_jalr = 4,
36ea103259SMichael Clark     rv_op_beq = 5,
37ea103259SMichael Clark     rv_op_bne = 6,
38ea103259SMichael Clark     rv_op_blt = 7,
39ea103259SMichael Clark     rv_op_bge = 8,
40ea103259SMichael Clark     rv_op_bltu = 9,
41ea103259SMichael Clark     rv_op_bgeu = 10,
42ea103259SMichael Clark     rv_op_lb = 11,
43ea103259SMichael Clark     rv_op_lh = 12,
44ea103259SMichael Clark     rv_op_lw = 13,
45ea103259SMichael Clark     rv_op_lbu = 14,
46ea103259SMichael Clark     rv_op_lhu = 15,
47ea103259SMichael Clark     rv_op_sb = 16,
48ea103259SMichael Clark     rv_op_sh = 17,
49ea103259SMichael Clark     rv_op_sw = 18,
50ea103259SMichael Clark     rv_op_addi = 19,
51ea103259SMichael Clark     rv_op_slti = 20,
52ea103259SMichael Clark     rv_op_sltiu = 21,
53ea103259SMichael Clark     rv_op_xori = 22,
54ea103259SMichael Clark     rv_op_ori = 23,
55ea103259SMichael Clark     rv_op_andi = 24,
56ea103259SMichael Clark     rv_op_slli = 25,
57ea103259SMichael Clark     rv_op_srli = 26,
58ea103259SMichael Clark     rv_op_srai = 27,
59ea103259SMichael Clark     rv_op_add = 28,
60ea103259SMichael Clark     rv_op_sub = 29,
61ea103259SMichael Clark     rv_op_sll = 30,
62ea103259SMichael Clark     rv_op_slt = 31,
63ea103259SMichael Clark     rv_op_sltu = 32,
64ea103259SMichael Clark     rv_op_xor = 33,
65ea103259SMichael Clark     rv_op_srl = 34,
66ea103259SMichael Clark     rv_op_sra = 35,
67ea103259SMichael Clark     rv_op_or = 36,
68ea103259SMichael Clark     rv_op_and = 37,
69ea103259SMichael Clark     rv_op_fence = 38,
70ea103259SMichael Clark     rv_op_fence_i = 39,
71ea103259SMichael Clark     rv_op_lwu = 40,
72ea103259SMichael Clark     rv_op_ld = 41,
73ea103259SMichael Clark     rv_op_sd = 42,
74ea103259SMichael Clark     rv_op_addiw = 43,
75ea103259SMichael Clark     rv_op_slliw = 44,
76ea103259SMichael Clark     rv_op_srliw = 45,
77ea103259SMichael Clark     rv_op_sraiw = 46,
78ea103259SMichael Clark     rv_op_addw = 47,
79ea103259SMichael Clark     rv_op_subw = 48,
80ea103259SMichael Clark     rv_op_sllw = 49,
81ea103259SMichael Clark     rv_op_srlw = 50,
82ea103259SMichael Clark     rv_op_sraw = 51,
83ea103259SMichael Clark     rv_op_ldu = 52,
84ea103259SMichael Clark     rv_op_lq = 53,
85ea103259SMichael Clark     rv_op_sq = 54,
86ea103259SMichael Clark     rv_op_addid = 55,
87ea103259SMichael Clark     rv_op_sllid = 56,
88ea103259SMichael Clark     rv_op_srlid = 57,
89ea103259SMichael Clark     rv_op_sraid = 58,
90ea103259SMichael Clark     rv_op_addd = 59,
91ea103259SMichael Clark     rv_op_subd = 60,
92ea103259SMichael Clark     rv_op_slld = 61,
93ea103259SMichael Clark     rv_op_srld = 62,
94ea103259SMichael Clark     rv_op_srad = 63,
95ea103259SMichael Clark     rv_op_mul = 64,
96ea103259SMichael Clark     rv_op_mulh = 65,
97ea103259SMichael Clark     rv_op_mulhsu = 66,
98ea103259SMichael Clark     rv_op_mulhu = 67,
99ea103259SMichael Clark     rv_op_div = 68,
100ea103259SMichael Clark     rv_op_divu = 69,
101ea103259SMichael Clark     rv_op_rem = 70,
102ea103259SMichael Clark     rv_op_remu = 71,
103ea103259SMichael Clark     rv_op_mulw = 72,
104ea103259SMichael Clark     rv_op_divw = 73,
105ea103259SMichael Clark     rv_op_divuw = 74,
106ea103259SMichael Clark     rv_op_remw = 75,
107ea103259SMichael Clark     rv_op_remuw = 76,
108ea103259SMichael Clark     rv_op_muld = 77,
109ea103259SMichael Clark     rv_op_divd = 78,
110ea103259SMichael Clark     rv_op_divud = 79,
111ea103259SMichael Clark     rv_op_remd = 80,
112ea103259SMichael Clark     rv_op_remud = 81,
113ea103259SMichael Clark     rv_op_lr_w = 82,
114ea103259SMichael Clark     rv_op_sc_w = 83,
115ea103259SMichael Clark     rv_op_amoswap_w = 84,
116ea103259SMichael Clark     rv_op_amoadd_w = 85,
117ea103259SMichael Clark     rv_op_amoxor_w = 86,
118ea103259SMichael Clark     rv_op_amoor_w = 87,
119ea103259SMichael Clark     rv_op_amoand_w = 88,
120ea103259SMichael Clark     rv_op_amomin_w = 89,
121ea103259SMichael Clark     rv_op_amomax_w = 90,
122ea103259SMichael Clark     rv_op_amominu_w = 91,
123ea103259SMichael Clark     rv_op_amomaxu_w = 92,
124ea103259SMichael Clark     rv_op_lr_d = 93,
125ea103259SMichael Clark     rv_op_sc_d = 94,
126ea103259SMichael Clark     rv_op_amoswap_d = 95,
127ea103259SMichael Clark     rv_op_amoadd_d = 96,
128ea103259SMichael Clark     rv_op_amoxor_d = 97,
129ea103259SMichael Clark     rv_op_amoor_d = 98,
130ea103259SMichael Clark     rv_op_amoand_d = 99,
131ea103259SMichael Clark     rv_op_amomin_d = 100,
132ea103259SMichael Clark     rv_op_amomax_d = 101,
133ea103259SMichael Clark     rv_op_amominu_d = 102,
134ea103259SMichael Clark     rv_op_amomaxu_d = 103,
135ea103259SMichael Clark     rv_op_lr_q = 104,
136ea103259SMichael Clark     rv_op_sc_q = 105,
137ea103259SMichael Clark     rv_op_amoswap_q = 106,
138ea103259SMichael Clark     rv_op_amoadd_q = 107,
139ea103259SMichael Clark     rv_op_amoxor_q = 108,
140ea103259SMichael Clark     rv_op_amoor_q = 109,
141ea103259SMichael Clark     rv_op_amoand_q = 110,
142ea103259SMichael Clark     rv_op_amomin_q = 111,
143ea103259SMichael Clark     rv_op_amomax_q = 112,
144ea103259SMichael Clark     rv_op_amominu_q = 113,
145ea103259SMichael Clark     rv_op_amomaxu_q = 114,
146ea103259SMichael Clark     rv_op_ecall = 115,
147ea103259SMichael Clark     rv_op_ebreak = 116,
148ea103259SMichael Clark     rv_op_uret = 117,
149ea103259SMichael Clark     rv_op_sret = 118,
150ea103259SMichael Clark     rv_op_hret = 119,
151ea103259SMichael Clark     rv_op_mret = 120,
152ea103259SMichael Clark     rv_op_dret = 121,
153ea103259SMichael Clark     rv_op_sfence_vm = 122,
154ea103259SMichael Clark     rv_op_sfence_vma = 123,
155ea103259SMichael Clark     rv_op_wfi = 124,
156ea103259SMichael Clark     rv_op_csrrw = 125,
157ea103259SMichael Clark     rv_op_csrrs = 126,
158ea103259SMichael Clark     rv_op_csrrc = 127,
159ea103259SMichael Clark     rv_op_csrrwi = 128,
160ea103259SMichael Clark     rv_op_csrrsi = 129,
161ea103259SMichael Clark     rv_op_csrrci = 130,
162ea103259SMichael Clark     rv_op_flw = 131,
163ea103259SMichael Clark     rv_op_fsw = 132,
164ea103259SMichael Clark     rv_op_fmadd_s = 133,
165ea103259SMichael Clark     rv_op_fmsub_s = 134,
166ea103259SMichael Clark     rv_op_fnmsub_s = 135,
167ea103259SMichael Clark     rv_op_fnmadd_s = 136,
168ea103259SMichael Clark     rv_op_fadd_s = 137,
169ea103259SMichael Clark     rv_op_fsub_s = 138,
170ea103259SMichael Clark     rv_op_fmul_s = 139,
171ea103259SMichael Clark     rv_op_fdiv_s = 140,
172ea103259SMichael Clark     rv_op_fsgnj_s = 141,
173ea103259SMichael Clark     rv_op_fsgnjn_s = 142,
174ea103259SMichael Clark     rv_op_fsgnjx_s = 143,
175ea103259SMichael Clark     rv_op_fmin_s = 144,
176ea103259SMichael Clark     rv_op_fmax_s = 145,
177ea103259SMichael Clark     rv_op_fsqrt_s = 146,
178ea103259SMichael Clark     rv_op_fle_s = 147,
179ea103259SMichael Clark     rv_op_flt_s = 148,
180ea103259SMichael Clark     rv_op_feq_s = 149,
181ea103259SMichael Clark     rv_op_fcvt_w_s = 150,
182ea103259SMichael Clark     rv_op_fcvt_wu_s = 151,
183ea103259SMichael Clark     rv_op_fcvt_s_w = 152,
184ea103259SMichael Clark     rv_op_fcvt_s_wu = 153,
185ea103259SMichael Clark     rv_op_fmv_x_s = 154,
186ea103259SMichael Clark     rv_op_fclass_s = 155,
187ea103259SMichael Clark     rv_op_fmv_s_x = 156,
188ea103259SMichael Clark     rv_op_fcvt_l_s = 157,
189ea103259SMichael Clark     rv_op_fcvt_lu_s = 158,
190ea103259SMichael Clark     rv_op_fcvt_s_l = 159,
191ea103259SMichael Clark     rv_op_fcvt_s_lu = 160,
192ea103259SMichael Clark     rv_op_fld = 161,
193ea103259SMichael Clark     rv_op_fsd = 162,
194ea103259SMichael Clark     rv_op_fmadd_d = 163,
195ea103259SMichael Clark     rv_op_fmsub_d = 164,
196ea103259SMichael Clark     rv_op_fnmsub_d = 165,
197ea103259SMichael Clark     rv_op_fnmadd_d = 166,
198ea103259SMichael Clark     rv_op_fadd_d = 167,
199ea103259SMichael Clark     rv_op_fsub_d = 168,
200ea103259SMichael Clark     rv_op_fmul_d = 169,
201ea103259SMichael Clark     rv_op_fdiv_d = 170,
202ea103259SMichael Clark     rv_op_fsgnj_d = 171,
203ea103259SMichael Clark     rv_op_fsgnjn_d = 172,
204ea103259SMichael Clark     rv_op_fsgnjx_d = 173,
205ea103259SMichael Clark     rv_op_fmin_d = 174,
206ea103259SMichael Clark     rv_op_fmax_d = 175,
207ea103259SMichael Clark     rv_op_fcvt_s_d = 176,
208ea103259SMichael Clark     rv_op_fcvt_d_s = 177,
209ea103259SMichael Clark     rv_op_fsqrt_d = 178,
210ea103259SMichael Clark     rv_op_fle_d = 179,
211ea103259SMichael Clark     rv_op_flt_d = 180,
212ea103259SMichael Clark     rv_op_feq_d = 181,
213ea103259SMichael Clark     rv_op_fcvt_w_d = 182,
214ea103259SMichael Clark     rv_op_fcvt_wu_d = 183,
215ea103259SMichael Clark     rv_op_fcvt_d_w = 184,
216ea103259SMichael Clark     rv_op_fcvt_d_wu = 185,
217ea103259SMichael Clark     rv_op_fclass_d = 186,
218ea103259SMichael Clark     rv_op_fcvt_l_d = 187,
219ea103259SMichael Clark     rv_op_fcvt_lu_d = 188,
220ea103259SMichael Clark     rv_op_fmv_x_d = 189,
221ea103259SMichael Clark     rv_op_fcvt_d_l = 190,
222ea103259SMichael Clark     rv_op_fcvt_d_lu = 191,
223ea103259SMichael Clark     rv_op_fmv_d_x = 192,
224ea103259SMichael Clark     rv_op_flq = 193,
225ea103259SMichael Clark     rv_op_fsq = 194,
226ea103259SMichael Clark     rv_op_fmadd_q = 195,
227ea103259SMichael Clark     rv_op_fmsub_q = 196,
228ea103259SMichael Clark     rv_op_fnmsub_q = 197,
229ea103259SMichael Clark     rv_op_fnmadd_q = 198,
230ea103259SMichael Clark     rv_op_fadd_q = 199,
231ea103259SMichael Clark     rv_op_fsub_q = 200,
232ea103259SMichael Clark     rv_op_fmul_q = 201,
233ea103259SMichael Clark     rv_op_fdiv_q = 202,
234ea103259SMichael Clark     rv_op_fsgnj_q = 203,
235ea103259SMichael Clark     rv_op_fsgnjn_q = 204,
236ea103259SMichael Clark     rv_op_fsgnjx_q = 205,
237ea103259SMichael Clark     rv_op_fmin_q = 206,
238ea103259SMichael Clark     rv_op_fmax_q = 207,
239ea103259SMichael Clark     rv_op_fcvt_s_q = 208,
240ea103259SMichael Clark     rv_op_fcvt_q_s = 209,
241ea103259SMichael Clark     rv_op_fcvt_d_q = 210,
242ea103259SMichael Clark     rv_op_fcvt_q_d = 211,
243ea103259SMichael Clark     rv_op_fsqrt_q = 212,
244ea103259SMichael Clark     rv_op_fle_q = 213,
245ea103259SMichael Clark     rv_op_flt_q = 214,
246ea103259SMichael Clark     rv_op_feq_q = 215,
247ea103259SMichael Clark     rv_op_fcvt_w_q = 216,
248ea103259SMichael Clark     rv_op_fcvt_wu_q = 217,
249ea103259SMichael Clark     rv_op_fcvt_q_w = 218,
250ea103259SMichael Clark     rv_op_fcvt_q_wu = 219,
251ea103259SMichael Clark     rv_op_fclass_q = 220,
252ea103259SMichael Clark     rv_op_fcvt_l_q = 221,
253ea103259SMichael Clark     rv_op_fcvt_lu_q = 222,
254ea103259SMichael Clark     rv_op_fcvt_q_l = 223,
255ea103259SMichael Clark     rv_op_fcvt_q_lu = 224,
256ea103259SMichael Clark     rv_op_fmv_x_q = 225,
257ea103259SMichael Clark     rv_op_fmv_q_x = 226,
258ea103259SMichael Clark     rv_op_c_addi4spn = 227,
259ea103259SMichael Clark     rv_op_c_fld = 228,
260ea103259SMichael Clark     rv_op_c_lw = 229,
261ea103259SMichael Clark     rv_op_c_flw = 230,
262ea103259SMichael Clark     rv_op_c_fsd = 231,
263ea103259SMichael Clark     rv_op_c_sw = 232,
264ea103259SMichael Clark     rv_op_c_fsw = 233,
265ea103259SMichael Clark     rv_op_c_nop = 234,
266ea103259SMichael Clark     rv_op_c_addi = 235,
267ea103259SMichael Clark     rv_op_c_jal = 236,
268ea103259SMichael Clark     rv_op_c_li = 237,
269ea103259SMichael Clark     rv_op_c_addi16sp = 238,
270ea103259SMichael Clark     rv_op_c_lui = 239,
271ea103259SMichael Clark     rv_op_c_srli = 240,
272ea103259SMichael Clark     rv_op_c_srai = 241,
273ea103259SMichael Clark     rv_op_c_andi = 242,
274ea103259SMichael Clark     rv_op_c_sub = 243,
275ea103259SMichael Clark     rv_op_c_xor = 244,
276ea103259SMichael Clark     rv_op_c_or = 245,
277ea103259SMichael Clark     rv_op_c_and = 246,
278ea103259SMichael Clark     rv_op_c_subw = 247,
279ea103259SMichael Clark     rv_op_c_addw = 248,
280ea103259SMichael Clark     rv_op_c_j = 249,
281ea103259SMichael Clark     rv_op_c_beqz = 250,
282ea103259SMichael Clark     rv_op_c_bnez = 251,
283ea103259SMichael Clark     rv_op_c_slli = 252,
284ea103259SMichael Clark     rv_op_c_fldsp = 253,
285ea103259SMichael Clark     rv_op_c_lwsp = 254,
286ea103259SMichael Clark     rv_op_c_flwsp = 255,
287ea103259SMichael Clark     rv_op_c_jr = 256,
288ea103259SMichael Clark     rv_op_c_mv = 257,
289ea103259SMichael Clark     rv_op_c_ebreak = 258,
290ea103259SMichael Clark     rv_op_c_jalr = 259,
291ea103259SMichael Clark     rv_op_c_add = 260,
292ea103259SMichael Clark     rv_op_c_fsdsp = 261,
293ea103259SMichael Clark     rv_op_c_swsp = 262,
294ea103259SMichael Clark     rv_op_c_fswsp = 263,
295ea103259SMichael Clark     rv_op_c_ld = 264,
296ea103259SMichael Clark     rv_op_c_sd = 265,
297ea103259SMichael Clark     rv_op_c_addiw = 266,
298ea103259SMichael Clark     rv_op_c_ldsp = 267,
299ea103259SMichael Clark     rv_op_c_sdsp = 268,
300ea103259SMichael Clark     rv_op_c_lq = 269,
301ea103259SMichael Clark     rv_op_c_sq = 270,
302ea103259SMichael Clark     rv_op_c_lqsp = 271,
303ea103259SMichael Clark     rv_op_c_sqsp = 272,
304ea103259SMichael Clark     rv_op_nop = 273,
305ea103259SMichael Clark     rv_op_mv = 274,
306ea103259SMichael Clark     rv_op_not = 275,
307ea103259SMichael Clark     rv_op_neg = 276,
308ea103259SMichael Clark     rv_op_negw = 277,
309ea103259SMichael Clark     rv_op_sext_w = 278,
310ea103259SMichael Clark     rv_op_seqz = 279,
311ea103259SMichael Clark     rv_op_snez = 280,
312ea103259SMichael Clark     rv_op_sltz = 281,
313ea103259SMichael Clark     rv_op_sgtz = 282,
314ea103259SMichael Clark     rv_op_fmv_s = 283,
315ea103259SMichael Clark     rv_op_fabs_s = 284,
316ea103259SMichael Clark     rv_op_fneg_s = 285,
317ea103259SMichael Clark     rv_op_fmv_d = 286,
318ea103259SMichael Clark     rv_op_fabs_d = 287,
319ea103259SMichael Clark     rv_op_fneg_d = 288,
320ea103259SMichael Clark     rv_op_fmv_q = 289,
321ea103259SMichael Clark     rv_op_fabs_q = 290,
322ea103259SMichael Clark     rv_op_fneg_q = 291,
323ea103259SMichael Clark     rv_op_beqz = 292,
324ea103259SMichael Clark     rv_op_bnez = 293,
325ea103259SMichael Clark     rv_op_blez = 294,
326ea103259SMichael Clark     rv_op_bgez = 295,
327ea103259SMichael Clark     rv_op_bltz = 296,
328ea103259SMichael Clark     rv_op_bgtz = 297,
329ea103259SMichael Clark     rv_op_ble = 298,
330ea103259SMichael Clark     rv_op_bleu = 299,
331ea103259SMichael Clark     rv_op_bgt = 300,
332ea103259SMichael Clark     rv_op_bgtu = 301,
333ea103259SMichael Clark     rv_op_j = 302,
334ea103259SMichael Clark     rv_op_ret = 303,
335ea103259SMichael Clark     rv_op_jr = 304,
336ea103259SMichael Clark     rv_op_rdcycle = 305,
337ea103259SMichael Clark     rv_op_rdtime = 306,
338ea103259SMichael Clark     rv_op_rdinstret = 307,
339ea103259SMichael Clark     rv_op_rdcycleh = 308,
340ea103259SMichael Clark     rv_op_rdtimeh = 309,
341ea103259SMichael Clark     rv_op_rdinstreth = 310,
342ea103259SMichael Clark     rv_op_frcsr = 311,
343ea103259SMichael Clark     rv_op_frrm = 312,
344ea103259SMichael Clark     rv_op_frflags = 313,
345ea103259SMichael Clark     rv_op_fscsr = 314,
346ea103259SMichael Clark     rv_op_fsrm = 315,
347ea103259SMichael Clark     rv_op_fsflags = 316,
348ea103259SMichael Clark     rv_op_fsrmi = 317,
349ea103259SMichael Clark     rv_op_fsflagsi = 318,
35002c1b569SPhilipp Tomsich     rv_op_bseti = 319,
35102c1b569SPhilipp Tomsich     rv_op_bclri = 320,
35202c1b569SPhilipp Tomsich     rv_op_binvi = 321,
35302c1b569SPhilipp Tomsich     rv_op_bexti = 322,
35402c1b569SPhilipp Tomsich     rv_op_rori = 323,
35502c1b569SPhilipp Tomsich     rv_op_clz = 324,
35602c1b569SPhilipp Tomsich     rv_op_ctz = 325,
35702c1b569SPhilipp Tomsich     rv_op_cpop = 326,
35802c1b569SPhilipp Tomsich     rv_op_sext_h = 327,
35902c1b569SPhilipp Tomsich     rv_op_sext_b = 328,
36002c1b569SPhilipp Tomsich     rv_op_xnor = 329,
36102c1b569SPhilipp Tomsich     rv_op_orn = 330,
36202c1b569SPhilipp Tomsich     rv_op_andn = 331,
36302c1b569SPhilipp Tomsich     rv_op_rol = 332,
36402c1b569SPhilipp Tomsich     rv_op_ror = 333,
36502c1b569SPhilipp Tomsich     rv_op_sh1add = 334,
36602c1b569SPhilipp Tomsich     rv_op_sh2add = 335,
36702c1b569SPhilipp Tomsich     rv_op_sh3add = 336,
36802c1b569SPhilipp Tomsich     rv_op_sh1add_uw = 337,
36902c1b569SPhilipp Tomsich     rv_op_sh2add_uw = 338,
37002c1b569SPhilipp Tomsich     rv_op_sh3add_uw = 339,
37102c1b569SPhilipp Tomsich     rv_op_clmul = 340,
37202c1b569SPhilipp Tomsich     rv_op_clmulr = 341,
37302c1b569SPhilipp Tomsich     rv_op_clmulh = 342,
37402c1b569SPhilipp Tomsich     rv_op_min = 343,
37502c1b569SPhilipp Tomsich     rv_op_minu = 344,
37602c1b569SPhilipp Tomsich     rv_op_max = 345,
37702c1b569SPhilipp Tomsich     rv_op_maxu = 346,
37802c1b569SPhilipp Tomsich     rv_op_clzw = 347,
37902c1b569SPhilipp Tomsich     rv_op_ctzw = 348,
38002c1b569SPhilipp Tomsich     rv_op_cpopw = 349,
38102c1b569SPhilipp Tomsich     rv_op_slli_uw = 350,
38202c1b569SPhilipp Tomsich     rv_op_add_uw = 351,
38302c1b569SPhilipp Tomsich     rv_op_rolw = 352,
38402c1b569SPhilipp Tomsich     rv_op_rorw = 353,
38502c1b569SPhilipp Tomsich     rv_op_rev8 = 354,
38602c1b569SPhilipp Tomsich     rv_op_zext_h = 355,
38702c1b569SPhilipp Tomsich     rv_op_roriw = 356,
38802c1b569SPhilipp Tomsich     rv_op_orc_b = 357,
38902c1b569SPhilipp Tomsich     rv_op_bset = 358,
39002c1b569SPhilipp Tomsich     rv_op_bclr = 359,
39102c1b569SPhilipp Tomsich     rv_op_binv = 360,
39202c1b569SPhilipp Tomsich     rv_op_bext = 361,
3935748c886SWeiwei Li     rv_op_aes32esmi = 362,
3945748c886SWeiwei Li     rv_op_aes32esi = 363,
3955748c886SWeiwei Li     rv_op_aes32dsmi = 364,
3965748c886SWeiwei Li     rv_op_aes32dsi = 365,
3975748c886SWeiwei Li     rv_op_aes64ks1i = 366,
3985748c886SWeiwei Li     rv_op_aes64ks2 = 367,
3995748c886SWeiwei Li     rv_op_aes64im = 368,
4005748c886SWeiwei Li     rv_op_aes64esm = 369,
4015748c886SWeiwei Li     rv_op_aes64es = 370,
4025748c886SWeiwei Li     rv_op_aes64dsm = 371,
4035748c886SWeiwei Li     rv_op_aes64ds = 372,
4045748c886SWeiwei Li     rv_op_sha256sig0 = 373,
4055748c886SWeiwei Li     rv_op_sha256sig1 = 374,
4065748c886SWeiwei Li     rv_op_sha256sum0 = 375,
4075748c886SWeiwei Li     rv_op_sha256sum1 = 376,
4085748c886SWeiwei Li     rv_op_sha512sig0 = 377,
4095748c886SWeiwei Li     rv_op_sha512sig1 = 378,
4105748c886SWeiwei Li     rv_op_sha512sum0 = 379,
4115748c886SWeiwei Li     rv_op_sha512sum1 = 380,
4125748c886SWeiwei Li     rv_op_sha512sum0r = 381,
4135748c886SWeiwei Li     rv_op_sha512sum1r = 382,
4145748c886SWeiwei Li     rv_op_sha512sig0l = 383,
4155748c886SWeiwei Li     rv_op_sha512sig0h = 384,
4165748c886SWeiwei Li     rv_op_sha512sig1l = 385,
4175748c886SWeiwei Li     rv_op_sha512sig1h = 386,
4185748c886SWeiwei Li     rv_op_sm3p0 = 387,
4195748c886SWeiwei Li     rv_op_sm3p1 = 388,
4205748c886SWeiwei Li     rv_op_sm4ed = 389,
4215748c886SWeiwei Li     rv_op_sm4ks = 390,
4225748c886SWeiwei Li     rv_op_brev8 = 391,
4235748c886SWeiwei Li     rv_op_pack = 392,
4245748c886SWeiwei Li     rv_op_packh = 393,
4255748c886SWeiwei Li     rv_op_packw = 394,
4265748c886SWeiwei Li     rv_op_unzip = 395,
4275748c886SWeiwei Li     rv_op_zip = 396,
4285748c886SWeiwei Li     rv_op_xperm4 = 397,
4295748c886SWeiwei Li     rv_op_xperm8 = 398,
43007f4964dSYang Liu     rv_op_vle8_v = 399,
43107f4964dSYang Liu     rv_op_vle16_v = 400,
43207f4964dSYang Liu     rv_op_vle32_v = 401,
43307f4964dSYang Liu     rv_op_vle64_v = 402,
43407f4964dSYang Liu     rv_op_vse8_v = 403,
43507f4964dSYang Liu     rv_op_vse16_v = 404,
43607f4964dSYang Liu     rv_op_vse32_v = 405,
43707f4964dSYang Liu     rv_op_vse64_v = 406,
43807f4964dSYang Liu     rv_op_vlm_v = 407,
43907f4964dSYang Liu     rv_op_vsm_v = 408,
44007f4964dSYang Liu     rv_op_vlse8_v = 409,
44107f4964dSYang Liu     rv_op_vlse16_v = 410,
44207f4964dSYang Liu     rv_op_vlse32_v = 411,
44307f4964dSYang Liu     rv_op_vlse64_v = 412,
44407f4964dSYang Liu     rv_op_vsse8_v = 413,
44507f4964dSYang Liu     rv_op_vsse16_v = 414,
44607f4964dSYang Liu     rv_op_vsse32_v = 415,
44707f4964dSYang Liu     rv_op_vsse64_v = 416,
44807f4964dSYang Liu     rv_op_vluxei8_v = 417,
44907f4964dSYang Liu     rv_op_vluxei16_v = 418,
45007f4964dSYang Liu     rv_op_vluxei32_v = 419,
45107f4964dSYang Liu     rv_op_vluxei64_v = 420,
45207f4964dSYang Liu     rv_op_vloxei8_v = 421,
45307f4964dSYang Liu     rv_op_vloxei16_v = 422,
45407f4964dSYang Liu     rv_op_vloxei32_v = 423,
45507f4964dSYang Liu     rv_op_vloxei64_v = 424,
45607f4964dSYang Liu     rv_op_vsuxei8_v = 425,
45707f4964dSYang Liu     rv_op_vsuxei16_v = 426,
45807f4964dSYang Liu     rv_op_vsuxei32_v = 427,
45907f4964dSYang Liu     rv_op_vsuxei64_v = 428,
46007f4964dSYang Liu     rv_op_vsoxei8_v = 429,
46107f4964dSYang Liu     rv_op_vsoxei16_v = 430,
46207f4964dSYang Liu     rv_op_vsoxei32_v = 431,
46307f4964dSYang Liu     rv_op_vsoxei64_v = 432,
46407f4964dSYang Liu     rv_op_vle8ff_v = 433,
46507f4964dSYang Liu     rv_op_vle16ff_v = 434,
46607f4964dSYang Liu     rv_op_vle32ff_v = 435,
46707f4964dSYang Liu     rv_op_vle64ff_v = 436,
46807f4964dSYang Liu     rv_op_vl1re8_v = 437,
46907f4964dSYang Liu     rv_op_vl1re16_v = 438,
47007f4964dSYang Liu     rv_op_vl1re32_v = 439,
47107f4964dSYang Liu     rv_op_vl1re64_v = 440,
47207f4964dSYang Liu     rv_op_vl2re8_v = 441,
47307f4964dSYang Liu     rv_op_vl2re16_v = 442,
47407f4964dSYang Liu     rv_op_vl2re32_v = 443,
47507f4964dSYang Liu     rv_op_vl2re64_v = 444,
47607f4964dSYang Liu     rv_op_vl4re8_v = 445,
47707f4964dSYang Liu     rv_op_vl4re16_v = 446,
47807f4964dSYang Liu     rv_op_vl4re32_v = 447,
47907f4964dSYang Liu     rv_op_vl4re64_v = 448,
48007f4964dSYang Liu     rv_op_vl8re8_v = 449,
48107f4964dSYang Liu     rv_op_vl8re16_v = 450,
48207f4964dSYang Liu     rv_op_vl8re32_v = 451,
48307f4964dSYang Liu     rv_op_vl8re64_v = 452,
48407f4964dSYang Liu     rv_op_vs1r_v = 453,
48507f4964dSYang Liu     rv_op_vs2r_v = 454,
48607f4964dSYang Liu     rv_op_vs4r_v = 455,
48707f4964dSYang Liu     rv_op_vs8r_v = 456,
48807f4964dSYang Liu     rv_op_vadd_vv = 457,
48907f4964dSYang Liu     rv_op_vadd_vx = 458,
49007f4964dSYang Liu     rv_op_vadd_vi = 459,
49107f4964dSYang Liu     rv_op_vsub_vv = 460,
49207f4964dSYang Liu     rv_op_vsub_vx = 461,
49307f4964dSYang Liu     rv_op_vrsub_vx = 462,
49407f4964dSYang Liu     rv_op_vrsub_vi = 463,
49507f4964dSYang Liu     rv_op_vwaddu_vv = 464,
49607f4964dSYang Liu     rv_op_vwaddu_vx = 465,
49707f4964dSYang Liu     rv_op_vwadd_vv = 466,
49807f4964dSYang Liu     rv_op_vwadd_vx = 467,
49907f4964dSYang Liu     rv_op_vwsubu_vv = 468,
50007f4964dSYang Liu     rv_op_vwsubu_vx = 469,
50107f4964dSYang Liu     rv_op_vwsub_vv = 470,
50207f4964dSYang Liu     rv_op_vwsub_vx = 471,
50307f4964dSYang Liu     rv_op_vwaddu_wv = 472,
50407f4964dSYang Liu     rv_op_vwaddu_wx = 473,
50507f4964dSYang Liu     rv_op_vwadd_wv = 474,
50607f4964dSYang Liu     rv_op_vwadd_wx = 475,
50707f4964dSYang Liu     rv_op_vwsubu_wv = 476,
50807f4964dSYang Liu     rv_op_vwsubu_wx = 477,
50907f4964dSYang Liu     rv_op_vwsub_wv = 478,
51007f4964dSYang Liu     rv_op_vwsub_wx = 479,
51107f4964dSYang Liu     rv_op_vadc_vvm = 480,
51207f4964dSYang Liu     rv_op_vadc_vxm = 481,
51307f4964dSYang Liu     rv_op_vadc_vim = 482,
51407f4964dSYang Liu     rv_op_vmadc_vvm = 483,
51507f4964dSYang Liu     rv_op_vmadc_vxm = 484,
51607f4964dSYang Liu     rv_op_vmadc_vim = 485,
51707f4964dSYang Liu     rv_op_vsbc_vvm = 486,
51807f4964dSYang Liu     rv_op_vsbc_vxm = 487,
51907f4964dSYang Liu     rv_op_vmsbc_vvm = 488,
52007f4964dSYang Liu     rv_op_vmsbc_vxm = 489,
52107f4964dSYang Liu     rv_op_vand_vv = 490,
52207f4964dSYang Liu     rv_op_vand_vx = 491,
52307f4964dSYang Liu     rv_op_vand_vi = 492,
52407f4964dSYang Liu     rv_op_vor_vv = 493,
52507f4964dSYang Liu     rv_op_vor_vx = 494,
52607f4964dSYang Liu     rv_op_vor_vi = 495,
52707f4964dSYang Liu     rv_op_vxor_vv = 496,
52807f4964dSYang Liu     rv_op_vxor_vx = 497,
52907f4964dSYang Liu     rv_op_vxor_vi = 498,
53007f4964dSYang Liu     rv_op_vsll_vv = 499,
53107f4964dSYang Liu     rv_op_vsll_vx = 500,
53207f4964dSYang Liu     rv_op_vsll_vi = 501,
53307f4964dSYang Liu     rv_op_vsrl_vv = 502,
53407f4964dSYang Liu     rv_op_vsrl_vx = 503,
53507f4964dSYang Liu     rv_op_vsrl_vi = 504,
53607f4964dSYang Liu     rv_op_vsra_vv = 505,
53707f4964dSYang Liu     rv_op_vsra_vx = 506,
53807f4964dSYang Liu     rv_op_vsra_vi = 507,
53907f4964dSYang Liu     rv_op_vnsrl_wv = 508,
54007f4964dSYang Liu     rv_op_vnsrl_wx = 509,
54107f4964dSYang Liu     rv_op_vnsrl_wi = 510,
54207f4964dSYang Liu     rv_op_vnsra_wv = 511,
54307f4964dSYang Liu     rv_op_vnsra_wx = 512,
54407f4964dSYang Liu     rv_op_vnsra_wi = 513,
54507f4964dSYang Liu     rv_op_vmseq_vv = 514,
54607f4964dSYang Liu     rv_op_vmseq_vx = 515,
54707f4964dSYang Liu     rv_op_vmseq_vi = 516,
54807f4964dSYang Liu     rv_op_vmsne_vv = 517,
54907f4964dSYang Liu     rv_op_vmsne_vx = 518,
55007f4964dSYang Liu     rv_op_vmsne_vi = 519,
55107f4964dSYang Liu     rv_op_vmsltu_vv = 520,
55207f4964dSYang Liu     rv_op_vmsltu_vx = 521,
55307f4964dSYang Liu     rv_op_vmslt_vv = 522,
55407f4964dSYang Liu     rv_op_vmslt_vx = 523,
55507f4964dSYang Liu     rv_op_vmsleu_vv = 524,
55607f4964dSYang Liu     rv_op_vmsleu_vx = 525,
55707f4964dSYang Liu     rv_op_vmsleu_vi = 526,
55807f4964dSYang Liu     rv_op_vmsle_vv = 527,
55907f4964dSYang Liu     rv_op_vmsle_vx = 528,
56007f4964dSYang Liu     rv_op_vmsle_vi = 529,
56107f4964dSYang Liu     rv_op_vmsgtu_vx = 530,
56207f4964dSYang Liu     rv_op_vmsgtu_vi = 531,
56307f4964dSYang Liu     rv_op_vmsgt_vx = 532,
56407f4964dSYang Liu     rv_op_vmsgt_vi = 533,
56507f4964dSYang Liu     rv_op_vminu_vv = 534,
56607f4964dSYang Liu     rv_op_vminu_vx = 535,
56707f4964dSYang Liu     rv_op_vmin_vv = 536,
56807f4964dSYang Liu     rv_op_vmin_vx = 537,
56907f4964dSYang Liu     rv_op_vmaxu_vv = 538,
57007f4964dSYang Liu     rv_op_vmaxu_vx = 539,
57107f4964dSYang Liu     rv_op_vmax_vv = 540,
57207f4964dSYang Liu     rv_op_vmax_vx = 541,
57307f4964dSYang Liu     rv_op_vmul_vv = 542,
57407f4964dSYang Liu     rv_op_vmul_vx = 543,
57507f4964dSYang Liu     rv_op_vmulh_vv = 544,
57607f4964dSYang Liu     rv_op_vmulh_vx = 545,
57707f4964dSYang Liu     rv_op_vmulhu_vv = 546,
57807f4964dSYang Liu     rv_op_vmulhu_vx = 547,
57907f4964dSYang Liu     rv_op_vmulhsu_vv = 548,
58007f4964dSYang Liu     rv_op_vmulhsu_vx = 549,
58107f4964dSYang Liu     rv_op_vdivu_vv = 550,
58207f4964dSYang Liu     rv_op_vdivu_vx = 551,
58307f4964dSYang Liu     rv_op_vdiv_vv = 552,
58407f4964dSYang Liu     rv_op_vdiv_vx = 553,
58507f4964dSYang Liu     rv_op_vremu_vv = 554,
58607f4964dSYang Liu     rv_op_vremu_vx = 555,
58707f4964dSYang Liu     rv_op_vrem_vv = 556,
58807f4964dSYang Liu     rv_op_vrem_vx = 557,
58907f4964dSYang Liu     rv_op_vwmulu_vv = 558,
59007f4964dSYang Liu     rv_op_vwmulu_vx = 559,
59107f4964dSYang Liu     rv_op_vwmulsu_vv = 560,
59207f4964dSYang Liu     rv_op_vwmulsu_vx = 561,
59307f4964dSYang Liu     rv_op_vwmul_vv = 562,
59407f4964dSYang Liu     rv_op_vwmul_vx = 563,
59507f4964dSYang Liu     rv_op_vmacc_vv = 564,
59607f4964dSYang Liu     rv_op_vmacc_vx = 565,
59707f4964dSYang Liu     rv_op_vnmsac_vv = 566,
59807f4964dSYang Liu     rv_op_vnmsac_vx = 567,
59907f4964dSYang Liu     rv_op_vmadd_vv = 568,
60007f4964dSYang Liu     rv_op_vmadd_vx = 569,
60107f4964dSYang Liu     rv_op_vnmsub_vv = 570,
60207f4964dSYang Liu     rv_op_vnmsub_vx = 571,
60307f4964dSYang Liu     rv_op_vwmaccu_vv = 572,
60407f4964dSYang Liu     rv_op_vwmaccu_vx = 573,
60507f4964dSYang Liu     rv_op_vwmacc_vv = 574,
60607f4964dSYang Liu     rv_op_vwmacc_vx = 575,
60707f4964dSYang Liu     rv_op_vwmaccsu_vv = 576,
60807f4964dSYang Liu     rv_op_vwmaccsu_vx = 577,
60907f4964dSYang Liu     rv_op_vwmaccus_vx = 578,
61007f4964dSYang Liu     rv_op_vmv_v_v = 579,
61107f4964dSYang Liu     rv_op_vmv_v_x = 580,
61207f4964dSYang Liu     rv_op_vmv_v_i = 581,
61307f4964dSYang Liu     rv_op_vmerge_vvm = 582,
61407f4964dSYang Liu     rv_op_vmerge_vxm = 583,
61507f4964dSYang Liu     rv_op_vmerge_vim = 584,
61607f4964dSYang Liu     rv_op_vsaddu_vv = 585,
61707f4964dSYang Liu     rv_op_vsaddu_vx = 586,
61807f4964dSYang Liu     rv_op_vsaddu_vi = 587,
61907f4964dSYang Liu     rv_op_vsadd_vv = 588,
62007f4964dSYang Liu     rv_op_vsadd_vx = 589,
62107f4964dSYang Liu     rv_op_vsadd_vi = 590,
62207f4964dSYang Liu     rv_op_vssubu_vv = 591,
62307f4964dSYang Liu     rv_op_vssubu_vx = 592,
62407f4964dSYang Liu     rv_op_vssub_vv = 593,
62507f4964dSYang Liu     rv_op_vssub_vx = 594,
62607f4964dSYang Liu     rv_op_vaadd_vv = 595,
62707f4964dSYang Liu     rv_op_vaadd_vx = 596,
62807f4964dSYang Liu     rv_op_vaaddu_vv = 597,
62907f4964dSYang Liu     rv_op_vaaddu_vx = 598,
63007f4964dSYang Liu     rv_op_vasub_vv = 599,
63107f4964dSYang Liu     rv_op_vasub_vx = 600,
63207f4964dSYang Liu     rv_op_vasubu_vv = 601,
63307f4964dSYang Liu     rv_op_vasubu_vx = 602,
63407f4964dSYang Liu     rv_op_vsmul_vv = 603,
63507f4964dSYang Liu     rv_op_vsmul_vx = 604,
63607f4964dSYang Liu     rv_op_vssrl_vv = 605,
63707f4964dSYang Liu     rv_op_vssrl_vx = 606,
63807f4964dSYang Liu     rv_op_vssrl_vi = 607,
63907f4964dSYang Liu     rv_op_vssra_vv = 608,
64007f4964dSYang Liu     rv_op_vssra_vx = 609,
64107f4964dSYang Liu     rv_op_vssra_vi = 610,
64207f4964dSYang Liu     rv_op_vnclipu_wv = 611,
64307f4964dSYang Liu     rv_op_vnclipu_wx = 612,
64407f4964dSYang Liu     rv_op_vnclipu_wi = 613,
64507f4964dSYang Liu     rv_op_vnclip_wv = 614,
64607f4964dSYang Liu     rv_op_vnclip_wx = 615,
64707f4964dSYang Liu     rv_op_vnclip_wi = 616,
64807f4964dSYang Liu     rv_op_vfadd_vv = 617,
64907f4964dSYang Liu     rv_op_vfadd_vf = 618,
65007f4964dSYang Liu     rv_op_vfsub_vv = 619,
65107f4964dSYang Liu     rv_op_vfsub_vf = 620,
65207f4964dSYang Liu     rv_op_vfrsub_vf = 621,
65307f4964dSYang Liu     rv_op_vfwadd_vv = 622,
65407f4964dSYang Liu     rv_op_vfwadd_vf = 623,
65507f4964dSYang Liu     rv_op_vfwadd_wv = 624,
65607f4964dSYang Liu     rv_op_vfwadd_wf = 625,
65707f4964dSYang Liu     rv_op_vfwsub_vv = 626,
65807f4964dSYang Liu     rv_op_vfwsub_vf = 627,
65907f4964dSYang Liu     rv_op_vfwsub_wv = 628,
66007f4964dSYang Liu     rv_op_vfwsub_wf = 629,
66107f4964dSYang Liu     rv_op_vfmul_vv = 630,
66207f4964dSYang Liu     rv_op_vfmul_vf = 631,
66307f4964dSYang Liu     rv_op_vfdiv_vv = 632,
66407f4964dSYang Liu     rv_op_vfdiv_vf = 633,
66507f4964dSYang Liu     rv_op_vfrdiv_vf = 634,
66607f4964dSYang Liu     rv_op_vfwmul_vv = 635,
66707f4964dSYang Liu     rv_op_vfwmul_vf = 636,
66807f4964dSYang Liu     rv_op_vfmacc_vv = 637,
66907f4964dSYang Liu     rv_op_vfmacc_vf = 638,
67007f4964dSYang Liu     rv_op_vfnmacc_vv = 639,
67107f4964dSYang Liu     rv_op_vfnmacc_vf = 640,
67207f4964dSYang Liu     rv_op_vfmsac_vv = 641,
67307f4964dSYang Liu     rv_op_vfmsac_vf = 642,
67407f4964dSYang Liu     rv_op_vfnmsac_vv = 643,
67507f4964dSYang Liu     rv_op_vfnmsac_vf = 644,
67607f4964dSYang Liu     rv_op_vfmadd_vv = 645,
67707f4964dSYang Liu     rv_op_vfmadd_vf = 646,
67807f4964dSYang Liu     rv_op_vfnmadd_vv = 647,
67907f4964dSYang Liu     rv_op_vfnmadd_vf = 648,
68007f4964dSYang Liu     rv_op_vfmsub_vv = 649,
68107f4964dSYang Liu     rv_op_vfmsub_vf = 650,
68207f4964dSYang Liu     rv_op_vfnmsub_vv = 651,
68307f4964dSYang Liu     rv_op_vfnmsub_vf = 652,
68407f4964dSYang Liu     rv_op_vfwmacc_vv = 653,
68507f4964dSYang Liu     rv_op_vfwmacc_vf = 654,
68607f4964dSYang Liu     rv_op_vfwnmacc_vv = 655,
68707f4964dSYang Liu     rv_op_vfwnmacc_vf = 656,
68807f4964dSYang Liu     rv_op_vfwmsac_vv = 657,
68907f4964dSYang Liu     rv_op_vfwmsac_vf = 658,
69007f4964dSYang Liu     rv_op_vfwnmsac_vv = 659,
69107f4964dSYang Liu     rv_op_vfwnmsac_vf = 660,
69207f4964dSYang Liu     rv_op_vfsqrt_v = 661,
69307f4964dSYang Liu     rv_op_vfrsqrt7_v = 662,
69407f4964dSYang Liu     rv_op_vfrec7_v = 663,
69507f4964dSYang Liu     rv_op_vfmin_vv = 664,
69607f4964dSYang Liu     rv_op_vfmin_vf = 665,
69707f4964dSYang Liu     rv_op_vfmax_vv = 666,
69807f4964dSYang Liu     rv_op_vfmax_vf = 667,
69907f4964dSYang Liu     rv_op_vfsgnj_vv = 668,
70007f4964dSYang Liu     rv_op_vfsgnj_vf = 669,
70107f4964dSYang Liu     rv_op_vfsgnjn_vv = 670,
70207f4964dSYang Liu     rv_op_vfsgnjn_vf = 671,
70307f4964dSYang Liu     rv_op_vfsgnjx_vv = 672,
70407f4964dSYang Liu     rv_op_vfsgnjx_vf = 673,
70507f4964dSYang Liu     rv_op_vfslide1up_vf = 674,
70607f4964dSYang Liu     rv_op_vfslide1down_vf = 675,
70707f4964dSYang Liu     rv_op_vmfeq_vv = 676,
70807f4964dSYang Liu     rv_op_vmfeq_vf = 677,
70907f4964dSYang Liu     rv_op_vmfne_vv = 678,
71007f4964dSYang Liu     rv_op_vmfne_vf = 679,
71107f4964dSYang Liu     rv_op_vmflt_vv = 680,
71207f4964dSYang Liu     rv_op_vmflt_vf = 681,
71307f4964dSYang Liu     rv_op_vmfle_vv = 682,
71407f4964dSYang Liu     rv_op_vmfle_vf = 683,
71507f4964dSYang Liu     rv_op_vmfgt_vf = 684,
71607f4964dSYang Liu     rv_op_vmfge_vf = 685,
71707f4964dSYang Liu     rv_op_vfclass_v = 686,
71807f4964dSYang Liu     rv_op_vfmerge_vfm = 687,
71907f4964dSYang Liu     rv_op_vfmv_v_f = 688,
72007f4964dSYang Liu     rv_op_vfcvt_xu_f_v = 689,
72107f4964dSYang Liu     rv_op_vfcvt_x_f_v = 690,
72207f4964dSYang Liu     rv_op_vfcvt_f_xu_v = 691,
72307f4964dSYang Liu     rv_op_vfcvt_f_x_v = 692,
72407f4964dSYang Liu     rv_op_vfcvt_rtz_xu_f_v = 693,
72507f4964dSYang Liu     rv_op_vfcvt_rtz_x_f_v = 694,
72607f4964dSYang Liu     rv_op_vfwcvt_xu_f_v = 695,
72707f4964dSYang Liu     rv_op_vfwcvt_x_f_v = 696,
72807f4964dSYang Liu     rv_op_vfwcvt_f_xu_v = 697,
72907f4964dSYang Liu     rv_op_vfwcvt_f_x_v = 698,
73007f4964dSYang Liu     rv_op_vfwcvt_f_f_v = 699,
73107f4964dSYang Liu     rv_op_vfwcvt_rtz_xu_f_v = 700,
73207f4964dSYang Liu     rv_op_vfwcvt_rtz_x_f_v = 701,
73307f4964dSYang Liu     rv_op_vfncvt_xu_f_w = 702,
73407f4964dSYang Liu     rv_op_vfncvt_x_f_w = 703,
73507f4964dSYang Liu     rv_op_vfncvt_f_xu_w = 704,
73607f4964dSYang Liu     rv_op_vfncvt_f_x_w = 705,
73707f4964dSYang Liu     rv_op_vfncvt_f_f_w = 706,
73807f4964dSYang Liu     rv_op_vfncvt_rod_f_f_w = 707,
73907f4964dSYang Liu     rv_op_vfncvt_rtz_xu_f_w = 708,
74007f4964dSYang Liu     rv_op_vfncvt_rtz_x_f_w = 709,
74107f4964dSYang Liu     rv_op_vredsum_vs = 710,
74207f4964dSYang Liu     rv_op_vredand_vs = 711,
74307f4964dSYang Liu     rv_op_vredor_vs = 712,
74407f4964dSYang Liu     rv_op_vredxor_vs = 713,
74507f4964dSYang Liu     rv_op_vredminu_vs = 714,
74607f4964dSYang Liu     rv_op_vredmin_vs = 715,
74707f4964dSYang Liu     rv_op_vredmaxu_vs = 716,
74807f4964dSYang Liu     rv_op_vredmax_vs = 717,
74907f4964dSYang Liu     rv_op_vwredsumu_vs = 718,
75007f4964dSYang Liu     rv_op_vwredsum_vs = 719,
75107f4964dSYang Liu     rv_op_vfredusum_vs = 720,
75207f4964dSYang Liu     rv_op_vfredosum_vs = 721,
75307f4964dSYang Liu     rv_op_vfredmin_vs = 722,
75407f4964dSYang Liu     rv_op_vfredmax_vs = 723,
75507f4964dSYang Liu     rv_op_vfwredusum_vs = 724,
75607f4964dSYang Liu     rv_op_vfwredosum_vs = 725,
75707f4964dSYang Liu     rv_op_vmand_mm = 726,
75807f4964dSYang Liu     rv_op_vmnand_mm = 727,
75907f4964dSYang Liu     rv_op_vmandn_mm = 728,
76007f4964dSYang Liu     rv_op_vmxor_mm = 729,
76107f4964dSYang Liu     rv_op_vmor_mm = 730,
76207f4964dSYang Liu     rv_op_vmnor_mm = 731,
76307f4964dSYang Liu     rv_op_vmorn_mm = 732,
76407f4964dSYang Liu     rv_op_vmxnor_mm = 733,
76507f4964dSYang Liu     rv_op_vcpop_m = 734,
76607f4964dSYang Liu     rv_op_vfirst_m = 735,
76707f4964dSYang Liu     rv_op_vmsbf_m = 736,
76807f4964dSYang Liu     rv_op_vmsif_m = 737,
76907f4964dSYang Liu     rv_op_vmsof_m = 738,
77007f4964dSYang Liu     rv_op_viota_m = 739,
77107f4964dSYang Liu     rv_op_vid_v = 740,
77207f4964dSYang Liu     rv_op_vmv_x_s = 741,
77307f4964dSYang Liu     rv_op_vmv_s_x = 742,
77407f4964dSYang Liu     rv_op_vfmv_f_s = 743,
77507f4964dSYang Liu     rv_op_vfmv_s_f = 744,
77607f4964dSYang Liu     rv_op_vslideup_vx = 745,
77707f4964dSYang Liu     rv_op_vslideup_vi = 746,
77807f4964dSYang Liu     rv_op_vslide1up_vx = 747,
77907f4964dSYang Liu     rv_op_vslidedown_vx = 748,
78007f4964dSYang Liu     rv_op_vslidedown_vi = 749,
78107f4964dSYang Liu     rv_op_vslide1down_vx = 750,
78207f4964dSYang Liu     rv_op_vrgather_vv = 751,
78307f4964dSYang Liu     rv_op_vrgatherei16_vv = 752,
78407f4964dSYang Liu     rv_op_vrgather_vx = 753,
78507f4964dSYang Liu     rv_op_vrgather_vi = 754,
78607f4964dSYang Liu     rv_op_vcompress_vm = 755,
78707f4964dSYang Liu     rv_op_vmv1r_v = 756,
78807f4964dSYang Liu     rv_op_vmv2r_v = 757,
78907f4964dSYang Liu     rv_op_vmv4r_v = 758,
79007f4964dSYang Liu     rv_op_vmv8r_v = 759,
79107f4964dSYang Liu     rv_op_vzext_vf2 = 760,
79207f4964dSYang Liu     rv_op_vzext_vf4 = 761,
79307f4964dSYang Liu     rv_op_vzext_vf8 = 762,
79407f4964dSYang Liu     rv_op_vsext_vf2 = 763,
79507f4964dSYang Liu     rv_op_vsext_vf4 = 764,
79607f4964dSYang Liu     rv_op_vsext_vf8 = 765,
79707f4964dSYang Liu     rv_op_vsetvli = 766,
79807f4964dSYang Liu     rv_op_vsetivli = 767,
79907f4964dSYang Liu     rv_op_vsetvl = 768,
8002c71d02eSWeiwei Li     rv_op_c_zext_b = 769,
8012c71d02eSWeiwei Li     rv_op_c_sext_b = 770,
8022c71d02eSWeiwei Li     rv_op_c_zext_h = 771,
8032c71d02eSWeiwei Li     rv_op_c_sext_h = 772,
8042c71d02eSWeiwei Li     rv_op_c_zext_w = 773,
8052c71d02eSWeiwei Li     rv_op_c_not = 774,
8062c71d02eSWeiwei Li     rv_op_c_mul = 775,
8072c71d02eSWeiwei Li     rv_op_c_lbu = 776,
8082c71d02eSWeiwei Li     rv_op_c_lhu = 777,
8092c71d02eSWeiwei Li     rv_op_c_lh = 778,
8102c71d02eSWeiwei Li     rv_op_c_sb = 779,
8112c71d02eSWeiwei Li     rv_op_c_sh = 780,
8122c71d02eSWeiwei Li     rv_op_cm_push = 781,
8132c71d02eSWeiwei Li     rv_op_cm_pop = 782,
8142c71d02eSWeiwei Li     rv_op_cm_popret = 783,
8152c71d02eSWeiwei Li     rv_op_cm_popretz = 784,
8162c71d02eSWeiwei Li     rv_op_cm_mva01s = 785,
8172c71d02eSWeiwei Li     rv_op_cm_mvsa01 = 786,
8182c71d02eSWeiwei Li     rv_op_cm_jt = 787,
8192c71d02eSWeiwei Li     rv_op_cm_jalt = 788,
820d397be9aSRichard Henderson     rv_op_czero_eqz = 789,
821d397be9aSRichard Henderson     rv_op_czero_nez = 790,
82232b2d75bSWeiwei Li     rv_op_fcvt_bf16_s = 791,
82332b2d75bSWeiwei Li     rv_op_fcvt_s_bf16 = 792,
82432b2d75bSWeiwei Li     rv_op_vfncvtbf16_f_f_w = 793,
82532b2d75bSWeiwei Li     rv_op_vfwcvtbf16_f_f_v = 794,
82632b2d75bSWeiwei Li     rv_op_vfwmaccbf16_vv = 795,
82732b2d75bSWeiwei Li     rv_op_vfwmaccbf16_vf = 796,
82832b2d75bSWeiwei Li     rv_op_flh = 797,
82932b2d75bSWeiwei Li     rv_op_fsh = 798,
83032b2d75bSWeiwei Li     rv_op_fmv_h_x = 799,
83132b2d75bSWeiwei Li     rv_op_fmv_x_h = 800,
832a47842d1SChristoph Müllner     rv_op_fli_s = 801,
833a47842d1SChristoph Müllner     rv_op_fli_d = 802,
834a47842d1SChristoph Müllner     rv_op_fli_q = 803,
835a47842d1SChristoph Müllner     rv_op_fli_h = 804,
836a47842d1SChristoph Müllner     rv_op_fminm_s = 805,
837a47842d1SChristoph Müllner     rv_op_fmaxm_s = 806,
838a47842d1SChristoph Müllner     rv_op_fminm_d = 807,
839a47842d1SChristoph Müllner     rv_op_fmaxm_d = 808,
840a47842d1SChristoph Müllner     rv_op_fminm_q = 809,
841a47842d1SChristoph Müllner     rv_op_fmaxm_q = 810,
842a47842d1SChristoph Müllner     rv_op_fminm_h = 811,
843a47842d1SChristoph Müllner     rv_op_fmaxm_h = 812,
844a47842d1SChristoph Müllner     rv_op_fround_s = 813,
845a47842d1SChristoph Müllner     rv_op_froundnx_s = 814,
846a47842d1SChristoph Müllner     rv_op_fround_d = 815,
847a47842d1SChristoph Müllner     rv_op_froundnx_d = 816,
848a47842d1SChristoph Müllner     rv_op_fround_q = 817,
849a47842d1SChristoph Müllner     rv_op_froundnx_q = 818,
850a47842d1SChristoph Müllner     rv_op_fround_h = 819,
851a47842d1SChristoph Müllner     rv_op_froundnx_h = 820,
852a47842d1SChristoph Müllner     rv_op_fcvtmod_w_d = 821,
853a47842d1SChristoph Müllner     rv_op_fmvh_x_d = 822,
854a47842d1SChristoph Müllner     rv_op_fmvp_d_x = 823,
855a47842d1SChristoph Müllner     rv_op_fmvh_x_q = 824,
856a47842d1SChristoph Müllner     rv_op_fmvp_q_x = 825,
857a47842d1SChristoph Müllner     rv_op_fleq_s = 826,
858a47842d1SChristoph Müllner     rv_op_fltq_s = 827,
859a47842d1SChristoph Müllner     rv_op_fleq_d = 828,
860a47842d1SChristoph Müllner     rv_op_fltq_d = 829,
861a47842d1SChristoph Müllner     rv_op_fleq_q = 830,
862a47842d1SChristoph Müllner     rv_op_fltq_q = 831,
863a47842d1SChristoph Müllner     rv_op_fleq_h = 832,
864a47842d1SChristoph Müllner     rv_op_fltq_h = 833,
8659d92f56dSMax Chou     rv_op_vaesdf_vv = 834,
8669d92f56dSMax Chou     rv_op_vaesdf_vs = 835,
8679d92f56dSMax Chou     rv_op_vaesdm_vv = 836,
8689d92f56dSMax Chou     rv_op_vaesdm_vs = 837,
8699d92f56dSMax Chou     rv_op_vaesef_vv = 838,
8709d92f56dSMax Chou     rv_op_vaesef_vs = 839,
8719d92f56dSMax Chou     rv_op_vaesem_vv = 840,
8729d92f56dSMax Chou     rv_op_vaesem_vs = 841,
8739d92f56dSMax Chou     rv_op_vaeskf1_vi = 842,
8749d92f56dSMax Chou     rv_op_vaeskf2_vi = 843,
8759d92f56dSMax Chou     rv_op_vaesz_vs = 844,
8769d92f56dSMax Chou     rv_op_vandn_vv = 845,
8779d92f56dSMax Chou     rv_op_vandn_vx = 846,
8789d92f56dSMax Chou     rv_op_vbrev_v = 847,
8799d92f56dSMax Chou     rv_op_vbrev8_v = 848,
8809d92f56dSMax Chou     rv_op_vclmul_vv = 849,
8819d92f56dSMax Chou     rv_op_vclmul_vx = 850,
8829d92f56dSMax Chou     rv_op_vclmulh_vv = 851,
8839d92f56dSMax Chou     rv_op_vclmulh_vx = 852,
8849d92f56dSMax Chou     rv_op_vclz_v = 853,
8859d92f56dSMax Chou     rv_op_vcpop_v = 854,
8869d92f56dSMax Chou     rv_op_vctz_v = 855,
8879d92f56dSMax Chou     rv_op_vghsh_vv = 856,
8889d92f56dSMax Chou     rv_op_vgmul_vv = 857,
8899d92f56dSMax Chou     rv_op_vrev8_v = 858,
8909d92f56dSMax Chou     rv_op_vrol_vv = 859,
8919d92f56dSMax Chou     rv_op_vrol_vx = 860,
8929d92f56dSMax Chou     rv_op_vror_vv = 861,
8939d92f56dSMax Chou     rv_op_vror_vx = 862,
8949d92f56dSMax Chou     rv_op_vror_vi = 863,
8959d92f56dSMax Chou     rv_op_vsha2ch_vv = 864,
8969d92f56dSMax Chou     rv_op_vsha2cl_vv = 865,
8979d92f56dSMax Chou     rv_op_vsha2ms_vv = 866,
8989d92f56dSMax Chou     rv_op_vsm3c_vi = 867,
8999d92f56dSMax Chou     rv_op_vsm3me_vv = 868,
9009d92f56dSMax Chou     rv_op_vsm4k_vi = 869,
9019d92f56dSMax Chou     rv_op_vsm4r_vv = 870,
9029d92f56dSMax Chou     rv_op_vsm4r_vs = 871,
9039d92f56dSMax Chou     rv_op_vwsll_vv = 872,
9049d92f56dSMax Chou     rv_op_vwsll_vx = 873,
9059d92f56dSMax Chou     rv_op_vwsll_vi = 874,
9066c848c19SRob Bradford     rv_op_amocas_w = 875,
9076c848c19SRob Bradford     rv_op_amocas_d = 876,
9086c848c19SRob Bradford     rv_op_amocas_q = 877,
909d98883d1SLIU Zhiwei     rv_mop_r_0     = 878,
910d98883d1SLIU Zhiwei     rv_mop_r_1     = 879,
911d98883d1SLIU Zhiwei     rv_mop_r_2     = 880,
912d98883d1SLIU Zhiwei     rv_mop_r_3     = 881,
913d98883d1SLIU Zhiwei     rv_mop_r_4     = 882,
914d98883d1SLIU Zhiwei     rv_mop_r_5     = 883,
915d98883d1SLIU Zhiwei     rv_mop_r_6     = 884,
916d98883d1SLIU Zhiwei     rv_mop_r_7     = 885,
917d98883d1SLIU Zhiwei     rv_mop_r_8     = 886,
918d98883d1SLIU Zhiwei     rv_mop_r_9     = 887,
919d98883d1SLIU Zhiwei     rv_mop_r_10    = 888,
920d98883d1SLIU Zhiwei     rv_mop_r_11    = 889,
921d98883d1SLIU Zhiwei     rv_mop_r_12    = 890,
922d98883d1SLIU Zhiwei     rv_mop_r_13    = 891,
923d98883d1SLIU Zhiwei     rv_mop_r_14    = 892,
924d98883d1SLIU Zhiwei     rv_mop_r_15    = 893,
925d98883d1SLIU Zhiwei     rv_mop_r_16    = 894,
926d98883d1SLIU Zhiwei     rv_mop_r_17    = 895,
927d98883d1SLIU Zhiwei     rv_mop_r_18    = 896,
928d98883d1SLIU Zhiwei     rv_mop_r_19    = 897,
929d98883d1SLIU Zhiwei     rv_mop_r_20    = 898,
930d98883d1SLIU Zhiwei     rv_mop_r_21    = 899,
931d98883d1SLIU Zhiwei     rv_mop_r_22    = 900,
932d98883d1SLIU Zhiwei     rv_mop_r_23    = 901,
933d98883d1SLIU Zhiwei     rv_mop_r_24    = 902,
934d98883d1SLIU Zhiwei     rv_mop_r_25    = 903,
935d98883d1SLIU Zhiwei     rv_mop_r_26    = 904,
936d98883d1SLIU Zhiwei     rv_mop_r_27    = 905,
937d98883d1SLIU Zhiwei     rv_mop_r_28    = 906,
938d98883d1SLIU Zhiwei     rv_mop_r_29    = 907,
939d98883d1SLIU Zhiwei     rv_mop_r_30    = 908,
940d98883d1SLIU Zhiwei     rv_mop_r_31    = 909,
941d98883d1SLIU Zhiwei     rv_mop_rr_0    = 910,
942d98883d1SLIU Zhiwei     rv_mop_rr_1    = 911,
943d98883d1SLIU Zhiwei     rv_mop_rr_2    = 912,
944d98883d1SLIU Zhiwei     rv_mop_rr_3    = 913,
945d98883d1SLIU Zhiwei     rv_mop_rr_4    = 914,
946d98883d1SLIU Zhiwei     rv_mop_rr_5    = 915,
947d98883d1SLIU Zhiwei     rv_mop_rr_6    = 916,
948d98883d1SLIU Zhiwei     rv_mop_rr_7    = 917,
94967e98ebaSLIU Zhiwei     rv_c_mop_1     = 918,
95067e98ebaSLIU Zhiwei     rv_c_mop_3     = 919,
95167e98ebaSLIU Zhiwei     rv_c_mop_5     = 920,
95267e98ebaSLIU Zhiwei     rv_c_mop_7     = 921,
95367e98ebaSLIU Zhiwei     rv_c_mop_9     = 922,
95467e98ebaSLIU Zhiwei     rv_c_mop_11    = 923,
95567e98ebaSLIU Zhiwei     rv_c_mop_13    = 924,
95667e98ebaSLIU Zhiwei     rv_c_mop_15    = 925,
957ae4bdcefSLIU Zhiwei     rv_op_amoswap_b = 926,
958ae4bdcefSLIU Zhiwei     rv_op_amoadd_b  = 927,
959ae4bdcefSLIU Zhiwei     rv_op_amoxor_b  = 928,
960ae4bdcefSLIU Zhiwei     rv_op_amoor_b   = 929,
961ae4bdcefSLIU Zhiwei     rv_op_amoand_b  = 930,
962ae4bdcefSLIU Zhiwei     rv_op_amomin_b  = 931,
963ae4bdcefSLIU Zhiwei     rv_op_amomax_b  = 932,
964ae4bdcefSLIU Zhiwei     rv_op_amominu_b = 933,
965ae4bdcefSLIU Zhiwei     rv_op_amomaxu_b = 934,
966ae4bdcefSLIU Zhiwei     rv_op_amoswap_h = 935,
967ae4bdcefSLIU Zhiwei     rv_op_amoadd_h  = 936,
968ae4bdcefSLIU Zhiwei     rv_op_amoxor_h  = 937,
969ae4bdcefSLIU Zhiwei     rv_op_amoor_h   = 938,
970ae4bdcefSLIU Zhiwei     rv_op_amoand_h  = 939,
971ae4bdcefSLIU Zhiwei     rv_op_amomin_h  = 940,
972ae4bdcefSLIU Zhiwei     rv_op_amomax_h  = 941,
973ae4bdcefSLIU Zhiwei     rv_op_amominu_h = 942,
974ae4bdcefSLIU Zhiwei     rv_op_amomaxu_h = 943,
975ae4bdcefSLIU Zhiwei     rv_op_amocas_b  = 944,
976ae4bdcefSLIU Zhiwei     rv_op_amocas_h  = 945,
9774d46d84eSBalaji Ravikumar     rv_op_wrs_sto = 946,
9784d46d84eSBalaji Ravikumar     rv_op_wrs_nto = 947,
9795e761bd6SDeepak Gupta     rv_op_lpad = 948,
980b9080d07SDeepak Gupta     rv_op_sspush = 949,
981b9080d07SDeepak Gupta     rv_op_sspopchk = 950,
982b9080d07SDeepak Gupta     rv_op_ssrdp = 951,
983b9080d07SDeepak Gupta     rv_op_ssamoswap_w = 952,
984b9080d07SDeepak Gupta     rv_op_ssamoswap_d = 953,
985e75f9451SDeepak Gupta     rv_op_c_sspush = 954,
986e75f9451SDeepak Gupta     rv_op_c_sspopchk = 955,
987ea103259SMichael Clark } rv_op;
988ea103259SMichael Clark 
989ea103259SMichael Clark /* register names */
990ea103259SMichael Clark 
991ea103259SMichael Clark static const char rv_ireg_name_sym[32][5] = {
992ea103259SMichael Clark     "zero", "ra",   "sp",   "gp",   "tp",   "t0",   "t1",   "t2",
993ea103259SMichael Clark     "s0",   "s1",   "a0",   "a1",   "a2",   "a3",   "a4",   "a5",
994ea103259SMichael Clark     "a6",   "a7",   "s2",   "s3",   "s4",   "s5",   "s6",   "s7",
995ea103259SMichael Clark     "s8",   "s9",   "s10",  "s11",  "t3",   "t4",   "t5",   "t6",
996ea103259SMichael Clark };
997ea103259SMichael Clark 
998ea103259SMichael Clark static const char rv_freg_name_sym[32][5] = {
999ea103259SMichael Clark     "ft0",  "ft1",  "ft2",  "ft3",  "ft4",  "ft5",  "ft6",  "ft7",
1000ea103259SMichael Clark     "fs0",  "fs1",  "fa0",  "fa1",  "fa2",  "fa3",  "fa4",  "fa5",
1001ea103259SMichael Clark     "fa6",  "fa7",  "fs2",  "fs3",  "fs4",  "fs5",  "fs6",  "fs7",
1002ea103259SMichael Clark     "fs8",  "fs9",  "fs10", "fs11", "ft8",  "ft9",  "ft10", "ft11",
1003ea103259SMichael Clark };
1004ea103259SMichael Clark 
100507f4964dSYang Liu static const char rv_vreg_name_sym[32][4] = {
100607f4964dSYang Liu     "v0",  "v1",  "v2",  "v3",  "v4",  "v5",  "v6",  "v7",
100707f4964dSYang Liu     "v8",  "v9",  "v10", "v11", "v12", "v13", "v14", "v15",
100807f4964dSYang Liu     "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23",
100907f4964dSYang Liu     "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"
101007f4964dSYang Liu };
101107f4964dSYang Liu 
1012a47842d1SChristoph Müllner /* The FLI.[HSDQ] numeric constants (0.0 for symbolic constants).
1013a47842d1SChristoph Müllner  * The constants use the hex floating-point literal representation
1014a47842d1SChristoph Müllner  * that is printed when using the printf %a format specifier,
1015a47842d1SChristoph Müllner  * which matches the output that is generated by the disassembler.
1016a47842d1SChristoph Müllner  */
1017a47842d1SChristoph Müllner static const char rv_fli_name_const[32][9] =
1018a47842d1SChristoph Müllner {
1019a47842d1SChristoph Müllner     "0x1p+0", "min", "0x1p-16", "0x1p-15",
1020a47842d1SChristoph Müllner     "0x1p-8", "0x1p-7", "0x1p-4", "0x1p-3",
1021a47842d1SChristoph Müllner     "0x1p-2", "0x1.4p-2", "0x1.8p-2", "0x1.cp-2",
1022a47842d1SChristoph Müllner     "0x1p-1", "0x1.4p-1", "0x1.8p-1", "0x1.cp-1",
1023a47842d1SChristoph Müllner     "0x1p+0", "0x1.4p+0", "0x1.8p+0", "0x1.cp+0",
1024a47842d1SChristoph Müllner     "0x1p+1", "0x1.4p+1", "0x1.8p+1", "0x1p+2",
1025a47842d1SChristoph Müllner     "0x1p+3", "0x1p+4", "0x1p+7", "0x1p+8",
1026a47842d1SChristoph Müllner     "0x1p+15", "0x1p+16", "inf", "nan"
1027a47842d1SChristoph Müllner };
1028a47842d1SChristoph Müllner 
1029ea103259SMichael Clark /* pseudo-instruction constraints */
1030ea103259SMichael Clark 
1031ea103259SMichael Clark static const rvc_constraint rvcc_jal[] = { rvc_rd_eq_ra, rvc_end };
103298624d13SWeiwei Li static const rvc_constraint rvcc_jalr[] = { rvc_rd_eq_ra, rvc_imm_eq_zero,
103398624d13SWeiwei Li                                             rvc_end };
103498624d13SWeiwei Li static const rvc_constraint rvcc_nop[] = { rvc_rd_eq_x0, rvc_rs1_eq_x0,
103598624d13SWeiwei Li                                            rvc_imm_eq_zero, rvc_end };
1036ea103259SMichael Clark static const rvc_constraint rvcc_mv[] = { rvc_imm_eq_zero, rvc_end };
1037ea103259SMichael Clark static const rvc_constraint rvcc_not[] = { rvc_imm_eq_n1, rvc_end };
1038ea103259SMichael Clark static const rvc_constraint rvcc_neg[] = { rvc_rs1_eq_x0, rvc_end };
1039ea103259SMichael Clark static const rvc_constraint rvcc_negw[] = { rvc_rs1_eq_x0, rvc_end };
104033b4f859SMichael Clark static const rvc_constraint rvcc_sext_w[] = { rvc_imm_eq_zero, rvc_end };
1041ea103259SMichael Clark static const rvc_constraint rvcc_seqz[] = { rvc_imm_eq_p1, rvc_end };
1042ea103259SMichael Clark static const rvc_constraint rvcc_snez[] = { rvc_rs1_eq_x0, rvc_end };
1043ea103259SMichael Clark static const rvc_constraint rvcc_sltz[] = { rvc_rs2_eq_x0, rvc_end };
1044ea103259SMichael Clark static const rvc_constraint rvcc_sgtz[] = { rvc_rs1_eq_x0, rvc_end };
1045ea103259SMichael Clark static const rvc_constraint rvcc_fmv_s[] = { rvc_rs2_eq_rs1, rvc_end };
1046ea103259SMichael Clark static const rvc_constraint rvcc_fabs_s[] = { rvc_rs2_eq_rs1, rvc_end };
1047ea103259SMichael Clark static const rvc_constraint rvcc_fneg_s[] = { rvc_rs2_eq_rs1, rvc_end };
1048ea103259SMichael Clark static const rvc_constraint rvcc_fmv_d[] = { rvc_rs2_eq_rs1, rvc_end };
1049ea103259SMichael Clark static const rvc_constraint rvcc_fabs_d[] = { rvc_rs2_eq_rs1, rvc_end };
1050ea103259SMichael Clark static const rvc_constraint rvcc_fneg_d[] = { rvc_rs2_eq_rs1, rvc_end };
1051ea103259SMichael Clark static const rvc_constraint rvcc_fmv_q[] = { rvc_rs2_eq_rs1, rvc_end };
1052ea103259SMichael Clark static const rvc_constraint rvcc_fabs_q[] = { rvc_rs2_eq_rs1, rvc_end };
1053ea103259SMichael Clark static const rvc_constraint rvcc_fneg_q[] = { rvc_rs2_eq_rs1, rvc_end };
1054ea103259SMichael Clark static const rvc_constraint rvcc_beqz[] = { rvc_rs2_eq_x0, rvc_end };
1055ea103259SMichael Clark static const rvc_constraint rvcc_bnez[] = { rvc_rs2_eq_x0, rvc_end };
1056ea103259SMichael Clark static const rvc_constraint rvcc_blez[] = { rvc_rs1_eq_x0, rvc_end };
1057ea103259SMichael Clark static const rvc_constraint rvcc_bgez[] = { rvc_rs2_eq_x0, rvc_end };
1058ea103259SMichael Clark static const rvc_constraint rvcc_bltz[] = { rvc_rs2_eq_x0, rvc_end };
1059ea103259SMichael Clark static const rvc_constraint rvcc_bgtz[] = { rvc_rs1_eq_x0, rvc_end };
1060ea103259SMichael Clark static const rvc_constraint rvcc_ble[] = { rvc_end };
1061ea103259SMichael Clark static const rvc_constraint rvcc_bleu[] = { rvc_end };
1062ea103259SMichael Clark static const rvc_constraint rvcc_bgt[] = { rvc_end };
1063ea103259SMichael Clark static const rvc_constraint rvcc_bgtu[] = { rvc_end };
1064ea103259SMichael Clark static const rvc_constraint rvcc_j[] = { rvc_rd_eq_x0, rvc_end };
106598624d13SWeiwei Li static const rvc_constraint rvcc_ret[] = { rvc_rd_eq_x0, rvc_rs1_eq_ra,
106698624d13SWeiwei Li                                            rvc_end };
106798624d13SWeiwei Li static const rvc_constraint rvcc_jr[] = { rvc_rd_eq_x0, rvc_imm_eq_zero,
106898624d13SWeiwei Li                                           rvc_end };
106998624d13SWeiwei Li static const rvc_constraint rvcc_rdcycle[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc00,
107098624d13SWeiwei Li                                                rvc_end };
107198624d13SWeiwei Li static const rvc_constraint rvcc_rdtime[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc01,
107298624d13SWeiwei Li                                               rvc_end };
107398624d13SWeiwei Li static const rvc_constraint rvcc_rdinstret[] = { rvc_rs1_eq_x0,
107498624d13SWeiwei Li                                                  rvc_csr_eq_0xc02, rvc_end };
107598624d13SWeiwei Li static const rvc_constraint rvcc_rdcycleh[] = { rvc_rs1_eq_x0,
107698624d13SWeiwei Li                                                 rvc_csr_eq_0xc80, rvc_end };
107798624d13SWeiwei Li static const rvc_constraint rvcc_rdtimeh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc81,
107898624d13SWeiwei Li                                                rvc_end };
10792e3df911SWladimir J. van der Laan static const rvc_constraint rvcc_rdinstreth[] = { rvc_rs1_eq_x0,
10802e3df911SWladimir J. van der Laan                                                   rvc_csr_eq_0xc82, rvc_end };
108198624d13SWeiwei Li static const rvc_constraint rvcc_frcsr[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x003,
108298624d13SWeiwei Li                                              rvc_end };
108398624d13SWeiwei Li static const rvc_constraint rvcc_frrm[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x002,
108498624d13SWeiwei Li                                             rvc_end };
108598624d13SWeiwei Li static const rvc_constraint rvcc_frflags[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x001,
108698624d13SWeiwei Li                                                rvc_end };
1087ea103259SMichael Clark static const rvc_constraint rvcc_fscsr[] = { rvc_csr_eq_0x003, rvc_end };
1088ea103259SMichael Clark static const rvc_constraint rvcc_fsrm[] = { rvc_csr_eq_0x002, rvc_end };
1089ea103259SMichael Clark static const rvc_constraint rvcc_fsflags[] = { rvc_csr_eq_0x001, rvc_end };
1090ea103259SMichael Clark static const rvc_constraint rvcc_fsrmi[] = { rvc_csr_eq_0x002, rvc_end };
1091ea103259SMichael Clark static const rvc_constraint rvcc_fsflagsi[] = { rvc_csr_eq_0x001, rvc_end };
1092ea103259SMichael Clark 
1093ea103259SMichael Clark /* pseudo-instruction metadata */
1094ea103259SMichael Clark 
1095ea103259SMichael Clark static const rv_comp_data rvcp_jal[] = {
1096ea103259SMichael Clark     { rv_op_j, rvcc_j },
1097ea103259SMichael Clark     { rv_op_jal, rvcc_jal },
1098ea103259SMichael Clark     { rv_op_illegal, NULL }
1099ea103259SMichael Clark };
1100ea103259SMichael Clark 
1101ea103259SMichael Clark static const rv_comp_data rvcp_jalr[] = {
1102ea103259SMichael Clark     { rv_op_ret, rvcc_ret },
1103ea103259SMichael Clark     { rv_op_jr, rvcc_jr },
1104ea103259SMichael Clark     { rv_op_jalr, rvcc_jalr },
1105ea103259SMichael Clark     { rv_op_illegal, NULL }
1106ea103259SMichael Clark };
1107ea103259SMichael Clark 
1108ea103259SMichael Clark static const rv_comp_data rvcp_beq[] = {
1109ea103259SMichael Clark     { rv_op_beqz, rvcc_beqz },
1110ea103259SMichael Clark     { rv_op_illegal, NULL }
1111ea103259SMichael Clark };
1112ea103259SMichael Clark 
1113ea103259SMichael Clark static const rv_comp_data rvcp_bne[] = {
1114ea103259SMichael Clark     { rv_op_bnez, rvcc_bnez },
1115ea103259SMichael Clark     { rv_op_illegal, NULL }
1116ea103259SMichael Clark };
1117ea103259SMichael Clark 
1118ea103259SMichael Clark static const rv_comp_data rvcp_blt[] = {
1119ea103259SMichael Clark     { rv_op_bltz, rvcc_bltz },
1120ea103259SMichael Clark     { rv_op_bgtz, rvcc_bgtz },
1121ea103259SMichael Clark     { rv_op_bgt, rvcc_bgt },
1122ea103259SMichael Clark     { rv_op_illegal, NULL }
1123ea103259SMichael Clark };
1124ea103259SMichael Clark 
1125ea103259SMichael Clark static const rv_comp_data rvcp_bge[] = {
1126ea103259SMichael Clark     { rv_op_blez, rvcc_blez },
1127ea103259SMichael Clark     { rv_op_bgez, rvcc_bgez },
1128ea103259SMichael Clark     { rv_op_ble, rvcc_ble },
1129ea103259SMichael Clark     { rv_op_illegal, NULL }
1130ea103259SMichael Clark };
1131ea103259SMichael Clark 
1132ea103259SMichael Clark static const rv_comp_data rvcp_bltu[] = {
1133ea103259SMichael Clark     { rv_op_bgtu, rvcc_bgtu },
1134ea103259SMichael Clark     { rv_op_illegal, NULL }
1135ea103259SMichael Clark };
1136ea103259SMichael Clark 
1137ea103259SMichael Clark static const rv_comp_data rvcp_bgeu[] = {
1138ea103259SMichael Clark     { rv_op_bleu, rvcc_bleu },
1139ea103259SMichael Clark     { rv_op_illegal, NULL }
1140ea103259SMichael Clark };
1141ea103259SMichael Clark 
1142ea103259SMichael Clark static const rv_comp_data rvcp_addi[] = {
1143ea103259SMichael Clark     { rv_op_nop, rvcc_nop },
1144ea103259SMichael Clark     { rv_op_mv, rvcc_mv },
1145ea103259SMichael Clark     { rv_op_illegal, NULL }
1146ea103259SMichael Clark };
1147ea103259SMichael Clark 
1148ea103259SMichael Clark static const rv_comp_data rvcp_sltiu[] = {
1149ea103259SMichael Clark     { rv_op_seqz, rvcc_seqz },
1150ea103259SMichael Clark     { rv_op_illegal, NULL }
1151ea103259SMichael Clark };
1152ea103259SMichael Clark 
1153ea103259SMichael Clark static const rv_comp_data rvcp_xori[] = {
1154ea103259SMichael Clark     { rv_op_not, rvcc_not },
1155ea103259SMichael Clark     { rv_op_illegal, NULL }
1156ea103259SMichael Clark };
1157ea103259SMichael Clark 
1158ea103259SMichael Clark static const rv_comp_data rvcp_sub[] = {
1159ea103259SMichael Clark     { rv_op_neg, rvcc_neg },
1160ea103259SMichael Clark     { rv_op_illegal, NULL }
1161ea103259SMichael Clark };
1162ea103259SMichael Clark 
1163ea103259SMichael Clark static const rv_comp_data rvcp_slt[] = {
1164ea103259SMichael Clark     { rv_op_sltz, rvcc_sltz },
1165ea103259SMichael Clark     { rv_op_sgtz, rvcc_sgtz },
1166ea103259SMichael Clark     { rv_op_illegal, NULL }
1167ea103259SMichael Clark };
1168ea103259SMichael Clark 
1169ea103259SMichael Clark static const rv_comp_data rvcp_sltu[] = {
1170ea103259SMichael Clark     { rv_op_snez, rvcc_snez },
1171ea103259SMichael Clark     { rv_op_illegal, NULL }
1172ea103259SMichael Clark };
1173ea103259SMichael Clark 
1174ea103259SMichael Clark static const rv_comp_data rvcp_addiw[] = {
1175ea103259SMichael Clark     { rv_op_sext_w, rvcc_sext_w },
1176ea103259SMichael Clark     { rv_op_illegal, NULL }
1177ea103259SMichael Clark };
1178ea103259SMichael Clark 
1179ea103259SMichael Clark static const rv_comp_data rvcp_subw[] = {
1180ea103259SMichael Clark     { rv_op_negw, rvcc_negw },
1181ea103259SMichael Clark     { rv_op_illegal, NULL }
1182ea103259SMichael Clark };
1183ea103259SMichael Clark 
1184ea103259SMichael Clark static const rv_comp_data rvcp_csrrw[] = {
1185ea103259SMichael Clark     { rv_op_fscsr, rvcc_fscsr },
1186ea103259SMichael Clark     { rv_op_fsrm, rvcc_fsrm },
1187ea103259SMichael Clark     { rv_op_fsflags, rvcc_fsflags },
1188ea103259SMichael Clark     { rv_op_illegal, NULL }
1189ea103259SMichael Clark };
1190ea103259SMichael Clark 
11915748c886SWeiwei Li 
1192ea103259SMichael Clark static const rv_comp_data rvcp_csrrs[] = {
1193ea103259SMichael Clark     { rv_op_rdcycle, rvcc_rdcycle },
1194ea103259SMichael Clark     { rv_op_rdtime, rvcc_rdtime },
1195ea103259SMichael Clark     { rv_op_rdinstret, rvcc_rdinstret },
1196ea103259SMichael Clark     { rv_op_rdcycleh, rvcc_rdcycleh },
1197ea103259SMichael Clark     { rv_op_rdtimeh, rvcc_rdtimeh },
1198ea103259SMichael Clark     { rv_op_rdinstreth, rvcc_rdinstreth },
1199ea103259SMichael Clark     { rv_op_frcsr, rvcc_frcsr },
1200ea103259SMichael Clark     { rv_op_frrm, rvcc_frrm },
1201ea103259SMichael Clark     { rv_op_frflags, rvcc_frflags },
1202ea103259SMichael Clark     { rv_op_illegal, NULL }
1203ea103259SMichael Clark };
1204ea103259SMichael Clark 
1205ea103259SMichael Clark static const rv_comp_data rvcp_csrrwi[] = {
1206ea103259SMichael Clark     { rv_op_fsrmi, rvcc_fsrmi },
1207ea103259SMichael Clark     { rv_op_fsflagsi, rvcc_fsflagsi },
1208ea103259SMichael Clark     { rv_op_illegal, NULL }
1209ea103259SMichael Clark };
1210ea103259SMichael Clark 
1211ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_s[] = {
1212ea103259SMichael Clark     { rv_op_fmv_s, rvcc_fmv_s },
1213ea103259SMichael Clark     { rv_op_illegal, NULL }
1214ea103259SMichael Clark };
1215ea103259SMichael Clark 
1216ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_s[] = {
1217ea103259SMichael Clark     { rv_op_fneg_s, rvcc_fneg_s },
1218ea103259SMichael Clark     { rv_op_illegal, NULL }
1219ea103259SMichael Clark };
1220ea103259SMichael Clark 
1221ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_s[] = {
1222ea103259SMichael Clark     { rv_op_fabs_s, rvcc_fabs_s },
1223ea103259SMichael Clark     { rv_op_illegal, NULL }
1224ea103259SMichael Clark };
1225ea103259SMichael Clark 
1226ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_d[] = {
1227ea103259SMichael Clark     { rv_op_fmv_d, rvcc_fmv_d },
1228ea103259SMichael Clark     { rv_op_illegal, NULL }
1229ea103259SMichael Clark };
1230ea103259SMichael Clark 
1231ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_d[] = {
1232ea103259SMichael Clark     { rv_op_fneg_d, rvcc_fneg_d },
1233ea103259SMichael Clark     { rv_op_illegal, NULL }
1234ea103259SMichael Clark };
1235ea103259SMichael Clark 
1236ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_d[] = {
1237ea103259SMichael Clark     { rv_op_fabs_d, rvcc_fabs_d },
1238ea103259SMichael Clark     { rv_op_illegal, NULL }
1239ea103259SMichael Clark };
1240ea103259SMichael Clark 
1241ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_q[] = {
1242ea103259SMichael Clark     { rv_op_fmv_q, rvcc_fmv_q },
1243ea103259SMichael Clark     { rv_op_illegal, NULL }
1244ea103259SMichael Clark };
1245ea103259SMichael Clark 
1246ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_q[] = {
1247ea103259SMichael Clark     { rv_op_fneg_q, rvcc_fneg_q },
1248ea103259SMichael Clark     { rv_op_illegal, NULL }
1249ea103259SMichael Clark };
1250ea103259SMichael Clark 
1251ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_q[] = {
1252ea103259SMichael Clark     { rv_op_fabs_q, rvcc_fabs_q },
1253ea103259SMichael Clark     { rv_op_illegal, NULL }
1254ea103259SMichael Clark };
1255ea103259SMichael Clark 
1256ea103259SMichael Clark /* instruction metadata */
1257ea103259SMichael Clark 
1258fd7c64f6SChristoph Müllner const rv_opcode_data rvi_opcode_data[] = {
1259ea103259SMichael Clark     { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
126036df75a0SChristoph Müllner     { "lui", rv_codec_u, rv_fmt_rd_uimm, NULL, 0, 0, 0 },
126136df75a0SChristoph Müllner     { "auipc", rv_codec_u, rv_fmt_rd_uoffset, NULL, 0, 0, 0 },
1262ea103259SMichael Clark     { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 },
1263ea103259SMichael Clark     { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 },
1264ea103259SMichael Clark     { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 },
1265ea103259SMichael Clark     { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 },
1266ea103259SMichael Clark     { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 },
1267ea103259SMichael Clark     { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 },
1268ea103259SMichael Clark     { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 },
1269ea103259SMichael Clark     { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 },
1270ea103259SMichael Clark     { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1271ea103259SMichael Clark     { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1272ea103259SMichael Clark     { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1273ea103259SMichael Clark     { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1274ea103259SMichael Clark     { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1275ea103259SMichael Clark     { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1276ea103259SMichael Clark     { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1277ea103259SMichael Clark     { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1278ea103259SMichael Clark     { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 },
1279ea103259SMichael Clark     { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1280ea103259SMichael Clark     { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 },
1281ea103259SMichael Clark     { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 },
1282ea103259SMichael Clark     { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1283ea103259SMichael Clark     { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1284ea103259SMichael Clark     { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1285ea103259SMichael Clark     { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1286ea103259SMichael Clark     { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1287ea103259SMichael Clark     { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1288ea103259SMichael Clark     { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 },
1289ea103259SMichael Clark     { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1290ea103259SMichael Clark     { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 },
1291ea103259SMichael Clark     { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 },
1292ea103259SMichael Clark     { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1293ea103259SMichael Clark     { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1294ea103259SMichael Clark     { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1295ea103259SMichael Clark     { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1296ea103259SMichael Clark     { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1297ea103259SMichael Clark     { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 },
1298ea103259SMichael Clark     { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1299ea103259SMichael Clark     { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1300ea103259SMichael Clark     { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1301ea103259SMichael Clark     { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1302ea103259SMichael Clark     { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 },
1303ea103259SMichael Clark     { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1304ea103259SMichael Clark     { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1305ea103259SMichael Clark     { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1306ea103259SMichael Clark     { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1307ea103259SMichael Clark     { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 },
1308ea103259SMichael Clark     { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1309ea103259SMichael Clark     { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1310ea103259SMichael Clark     { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1311ea103259SMichael Clark     { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1312ea103259SMichael Clark     { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 },
1313ea103259SMichael Clark     { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 },
1314ea103259SMichael Clark     { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1315ea103259SMichael Clark     { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1316ea103259SMichael Clark     { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1317ea103259SMichael Clark     { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
1318ea103259SMichael Clark     { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1319ea103259SMichael Clark     { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1320ea103259SMichael Clark     { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1321ea103259SMichael Clark     { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1322ea103259SMichael Clark     { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1323ea103259SMichael Clark     { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1324ea103259SMichael Clark     { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1325ea103259SMichael Clark     { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1326ea103259SMichael Clark     { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1327ea103259SMichael Clark     { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1328ea103259SMichael Clark     { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1329ea103259SMichael Clark     { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1330ea103259SMichael Clark     { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1331ea103259SMichael Clark     { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1332ea103259SMichael Clark     { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1333ea103259SMichael Clark     { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1334ea103259SMichael Clark     { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1335ea103259SMichael Clark     { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1336ea103259SMichael Clark     { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1337ea103259SMichael Clark     { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1338ea103259SMichael Clark     { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1339ea103259SMichael Clark     { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1340ea103259SMichael Clark     { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
1341ea103259SMichael Clark     { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1342ea103259SMichael Clark     { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1343ea103259SMichael Clark     { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1344ea103259SMichael Clark     { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1345ea103259SMichael Clark     { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1346ea103259SMichael Clark     { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1347ea103259SMichael Clark     { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1348ea103259SMichael Clark     { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1349ea103259SMichael Clark     { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1350ea103259SMichael Clark     { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1351ea103259SMichael Clark     { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1352ea103259SMichael Clark     { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1353ea103259SMichael Clark     { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1354ea103259SMichael Clark     { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1355ea103259SMichael Clark     { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1356ea103259SMichael Clark     { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1357ea103259SMichael Clark     { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1358ea103259SMichael Clark     { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1359ea103259SMichael Clark     { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1360ea103259SMichael Clark     { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1361ea103259SMichael Clark     { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1362ea103259SMichael Clark     { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1363ea103259SMichael Clark     { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 },
1364ea103259SMichael Clark     { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1365ea103259SMichael Clark     { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1366ea103259SMichael Clark     { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1367ea103259SMichael Clark     { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1368ea103259SMichael Clark     { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1369ea103259SMichael Clark     { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1370ea103259SMichael Clark     { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1371ea103259SMichael Clark     { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1372ea103259SMichael Clark     { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1373ea103259SMichael Clark     { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
1374ea103259SMichael Clark     { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1375ea103259SMichael Clark     { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1376ea103259SMichael Clark     { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1377ea103259SMichael Clark     { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1378ea103259SMichael Clark     { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1379ea103259SMichael Clark     { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1380ea103259SMichael Clark     { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1381ea103259SMichael Clark     { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
1382ea103259SMichael Clark     { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 },
1383ea103259SMichael Clark     { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
1384ea103259SMichael Clark     { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 },
1385ea103259SMichael Clark     { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 },
1386ea103259SMichael Clark     { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 },
1387ea103259SMichael Clark     { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 },
1388ea103259SMichael Clark     { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 },
1389ea103259SMichael Clark     { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 },
1390ea103259SMichael Clark     { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1391ea103259SMichael Clark     { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1392ea103259SMichael Clark     { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1393ea103259SMichael Clark     { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1394ea103259SMichael Clark     { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1395ea103259SMichael Clark     { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1396ea103259SMichael Clark     { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1397ea103259SMichael Clark     { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1398ea103259SMichael Clark     { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1399ea103259SMichael Clark     { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1400ea103259SMichael Clark     { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 },
1401ea103259SMichael Clark     { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 },
1402ea103259SMichael Clark     { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 },
1403ea103259SMichael Clark     { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1404ea103259SMichael Clark     { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1405ea103259SMichael Clark     { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1406ea103259SMichael Clark     { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1407ea103259SMichael Clark     { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1408ea103259SMichael Clark     { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1409ea103259SMichael Clark     { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1410ea103259SMichael Clark     { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1411ea103259SMichael Clark     { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1412ea103259SMichael Clark     { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1413ea103259SMichael Clark     { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1414ea103259SMichael Clark     { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1415ea103259SMichael Clark     { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1416ea103259SMichael Clark     { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1417ea103259SMichael Clark     { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1418ea103259SMichael Clark     { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1419ea103259SMichael Clark     { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1420ea103259SMichael Clark     { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1421ea103259SMichael Clark     { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1422ea103259SMichael Clark     { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1423ea103259SMichael Clark     { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1424ea103259SMichael Clark     { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1425ea103259SMichael Clark     { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1426ea103259SMichael Clark     { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1427ea103259SMichael Clark     { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1428ea103259SMichael Clark     { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1429ea103259SMichael Clark     { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1430ea103259SMichael Clark     { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 },
1431ea103259SMichael Clark     { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 },
1432ea103259SMichael Clark     { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 },
1433ea103259SMichael Clark     { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1434ea103259SMichael Clark     { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1435ea103259SMichael Clark     { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1436ea103259SMichael Clark     { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1437ea103259SMichael Clark     { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1438ea103259SMichael Clark     { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1439ea103259SMichael Clark     { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1440ea103259SMichael Clark     { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1441ea103259SMichael Clark     { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1442ea103259SMichael Clark     { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1443ea103259SMichael Clark     { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1444ea103259SMichael Clark     { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1445ea103259SMichael Clark     { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1446ea103259SMichael Clark     { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1447ea103259SMichael Clark     { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1448ea103259SMichael Clark     { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1449ea103259SMichael Clark     { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1450ea103259SMichael Clark     { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1451ea103259SMichael Clark     { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1452ea103259SMichael Clark     { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
1453ea103259SMichael Clark     { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
1454ea103259SMichael Clark     { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1455ea103259SMichael Clark     { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1456ea103259SMichael Clark     { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1457ea103259SMichael Clark     { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 },
1458ea103259SMichael Clark     { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1459ea103259SMichael Clark     { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1460ea103259SMichael Clark     { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1461ea103259SMichael Clark     { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 },
1462ea103259SMichael Clark     { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 },
1463ea103259SMichael Clark     { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 },
1464ea103259SMichael Clark     { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 },
1465ea103259SMichael Clark     { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1466ea103259SMichael Clark     { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
1467ea103259SMichael Clark     { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1468ea103259SMichael Clark     { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1469ea103259SMichael Clark     { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1470ea103259SMichael Clark     { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1471ea103259SMichael Clark     { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
1472ea103259SMichael Clark     { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1473ea103259SMichael Clark     { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1474ea103259SMichael Clark     { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
1475ea103259SMichael Clark     { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1476ea103259SMichael Clark     { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1477ea103259SMichael Clark     { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1478ea103259SMichael Clark     { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1479ea103259SMichael Clark     { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1480ea103259SMichael Clark     { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1481ea103259SMichael Clark     { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
1482ea103259SMichael Clark     { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1483ea103259SMichael Clark     { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 },
1484ea103259SMichael Clark     { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
1485ea103259SMichael Clark     { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
1486f88222daSMichael Clark     { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,
1487f88222daSMichael Clark       rv_op_addi, rv_op_addi, rvcd_imm_nz },
148898624d13SWeiwei Li     { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,
148998624d13SWeiwei Li       rv_op_fld, 0 },
149098624d13SWeiwei Li     { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw,
149198624d13SWeiwei Li       rv_op_lw },
1492ea103259SMichael Clark     { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 },
149398624d13SWeiwei Li     { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd,
149498624d13SWeiwei Li       rv_op_fsd, 0 },
149598624d13SWeiwei Li     { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw,
149698624d13SWeiwei Li       rv_op_sw },
1497ea103259SMichael Clark     { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 },
149898624d13SWeiwei Li     { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi,
149998624d13SWeiwei Li       rv_op_addi },
1500f88222daSMichael Clark     { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi,
1501f88222daSMichael Clark       rv_op_addi, rvcd_imm_nz },
1502ea103259SMichael Clark     { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 },
150398624d13SWeiwei Li     { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi,
150498624d13SWeiwei Li       rv_op_addi },
1505f88222daSMichael Clark     { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi,
1506f88222daSMichael Clark       rv_op_addi, rv_op_addi, rvcd_imm_nz },
150736df75a0SChristoph Müllner     { "c.lui", rv_codec_ci_lui, rv_fmt_rd_uimm, NULL, rv_op_lui, rv_op_lui,
1508f88222daSMichael Clark       rv_op_lui, rvcd_imm_nz },
1509f88222daSMichael Clark     { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli,
1510f88222daSMichael Clark       rv_op_srli, rv_op_srli, rvcd_imm_nz },
1511f88222daSMichael Clark     { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai,
1512f88222daSMichael Clark       rv_op_srai, rv_op_srai, rvcd_imm_nz },
1513f88222daSMichael Clark     { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi,
15142e3df911SWladimir J. van der Laan       rv_op_andi, rv_op_andi },
151598624d13SWeiwei Li     { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub,
151698624d13SWeiwei Li       rv_op_sub },
151798624d13SWeiwei Li     { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor,
151898624d13SWeiwei Li       rv_op_xor },
151998624d13SWeiwei Li     { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or,
152098624d13SWeiwei Li       rv_op_or },
152198624d13SWeiwei Li     { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and,
152298624d13SWeiwei Li       rv_op_and },
152398624d13SWeiwei Li     { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_subw,
152498624d13SWeiwei Li       rv_op_subw },
152598624d13SWeiwei Li     { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_addw,
152698624d13SWeiwei Li       rv_op_addw },
152798624d13SWeiwei Li     { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal,
152898624d13SWeiwei Li       rv_op_jal },
152998624d13SWeiwei Li     { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op_beq,
153098624d13SWeiwei Li       rv_op_beq },
153198624d13SWeiwei Li     { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne,
153298624d13SWeiwei Li       rv_op_bne },
1533f88222daSMichael Clark     { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli,
1534f88222daSMichael Clark       rv_op_slli, rv_op_slli, rvcd_imm_nz },
153598624d13SWeiwei Li     { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld,
153698624d13SWeiwei Li       rv_op_fld, rv_op_fld },
153798624d13SWeiwei Li     { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw,
153898624d13SWeiwei Li       rv_op_lw, rv_op_lw },
153998624d13SWeiwei Li     { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0,
154098624d13SWeiwei Li       0 },
154198624d13SWeiwei Li     { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr,
154298624d13SWeiwei Li       rv_op_jalr, rv_op_jalr },
154398624d13SWeiwei Li     { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_addi,
154498624d13SWeiwei Li       rv_op_addi },
154598624d13SWeiwei Li     { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak,
154698624d13SWeiwei Li       rv_op_ebreak, rv_op_ebreak },
154798624d13SWeiwei Li     { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr,
154898624d13SWeiwei Li       rv_op_jalr, rv_op_jalr },
154998624d13SWeiwei Li     { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add,
155098624d13SWeiwei Li       rv_op_add },
155198624d13SWeiwei Li     { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd,
155298624d13SWeiwei Li       rv_op_fsd, rv_op_fsd },
155398624d13SWeiwei Li     { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw,
155498624d13SWeiwei Li       rv_op_sw, rv_op_sw },
155598624d13SWeiwei Li     { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0,
155698624d13SWeiwei Li       0 },
155798624d13SWeiwei Li     { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld,
155898624d13SWeiwei Li       rv_op_ld },
155998624d13SWeiwei Li     { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd,
156098624d13SWeiwei Li       rv_op_sd },
156198624d13SWeiwei Li     { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw,
156298624d13SWeiwei Li       rv_op_addiw },
156398624d13SWeiwei Li     { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld,
156498624d13SWeiwei Li       rv_op_ld },
156598624d13SWeiwei Li     { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd,
156698624d13SWeiwei Li       rv_op_sd },
1567ea103259SMichael Clark     { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq },
1568ea103259SMichael Clark     { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq },
1569ea103259SMichael Clark     { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq },
157098624d13SWeiwei Li     { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0,
157198624d13SWeiwei Li       rv_op_sq },
1572ea103259SMichael Clark     { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 },
1573ea103259SMichael Clark     { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1574ea103259SMichael Clark     { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1575ea103259SMichael Clark     { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1576ea103259SMichael Clark     { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1577ea103259SMichael Clark     { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1578ea103259SMichael Clark     { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1579ea103259SMichael Clark     { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
1580ea103259SMichael Clark     { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1581ea103259SMichael Clark     { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
15820d581506SMikhail Tyutin     { "fmv.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15830d581506SMikhail Tyutin     { "fabs.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15840d581506SMikhail Tyutin     { "fneg.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15850d581506SMikhail Tyutin     { "fmv.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15860d581506SMikhail Tyutin     { "fabs.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15870d581506SMikhail Tyutin     { "fneg.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15880d581506SMikhail Tyutin     { "fmv.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15890d581506SMikhail Tyutin     { "fabs.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
15900d581506SMikhail Tyutin     { "fneg.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 },
1591ea103259SMichael Clark     { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1592ea103259SMichael Clark     { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1593ea103259SMichael Clark     { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 },
1594ea103259SMichael Clark     { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1595ea103259SMichael Clark     { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 },
1596ea103259SMichael Clark     { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 },
1597ea103259SMichael Clark     { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1598ea103259SMichael Clark     { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1599ea103259SMichael Clark     { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1600ea103259SMichael Clark     { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 },
1601ea103259SMichael Clark     { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 },
1602ea103259SMichael Clark     { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 },
1603ea103259SMichael Clark     { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 },
1604ea103259SMichael Clark     { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1605ea103259SMichael Clark     { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1606ea103259SMichael Clark     { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1607ea103259SMichael Clark     { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1608ea103259SMichael Clark     { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1609ea103259SMichael Clark     { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1610ea103259SMichael Clark     { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1611ea103259SMichael Clark     { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1612ea103259SMichael Clark     { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 },
1613ea103259SMichael Clark     { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1614ea103259SMichael Clark     { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1615ea103259SMichael Clark     { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
1616ea103259SMichael Clark     { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 },
1617ea103259SMichael Clark     { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 },
161802c1b569SPhilipp Tomsich     { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
161902c1b569SPhilipp Tomsich     { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
162002c1b569SPhilipp Tomsich     { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
162102c1b569SPhilipp Tomsich     { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
162202c1b569SPhilipp Tomsich     { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
162302c1b569SPhilipp Tomsich     { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
162402c1b569SPhilipp Tomsich     { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
162502c1b569SPhilipp Tomsich     { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
162602c1b569SPhilipp Tomsich     { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
162702c1b569SPhilipp Tomsich     { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
16283de1fb71SPhilipp Tomsich     { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16293de1fb71SPhilipp Tomsich     { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16303de1fb71SPhilipp Tomsich     { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163102c1b569SPhilipp Tomsich     { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163202c1b569SPhilipp Tomsich     { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163302c1b569SPhilipp Tomsich     { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163402c1b569SPhilipp Tomsich     { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163502c1b569SPhilipp Tomsich     { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163602c1b569SPhilipp Tomsich     { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163702c1b569SPhilipp Tomsich     { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163802c1b569SPhilipp Tomsich     { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
163902c1b569SPhilipp Tomsich     { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164002c1b569SPhilipp Tomsich     { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164102c1b569SPhilipp Tomsich     { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164202c1b569SPhilipp Tomsich     { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164302c1b569SPhilipp Tomsich     { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164402c1b569SPhilipp Tomsich     { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164502c1b569SPhilipp Tomsich     { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
164602c1b569SPhilipp Tomsich     { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
164727062902SIvan Klokov     { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
164802c1b569SPhilipp Tomsich     { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
164913e269f6SIvan Klokov     { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
165002c1b569SPhilipp Tomsich     { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
165102c1b569SPhilipp Tomsich     { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
165202c1b569SPhilipp Tomsich     { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
165302c1b569SPhilipp Tomsich     { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
165402c1b569SPhilipp Tomsich     { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
165502c1b569SPhilipp Tomsich     { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 },
165602c1b569SPhilipp Tomsich     { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
165702c1b569SPhilipp Tomsich     { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
165802c1b569SPhilipp Tomsich     { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
165902c1b569SPhilipp Tomsich     { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
166002c1b569SPhilipp Tomsich     { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16615748c886SWeiwei Li     { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16625748c886SWeiwei Li     { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16635748c886SWeiwei Li     { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16645748c886SWeiwei Li     { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16655748c886SWeiwei Li     { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 },
16665748c886SWeiwei Li     { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16675748c886SWeiwei Li     { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16685748c886SWeiwei Li     { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16695748c886SWeiwei Li     { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16705748c886SWeiwei Li     { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16715748c886SWeiwei Li     { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16725748c886SWeiwei Li     { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16735748c886SWeiwei Li     { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16745748c886SWeiwei Li     { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16755748c886SWeiwei Li     { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16765748c886SWeiwei Li     { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16775748c886SWeiwei Li     { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16785748c886SWeiwei Li     { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16795748c886SWeiwei Li     { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16805748c886SWeiwei Li     { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16815748c886SWeiwei Li     { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16825748c886SWeiwei Li     { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16835748c886SWeiwei Li     { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16845748c886SWeiwei Li     { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16855748c886SWeiwei Li     { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16865748c886SWeiwei Li     { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16875748c886SWeiwei Li     { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
16885748c886SWeiwei Li     { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16895748c886SWeiwei Li     { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 },
16905748c886SWeiwei Li     { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
16915748c886SWeiwei Li     { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16925748c886SWeiwei Li     { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16935748c886SWeiwei Li     { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
16945748c886SWeiwei Li     { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
16955748c886SWeiwei Li     { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
16965748c886SWeiwei Li     { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
169707f4964dSYang Liu     { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 },
16988deb4756SWeiwei Li     { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
16998deb4756SWeiwei Li     { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17008deb4756SWeiwei Li     { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17018deb4756SWeiwei Li     { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17028deb4756SWeiwei Li     { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17038deb4756SWeiwei Li     { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17048deb4756SWeiwei Li     { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17058deb4756SWeiwei Li     { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17068deb4756SWeiwei Li     { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17078deb4756SWeiwei Li     { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17088deb4756SWeiwei Li     { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17098deb4756SWeiwei Li     { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17108deb4756SWeiwei Li     { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17118deb4756SWeiwei Li     { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17128deb4756SWeiwei Li     { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17138deb4756SWeiwei Li     { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17148deb4756SWeiwei Li     { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17158deb4756SWeiwei Li     { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 },
17168deb4756SWeiwei Li     { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17178deb4756SWeiwei Li     { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17188deb4756SWeiwei Li     { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17198deb4756SWeiwei Li     { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17208deb4756SWeiwei Li     { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17218deb4756SWeiwei Li     { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17228deb4756SWeiwei Li     { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17238deb4756SWeiwei Li     { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17248deb4756SWeiwei Li     { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17258deb4756SWeiwei Li     { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17268deb4756SWeiwei Li     { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17278deb4756SWeiwei Li     { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17288deb4756SWeiwei Li     { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17298deb4756SWeiwei Li     { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17308deb4756SWeiwei Li     { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17318deb4756SWeiwei Li     { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
17328deb4756SWeiwei Li     { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17338deb4756SWeiwei Li     { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17348deb4756SWeiwei Li     { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17358deb4756SWeiwei Li     { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17368deb4756SWeiwei Li     { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17378deb4756SWeiwei Li     { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17388deb4756SWeiwei Li     { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17398deb4756SWeiwei Li     { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17408deb4756SWeiwei Li     { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17418deb4756SWeiwei Li     { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17428deb4756SWeiwei Li     { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17438deb4756SWeiwei Li     { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17448deb4756SWeiwei Li     { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17458deb4756SWeiwei Li     { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17468deb4756SWeiwei Li     { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17478deb4756SWeiwei Li     { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17488deb4756SWeiwei Li     { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17498deb4756SWeiwei Li     { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17508deb4756SWeiwei Li     { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17518deb4756SWeiwei Li     { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17528deb4756SWeiwei Li     { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17538deb4756SWeiwei Li     { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17548deb4756SWeiwei Li     { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17558deb4756SWeiwei Li     { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 },
17568deb4756SWeiwei Li     { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17578deb4756SWeiwei Li     { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17588deb4756SWeiwei Li     { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
17598deb4756SWeiwei Li     { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17608deb4756SWeiwei Li     { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17618deb4756SWeiwei Li     { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17628deb4756SWeiwei Li     { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
17638deb4756SWeiwei Li     { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17648deb4756SWeiwei Li     { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17658deb4756SWeiwei Li     { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17668deb4756SWeiwei Li     { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17678deb4756SWeiwei Li     { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17688deb4756SWeiwei Li     { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17698deb4756SWeiwei Li     { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17708deb4756SWeiwei Li     { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17718deb4756SWeiwei Li     { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17728deb4756SWeiwei Li     { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17738deb4756SWeiwei Li     { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17748deb4756SWeiwei Li     { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17758deb4756SWeiwei Li     { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17768deb4756SWeiwei Li     { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17778deb4756SWeiwei Li     { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17788deb4756SWeiwei Li     { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17798deb4756SWeiwei Li     { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
17808deb4756SWeiwei Li     { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
17818deb4756SWeiwei Li     { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
17828deb4756SWeiwei Li     { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
17838deb4756SWeiwei Li     { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
17848deb4756SWeiwei Li     { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
17858deb4756SWeiwei Li     { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
17868deb4756SWeiwei Li     { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
17878deb4756SWeiwei Li     { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
17888deb4756SWeiwei Li     { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
17898deb4756SWeiwei Li     { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17908deb4756SWeiwei Li     { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17918deb4756SWeiwei Li     { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
17928deb4756SWeiwei Li     { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17938deb4756SWeiwei Li     { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17948deb4756SWeiwei Li     { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
17958deb4756SWeiwei Li     { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17968deb4756SWeiwei Li     { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
17978deb4756SWeiwei Li     { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
17988deb4756SWeiwei Li     { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
17998deb4756SWeiwei Li     { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18008deb4756SWeiwei Li     { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18018deb4756SWeiwei Li     { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18028deb4756SWeiwei Li     { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18038deb4756SWeiwei Li     { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18048deb4756SWeiwei Li     { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18058deb4756SWeiwei Li     { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18068deb4756SWeiwei Li     { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18078deb4756SWeiwei Li     { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18088deb4756SWeiwei Li     { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18098deb4756SWeiwei Li     { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18108deb4756SWeiwei Li     { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18118deb4756SWeiwei Li     { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18128deb4756SWeiwei Li     { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
18138deb4756SWeiwei Li     { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18148deb4756SWeiwei Li     { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18158deb4756SWeiwei Li     { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18168deb4756SWeiwei Li     { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18178deb4756SWeiwei Li     { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18188deb4756SWeiwei Li     { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18198deb4756SWeiwei Li     { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18208deb4756SWeiwei Li     { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18218deb4756SWeiwei Li     { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18228deb4756SWeiwei Li     { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18238deb4756SWeiwei Li     { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18248deb4756SWeiwei Li     { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18258deb4756SWeiwei Li     { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18268deb4756SWeiwei Li     { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18278deb4756SWeiwei Li     { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18288deb4756SWeiwei Li     { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18298deb4756SWeiwei Li     { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18308deb4756SWeiwei Li     { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18318deb4756SWeiwei Li     { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18328deb4756SWeiwei Li     { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18338deb4756SWeiwei Li     { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18348deb4756SWeiwei Li     { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18358deb4756SWeiwei Li     { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18368deb4756SWeiwei Li     { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18378deb4756SWeiwei Li     { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18388deb4756SWeiwei Li     { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18398deb4756SWeiwei Li     { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18408deb4756SWeiwei Li     { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18418deb4756SWeiwei Li     { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18428deb4756SWeiwei Li     { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18438deb4756SWeiwei Li     { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18448deb4756SWeiwei Li     { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18458deb4756SWeiwei Li     { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18468deb4756SWeiwei Li     { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18478deb4756SWeiwei Li     { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18488deb4756SWeiwei Li     { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18498deb4756SWeiwei Li     { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18508deb4756SWeiwei Li     { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18518deb4756SWeiwei Li     { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18528deb4756SWeiwei Li     { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18538deb4756SWeiwei Li     { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18548deb4756SWeiwei Li     { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18558deb4756SWeiwei Li     { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18568deb4756SWeiwei Li     { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18578deb4756SWeiwei Li     { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18588deb4756SWeiwei Li     { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18598deb4756SWeiwei Li     { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18608deb4756SWeiwei Li     { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18618deb4756SWeiwei Li     { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18628deb4756SWeiwei Li     { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18638deb4756SWeiwei Li     { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18648deb4756SWeiwei Li     { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18658deb4756SWeiwei Li     { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18668deb4756SWeiwei Li     { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18678deb4756SWeiwei Li     { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18688deb4756SWeiwei Li     { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18698deb4756SWeiwei Li     { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18708deb4756SWeiwei Li     { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18718deb4756SWeiwei Li     { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18728deb4756SWeiwei Li     { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18738deb4756SWeiwei Li     { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18748deb4756SWeiwei Li     { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18758deb4756SWeiwei Li     { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
18768deb4756SWeiwei Li     { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18778deb4756SWeiwei Li     { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 },
18788deb4756SWeiwei Li     { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, 0, 0, 0 },
18798deb4756SWeiwei Li     { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 },
18808deb4756SWeiwei Li     { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, 0, 0, 0 },
18818deb4756SWeiwei Li     { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 },
18828deb4756SWeiwei Li     { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 },
18838deb4756SWeiwei Li     { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 },
18848deb4756SWeiwei Li     { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18858deb4756SWeiwei Li     { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18868deb4756SWeiwei Li     { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18878deb4756SWeiwei Li     { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18888deb4756SWeiwei Li     { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18898deb4756SWeiwei Li     { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 },
18908deb4756SWeiwei Li     { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18918deb4756SWeiwei Li     { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18928deb4756SWeiwei Li     { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18938deb4756SWeiwei Li     { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18948deb4756SWeiwei Li     { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18958deb4756SWeiwei Li     { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18968deb4756SWeiwei Li     { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18978deb4756SWeiwei Li     { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
18988deb4756SWeiwei Li     { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
18998deb4756SWeiwei Li     { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19008deb4756SWeiwei Li     { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19018deb4756SWeiwei Li     { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19028deb4756SWeiwei Li     { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19038deb4756SWeiwei Li     { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19048deb4756SWeiwei Li     { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19058deb4756SWeiwei Li     { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19068deb4756SWeiwei Li     { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19078deb4756SWeiwei Li     { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19088deb4756SWeiwei Li     { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19098deb4756SWeiwei Li     { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19108deb4756SWeiwei Li     { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19118deb4756SWeiwei Li     { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19128deb4756SWeiwei Li     { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19138deb4756SWeiwei Li     { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19148deb4756SWeiwei Li     { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
19158deb4756SWeiwei Li     { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
19168deb4756SWeiwei Li     { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19178deb4756SWeiwei Li     { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19188deb4756SWeiwei Li     { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19198deb4756SWeiwei Li     { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19208deb4756SWeiwei Li     { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19218deb4756SWeiwei Li     { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19228deb4756SWeiwei Li     { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19238deb4756SWeiwei Li     { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19248deb4756SWeiwei Li     { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19258deb4756SWeiwei Li     { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19268deb4756SWeiwei Li     { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19278deb4756SWeiwei Li     { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19288deb4756SWeiwei Li     { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19298deb4756SWeiwei Li     { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19308deb4756SWeiwei Li     { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19318deb4756SWeiwei Li     { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19328deb4756SWeiwei Li     { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19338deb4756SWeiwei Li     { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19348deb4756SWeiwei Li     { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19358deb4756SWeiwei Li     { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19368deb4756SWeiwei Li     { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19378deb4756SWeiwei Li     { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19388deb4756SWeiwei Li     { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19398deb4756SWeiwei Li     { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19408deb4756SWeiwei Li     { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19418deb4756SWeiwei Li     { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19428deb4756SWeiwei Li     { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19438deb4756SWeiwei Li     { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19448deb4756SWeiwei Li     { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19458deb4756SWeiwei Li     { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19468deb4756SWeiwei Li     { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19478deb4756SWeiwei Li     { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19488deb4756SWeiwei Li     { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19498deb4756SWeiwei Li     { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19508deb4756SWeiwei Li     { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19518deb4756SWeiwei Li     { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19528deb4756SWeiwei Li     { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19538deb4756SWeiwei Li     { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19548deb4756SWeiwei Li     { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19558deb4756SWeiwei Li     { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19568deb4756SWeiwei Li     { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19578deb4756SWeiwei Li     { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19588deb4756SWeiwei Li     { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
19598deb4756SWeiwei Li     { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
19608deb4756SWeiwei Li     { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
19618deb4756SWeiwei Li     { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
19628deb4756SWeiwei Li     { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
19638deb4756SWeiwei Li     { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19648deb4756SWeiwei Li     { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19658deb4756SWeiwei Li     { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19668deb4756SWeiwei Li     { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19678deb4756SWeiwei Li     { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19688deb4756SWeiwei Li     { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19698deb4756SWeiwei Li     { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19708deb4756SWeiwei Li     { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19718deb4756SWeiwei Li     { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19728deb4756SWeiwei Li     { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19738deb4756SWeiwei Li     { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19748deb4756SWeiwei Li     { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19758deb4756SWeiwei Li     { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19768deb4756SWeiwei Li     { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19778deb4756SWeiwei Li     { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19788deb4756SWeiwei Li     { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19798deb4756SWeiwei Li     { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19808deb4756SWeiwei Li     { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19818deb4756SWeiwei Li     { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
19828deb4756SWeiwei Li     { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19838deb4756SWeiwei Li     { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19848deb4756SWeiwei Li     { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 },
19858deb4756SWeiwei Li     { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19868deb4756SWeiwei Li     { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, 0, 0, 0 },
19878deb4756SWeiwei Li     { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 },
19888deb4756SWeiwei Li     { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19898deb4756SWeiwei Li     { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19908deb4756SWeiwei Li     { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19918deb4756SWeiwei Li     { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19928deb4756SWeiwei Li     { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19938deb4756SWeiwei Li     { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19948deb4756SWeiwei Li     { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19958deb4756SWeiwei Li     { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19968deb4756SWeiwei Li     { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19978deb4756SWeiwei Li     { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19988deb4756SWeiwei Li     { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
19998deb4756SWeiwei Li     { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20008deb4756SWeiwei Li     { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20018deb4756SWeiwei Li     { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20028deb4756SWeiwei Li     { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20038deb4756SWeiwei Li     { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20048deb4756SWeiwei Li     { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20058deb4756SWeiwei Li     { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20068deb4756SWeiwei Li     { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20078deb4756SWeiwei Li     { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20088deb4756SWeiwei Li     { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20098deb4756SWeiwei Li     { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20108deb4756SWeiwei Li     { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20118deb4756SWeiwei Li     { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20128deb4756SWeiwei Li     { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20138deb4756SWeiwei Li     { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20148deb4756SWeiwei Li     { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20158deb4756SWeiwei Li     { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20168deb4756SWeiwei Li     { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20178deb4756SWeiwei Li     { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20188deb4756SWeiwei Li     { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20198deb4756SWeiwei Li     { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20208deb4756SWeiwei Li     { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20218deb4756SWeiwei Li     { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20228deb4756SWeiwei Li     { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20238deb4756SWeiwei Li     { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20248deb4756SWeiwei Li     { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20258deb4756SWeiwei Li     { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20268deb4756SWeiwei Li     { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20278deb4756SWeiwei Li     { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20288deb4756SWeiwei Li     { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20298deb4756SWeiwei Li     { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20308deb4756SWeiwei Li     { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20318deb4756SWeiwei Li     { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20328deb4756SWeiwei Li     { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20338deb4756SWeiwei Li     { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 },
20348deb4756SWeiwei Li     { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 },
20358deb4756SWeiwei Li     { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20368deb4756SWeiwei Li     { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20378deb4756SWeiwei Li     { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20388deb4756SWeiwei Li     { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20398deb4756SWeiwei Li     { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, 0, 0, 0 },
20408deb4756SWeiwei Li     { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, 0, 0, 0 },
20418deb4756SWeiwei Li     { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 },
20428deb4756SWeiwei Li     { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, 0, 0, 0 },
20438deb4756SWeiwei Li     { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 },
20448deb4756SWeiwei Li     { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
20458deb4756SWeiwei Li     { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
20468deb4756SWeiwei Li     { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
20478deb4756SWeiwei Li     { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
20488deb4756SWeiwei Li     { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
20498deb4756SWeiwei Li     { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
20508deb4756SWeiwei Li     { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20518deb4756SWeiwei Li     { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
20528deb4756SWeiwei Li     { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
20538deb4756SWeiwei Li     { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
20548deb4756SWeiwei Li     { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
20558deb4756SWeiwei Li     { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20568deb4756SWeiwei Li     { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20578deb4756SWeiwei Li     { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20588deb4756SWeiwei Li     { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
20598deb4756SWeiwei Li     { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20608deb4756SWeiwei Li     { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20618deb4756SWeiwei Li     { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20628deb4756SWeiwei Li     { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20638deb4756SWeiwei Li     { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20648deb4756SWeiwei Li     { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
20658deb4756SWeiwei Li     { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, 0, 0, 0 },
20668deb4756SWeiwei Li     { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, 0, 0, 0 },
20678deb4756SWeiwei Li     { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
20682c71d02eSWeiwei Li     { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20692c71d02eSWeiwei Li     { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20702c71d02eSWeiwei Li     { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20712c71d02eSWeiwei Li     { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20722c71d02eSWeiwei Li     { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20732c71d02eSWeiwei Li     { "c.not", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 },
20742c71d02eSWeiwei Li     { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2, NULL, 0, 0 },
20752c71d02eSWeiwei Li     { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
20762c71d02eSWeiwei Li     { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
20772c71d02eSWeiwei Li     { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
20782c71d02eSWeiwei Li     { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
20792c71d02eSWeiwei Li     { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 },
20802c71d02eSWeiwei Li     { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist, NULL, 0, 0 },
20812c71d02eSWeiwei Li     { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 },
20822c71d02eSWeiwei Li     { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0, 0 },
20832c71d02eSWeiwei Li     { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 },
20842c71d02eSWeiwei Li     { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
20852c71d02eSWeiwei Li     { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 },
20862c71d02eSWeiwei Li     { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 },
20872c71d02eSWeiwei Li     { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 },
2088d397be9aSRichard Henderson     { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2089d397be9aSRichard Henderson     { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
209032b2d75bSWeiwei Li     { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
209132b2d75bSWeiwei Li     { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
209232b2d75bSWeiwei Li     { "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
209332b2d75bSWeiwei Li     { "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
209432b2d75bSWeiwei Li     { "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 },
209532b2d75bSWeiwei Li     { "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 },
209632b2d75bSWeiwei Li     { "flh", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 },
209732b2d75bSWeiwei Li     { "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 },
209832b2d75bSWeiwei Li     { "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 },
209932b2d75bSWeiwei Li     { "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
2100a47842d1SChristoph Müllner     { "fli.s", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 },
2101a47842d1SChristoph Müllner     { "fli.d", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 },
2102a47842d1SChristoph Müllner     { "fli.q", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 },
2103a47842d1SChristoph Müllner     { "fli.h", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 },
2104a47842d1SChristoph Müllner     { "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2105a47842d1SChristoph Müllner     { "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2106a47842d1SChristoph Müllner     { "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2107a47842d1SChristoph Müllner     { "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2108a47842d1SChristoph Müllner     { "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2109a47842d1SChristoph Müllner     { "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2110a47842d1SChristoph Müllner     { "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2111a47842d1SChristoph Müllner     { "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 },
2112a47842d1SChristoph Müllner     { "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2113a47842d1SChristoph Müllner     { "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2114a47842d1SChristoph Müllner     { "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2115a47842d1SChristoph Müllner     { "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2116a47842d1SChristoph Müllner     { "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2117a47842d1SChristoph Müllner     { "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2118a47842d1SChristoph Müllner     { "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2119a47842d1SChristoph Müllner     { "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 },
2120a47842d1SChristoph Müllner     { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 },
2121a47842d1SChristoph Müllner     { "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
2122a47842d1SChristoph Müllner     { "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 },
2123a47842d1SChristoph Müllner     { "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 },
2124a47842d1SChristoph Müllner     { "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 },
2125a47842d1SChristoph Müllner     { "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2126a47842d1SChristoph Müllner     { "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2127a47842d1SChristoph Müllner     { "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2128a47842d1SChristoph Müllner     { "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2129a47842d1SChristoph Müllner     { "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2130a47842d1SChristoph Müllner     { "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2131a47842d1SChristoph Müllner     { "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
2132a47842d1SChristoph Müllner     { "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 },
21339d92f56dSMax Chou     { "vaesdf.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21349d92f56dSMax Chou     { "vaesdf.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21359d92f56dSMax Chou     { "vaesdm.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21369d92f56dSMax Chou     { "vaesdm.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21379d92f56dSMax Chou     { "vaesef.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21389d92f56dSMax Chou     { "vaesef.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21399d92f56dSMax Chou     { "vaesem.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21409d92f56dSMax Chou     { "vaesem.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21419d92f56dSMax Chou     { "vaeskf1.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 },
21429d92f56dSMax Chou     { "vaeskf2.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 },
21439d92f56dSMax Chou     { "vaesz.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21449d92f56dSMax Chou     { "vandn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21459d92f56dSMax Chou     { "vandn.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21469d92f56dSMax Chou     { "vbrev.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21479d92f56dSMax Chou     { "vbrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21489d92f56dSMax Chou     { "vclmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21499d92f56dSMax Chou     { "vclmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21509d92f56dSMax Chou     { "vclmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21519d92f56dSMax Chou     { "vclmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21529d92f56dSMax Chou     { "vclz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21539d92f56dSMax Chou     { "vcpop.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21549d92f56dSMax Chou     { "vctz.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21559d92f56dSMax Chou     { "vghsh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21569d92f56dSMax Chou     { "vgmul.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21579d92f56dSMax Chou     { "vrev8.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 },
21589d92f56dSMax Chou     { "vrol.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21599d92f56dSMax Chou     { "vrol.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21609d92f56dSMax Chou     { "vror.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21619d92f56dSMax Chou     { "vror.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21629d92f56dSMax Chou     { "vror.vi", rv_codec_vror_vi, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
21639d92f56dSMax Chou     { "vsha2ch.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21649d92f56dSMax Chou     { "vsha2cl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21659d92f56dSMax Chou     { "vsha2ms.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21669d92f56dSMax Chou     { "vsm3c.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 },
21679d92f56dSMax Chou     { "vsm3me.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 },
21689d92f56dSMax Chou     { "vsm4k.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm, NULL, 0, 0, 0 },
21699d92f56dSMax Chou     { "vsm4r.vv", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21709d92f56dSMax Chou     { "vsm4r.vs", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 },
21719d92f56dSMax Chou     { "vwsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 },
21729d92f56dSMax Chou     { "vwsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 },
21739d92f56dSMax Chou     { "vwsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 },
21746c848c19SRob Bradford     { "amocas.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
21756c848c19SRob Bradford     { "amocas.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
21766c848c19SRob Bradford     { "amocas.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2177d98883d1SLIU Zhiwei     { "mop.r.0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2178d98883d1SLIU Zhiwei     { "mop.r.1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2179d98883d1SLIU Zhiwei     { "mop.r.2", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2180d98883d1SLIU Zhiwei     { "mop.r.3", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2181d98883d1SLIU Zhiwei     { "mop.r.4", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2182d98883d1SLIU Zhiwei     { "mop.r.5", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2183d98883d1SLIU Zhiwei     { "mop.r.6", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2184d98883d1SLIU Zhiwei     { "mop.r.7", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2185d98883d1SLIU Zhiwei     { "mop.r.8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2186d98883d1SLIU Zhiwei     { "mop.r.9", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2187d98883d1SLIU Zhiwei     { "mop.r.10", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2188d98883d1SLIU Zhiwei     { "mop.r.11", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2189d98883d1SLIU Zhiwei     { "mop.r.12", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2190d98883d1SLIU Zhiwei     { "mop.r.13", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2191d98883d1SLIU Zhiwei     { "mop.r.14", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2192d98883d1SLIU Zhiwei     { "mop.r.15", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2193d98883d1SLIU Zhiwei     { "mop.r.16", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2194d98883d1SLIU Zhiwei     { "mop.r.17", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2195d98883d1SLIU Zhiwei     { "mop.r.18", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2196d98883d1SLIU Zhiwei     { "mop.r.19", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2197d98883d1SLIU Zhiwei     { "mop.r.20", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2198d98883d1SLIU Zhiwei     { "mop.r.21", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2199d98883d1SLIU Zhiwei     { "mop.r.22", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2200d98883d1SLIU Zhiwei     { "mop.r.23", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2201d98883d1SLIU Zhiwei     { "mop.r.24", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2202d98883d1SLIU Zhiwei     { "mop.r.25", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2203d98883d1SLIU Zhiwei     { "mop.r.26", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2204d98883d1SLIU Zhiwei     { "mop.r.27", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2205d98883d1SLIU Zhiwei     { "mop.r.28", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2206d98883d1SLIU Zhiwei     { "mop.r.29", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2207d98883d1SLIU Zhiwei     { "mop.r.30", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2208d98883d1SLIU Zhiwei     { "mop.r.31", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 },
2209d98883d1SLIU Zhiwei     { "mop.rr.0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2210d98883d1SLIU Zhiwei     { "mop.rr.1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2211d98883d1SLIU Zhiwei     { "mop.rr.2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2212d98883d1SLIU Zhiwei     { "mop.rr.3", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2213d98883d1SLIU Zhiwei     { "mop.rr.4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2214d98883d1SLIU Zhiwei     { "mop.rr.5", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2215d98883d1SLIU Zhiwei     { "mop.rr.6", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
2216d98883d1SLIU Zhiwei     { "mop.rr.7", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
221767e98ebaSLIU Zhiwei     { "c.mop.1", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
221867e98ebaSLIU Zhiwei     { "c.mop.3", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
221967e98ebaSLIU Zhiwei     { "c.mop.5", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
222067e98ebaSLIU Zhiwei     { "c.mop.7", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
222167e98ebaSLIU Zhiwei     { "c.mop.9", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
222267e98ebaSLIU Zhiwei     { "c.mop.11", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
222367e98ebaSLIU Zhiwei     { "c.mop.13", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
222467e98ebaSLIU Zhiwei     { "c.mop.15", rv_codec_ci_none, rv_fmt_none, NULL, 0, 0, 0 },
2225ae4bdcefSLIU Zhiwei     { "amoswap.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2226ae4bdcefSLIU Zhiwei     { "amoadd.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2227ae4bdcefSLIU Zhiwei     { "amoxor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2228ae4bdcefSLIU Zhiwei     { "amoor.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2229ae4bdcefSLIU Zhiwei     { "amoand.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2230ae4bdcefSLIU Zhiwei     { "amomin.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2231ae4bdcefSLIU Zhiwei     { "amomax.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2232ae4bdcefSLIU Zhiwei     { "amominu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2233ae4bdcefSLIU Zhiwei     { "amomaxu.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2234ae4bdcefSLIU Zhiwei     { "amoswap.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2235ae4bdcefSLIU Zhiwei     { "amoadd.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2236ae4bdcefSLIU Zhiwei     { "amoxor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2237ae4bdcefSLIU Zhiwei     { "amoor.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2238ae4bdcefSLIU Zhiwei     { "amoand.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2239ae4bdcefSLIU Zhiwei     { "amomin.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2240ae4bdcefSLIU Zhiwei     { "amomax.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2241ae4bdcefSLIU Zhiwei     { "amominu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2242ae4bdcefSLIU Zhiwei     { "amomaxu.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2243ae4bdcefSLIU Zhiwei     { "amocas.b", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2244ae4bdcefSLIU Zhiwei     { "amocas.h", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
22454d46d84eSBalaji Ravikumar     { "wrs.sto", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
22464d46d84eSBalaji Ravikumar     { "wrs.nto", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 },
22475e761bd6SDeepak Gupta     { "lpad", rv_codec_lp, rv_fmt_imm, NULL, 0, 0, 0 },
2248b9080d07SDeepak Gupta     { "sspush", rv_codec_r, rv_fmt_rs2, NULL, 0, 0, 0 },
2249b9080d07SDeepak Gupta     { "sspopchk", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 },
2250b9080d07SDeepak Gupta     { "ssrdp", rv_codec_r, rv_fmt_rd, NULL, 0, 0, 0 },
2251b9080d07SDeepak Gupta     { "ssamoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2252b9080d07SDeepak Gupta     { "ssamoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 },
2253e75f9451SDeepak Gupta     { "c.sspush", rv_codec_cmop_ss, rv_fmt_rs2, NULL, rv_op_sspush,
2254e75f9451SDeepak Gupta       rv_op_sspush, 0 },
2255e75f9451SDeepak Gupta     { "c.sspopchk", rv_codec_cmop_ss, rv_fmt_rs1, NULL, rv_op_sspopchk,
2256e75f9451SDeepak Gupta       rv_op_sspopchk, 0 },
2257ea103259SMichael Clark };
2258ea103259SMichael Clark 
2259ea103259SMichael Clark /* CSR names */
2260ea103259SMichael Clark 
csr_name(int csrno)2261ea103259SMichael Clark static const char *csr_name(int csrno)
2262ea103259SMichael Clark {
2263ea103259SMichael Clark     switch (csrno) {
2264ea103259SMichael Clark     case 0x0000: return "ustatus";
2265ea103259SMichael Clark     case 0x0001: return "fflags";
2266ea103259SMichael Clark     case 0x0002: return "frm";
2267ea103259SMichael Clark     case 0x0003: return "fcsr";
2268ea103259SMichael Clark     case 0x0004: return "uie";
2269ea103259SMichael Clark     case 0x0005: return "utvec";
227007f4964dSYang Liu     case 0x0008: return "vstart";
227107f4964dSYang Liu     case 0x0009: return "vxsat";
227207f4964dSYang Liu     case 0x000a: return "vxrm";
227307f4964dSYang Liu     case 0x000f: return "vcsr";
2274b9080d07SDeepak Gupta     case 0x0011: return "ssp";
22755748c886SWeiwei Li     case 0x0015: return "seed";
22762c71d02eSWeiwei Li     case 0x0017: return "jvt";
2277ea103259SMichael Clark     case 0x0040: return "uscratch";
2278ea103259SMichael Clark     case 0x0041: return "uepc";
2279ea103259SMichael Clark     case 0x0042: return "ucause";
2280ea103259SMichael Clark     case 0x0043: return "utval";
2281ea103259SMichael Clark     case 0x0044: return "uip";
2282ea103259SMichael Clark     case 0x0100: return "sstatus";
2283ea103259SMichael Clark     case 0x0104: return "sie";
2284ea103259SMichael Clark     case 0x0105: return "stvec";
2285ea103259SMichael Clark     case 0x0106: return "scounteren";
2286ea103259SMichael Clark     case 0x0140: return "sscratch";
2287ea103259SMichael Clark     case 0x0141: return "sepc";
2288ea103259SMichael Clark     case 0x0142: return "scause";
2289ea103259SMichael Clark     case 0x0143: return "stval";
2290ea103259SMichael Clark     case 0x0144: return "sip";
2291ea103259SMichael Clark     case 0x0180: return "satp";
2292ea103259SMichael Clark     case 0x0200: return "hstatus";
2293ea103259SMichael Clark     case 0x0202: return "hedeleg";
2294ea103259SMichael Clark     case 0x0203: return "hideleg";
2295ea103259SMichael Clark     case 0x0204: return "hie";
2296ea103259SMichael Clark     case 0x0205: return "htvec";
2297ea103259SMichael Clark     case 0x0240: return "hscratch";
2298ea103259SMichael Clark     case 0x0241: return "hepc";
2299ea103259SMichael Clark     case 0x0242: return "hcause";
2300ea103259SMichael Clark     case 0x0243: return "hbadaddr";
2301ea103259SMichael Clark     case 0x0244: return "hip";
2302ea103259SMichael Clark     case 0x0300: return "mstatus";
2303ea103259SMichael Clark     case 0x0301: return "misa";
2304ea103259SMichael Clark     case 0x0302: return "medeleg";
2305ea103259SMichael Clark     case 0x0303: return "mideleg";
2306ea103259SMichael Clark     case 0x0304: return "mie";
2307ea103259SMichael Clark     case 0x0305: return "mtvec";
2308ea103259SMichael Clark     case 0x0306: return "mcounteren";
2309ea103259SMichael Clark     case 0x0320: return "mucounteren";
2310ea103259SMichael Clark     case 0x0321: return "mscounteren";
2311ea103259SMichael Clark     case 0x0322: return "mhcounteren";
2312ea103259SMichael Clark     case 0x0323: return "mhpmevent3";
2313ea103259SMichael Clark     case 0x0324: return "mhpmevent4";
2314ea103259SMichael Clark     case 0x0325: return "mhpmevent5";
2315ea103259SMichael Clark     case 0x0326: return "mhpmevent6";
2316ea103259SMichael Clark     case 0x0327: return "mhpmevent7";
2317ea103259SMichael Clark     case 0x0328: return "mhpmevent8";
2318ea103259SMichael Clark     case 0x0329: return "mhpmevent9";
2319ea103259SMichael Clark     case 0x032a: return "mhpmevent10";
2320ea103259SMichael Clark     case 0x032b: return "mhpmevent11";
2321ea103259SMichael Clark     case 0x032c: return "mhpmevent12";
2322ea103259SMichael Clark     case 0x032d: return "mhpmevent13";
2323ea103259SMichael Clark     case 0x032e: return "mhpmevent14";
2324ea103259SMichael Clark     case 0x032f: return "mhpmevent15";
2325ea103259SMichael Clark     case 0x0330: return "mhpmevent16";
2326ea103259SMichael Clark     case 0x0331: return "mhpmevent17";
2327ea103259SMichael Clark     case 0x0332: return "mhpmevent18";
2328ea103259SMichael Clark     case 0x0333: return "mhpmevent19";
2329ea103259SMichael Clark     case 0x0334: return "mhpmevent20";
2330ea103259SMichael Clark     case 0x0335: return "mhpmevent21";
2331ea103259SMichael Clark     case 0x0336: return "mhpmevent22";
2332ea103259SMichael Clark     case 0x0337: return "mhpmevent23";
2333ea103259SMichael Clark     case 0x0338: return "mhpmevent24";
2334ea103259SMichael Clark     case 0x0339: return "mhpmevent25";
2335ea103259SMichael Clark     case 0x033a: return "mhpmevent26";
2336ea103259SMichael Clark     case 0x033b: return "mhpmevent27";
2337ea103259SMichael Clark     case 0x033c: return "mhpmevent28";
2338ea103259SMichael Clark     case 0x033d: return "mhpmevent29";
2339ea103259SMichael Clark     case 0x033e: return "mhpmevent30";
2340ea103259SMichael Clark     case 0x033f: return "mhpmevent31";
2341ea103259SMichael Clark     case 0x0340: return "mscratch";
2342ea103259SMichael Clark     case 0x0341: return "mepc";
2343ea103259SMichael Clark     case 0x0342: return "mcause";
2344ea103259SMichael Clark     case 0x0343: return "mtval";
2345ea103259SMichael Clark     case 0x0344: return "mip";
2346ea103259SMichael Clark     case 0x0380: return "mbase";
2347ea103259SMichael Clark     case 0x0381: return "mbound";
2348ea103259SMichael Clark     case 0x0382: return "mibase";
2349ea103259SMichael Clark     case 0x0383: return "mibound";
2350ea103259SMichael Clark     case 0x0384: return "mdbase";
2351ea103259SMichael Clark     case 0x0385: return "mdbound";
2352915758c5SAlistair Francis     case 0x03a0: return "pmpcfg0";
2353915758c5SAlistair Francis     case 0x03a1: return "pmpcfg1";
2354915758c5SAlistair Francis     case 0x03a2: return "pmpcfg2";
2355915758c5SAlistair Francis     case 0x03a3: return "pmpcfg3";
2356915758c5SAlistair Francis     case 0x03a4: return "pmpcfg4";
2357915758c5SAlistair Francis     case 0x03a5: return "pmpcfg5";
2358915758c5SAlistair Francis     case 0x03a6: return "pmpcfg6";
2359915758c5SAlistair Francis     case 0x03a7: return "pmpcfg7";
2360915758c5SAlistair Francis     case 0x03a8: return "pmpcfg8";
2361915758c5SAlistair Francis     case 0x03a9: return "pmpcfg9";
2362915758c5SAlistair Francis     case 0x03aa: return "pmpcfg10";
2363915758c5SAlistair Francis     case 0x03ab: return "pmpcfg11";
2364915758c5SAlistair Francis     case 0x03ac: return "pmpcfg12";
2365915758c5SAlistair Francis     case 0x03ad: return "pmpcfg13";
2366915758c5SAlistair Francis     case 0x03ae: return "pmpcfg14";
2367915758c5SAlistair Francis     case 0x03af: return "pmpcfg15";
2368ea103259SMichael Clark     case 0x03b0: return "pmpaddr0";
2369ea103259SMichael Clark     case 0x03b1: return "pmpaddr1";
2370ea103259SMichael Clark     case 0x03b2: return "pmpaddr2";
2371ea103259SMichael Clark     case 0x03b3: return "pmpaddr3";
2372ea103259SMichael Clark     case 0x03b4: return "pmpaddr4";
2373ea103259SMichael Clark     case 0x03b5: return "pmpaddr5";
2374ea103259SMichael Clark     case 0x03b6: return "pmpaddr6";
2375ea103259SMichael Clark     case 0x03b7: return "pmpaddr7";
2376ea103259SMichael Clark     case 0x03b8: return "pmpaddr8";
2377ea103259SMichael Clark     case 0x03b9: return "pmpaddr9";
2378ea103259SMichael Clark     case 0x03ba: return "pmpaddr10";
2379ea103259SMichael Clark     case 0x03bb: return "pmpaddr11";
2380ea103259SMichael Clark     case 0x03bc: return "pmpaddr12";
2381cffa9954SAlvin Chang     case 0x03bd: return "pmpaddr13";
2382cffa9954SAlvin Chang     case 0x03be: return "pmpaddr14";
2383ea103259SMichael Clark     case 0x03bf: return "pmpaddr15";
2384915758c5SAlistair Francis     case 0x03c0: return "pmpaddr16";
2385915758c5SAlistair Francis     case 0x03c1: return "pmpaddr17";
2386915758c5SAlistair Francis     case 0x03c2: return "pmpaddr18";
2387915758c5SAlistair Francis     case 0x03c3: return "pmpaddr19";
2388915758c5SAlistair Francis     case 0x03c4: return "pmpaddr20";
2389915758c5SAlistair Francis     case 0x03c5: return "pmpaddr21";
2390915758c5SAlistair Francis     case 0x03c6: return "pmpaddr22";
2391915758c5SAlistair Francis     case 0x03c7: return "pmpaddr23";
2392915758c5SAlistair Francis     case 0x03c8: return "pmpaddr24";
2393915758c5SAlistair Francis     case 0x03c9: return "pmpaddr25";
2394915758c5SAlistair Francis     case 0x03ca: return "pmpaddr26";
2395915758c5SAlistair Francis     case 0x03cb: return "pmpaddr27";
2396915758c5SAlistair Francis     case 0x03cc: return "pmpaddr28";
2397915758c5SAlistair Francis     case 0x03cd: return "pmpaddr29";
2398915758c5SAlistair Francis     case 0x03ce: return "pmpaddr30";
2399915758c5SAlistair Francis     case 0x03cf: return "pmpaddr31";
2400915758c5SAlistair Francis     case 0x03d0: return "pmpaddr32";
2401915758c5SAlistair Francis     case 0x03d1: return "pmpaddr33";
2402915758c5SAlistair Francis     case 0x03d2: return "pmpaddr34";
2403915758c5SAlistair Francis     case 0x03d3: return "pmpaddr35";
2404915758c5SAlistair Francis     case 0x03d4: return "pmpaddr36";
2405915758c5SAlistair Francis     case 0x03d5: return "pmpaddr37";
2406915758c5SAlistair Francis     case 0x03d6: return "pmpaddr38";
2407915758c5SAlistair Francis     case 0x03d7: return "pmpaddr39";
2408915758c5SAlistair Francis     case 0x03d8: return "pmpaddr40";
2409915758c5SAlistair Francis     case 0x03d9: return "pmpaddr41";
2410915758c5SAlistair Francis     case 0x03da: return "pmpaddr42";
2411915758c5SAlistair Francis     case 0x03db: return "pmpaddr43";
2412915758c5SAlistair Francis     case 0x03dc: return "pmpaddr44";
2413915758c5SAlistair Francis     case 0x03dd: return "pmpaddr45";
2414915758c5SAlistair Francis     case 0x03de: return "pmpaddr46";
2415915758c5SAlistair Francis     case 0x03df: return "pmpaddr47";
2416915758c5SAlistair Francis     case 0x03e0: return "pmpaddr48";
2417915758c5SAlistair Francis     case 0x03e1: return "pmpaddr49";
2418915758c5SAlistair Francis     case 0x03e2: return "pmpaddr50";
2419915758c5SAlistair Francis     case 0x03e3: return "pmpaddr51";
2420915758c5SAlistair Francis     case 0x03e4: return "pmpaddr52";
2421915758c5SAlistair Francis     case 0x03e5: return "pmpaddr53";
2422915758c5SAlistair Francis     case 0x03e6: return "pmpaddr54";
2423915758c5SAlistair Francis     case 0x03e7: return "pmpaddr55";
2424915758c5SAlistair Francis     case 0x03e8: return "pmpaddr56";
2425915758c5SAlistair Francis     case 0x03e9: return "pmpaddr57";
2426915758c5SAlistair Francis     case 0x03ea: return "pmpaddr58";
2427915758c5SAlistair Francis     case 0x03eb: return "pmpaddr59";
2428915758c5SAlistair Francis     case 0x03ec: return "pmpaddr60";
2429915758c5SAlistair Francis     case 0x03ed: return "pmpaddr61";
2430915758c5SAlistair Francis     case 0x03ee: return "pmpaddr62";
2431915758c5SAlistair Francis     case 0x03ef: return "pmpaddr63";
2432ea103259SMichael Clark     case 0x0780: return "mtohost";
2433ea103259SMichael Clark     case 0x0781: return "mfromhost";
2434ea103259SMichael Clark     case 0x0782: return "mreset";
2435ea103259SMichael Clark     case 0x0783: return "mipi";
2436ea103259SMichael Clark     case 0x0784: return "miobase";
2437ea103259SMichael Clark     case 0x07a0: return "tselect";
2438ea103259SMichael Clark     case 0x07a1: return "tdata1";
2439ea103259SMichael Clark     case 0x07a2: return "tdata2";
2440ea103259SMichael Clark     case 0x07a3: return "tdata3";
2441*81819038SRob Bradford     case 0x07a4: return "tinfo";
2442ea103259SMichael Clark     case 0x07b0: return "dcsr";
2443ea103259SMichael Clark     case 0x07b1: return "dpc";
2444*81819038SRob Bradford     case 0x07b2: return "dscratch0";
2445*81819038SRob Bradford     case 0x07b3: return "dscratch1";
2446ea103259SMichael Clark     case 0x0b00: return "mcycle";
2447ea103259SMichael Clark     case 0x0b01: return "mtime";
2448ea103259SMichael Clark     case 0x0b02: return "minstret";
2449ea103259SMichael Clark     case 0x0b03: return "mhpmcounter3";
2450ea103259SMichael Clark     case 0x0b04: return "mhpmcounter4";
2451ea103259SMichael Clark     case 0x0b05: return "mhpmcounter5";
2452ea103259SMichael Clark     case 0x0b06: return "mhpmcounter6";
2453ea103259SMichael Clark     case 0x0b07: return "mhpmcounter7";
2454ea103259SMichael Clark     case 0x0b08: return "mhpmcounter8";
2455ea103259SMichael Clark     case 0x0b09: return "mhpmcounter9";
2456ea103259SMichael Clark     case 0x0b0a: return "mhpmcounter10";
2457ea103259SMichael Clark     case 0x0b0b: return "mhpmcounter11";
2458ea103259SMichael Clark     case 0x0b0c: return "mhpmcounter12";
2459ea103259SMichael Clark     case 0x0b0d: return "mhpmcounter13";
2460ea103259SMichael Clark     case 0x0b0e: return "mhpmcounter14";
2461ea103259SMichael Clark     case 0x0b0f: return "mhpmcounter15";
2462ea103259SMichael Clark     case 0x0b10: return "mhpmcounter16";
2463ea103259SMichael Clark     case 0x0b11: return "mhpmcounter17";
2464ea103259SMichael Clark     case 0x0b12: return "mhpmcounter18";
2465ea103259SMichael Clark     case 0x0b13: return "mhpmcounter19";
2466ea103259SMichael Clark     case 0x0b14: return "mhpmcounter20";
2467ea103259SMichael Clark     case 0x0b15: return "mhpmcounter21";
2468ea103259SMichael Clark     case 0x0b16: return "mhpmcounter22";
2469ea103259SMichael Clark     case 0x0b17: return "mhpmcounter23";
2470ea103259SMichael Clark     case 0x0b18: return "mhpmcounter24";
2471ea103259SMichael Clark     case 0x0b19: return "mhpmcounter25";
2472ea103259SMichael Clark     case 0x0b1a: return "mhpmcounter26";
2473ea103259SMichael Clark     case 0x0b1b: return "mhpmcounter27";
2474ea103259SMichael Clark     case 0x0b1c: return "mhpmcounter28";
2475ea103259SMichael Clark     case 0x0b1d: return "mhpmcounter29";
2476ea103259SMichael Clark     case 0x0b1e: return "mhpmcounter30";
2477ea103259SMichael Clark     case 0x0b1f: return "mhpmcounter31";
2478ea103259SMichael Clark     case 0x0b80: return "mcycleh";
2479ea103259SMichael Clark     case 0x0b81: return "mtimeh";
2480ea103259SMichael Clark     case 0x0b82: return "minstreth";
2481ea103259SMichael Clark     case 0x0b83: return "mhpmcounter3h";
2482ea103259SMichael Clark     case 0x0b84: return "mhpmcounter4h";
2483ea103259SMichael Clark     case 0x0b85: return "mhpmcounter5h";
2484ea103259SMichael Clark     case 0x0b86: return "mhpmcounter6h";
2485ea103259SMichael Clark     case 0x0b87: return "mhpmcounter7h";
2486ea103259SMichael Clark     case 0x0b88: return "mhpmcounter8h";
2487ea103259SMichael Clark     case 0x0b89: return "mhpmcounter9h";
2488ea103259SMichael Clark     case 0x0b8a: return "mhpmcounter10h";
2489ea103259SMichael Clark     case 0x0b8b: return "mhpmcounter11h";
2490ea103259SMichael Clark     case 0x0b8c: return "mhpmcounter12h";
2491ea103259SMichael Clark     case 0x0b8d: return "mhpmcounter13h";
2492ea103259SMichael Clark     case 0x0b8e: return "mhpmcounter14h";
2493ea103259SMichael Clark     case 0x0b8f: return "mhpmcounter15h";
2494ea103259SMichael Clark     case 0x0b90: return "mhpmcounter16h";
2495ea103259SMichael Clark     case 0x0b91: return "mhpmcounter17h";
2496ea103259SMichael Clark     case 0x0b92: return "mhpmcounter18h";
2497ea103259SMichael Clark     case 0x0b93: return "mhpmcounter19h";
2498ea103259SMichael Clark     case 0x0b94: return "mhpmcounter20h";
2499ea103259SMichael Clark     case 0x0b95: return "mhpmcounter21h";
2500ea103259SMichael Clark     case 0x0b96: return "mhpmcounter22h";
2501ea103259SMichael Clark     case 0x0b97: return "mhpmcounter23h";
2502ea103259SMichael Clark     case 0x0b98: return "mhpmcounter24h";
2503ea103259SMichael Clark     case 0x0b99: return "mhpmcounter25h";
2504ea103259SMichael Clark     case 0x0b9a: return "mhpmcounter26h";
2505ea103259SMichael Clark     case 0x0b9b: return "mhpmcounter27h";
2506ea103259SMichael Clark     case 0x0b9c: return "mhpmcounter28h";
2507ea103259SMichael Clark     case 0x0b9d: return "mhpmcounter29h";
2508ea103259SMichael Clark     case 0x0b9e: return "mhpmcounter30h";
2509ea103259SMichael Clark     case 0x0b9f: return "mhpmcounter31h";
2510ea103259SMichael Clark     case 0x0c00: return "cycle";
2511ea103259SMichael Clark     case 0x0c01: return "time";
2512ea103259SMichael Clark     case 0x0c02: return "instret";
251307f4964dSYang Liu     case 0x0c20: return "vl";
251407f4964dSYang Liu     case 0x0c21: return "vtype";
251507f4964dSYang Liu     case 0x0c22: return "vlenb";
2516ea103259SMichael Clark     case 0x0c80: return "cycleh";
2517ea103259SMichael Clark     case 0x0c81: return "timeh";
2518ea103259SMichael Clark     case 0x0c82: return "instreth";
2519ea103259SMichael Clark     case 0x0d00: return "scycle";
2520ea103259SMichael Clark     case 0x0d01: return "stime";
2521ea103259SMichael Clark     case 0x0d02: return "sinstret";
2522ea103259SMichael Clark     case 0x0d80: return "scycleh";
2523ea103259SMichael Clark     case 0x0d81: return "stimeh";
2524ea103259SMichael Clark     case 0x0d82: return "sinstreth";
2525ea103259SMichael Clark     case 0x0e00: return "hcycle";
2526ea103259SMichael Clark     case 0x0e01: return "htime";
2527ea103259SMichael Clark     case 0x0e02: return "hinstret";
2528ea103259SMichael Clark     case 0x0e80: return "hcycleh";
2529ea103259SMichael Clark     case 0x0e81: return "htimeh";
2530ea103259SMichael Clark     case 0x0e82: return "hinstreth";
2531ea103259SMichael Clark     case 0x0f11: return "mvendorid";
2532ea103259SMichael Clark     case 0x0f12: return "marchid";
2533ea103259SMichael Clark     case 0x0f13: return "mimpid";
2534ea103259SMichael Clark     case 0x0f14: return "mhartid";
2535ea103259SMichael Clark     default: return NULL;
2536ea103259SMichael Clark     }
2537ea103259SMichael Clark }
2538ea103259SMichael Clark 
2539ea103259SMichael Clark /* decode opcode */
2540ea103259SMichael Clark 
decode_inst_opcode(rv_decode * dec,rv_isa isa)2541ea103259SMichael Clark static void decode_inst_opcode(rv_decode *dec, rv_isa isa)
2542ea103259SMichael Clark {
2543ea103259SMichael Clark     rv_inst inst = dec->inst;
2544ea103259SMichael Clark     rv_opcode op = rv_op_illegal;
25453bd87176SWeiwei Li     switch ((inst >> 0) & 0b11) {
2546ea103259SMichael Clark     case 0:
25473bd87176SWeiwei Li         switch ((inst >> 13) & 0b111) {
2548ea103259SMichael Clark         case 0: op = rv_op_c_addi4spn; break;
2549ea103259SMichael Clark         case 1:
2550ea103259SMichael Clark             if (isa == rv128) {
2551ea103259SMichael Clark                 op = rv_op_c_lq;
2552ea103259SMichael Clark             } else {
2553ea103259SMichael Clark                 op = rv_op_c_fld;
2554ea103259SMichael Clark             }
2555ea103259SMichael Clark             break;
2556ea103259SMichael Clark         case 2: op = rv_op_c_lw; break;
2557ea103259SMichael Clark         case 3:
2558ea103259SMichael Clark             if (isa == rv32) {
2559ea103259SMichael Clark                 op = rv_op_c_flw;
2560ea103259SMichael Clark             } else {
2561ea103259SMichael Clark                 op = rv_op_c_ld;
2562ea103259SMichael Clark             }
2563ea103259SMichael Clark             break;
25642c71d02eSWeiwei Li         case 4:
25652c71d02eSWeiwei Li             switch ((inst >> 10) & 0b111) {
25662c71d02eSWeiwei Li             case 0: op = rv_op_c_lbu; break;
25672c71d02eSWeiwei Li             case 1:
25682c71d02eSWeiwei Li                 if (((inst >> 6) & 1) == 0) {
25692c71d02eSWeiwei Li                     op = rv_op_c_lhu;
25702c71d02eSWeiwei Li                 } else {
25712c71d02eSWeiwei Li                     op = rv_op_c_lh;
25722c71d02eSWeiwei Li                 }
25732c71d02eSWeiwei Li                 break;
25742c71d02eSWeiwei Li             case 2: op = rv_op_c_sb; break;
25752c71d02eSWeiwei Li             case 3:
25762c71d02eSWeiwei Li                 if (((inst >> 6) & 1) == 0) {
25772c71d02eSWeiwei Li                     op = rv_op_c_sh;
25782c71d02eSWeiwei Li                 }
25792c71d02eSWeiwei Li                 break;
25802c71d02eSWeiwei Li             }
25812c71d02eSWeiwei Li             break;
2582ea103259SMichael Clark         case 5:
2583ea103259SMichael Clark             if (isa == rv128) {
2584ea103259SMichael Clark                 op = rv_op_c_sq;
2585ea103259SMichael Clark             } else {
2586ea103259SMichael Clark                 op = rv_op_c_fsd;
2587ea103259SMichael Clark             }
2588ea103259SMichael Clark             break;
2589ea103259SMichael Clark         case 6: op = rv_op_c_sw; break;
2590ea103259SMichael Clark         case 7:
2591ea103259SMichael Clark             if (isa == rv32) {
2592ea103259SMichael Clark                 op = rv_op_c_fsw;
2593ea103259SMichael Clark             } else {
2594ea103259SMichael Clark                 op = rv_op_c_sd;
2595ea103259SMichael Clark             }
2596ea103259SMichael Clark             break;
2597ea103259SMichael Clark         }
2598ea103259SMichael Clark         break;
2599ea103259SMichael Clark     case 1:
26003bd87176SWeiwei Li         switch ((inst >> 13) & 0b111) {
2601ea103259SMichael Clark         case 0:
26023bd87176SWeiwei Li             switch ((inst >> 2) & 0b11111111111) {
2603ea103259SMichael Clark             case 0: op = rv_op_c_nop; break;
2604ea103259SMichael Clark             default: op = rv_op_c_addi; break;
2605ea103259SMichael Clark             }
2606ea103259SMichael Clark             break;
2607ea103259SMichael Clark         case 1:
2608ea103259SMichael Clark             if (isa == rv32) {
2609ea103259SMichael Clark                 op = rv_op_c_jal;
2610ea103259SMichael Clark             } else {
2611ea103259SMichael Clark                 op = rv_op_c_addiw;
2612ea103259SMichael Clark             }
2613ea103259SMichael Clark             break;
2614ea103259SMichael Clark         case 2: op = rv_op_c_li; break;
2615ea103259SMichael Clark         case 3:
2616f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zcmop) {
261767e98ebaSLIU Zhiwei                 if ((((inst >> 2) & 0b111111) == 0b100000) &&
261867e98ebaSLIU Zhiwei                     (((inst >> 11) & 0b11) == 0b0)) {
2619e75f9451SDeepak Gupta                     unsigned int cmop_code = 0;
2620e75f9451SDeepak Gupta                     cmop_code = ((inst >> 8) & 0b111);
2621e75f9451SDeepak Gupta                     op = rv_c_mop_1 + cmop_code;
2622e75f9451SDeepak Gupta                     if (dec->cfg->ext_zicfiss) {
2623e75f9451SDeepak Gupta                         op = (cmop_code == 0) ? rv_op_c_sspush : op;
2624e75f9451SDeepak Gupta                         op = (cmop_code == 2) ? rv_op_c_sspopchk : op;
2625e75f9451SDeepak Gupta                     }
262667e98ebaSLIU Zhiwei                     break;
262767e98ebaSLIU Zhiwei                 }
262867e98ebaSLIU Zhiwei             }
26293bd87176SWeiwei Li             switch ((inst >> 7) & 0b11111) {
2630ea103259SMichael Clark             case 2: op = rv_op_c_addi16sp; break;
2631ea103259SMichael Clark             default: op = rv_op_c_lui; break;
2632ea103259SMichael Clark             }
2633ea103259SMichael Clark             break;
2634ea103259SMichael Clark         case 4:
26353bd87176SWeiwei Li             switch ((inst >> 10) & 0b11) {
2636ea103259SMichael Clark             case 0:
2637ea103259SMichael Clark                 op = rv_op_c_srli;
2638ea103259SMichael Clark                 break;
2639ea103259SMichael Clark             case 1:
2640ea103259SMichael Clark                 op = rv_op_c_srai;
2641ea103259SMichael Clark                 break;
2642ea103259SMichael Clark             case 2: op = rv_op_c_andi; break;
2643ea103259SMichael Clark             case 3:
2644ea103259SMichael Clark                 switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) {
2645ea103259SMichael Clark                 case 0: op = rv_op_c_sub; break;
2646ea103259SMichael Clark                 case 1: op = rv_op_c_xor; break;
2647ea103259SMichael Clark                 case 2: op = rv_op_c_or; break;
2648ea103259SMichael Clark                 case 3: op = rv_op_c_and; break;
2649ea103259SMichael Clark                 case 4: op = rv_op_c_subw; break;
2650ea103259SMichael Clark                 case 5: op = rv_op_c_addw; break;
26512c71d02eSWeiwei Li                 case 6: op = rv_op_c_mul; break;
26522c71d02eSWeiwei Li                 case 7:
26532c71d02eSWeiwei Li                     switch ((inst >> 2) & 0b111) {
26542c71d02eSWeiwei Li                     case 0: op = rv_op_c_zext_b; break;
26552c71d02eSWeiwei Li                     case 1: op = rv_op_c_sext_b; break;
26562c71d02eSWeiwei Li                     case 2: op = rv_op_c_zext_h; break;
26572c71d02eSWeiwei Li                     case 3: op = rv_op_c_sext_h; break;
26582c71d02eSWeiwei Li                     case 4: op = rv_op_c_zext_w; break;
26592c71d02eSWeiwei Li                     case 5: op = rv_op_c_not; break;
26602c71d02eSWeiwei Li                     }
26612c71d02eSWeiwei Li                     break;
2662ea103259SMichael Clark                 }
2663ea103259SMichael Clark                 break;
2664ea103259SMichael Clark             }
2665ea103259SMichael Clark             break;
2666ea103259SMichael Clark         case 5: op = rv_op_c_j; break;
2667ea103259SMichael Clark         case 6: op = rv_op_c_beqz; break;
2668ea103259SMichael Clark         case 7: op = rv_op_c_bnez; break;
2669ea103259SMichael Clark         }
2670ea103259SMichael Clark         break;
2671ea103259SMichael Clark     case 2:
26723bd87176SWeiwei Li         switch ((inst >> 13) & 0b111) {
2673ea103259SMichael Clark         case 0:
2674ea103259SMichael Clark             op = rv_op_c_slli;
2675ea103259SMichael Clark             break;
2676ea103259SMichael Clark         case 1:
2677ea103259SMichael Clark             if (isa == rv128) {
2678ea103259SMichael Clark                 op = rv_op_c_lqsp;
2679ea103259SMichael Clark             } else {
2680ea103259SMichael Clark                 op = rv_op_c_fldsp;
2681ea103259SMichael Clark             }
2682ea103259SMichael Clark             break;
2683ea103259SMichael Clark         case 2: op = rv_op_c_lwsp; break;
2684ea103259SMichael Clark         case 3:
2685ea103259SMichael Clark             if (isa == rv32) {
2686ea103259SMichael Clark                 op = rv_op_c_flwsp;
2687ea103259SMichael Clark             } else {
2688ea103259SMichael Clark                 op = rv_op_c_ldsp;
2689ea103259SMichael Clark             }
2690ea103259SMichael Clark             break;
2691ea103259SMichael Clark         case 4:
26923bd87176SWeiwei Li             switch ((inst >> 12) & 0b1) {
2693ea103259SMichael Clark             case 0:
26943bd87176SWeiwei Li                 switch ((inst >> 2) & 0b11111) {
2695ea103259SMichael Clark                 case 0: op = rv_op_c_jr; break;
2696ea103259SMichael Clark                 default: op = rv_op_c_mv; break;
2697ea103259SMichael Clark                 }
2698ea103259SMichael Clark                 break;
2699ea103259SMichael Clark             case 1:
27003bd87176SWeiwei Li                 switch ((inst >> 2) & 0b11111) {
2701ea103259SMichael Clark                 case 0:
27023bd87176SWeiwei Li                     switch ((inst >> 7) & 0b11111) {
2703ea103259SMichael Clark                     case 0: op = rv_op_c_ebreak; break;
2704ea103259SMichael Clark                     default: op = rv_op_c_jalr; break;
2705ea103259SMichael Clark                     }
2706ea103259SMichael Clark                     break;
2707ea103259SMichael Clark                 default: op = rv_op_c_add; break;
2708ea103259SMichael Clark                 }
2709ea103259SMichael Clark                 break;
2710ea103259SMichael Clark             }
2711ea103259SMichael Clark             break;
2712ea103259SMichael Clark         case 5:
2713ea103259SMichael Clark             if (isa == rv128) {
2714ea103259SMichael Clark                 op = rv_op_c_sqsp;
2715ea103259SMichael Clark             } else {
27161dc34be1SMichael Clark                 op = rv_op_c_fsdsp;
2717f65f3ebfSLIU Zhiwei                 if (dec->cfg && dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) {
27182c71d02eSWeiwei Li                     switch ((inst >> 8) & 0b01111) {
27192c71d02eSWeiwei Li                     case 8:
27202c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
27212c71d02eSWeiwei Li                             op = rv_op_cm_push;
27222c71d02eSWeiwei Li                         }
27232c71d02eSWeiwei Li                         break;
27242c71d02eSWeiwei Li                     case 10:
27252c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
27262c71d02eSWeiwei Li                             op = rv_op_cm_pop;
27272c71d02eSWeiwei Li                         }
27282c71d02eSWeiwei Li                         break;
27292c71d02eSWeiwei Li                     case 12:
27302c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
27312c71d02eSWeiwei Li                             op = rv_op_cm_popretz;
27322c71d02eSWeiwei Li                         }
27332c71d02eSWeiwei Li                         break;
27342c71d02eSWeiwei Li                     case 14:
27352c71d02eSWeiwei Li                         if (((inst >> 4) & 0b01111) >= 4) {
27362c71d02eSWeiwei Li                             op = rv_op_cm_popret;
27372c71d02eSWeiwei Li                         }
27382c71d02eSWeiwei Li                         break;
27392c71d02eSWeiwei Li                     }
27402c71d02eSWeiwei Li                 } else {
27412c71d02eSWeiwei Li                     switch ((inst >> 10) & 0b011) {
27422c71d02eSWeiwei Li                     case 0:
2743f65f3ebfSLIU Zhiwei                         if (dec->cfg && !dec->cfg->ext_zcmt) {
27442a2b221bSWeiwei Li                             break;
27452a2b221bSWeiwei Li                         }
27462c71d02eSWeiwei Li                         if (((inst >> 2) & 0xFF) >= 32) {
27472c71d02eSWeiwei Li                             op = rv_op_cm_jalt;
27482c71d02eSWeiwei Li                         } else {
27492c71d02eSWeiwei Li                             op = rv_op_cm_jt;
27502c71d02eSWeiwei Li                         }
27512c71d02eSWeiwei Li                         break;
27522c71d02eSWeiwei Li                     case 3:
2753f65f3ebfSLIU Zhiwei                         if (dec->cfg && !dec->cfg->ext_zcmp) {
27542a2b221bSWeiwei Li                             break;
27552a2b221bSWeiwei Li                         }
27562c71d02eSWeiwei Li                         switch ((inst >> 5) & 0b011) {
27572c71d02eSWeiwei Li                         case 1: op = rv_op_cm_mvsa01; break;
27582c71d02eSWeiwei Li                         case 3: op = rv_op_cm_mva01s; break;
27592c71d02eSWeiwei Li                         }
27602c71d02eSWeiwei Li                         break;
27612c71d02eSWeiwei Li                     }
27622c71d02eSWeiwei Li                 }
2763ea103259SMichael Clark             }
27641dc34be1SMichael Clark             break;
2765ea103259SMichael Clark         case 6: op = rv_op_c_swsp; break;
2766ea103259SMichael Clark         case 7:
2767ea103259SMichael Clark             if (isa == rv32) {
2768ea103259SMichael Clark                 op = rv_op_c_fswsp;
2769ea103259SMichael Clark             } else {
2770ea103259SMichael Clark                 op = rv_op_c_sdsp;
2771ea103259SMichael Clark             }
2772ea103259SMichael Clark             break;
2773ea103259SMichael Clark         }
2774ea103259SMichael Clark         break;
2775ea103259SMichael Clark     case 3:
27763bd87176SWeiwei Li         switch ((inst >> 2) & 0b11111) {
2777ea103259SMichael Clark         case 0:
27783bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
2779ea103259SMichael Clark             case 0: op = rv_op_lb; break;
2780ea103259SMichael Clark             case 1: op = rv_op_lh; break;
2781ea103259SMichael Clark             case 2: op = rv_op_lw; break;
2782ea103259SMichael Clark             case 3: op = rv_op_ld; break;
2783ea103259SMichael Clark             case 4: op = rv_op_lbu; break;
2784ea103259SMichael Clark             case 5: op = rv_op_lhu; break;
2785ea103259SMichael Clark             case 6: op = rv_op_lwu; break;
2786ea103259SMichael Clark             case 7: op = rv_op_ldu; break;
2787ea103259SMichael Clark             }
2788ea103259SMichael Clark             break;
2789ea103259SMichael Clark         case 1:
27903bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
279107f4964dSYang Liu             case 0:
27923bd87176SWeiwei Li                 switch ((inst >> 20) & 0b111111111111) {
279307f4964dSYang Liu                 case 40: op = rv_op_vl1re8_v; break;
279407f4964dSYang Liu                 case 552: op = rv_op_vl2re8_v; break;
279507f4964dSYang Liu                 case 1576: op = rv_op_vl4re8_v; break;
279607f4964dSYang Liu                 case 3624: op = rv_op_vl8re8_v; break;
279707f4964dSYang Liu                 }
27983bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
279907f4964dSYang Liu                 case 0:
28003bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
280107f4964dSYang Liu                     case 0: op = rv_op_vle8_v; break;
280207f4964dSYang Liu                     case 11: op = rv_op_vlm_v; break;
280307f4964dSYang Liu                     case 16: op = rv_op_vle8ff_v; break;
280407f4964dSYang Liu                     }
280507f4964dSYang Liu                     break;
280607f4964dSYang Liu                 case 1: op = rv_op_vluxei8_v; break;
280707f4964dSYang Liu                 case 2: op = rv_op_vlse8_v; break;
280807f4964dSYang Liu                 case 3: op = rv_op_vloxei8_v; break;
280907f4964dSYang Liu                 }
281007f4964dSYang Liu                 break;
281132b2d75bSWeiwei Li             case 1: op = rv_op_flh; break;
2812ea103259SMichael Clark             case 2: op = rv_op_flw; break;
2813ea103259SMichael Clark             case 3: op = rv_op_fld; break;
2814ea103259SMichael Clark             case 4: op = rv_op_flq; break;
281507f4964dSYang Liu             case 5:
28163bd87176SWeiwei Li                 switch ((inst >> 20) & 0b111111111111) {
281707f4964dSYang Liu                 case 40: op = rv_op_vl1re16_v; break;
281807f4964dSYang Liu                 case 552: op = rv_op_vl2re16_v; break;
281907f4964dSYang Liu                 case 1576: op = rv_op_vl4re16_v; break;
282007f4964dSYang Liu                 case 3624: op = rv_op_vl8re16_v; break;
282107f4964dSYang Liu                 }
28223bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
282307f4964dSYang Liu                 case 0:
28243bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
282507f4964dSYang Liu                     case 0: op = rv_op_vle16_v; break;
282607f4964dSYang Liu                     case 16: op = rv_op_vle16ff_v; break;
282707f4964dSYang Liu                     }
282807f4964dSYang Liu                     break;
282907f4964dSYang Liu                 case 1: op = rv_op_vluxei16_v; break;
283007f4964dSYang Liu                 case 2: op = rv_op_vlse16_v; break;
283107f4964dSYang Liu                 case 3: op = rv_op_vloxei16_v; break;
283207f4964dSYang Liu                 }
283307f4964dSYang Liu                 break;
283407f4964dSYang Liu             case 6:
28353bd87176SWeiwei Li                 switch ((inst >> 20) & 0b111111111111) {
283607f4964dSYang Liu                 case 40: op = rv_op_vl1re32_v; break;
283707f4964dSYang Liu                 case 552: op = rv_op_vl2re32_v; break;
283807f4964dSYang Liu                 case 1576: op = rv_op_vl4re32_v; break;
283907f4964dSYang Liu                 case 3624: op = rv_op_vl8re32_v; break;
284007f4964dSYang Liu                 }
28413bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
284207f4964dSYang Liu                 case 0:
28433bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
284407f4964dSYang Liu                     case 0: op = rv_op_vle32_v; break;
284507f4964dSYang Liu                     case 16: op = rv_op_vle32ff_v; break;
284607f4964dSYang Liu                     }
284707f4964dSYang Liu                     break;
284807f4964dSYang Liu                 case 1: op = rv_op_vluxei32_v; break;
284907f4964dSYang Liu                 case 2: op = rv_op_vlse32_v; break;
285007f4964dSYang Liu                 case 3: op = rv_op_vloxei32_v; break;
285107f4964dSYang Liu                 }
285207f4964dSYang Liu                 break;
285307f4964dSYang Liu             case 7:
28543bd87176SWeiwei Li                 switch ((inst >> 20) & 0b111111111111) {
285507f4964dSYang Liu                 case 40: op = rv_op_vl1re64_v; break;
285607f4964dSYang Liu                 case 552: op = rv_op_vl2re64_v; break;
285707f4964dSYang Liu                 case 1576: op = rv_op_vl4re64_v; break;
285807f4964dSYang Liu                 case 3624: op = rv_op_vl8re64_v; break;
285907f4964dSYang Liu                 }
28603bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
286107f4964dSYang Liu                 case 0:
28623bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
286307f4964dSYang Liu                     case 0: op = rv_op_vle64_v; break;
286407f4964dSYang Liu                     case 16: op = rv_op_vle64ff_v; break;
286507f4964dSYang Liu                     }
286607f4964dSYang Liu                     break;
286707f4964dSYang Liu                 case 1: op = rv_op_vluxei64_v; break;
286807f4964dSYang Liu                 case 2: op = rv_op_vlse64_v; break;
286907f4964dSYang Liu                 case 3: op = rv_op_vloxei64_v; break;
287007f4964dSYang Liu                 }
287107f4964dSYang Liu                 break;
2872ea103259SMichael Clark             }
2873ea103259SMichael Clark             break;
2874ea103259SMichael Clark         case 3:
28753bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
2876ea103259SMichael Clark             case 0: op = rv_op_fence; break;
2877ea103259SMichael Clark             case 1: op = rv_op_fence_i; break;
2878ea103259SMichael Clark             case 2: op = rv_op_lq; break;
2879ea103259SMichael Clark             }
2880ea103259SMichael Clark             break;
2881ea103259SMichael Clark         case 4:
28823bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
2883ea103259SMichael Clark             case 0: op = rv_op_addi; break;
2884ea103259SMichael Clark             case 1:
28853bd87176SWeiwei Li                 switch ((inst >> 27) & 0b11111) {
288602c1b569SPhilipp Tomsich                 case 0b00000: op = rv_op_slli; break;
28875748c886SWeiwei Li                 case 0b00001:
28883bd87176SWeiwei Li                     switch ((inst >> 20) & 0b1111111) {
28895748c886SWeiwei Li                     case 0b0001111: op = rv_op_zip; break;
28905748c886SWeiwei Li                     }
28915748c886SWeiwei Li                     break;
28925748c886SWeiwei Li                 case 0b00010:
28933bd87176SWeiwei Li                     switch ((inst >> 20) & 0b1111111) {
28945748c886SWeiwei Li                     case 0b0000000: op = rv_op_sha256sum0; break;
28955748c886SWeiwei Li                     case 0b0000001: op = rv_op_sha256sum1; break;
28965748c886SWeiwei Li                     case 0b0000010: op = rv_op_sha256sig0; break;
28975748c886SWeiwei Li                     case 0b0000011: op = rv_op_sha256sig1; break;
28985748c886SWeiwei Li                     case 0b0000100: op = rv_op_sha512sum0; break;
28995748c886SWeiwei Li                     case 0b0000101: op = rv_op_sha512sum1; break;
29005748c886SWeiwei Li                     case 0b0000110: op = rv_op_sha512sig0; break;
29015748c886SWeiwei Li                     case 0b0000111: op = rv_op_sha512sig1; break;
29025748c886SWeiwei Li                     case 0b0001000: op = rv_op_sm3p0; break;
29035748c886SWeiwei Li                     case 0b0001001: op = rv_op_sm3p1; break;
29045748c886SWeiwei Li                     }
29055748c886SWeiwei Li                     break;
290602c1b569SPhilipp Tomsich                 case 0b00101: op = rv_op_bseti; break;
29075748c886SWeiwei Li                 case 0b00110:
29083bd87176SWeiwei Li                     switch ((inst >> 20) & 0b1111111) {
29095748c886SWeiwei Li                     case 0b0000000: op = rv_op_aes64im; break;
29105748c886SWeiwei Li                     default:
29115748c886SWeiwei Li                         if (((inst >> 24) & 0b0111) == 0b001) {
29125748c886SWeiwei Li                             op = rv_op_aes64ks1i;
29135748c886SWeiwei Li                         }
29145748c886SWeiwei Li                         break;
29155748c886SWeiwei Li                      }
29165748c886SWeiwei Li                      break;
291702c1b569SPhilipp Tomsich                 case 0b01001: op = rv_op_bclri; break;
291802c1b569SPhilipp Tomsich                 case 0b01101: op = rv_op_binvi; break;
291902c1b569SPhilipp Tomsich                 case 0b01100:
29203bd87176SWeiwei Li                     switch ((inst >> 20) & 0b1111111) {
292102c1b569SPhilipp Tomsich                     case 0b0000000: op = rv_op_clz; break;
292202c1b569SPhilipp Tomsich                     case 0b0000001: op = rv_op_ctz; break;
292302c1b569SPhilipp Tomsich                     case 0b0000010: op = rv_op_cpop; break;
292402c1b569SPhilipp Tomsich                       /* 0b0000011 */
292502c1b569SPhilipp Tomsich                     case 0b0000100: op = rv_op_sext_b; break;
292602c1b569SPhilipp Tomsich                     case 0b0000101: op = rv_op_sext_h; break;
292702c1b569SPhilipp Tomsich                     }
292802c1b569SPhilipp Tomsich                     break;
2929ea103259SMichael Clark                 }
2930ea103259SMichael Clark                 break;
2931ea103259SMichael Clark             case 2: op = rv_op_slti; break;
2932ea103259SMichael Clark             case 3: op = rv_op_sltiu; break;
2933ea103259SMichael Clark             case 4: op = rv_op_xori; break;
2934ea103259SMichael Clark             case 5:
29353bd87176SWeiwei Li                 switch ((inst >> 27) & 0b11111) {
293602c1b569SPhilipp Tomsich                 case 0b00000: op = rv_op_srli; break;
29375748c886SWeiwei Li                 case 0b00001:
29383bd87176SWeiwei Li                     switch ((inst >> 20) & 0b1111111) {
29395748c886SWeiwei Li                     case 0b0001111: op = rv_op_unzip; break;
29405748c886SWeiwei Li                     }
29415748c886SWeiwei Li                     break;
294202c1b569SPhilipp Tomsich                 case 0b00101: op = rv_op_orc_b; break;
294302c1b569SPhilipp Tomsich                 case 0b01000: op = rv_op_srai; break;
294402c1b569SPhilipp Tomsich                 case 0b01001: op = rv_op_bexti; break;
294502c1b569SPhilipp Tomsich                 case 0b01100: op = rv_op_rori; break;
294602c1b569SPhilipp Tomsich                 case 0b01101:
294702c1b569SPhilipp Tomsich                     switch ((inst >> 20) & 0b1111111) {
29485748c886SWeiwei Li                     case 0b0011000: op = rv_op_rev8; break;
294902c1b569SPhilipp Tomsich                     case 0b0111000: op = rv_op_rev8; break;
29505748c886SWeiwei Li                     case 0b0000111: op = rv_op_brev8; break;
295102c1b569SPhilipp Tomsich                     }
295202c1b569SPhilipp Tomsich                     break;
2953ea103259SMichael Clark                 }
2954ea103259SMichael Clark                 break;
2955ea103259SMichael Clark             case 6: op = rv_op_ori; break;
2956ea103259SMichael Clark             case 7: op = rv_op_andi; break;
2957ea103259SMichael Clark             }
2958ea103259SMichael Clark             break;
29595e761bd6SDeepak Gupta         case 5:
29605e761bd6SDeepak Gupta             op = rv_op_auipc;
2961f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zicfilp &&
29625e761bd6SDeepak Gupta                 (((inst >> 7) & 0b11111) == 0b00000)) {
29635e761bd6SDeepak Gupta                 op = rv_op_lpad;
29645e761bd6SDeepak Gupta             }
29655e761bd6SDeepak Gupta             break;
2966ea103259SMichael Clark         case 6:
29673bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
2968ea103259SMichael Clark             case 0: op = rv_op_addiw; break;
2969ea103259SMichael Clark             case 1:
29703bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
2971ea103259SMichael Clark                 case 0: op = rv_op_slliw; break;
297213e269f6SIvan Klokov                 case 2: op = rv_op_slli_uw; break;
297313e269f6SIvan Klokov                 case 24:
297402c1b569SPhilipp Tomsich                     switch ((inst >> 20) & 0b11111) {
297502c1b569SPhilipp Tomsich                     case 0b00000: op = rv_op_clzw; break;
297602c1b569SPhilipp Tomsich                     case 0b00001: op = rv_op_ctzw; break;
297702c1b569SPhilipp Tomsich                     case 0b00010: op = rv_op_cpopw; break;
297802c1b569SPhilipp Tomsich                     }
297902c1b569SPhilipp Tomsich                     break;
2980ea103259SMichael Clark                 }
2981ea103259SMichael Clark                 break;
2982ea103259SMichael Clark             case 5:
29833bd87176SWeiwei Li                 switch ((inst >> 25) & 0b1111111) {
2984ea103259SMichael Clark                 case 0: op = rv_op_srliw; break;
2985ea103259SMichael Clark                 case 32: op = rv_op_sraiw; break;
298602c1b569SPhilipp Tomsich                 case 48: op = rv_op_roriw; break;
2987ea103259SMichael Clark                 }
2988ea103259SMichael Clark                 break;
2989ea103259SMichael Clark             }
2990ea103259SMichael Clark             break;
2991ea103259SMichael Clark         case 8:
29923bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
2993ea103259SMichael Clark             case 0: op = rv_op_sb; break;
2994ea103259SMichael Clark             case 1: op = rv_op_sh; break;
2995ea103259SMichael Clark             case 2: op = rv_op_sw; break;
2996ea103259SMichael Clark             case 3: op = rv_op_sd; break;
2997ea103259SMichael Clark             case 4: op = rv_op_sq; break;
2998ea103259SMichael Clark             }
2999ea103259SMichael Clark             break;
3000ea103259SMichael Clark         case 9:
30013bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
300207f4964dSYang Liu             case 0:
30033bd87176SWeiwei Li                 switch ((inst >> 20) & 0b111111111111) {
300407f4964dSYang Liu                 case 40: op = rv_op_vs1r_v; break;
300507f4964dSYang Liu                 case 552: op = rv_op_vs2r_v; break;
300607f4964dSYang Liu                 case 1576: op = rv_op_vs4r_v; break;
300707f4964dSYang Liu                 case 3624: op = rv_op_vs8r_v; break;
300807f4964dSYang Liu                 }
30093bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
301007f4964dSYang Liu                 case 0:
30113bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
301207f4964dSYang Liu                     case 0: op = rv_op_vse8_v; break;
301307f4964dSYang Liu                     case 11: op = rv_op_vsm_v; break;
301407f4964dSYang Liu                     }
301507f4964dSYang Liu                     break;
301607f4964dSYang Liu                 case 1: op = rv_op_vsuxei8_v; break;
301707f4964dSYang Liu                 case 2: op = rv_op_vsse8_v; break;
301807f4964dSYang Liu                 case 3: op = rv_op_vsoxei8_v; break;
301907f4964dSYang Liu                 }
302007f4964dSYang Liu                 break;
302132b2d75bSWeiwei Li             case 1: op = rv_op_fsh; break;
3022ea103259SMichael Clark             case 2: op = rv_op_fsw; break;
3023ea103259SMichael Clark             case 3: op = rv_op_fsd; break;
3024ea103259SMichael Clark             case 4: op = rv_op_fsq; break;
302507f4964dSYang Liu             case 5:
30263bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
302707f4964dSYang Liu                 case 0:
30283bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
302907f4964dSYang Liu                     case 0: op = rv_op_vse16_v; break;
303007f4964dSYang Liu                     }
303107f4964dSYang Liu                     break;
303207f4964dSYang Liu                 case 1: op = rv_op_vsuxei16_v; break;
303307f4964dSYang Liu                 case 2: op = rv_op_vsse16_v; break;
303407f4964dSYang Liu                 case 3: op = rv_op_vsoxei16_v; break;
303507f4964dSYang Liu                 }
303607f4964dSYang Liu                 break;
303707f4964dSYang Liu             case 6:
30383bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
303907f4964dSYang Liu                 case 0:
30403bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
304107f4964dSYang Liu                     case 0: op = rv_op_vse32_v; break;
304207f4964dSYang Liu                     }
304307f4964dSYang Liu                     break;
304407f4964dSYang Liu                 case 1: op = rv_op_vsuxei32_v; break;
304507f4964dSYang Liu                 case 2: op = rv_op_vsse32_v; break;
304607f4964dSYang Liu                 case 3: op = rv_op_vsoxei32_v; break;
304707f4964dSYang Liu                 }
304807f4964dSYang Liu                 break;
304907f4964dSYang Liu             case 7:
30503bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111) {
305107f4964dSYang Liu                 case 0:
30523bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
305307f4964dSYang Liu                     case 0: op = rv_op_vse64_v; break;
305407f4964dSYang Liu                     }
305507f4964dSYang Liu                     break;
305607f4964dSYang Liu                 case 1: op = rv_op_vsuxei64_v; break;
305707f4964dSYang Liu                 case 2: op = rv_op_vsse64_v; break;
305807f4964dSYang Liu                 case 3: op = rv_op_vsoxei64_v; break;
305907f4964dSYang Liu                 }
306007f4964dSYang Liu                 break;
3061ea103259SMichael Clark             }
3062ea103259SMichael Clark             break;
3063ea103259SMichael Clark         case 11:
306498624d13SWeiwei Li             switch (((inst >> 24) & 0b11111000) |
306598624d13SWeiwei Li                     ((inst >> 12) & 0b00000111)) {
3066ae4bdcefSLIU Zhiwei             case 0: op = rv_op_amoadd_b; break;
3067ae4bdcefSLIU Zhiwei             case 1: op = rv_op_amoadd_h; break;
3068ea103259SMichael Clark             case 2: op = rv_op_amoadd_w; break;
3069ea103259SMichael Clark             case 3: op = rv_op_amoadd_d; break;
3070ea103259SMichael Clark             case 4: op = rv_op_amoadd_q; break;
3071ae4bdcefSLIU Zhiwei             case 8: op = rv_op_amoswap_b; break;
3072ae4bdcefSLIU Zhiwei             case 9: op = rv_op_amoswap_h; break;
3073ea103259SMichael Clark             case 10: op = rv_op_amoswap_w; break;
3074ea103259SMichael Clark             case 11: op = rv_op_amoswap_d; break;
3075ea103259SMichael Clark             case 12: op = rv_op_amoswap_q; break;
3076ea103259SMichael Clark             case 18:
30773bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3078ea103259SMichael Clark                 case 0: op = rv_op_lr_w; break;
3079ea103259SMichael Clark                 }
3080ea103259SMichael Clark                 break;
3081ea103259SMichael Clark             case 19:
30823bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3083ea103259SMichael Clark                 case 0: op = rv_op_lr_d; break;
3084ea103259SMichael Clark                 }
3085ea103259SMichael Clark                 break;
3086ea103259SMichael Clark             case 20:
30873bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3088ea103259SMichael Clark                 case 0: op = rv_op_lr_q; break;
3089ea103259SMichael Clark                 }
3090ea103259SMichael Clark                 break;
3091ea103259SMichael Clark             case 26: op = rv_op_sc_w; break;
3092ea103259SMichael Clark             case 27: op = rv_op_sc_d; break;
3093ea103259SMichael Clark             case 28: op = rv_op_sc_q; break;
3094ae4bdcefSLIU Zhiwei             case 32: op = rv_op_amoxor_b; break;
3095ae4bdcefSLIU Zhiwei             case 33: op = rv_op_amoxor_h; break;
3096ea103259SMichael Clark             case 34: op = rv_op_amoxor_w; break;
3097ea103259SMichael Clark             case 35: op = rv_op_amoxor_d; break;
3098ea103259SMichael Clark             case 36: op = rv_op_amoxor_q; break;
3099ae4bdcefSLIU Zhiwei             case 40: op = rv_op_amocas_b; break;
3100ae4bdcefSLIU Zhiwei             case 41: op = rv_op_amocas_h; break;
31016c848c19SRob Bradford             case 42: op = rv_op_amocas_w; break;
31026c848c19SRob Bradford             case 43: op = rv_op_amocas_d; break;
31036c848c19SRob Bradford             case 44: op = rv_op_amocas_q; break;
3104ae4bdcefSLIU Zhiwei             case 64: op = rv_op_amoor_b; break;
3105ae4bdcefSLIU Zhiwei             case 65: op = rv_op_amoor_h; break;
3106ea103259SMichael Clark             case 66: op = rv_op_amoor_w; break;
3107ea103259SMichael Clark             case 67: op = rv_op_amoor_d; break;
3108ea103259SMichael Clark             case 68: op = rv_op_amoor_q; break;
3109b9080d07SDeepak Gupta             case 74: op = rv_op_ssamoswap_w; break;
3110b9080d07SDeepak Gupta             case 75: op = rv_op_ssamoswap_d; break;
3111ae4bdcefSLIU Zhiwei             case 96: op = rv_op_amoand_b; break;
3112ae4bdcefSLIU Zhiwei             case 97: op = rv_op_amoand_h; break;
3113ea103259SMichael Clark             case 98: op = rv_op_amoand_w; break;
3114ea103259SMichael Clark             case 99: op = rv_op_amoand_d; break;
3115ea103259SMichael Clark             case 100: op = rv_op_amoand_q; break;
3116ae4bdcefSLIU Zhiwei             case 128: op = rv_op_amomin_b; break;
3117ae4bdcefSLIU Zhiwei             case 129: op = rv_op_amomin_h; break;
3118ea103259SMichael Clark             case 130: op = rv_op_amomin_w; break;
3119ea103259SMichael Clark             case 131: op = rv_op_amomin_d; break;
3120ea103259SMichael Clark             case 132: op = rv_op_amomin_q; break;
3121ae4bdcefSLIU Zhiwei             case 160: op = rv_op_amomax_b; break;
3122ae4bdcefSLIU Zhiwei             case 161: op = rv_op_amomax_h; break;
3123ea103259SMichael Clark             case 162: op = rv_op_amomax_w; break;
3124ea103259SMichael Clark             case 163: op = rv_op_amomax_d; break;
3125ea103259SMichael Clark             case 164: op = rv_op_amomax_q; break;
3126ae4bdcefSLIU Zhiwei             case 192: op = rv_op_amominu_b; break;
3127ae4bdcefSLIU Zhiwei             case 193: op = rv_op_amominu_h; break;
3128ea103259SMichael Clark             case 194: op = rv_op_amominu_w; break;
3129ea103259SMichael Clark             case 195: op = rv_op_amominu_d; break;
3130ea103259SMichael Clark             case 196: op = rv_op_amominu_q; break;
3131ae4bdcefSLIU Zhiwei             case 224: op = rv_op_amomaxu_b; break;
3132ae4bdcefSLIU Zhiwei             case 225: op = rv_op_amomaxu_h; break;
3133ea103259SMichael Clark             case 226: op = rv_op_amomaxu_w; break;
3134ea103259SMichael Clark             case 227: op = rv_op_amomaxu_d; break;
3135ea103259SMichael Clark             case 228: op = rv_op_amomaxu_q; break;
3136ea103259SMichael Clark             }
3137ea103259SMichael Clark             break;
3138ea103259SMichael Clark         case 12:
313998624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
314098624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
3141ea103259SMichael Clark             case 0: op = rv_op_add; break;
3142ea103259SMichael Clark             case 1: op = rv_op_sll; break;
3143ea103259SMichael Clark             case 2: op = rv_op_slt; break;
3144ea103259SMichael Clark             case 3: op = rv_op_sltu; break;
3145ea103259SMichael Clark             case 4: op = rv_op_xor; break;
3146ea103259SMichael Clark             case 5: op = rv_op_srl; break;
3147ea103259SMichael Clark             case 6: op = rv_op_or; break;
3148ea103259SMichael Clark             case 7: op = rv_op_and; break;
3149ea103259SMichael Clark             case 8: op = rv_op_mul; break;
3150ea103259SMichael Clark             case 9: op = rv_op_mulh; break;
3151ea103259SMichael Clark             case 10: op = rv_op_mulhsu; break;
3152ea103259SMichael Clark             case 11: op = rv_op_mulhu; break;
3153ea103259SMichael Clark             case 12: op = rv_op_div; break;
3154ea103259SMichael Clark             case 13: op = rv_op_divu; break;
3155ea103259SMichael Clark             case 14: op = rv_op_rem; break;
3156ea103259SMichael Clark             case 15: op = rv_op_remu; break;
315702c1b569SPhilipp Tomsich             case 36:
315802c1b569SPhilipp Tomsich                 switch ((inst >> 20) & 0b11111) {
315902c1b569SPhilipp Tomsich                 case 0: op = rv_op_zext_h; break;
31605748c886SWeiwei Li                 default: op = rv_op_pack; break;
316102c1b569SPhilipp Tomsich                 }
316202c1b569SPhilipp Tomsich                 break;
31635748c886SWeiwei Li             case 39: op = rv_op_packh; break;
31645748c886SWeiwei Li 
316502c1b569SPhilipp Tomsich             case 41: op = rv_op_clmul; break;
316602c1b569SPhilipp Tomsich             case 42: op = rv_op_clmulr; break;
316702c1b569SPhilipp Tomsich             case 43: op = rv_op_clmulh; break;
316802c1b569SPhilipp Tomsich             case 44: op = rv_op_min; break;
316902c1b569SPhilipp Tomsich             case 45: op = rv_op_minu; break;
317002c1b569SPhilipp Tomsich             case 46: op = rv_op_max; break;
317102c1b569SPhilipp Tomsich             case 47: op = rv_op_maxu; break;
3172d397be9aSRichard Henderson             case 075: op = rv_op_czero_eqz; break;
3173d397be9aSRichard Henderson             case 077: op = rv_op_czero_nez; break;
317402c1b569SPhilipp Tomsich             case 130: op = rv_op_sh1add; break;
317502c1b569SPhilipp Tomsich             case 132: op = rv_op_sh2add; break;
317602c1b569SPhilipp Tomsich             case 134: op = rv_op_sh3add; break;
317702c1b569SPhilipp Tomsich             case 161: op = rv_op_bset; break;
31785748c886SWeiwei Li             case 162: op = rv_op_xperm4; break;
31795748c886SWeiwei Li             case 164: op = rv_op_xperm8; break;
31805748c886SWeiwei Li             case 200: op = rv_op_aes64es; break;
31815748c886SWeiwei Li             case 216: op = rv_op_aes64esm; break;
31825748c886SWeiwei Li             case 232: op = rv_op_aes64ds; break;
31835748c886SWeiwei Li             case 248: op = rv_op_aes64dsm; break;
3184ea103259SMichael Clark             case 256: op = rv_op_sub; break;
318502c1b569SPhilipp Tomsich             case 260: op = rv_op_xnor; break;
3186ea103259SMichael Clark             case 261: op = rv_op_sra; break;
318702c1b569SPhilipp Tomsich             case 262: op = rv_op_orn; break;
318802c1b569SPhilipp Tomsich             case 263: op = rv_op_andn; break;
318902c1b569SPhilipp Tomsich             case 289: op = rv_op_bclr; break;
319002c1b569SPhilipp Tomsich             case 293: op = rv_op_bext; break;
31915748c886SWeiwei Li             case 320: op = rv_op_sha512sum0r; break;
31925748c886SWeiwei Li             case 328: op = rv_op_sha512sum1r; break;
31935748c886SWeiwei Li             case 336: op = rv_op_sha512sig0l; break;
31945748c886SWeiwei Li             case 344: op = rv_op_sha512sig1l; break;
31955748c886SWeiwei Li             case 368: op = rv_op_sha512sig0h; break;
31965748c886SWeiwei Li             case 376: op = rv_op_sha512sig1h; break;
319702c1b569SPhilipp Tomsich             case 385: op = rv_op_rol; break;
31985748c886SWeiwei Li             case 389: op = rv_op_ror; break;
319902c1b569SPhilipp Tomsich             case 417: op = rv_op_binv; break;
32005748c886SWeiwei Li             case 504: op = rv_op_aes64ks2; break;
32015748c886SWeiwei Li             }
32025748c886SWeiwei Li             switch ((inst >> 25) & 0b0011111) {
32035748c886SWeiwei Li             case 17: op = rv_op_aes32esi; break;
32045748c886SWeiwei Li             case 19: op = rv_op_aes32esmi; break;
32055748c886SWeiwei Li             case 21: op = rv_op_aes32dsi; break;
32065748c886SWeiwei Li             case 23: op = rv_op_aes32dsmi; break;
32075748c886SWeiwei Li             case 24: op = rv_op_sm4ed; break;
32085748c886SWeiwei Li             case 26: op = rv_op_sm4ks; break;
3209ea103259SMichael Clark             }
3210ea103259SMichael Clark             break;
3211ea103259SMichael Clark         case 13: op = rv_op_lui; break;
3212ea103259SMichael Clark         case 14:
321398624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
321498624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
3215ea103259SMichael Clark             case 0: op = rv_op_addw; break;
3216ea103259SMichael Clark             case 1: op = rv_op_sllw; break;
3217ea103259SMichael Clark             case 5: op = rv_op_srlw; break;
3218ea103259SMichael Clark             case 8: op = rv_op_mulw; break;
3219ea103259SMichael Clark             case 12: op = rv_op_divw; break;
3220ea103259SMichael Clark             case 13: op = rv_op_divuw; break;
3221ea103259SMichael Clark             case 14: op = rv_op_remw; break;
3222ea103259SMichael Clark             case 15: op = rv_op_remuw; break;
322302c1b569SPhilipp Tomsich             case 32: op = rv_op_add_uw; break;
322402c1b569SPhilipp Tomsich             case 36:
322502c1b569SPhilipp Tomsich                 switch ((inst >> 20) & 0b11111) {
322602c1b569SPhilipp Tomsich                 case 0: op = rv_op_zext_h; break;
32275748c886SWeiwei Li                 default: op = rv_op_packw; break;
322802c1b569SPhilipp Tomsich                 }
322902c1b569SPhilipp Tomsich                 break;
323002c1b569SPhilipp Tomsich             case 130: op = rv_op_sh1add_uw; break;
323102c1b569SPhilipp Tomsich             case 132: op = rv_op_sh2add_uw; break;
323202c1b569SPhilipp Tomsich             case 134: op = rv_op_sh3add_uw; break;
3233ea103259SMichael Clark             case 256: op = rv_op_subw; break;
3234ea103259SMichael Clark             case 261: op = rv_op_sraw; break;
323502c1b569SPhilipp Tomsich             case 385: op = rv_op_rolw; break;
323602c1b569SPhilipp Tomsich             case 389: op = rv_op_rorw; break;
3237ea103259SMichael Clark             }
3238ea103259SMichael Clark             break;
3239ea103259SMichael Clark         case 16:
32403bd87176SWeiwei Li             switch ((inst >> 25) & 0b11) {
3241ea103259SMichael Clark             case 0: op = rv_op_fmadd_s; break;
3242ea103259SMichael Clark             case 1: op = rv_op_fmadd_d; break;
3243ea103259SMichael Clark             case 3: op = rv_op_fmadd_q; break;
3244ea103259SMichael Clark             }
3245ea103259SMichael Clark             break;
3246ea103259SMichael Clark         case 17:
32473bd87176SWeiwei Li             switch ((inst >> 25) & 0b11) {
3248ea103259SMichael Clark             case 0: op = rv_op_fmsub_s; break;
3249ea103259SMichael Clark             case 1: op = rv_op_fmsub_d; break;
3250ea103259SMichael Clark             case 3: op = rv_op_fmsub_q; break;
3251ea103259SMichael Clark             }
3252ea103259SMichael Clark             break;
3253ea103259SMichael Clark         case 18:
32543bd87176SWeiwei Li             switch ((inst >> 25) & 0b11) {
3255ea103259SMichael Clark             case 0: op = rv_op_fnmsub_s; break;
3256ea103259SMichael Clark             case 1: op = rv_op_fnmsub_d; break;
3257ea103259SMichael Clark             case 3: op = rv_op_fnmsub_q; break;
3258ea103259SMichael Clark             }
3259ea103259SMichael Clark             break;
3260ea103259SMichael Clark         case 19:
32613bd87176SWeiwei Li             switch ((inst >> 25) & 0b11) {
3262ea103259SMichael Clark             case 0: op = rv_op_fnmadd_s; break;
3263ea103259SMichael Clark             case 1: op = rv_op_fnmadd_d; break;
3264ea103259SMichael Clark             case 3: op = rv_op_fnmadd_q; break;
3265ea103259SMichael Clark             }
3266ea103259SMichael Clark             break;
3267ea103259SMichael Clark         case 20:
32683bd87176SWeiwei Li             switch ((inst >> 25) & 0b1111111) {
3269ea103259SMichael Clark             case 0: op = rv_op_fadd_s; break;
3270ea103259SMichael Clark             case 1: op = rv_op_fadd_d; break;
3271ea103259SMichael Clark             case 3: op = rv_op_fadd_q; break;
3272ea103259SMichael Clark             case 4: op = rv_op_fsub_s; break;
3273ea103259SMichael Clark             case 5: op = rv_op_fsub_d; break;
3274ea103259SMichael Clark             case 7: op = rv_op_fsub_q; break;
3275ea103259SMichael Clark             case 8: op = rv_op_fmul_s; break;
3276ea103259SMichael Clark             case 9: op = rv_op_fmul_d; break;
3277ea103259SMichael Clark             case 11: op = rv_op_fmul_q; break;
3278ea103259SMichael Clark             case 12: op = rv_op_fdiv_s; break;
3279ea103259SMichael Clark             case 13: op = rv_op_fdiv_d; break;
3280ea103259SMichael Clark             case 15: op = rv_op_fdiv_q; break;
3281ea103259SMichael Clark             case 16:
32823bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3283ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_s; break;
3284ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_s; break;
3285ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_s; break;
3286ea103259SMichael Clark                 }
3287ea103259SMichael Clark                 break;
3288ea103259SMichael Clark             case 17:
32893bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3290ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_d; break;
3291ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_d; break;
3292ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_d; break;
3293ea103259SMichael Clark                 }
3294ea103259SMichael Clark                 break;
3295ea103259SMichael Clark             case 19:
32963bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3297ea103259SMichael Clark                 case 0: op = rv_op_fsgnj_q; break;
3298ea103259SMichael Clark                 case 1: op = rv_op_fsgnjn_q; break;
3299ea103259SMichael Clark                 case 2: op = rv_op_fsgnjx_q; break;
3300ea103259SMichael Clark                 }
3301ea103259SMichael Clark                 break;
3302ea103259SMichael Clark             case 20:
33033bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3304ea103259SMichael Clark                 case 0: op = rv_op_fmin_s; break;
3305ea103259SMichael Clark                 case 1: op = rv_op_fmax_s; break;
3306a47842d1SChristoph Müllner                 case 2: op = rv_op_fminm_s; break;
3307a47842d1SChristoph Müllner                 case 3: op = rv_op_fmaxm_s; break;
3308ea103259SMichael Clark                 }
3309ea103259SMichael Clark                 break;
3310ea103259SMichael Clark             case 21:
33113bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3312ea103259SMichael Clark                 case 0: op = rv_op_fmin_d; break;
3313ea103259SMichael Clark                 case 1: op = rv_op_fmax_d; break;
3314a47842d1SChristoph Müllner                 case 2: op = rv_op_fminm_d; break;
3315a47842d1SChristoph Müllner                 case 3: op = rv_op_fmaxm_d; break;
3316a47842d1SChristoph Müllner                 }
3317a47842d1SChristoph Müllner                 break;
3318a47842d1SChristoph Müllner             case 22:
3319a47842d1SChristoph Müllner                 switch (((inst >> 12) & 0b111)) {
3320a47842d1SChristoph Müllner                 case 2: op = rv_op_fminm_h; break;
3321a47842d1SChristoph Müllner                 case 3: op = rv_op_fmaxm_h; break;
3322ea103259SMichael Clark                 }
3323ea103259SMichael Clark                 break;
3324ea103259SMichael Clark             case 23:
33253bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3326ea103259SMichael Clark                 case 0: op = rv_op_fmin_q; break;
3327ea103259SMichael Clark                 case 1: op = rv_op_fmax_q; break;
3328a47842d1SChristoph Müllner                 case 2: op = rv_op_fminm_q; break;
3329a47842d1SChristoph Müllner                 case 3: op = rv_op_fmaxm_q; break;
3330ea103259SMichael Clark                 }
3331ea103259SMichael Clark                 break;
3332ea103259SMichael Clark             case 32:
33333bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3334ea103259SMichael Clark                 case 1: op = rv_op_fcvt_s_d; break;
3335ea103259SMichael Clark                 case 3: op = rv_op_fcvt_s_q; break;
3336a47842d1SChristoph Müllner                 case 4: op = rv_op_fround_s; break;
3337a47842d1SChristoph Müllner                 case 5: op = rv_op_froundnx_s; break;
333832b2d75bSWeiwei Li                 case 6: op = rv_op_fcvt_s_bf16; break;
3339ea103259SMichael Clark                 }
3340ea103259SMichael Clark                 break;
3341ea103259SMichael Clark             case 33:
33423bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3343ea103259SMichael Clark                 case 0: op = rv_op_fcvt_d_s; break;
3344ea103259SMichael Clark                 case 3: op = rv_op_fcvt_d_q; break;
3345a47842d1SChristoph Müllner                 case 4: op = rv_op_fround_d; break;
3346a47842d1SChristoph Müllner                 case 5: op = rv_op_froundnx_d; break;
3347ea103259SMichael Clark                 }
3348ea103259SMichael Clark                 break;
334932b2d75bSWeiwei Li             case 34:
335032b2d75bSWeiwei Li                 switch (((inst >> 20) & 0b11111)) {
3351a47842d1SChristoph Müllner                 case 4: op = rv_op_fround_h; break;
3352a47842d1SChristoph Müllner                 case 5: op = rv_op_froundnx_h; break;
335332b2d75bSWeiwei Li                 case 8: op = rv_op_fcvt_bf16_s; break;
335432b2d75bSWeiwei Li                 }
335532b2d75bSWeiwei Li                 break;
3356ea103259SMichael Clark             case 35:
33573bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3358ea103259SMichael Clark                 case 0: op = rv_op_fcvt_q_s; break;
3359ea103259SMichael Clark                 case 1: op = rv_op_fcvt_q_d; break;
3360a47842d1SChristoph Müllner                 case 4: op = rv_op_fround_q; break;
3361a47842d1SChristoph Müllner                 case 5: op = rv_op_froundnx_q; break;
3362ea103259SMichael Clark                 }
3363ea103259SMichael Clark                 break;
3364ea103259SMichael Clark             case 44:
33653bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3366ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_s; break;
3367ea103259SMichael Clark                 }
3368ea103259SMichael Clark                 break;
3369ea103259SMichael Clark             case 45:
33703bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3371ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_d; break;
3372ea103259SMichael Clark                 }
3373ea103259SMichael Clark                 break;
3374ea103259SMichael Clark             case 47:
33753bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3376ea103259SMichael Clark                 case 0: op = rv_op_fsqrt_q; break;
3377ea103259SMichael Clark                 }
3378ea103259SMichael Clark                 break;
3379ea103259SMichael Clark             case 80:
33803bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3381ea103259SMichael Clark                 case 0: op = rv_op_fle_s; break;
3382ea103259SMichael Clark                 case 1: op = rv_op_flt_s; break;
3383ea103259SMichael Clark                 case 2: op = rv_op_feq_s; break;
3384a47842d1SChristoph Müllner                 case 4: op = rv_op_fleq_s; break;
3385a47842d1SChristoph Müllner                 case 5: op = rv_op_fltq_s; break;
3386ea103259SMichael Clark                 }
3387ea103259SMichael Clark                 break;
3388ea103259SMichael Clark             case 81:
33893bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3390ea103259SMichael Clark                 case 0: op = rv_op_fle_d; break;
3391ea103259SMichael Clark                 case 1: op = rv_op_flt_d; break;
3392ea103259SMichael Clark                 case 2: op = rv_op_feq_d; break;
3393a47842d1SChristoph Müllner                 case 4: op = rv_op_fleq_d; break;
3394a47842d1SChristoph Müllner                 case 5: op = rv_op_fltq_d; break;
3395a47842d1SChristoph Müllner                 }
3396a47842d1SChristoph Müllner                 break;
3397a47842d1SChristoph Müllner             case 82:
3398a47842d1SChristoph Müllner                 switch (((inst >> 12) & 0b111)) {
3399a47842d1SChristoph Müllner                 case 4: op = rv_op_fleq_h; break;
3400a47842d1SChristoph Müllner                 case 5: op = rv_op_fltq_h; break;
3401ea103259SMichael Clark                 }
3402ea103259SMichael Clark                 break;
3403ea103259SMichael Clark             case 83:
34043bd87176SWeiwei Li                 switch ((inst >> 12) & 0b111) {
3405ea103259SMichael Clark                 case 0: op = rv_op_fle_q; break;
3406ea103259SMichael Clark                 case 1: op = rv_op_flt_q; break;
3407ea103259SMichael Clark                 case 2: op = rv_op_feq_q; break;
3408a47842d1SChristoph Müllner                 case 4: op = rv_op_fleq_q; break;
3409a47842d1SChristoph Müllner                 case 5: op = rv_op_fltq_q; break;
3410a47842d1SChristoph Müllner                 }
3411a47842d1SChristoph Müllner                 break;
3412a47842d1SChristoph Müllner             case 89:
3413a47842d1SChristoph Müllner                 switch (((inst >> 12) & 0b111)) {
3414a47842d1SChristoph Müllner                 case 0: op = rv_op_fmvp_d_x; break;
3415a47842d1SChristoph Müllner                 }
3416a47842d1SChristoph Müllner                 break;
3417a47842d1SChristoph Müllner             case 91:
3418a47842d1SChristoph Müllner                 switch (((inst >> 12) & 0b111)) {
3419a47842d1SChristoph Müllner                 case 0: op = rv_op_fmvp_q_x; break;
3420ea103259SMichael Clark                 }
3421ea103259SMichael Clark                 break;
3422ea103259SMichael Clark             case 96:
34233bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3424ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_s; break;
3425ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_s; break;
3426ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_s; break;
3427ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_s; break;
3428ea103259SMichael Clark                 }
3429ea103259SMichael Clark                 break;
3430ea103259SMichael Clark             case 97:
34313bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3432ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_d; break;
3433ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_d; break;
3434ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_d; break;
3435ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_d; break;
3436a47842d1SChristoph Müllner                 case 8: op = rv_op_fcvtmod_w_d; break;
3437ea103259SMichael Clark                 }
3438ea103259SMichael Clark                 break;
3439ea103259SMichael Clark             case 99:
34403bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3441ea103259SMichael Clark                 case 0: op = rv_op_fcvt_w_q; break;
3442ea103259SMichael Clark                 case 1: op = rv_op_fcvt_wu_q; break;
3443ea103259SMichael Clark                 case 2: op = rv_op_fcvt_l_q; break;
3444ea103259SMichael Clark                 case 3: op = rv_op_fcvt_lu_q; break;
3445ea103259SMichael Clark                 }
3446ea103259SMichael Clark                 break;
3447ea103259SMichael Clark             case 104:
34483bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3449ea103259SMichael Clark                 case 0: op = rv_op_fcvt_s_w; break;
3450ea103259SMichael Clark                 case 1: op = rv_op_fcvt_s_wu; break;
3451ea103259SMichael Clark                 case 2: op = rv_op_fcvt_s_l; break;
3452ea103259SMichael Clark                 case 3: op = rv_op_fcvt_s_lu; break;
3453ea103259SMichael Clark                 }
3454ea103259SMichael Clark                 break;
3455ea103259SMichael Clark             case 105:
34563bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3457ea103259SMichael Clark                 case 0: op = rv_op_fcvt_d_w; break;
3458ea103259SMichael Clark                 case 1: op = rv_op_fcvt_d_wu; break;
3459ea103259SMichael Clark                 case 2: op = rv_op_fcvt_d_l; break;
3460ea103259SMichael Clark                 case 3: op = rv_op_fcvt_d_lu; break;
3461ea103259SMichael Clark                 }
3462ea103259SMichael Clark                 break;
3463ea103259SMichael Clark             case 107:
34643bd87176SWeiwei Li                 switch ((inst >> 20) & 0b11111) {
3465ea103259SMichael Clark                 case 0: op = rv_op_fcvt_q_w; break;
3466ea103259SMichael Clark                 case 1: op = rv_op_fcvt_q_wu; break;
3467ea103259SMichael Clark                 case 2: op = rv_op_fcvt_q_l; break;
3468ea103259SMichael Clark                 case 3: op = rv_op_fcvt_q_lu; break;
3469ea103259SMichael Clark                 }
3470ea103259SMichael Clark                 break;
3471ea103259SMichael Clark             case 112:
347298624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
347398624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3474ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_s; break;
3475ea103259SMichael Clark                 case 1: op = rv_op_fclass_s; break;
3476ea103259SMichael Clark                 }
3477ea103259SMichael Clark                 break;
3478ea103259SMichael Clark             case 113:
347998624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
348098624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3481ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_d; break;
3482ea103259SMichael Clark                 case 1: op = rv_op_fclass_d; break;
3483a47842d1SChristoph Müllner                 case 8: op = rv_op_fmvh_x_d; break;
3484ea103259SMichael Clark                 }
3485ea103259SMichael Clark                 break;
348632b2d75bSWeiwei Li             case 114:
348732b2d75bSWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
348832b2d75bSWeiwei Li                         ((inst >> 12) & 0b00000111)) {
348932b2d75bSWeiwei Li                 case 0: op = rv_op_fmv_x_h; break;
349032b2d75bSWeiwei Li                 }
349132b2d75bSWeiwei Li                 break;
3492ea103259SMichael Clark             case 115:
349398624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
349498624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3495ea103259SMichael Clark                 case 0: op = rv_op_fmv_x_q; break;
3496ea103259SMichael Clark                 case 1: op = rv_op_fclass_q; break;
3497a47842d1SChristoph Müllner                 case 8: op = rv_op_fmvh_x_q; break;
3498ea103259SMichael Clark                 }
3499ea103259SMichael Clark                 break;
3500ea103259SMichael Clark             case 120:
350198624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
350298624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3503ea103259SMichael Clark                 case 0: op = rv_op_fmv_s_x; break;
3504a47842d1SChristoph Müllner                 case 8: op = rv_op_fli_s; break;
3505ea103259SMichael Clark                 }
3506ea103259SMichael Clark                 break;
3507ea103259SMichael Clark             case 121:
350898624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
350998624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3510ea103259SMichael Clark                 case 0: op = rv_op_fmv_d_x; break;
3511a47842d1SChristoph Müllner                 case 8: op = rv_op_fli_d; break;
3512ea103259SMichael Clark                 }
3513ea103259SMichael Clark                 break;
351432b2d75bSWeiwei Li             case 122:
351532b2d75bSWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
351632b2d75bSWeiwei Li                         ((inst >> 12) & 0b00000111)) {
351732b2d75bSWeiwei Li                 case 0: op = rv_op_fmv_h_x; break;
3518a47842d1SChristoph Müllner                 case 8: op = rv_op_fli_h; break;
351932b2d75bSWeiwei Li                 }
352032b2d75bSWeiwei Li                 break;
3521ea103259SMichael Clark             case 123:
352298624d13SWeiwei Li                 switch (((inst >> 17) & 0b11111000) |
352398624d13SWeiwei Li                         ((inst >> 12) & 0b00000111)) {
3524ea103259SMichael Clark                 case 0: op = rv_op_fmv_q_x; break;
3525a47842d1SChristoph Müllner                 case 8: op = rv_op_fli_q; break;
3526ea103259SMichael Clark                 }
3527ea103259SMichael Clark                 break;
3528ea103259SMichael Clark             }
3529ea103259SMichael Clark             break;
353007f4964dSYang Liu         case 21:
35313bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
353207f4964dSYang Liu             case 0:
35333bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
353407f4964dSYang Liu                 case 0: op = rv_op_vadd_vv; break;
35359d92f56dSMax Chou                 case 1: op = rv_op_vandn_vv; break;
353607f4964dSYang Liu                 case 2: op = rv_op_vsub_vv; break;
353707f4964dSYang Liu                 case 4: op = rv_op_vminu_vv; break;
353807f4964dSYang Liu                 case 5: op = rv_op_vmin_vv; break;
353907f4964dSYang Liu                 case 6: op = rv_op_vmaxu_vv; break;
354007f4964dSYang Liu                 case 7: op = rv_op_vmax_vv; break;
354107f4964dSYang Liu                 case 9: op = rv_op_vand_vv; break;
354207f4964dSYang Liu                 case 10: op = rv_op_vor_vv; break;
354307f4964dSYang Liu                 case 11: op = rv_op_vxor_vv; break;
354407f4964dSYang Liu                 case 12: op = rv_op_vrgather_vv; break;
354507f4964dSYang Liu                 case 14: op = rv_op_vrgatherei16_vv; break;
354698624d13SWeiwei Li                 case 16:
354798624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
354898624d13SWeiwei Li                         op = rv_op_vadc_vvm;
354998624d13SWeiwei Li                     }
355098624d13SWeiwei Li                     break;
355107f4964dSYang Liu                 case 17: op = rv_op_vmadc_vvm; break;
355298624d13SWeiwei Li                 case 18:
355398624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
355498624d13SWeiwei Li                         op = rv_op_vsbc_vvm;
355598624d13SWeiwei Li                     }
355698624d13SWeiwei Li                     break;
355707f4964dSYang Liu                 case 19: op = rv_op_vmsbc_vvm; break;
35589d92f56dSMax Chou                 case 20: op = rv_op_vror_vv; break;
35599d92f56dSMax Chou                 case 21: op = rv_op_vrol_vv; break;
356007f4964dSYang Liu                 case 23:
356107f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
356207f4964dSYang Liu                         op = rv_op_vmv_v_v;
356307f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
356407f4964dSYang Liu                         op = rv_op_vmerge_vvm;
356507f4964dSYang Liu                     break;
356607f4964dSYang Liu                 case 24: op = rv_op_vmseq_vv; break;
356707f4964dSYang Liu                 case 25: op = rv_op_vmsne_vv; break;
356807f4964dSYang Liu                 case 26: op = rv_op_vmsltu_vv; break;
356907f4964dSYang Liu                 case 27: op = rv_op_vmslt_vv; break;
357007f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vv; break;
357107f4964dSYang Liu                 case 29: op = rv_op_vmsle_vv; break;
357207f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vv; break;
357307f4964dSYang Liu                 case 33: op = rv_op_vsadd_vv; break;
357407f4964dSYang Liu                 case 34: op = rv_op_vssubu_vv; break;
357507f4964dSYang Liu                 case 35: op = rv_op_vssub_vv; break;
357607f4964dSYang Liu                 case 37: op = rv_op_vsll_vv; break;
357707f4964dSYang Liu                 case 39: op = rv_op_vsmul_vv; break;
357807f4964dSYang Liu                 case 40: op = rv_op_vsrl_vv; break;
357907f4964dSYang Liu                 case 41: op = rv_op_vsra_vv; break;
358007f4964dSYang Liu                 case 42: op = rv_op_vssrl_vv; break;
358107f4964dSYang Liu                 case 43: op = rv_op_vssra_vv; break;
358207f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wv; break;
358307f4964dSYang Liu                 case 45: op = rv_op_vnsra_wv; break;
358407f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wv; break;
358507f4964dSYang Liu                 case 47: op = rv_op_vnclip_wv; break;
358607f4964dSYang Liu                 case 48: op = rv_op_vwredsumu_vs; break;
358707f4964dSYang Liu                 case 49: op = rv_op_vwredsum_vs; break;
35889d92f56dSMax Chou                 case 53: op = rv_op_vwsll_vv; break;
358907f4964dSYang Liu                 }
359007f4964dSYang Liu                 break;
359107f4964dSYang Liu             case 1:
35923bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
359307f4964dSYang Liu                 case 0: op = rv_op_vfadd_vv; break;
359407f4964dSYang Liu                 case 1: op = rv_op_vfredusum_vs; break;
359507f4964dSYang Liu                 case 2: op = rv_op_vfsub_vv; break;
359607f4964dSYang Liu                 case 3: op = rv_op_vfredosum_vs; break;
359707f4964dSYang Liu                 case 4: op = rv_op_vfmin_vv; break;
359807f4964dSYang Liu                 case 5: op = rv_op_vfredmin_vs; break;
359907f4964dSYang Liu                 case 6: op = rv_op_vfmax_vv; break;
360007f4964dSYang Liu                 case 7: op = rv_op_vfredmax_vs; break;
360107f4964dSYang Liu                 case 8: op = rv_op_vfsgnj_vv; break;
360207f4964dSYang Liu                 case 9: op = rv_op_vfsgnjn_vv; break;
360307f4964dSYang Liu                 case 10: op = rv_op_vfsgnjx_vv; break;
360407f4964dSYang Liu                 case 16:
36053bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
360607f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break;
360707f4964dSYang Liu                     }
360807f4964dSYang Liu                     break;
360907f4964dSYang Liu                 case 18:
36103bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
361107f4964dSYang Liu                     case 0: op = rv_op_vfcvt_xu_f_v; break;
361207f4964dSYang Liu                     case 1: op = rv_op_vfcvt_x_f_v; break;
361307f4964dSYang Liu                     case 2: op = rv_op_vfcvt_f_xu_v; break;
361407f4964dSYang Liu                     case 3: op = rv_op_vfcvt_f_x_v; break;
361507f4964dSYang Liu                     case 6: op = rv_op_vfcvt_rtz_xu_f_v; break;
361607f4964dSYang Liu                     case 7: op = rv_op_vfcvt_rtz_x_f_v; break;
361707f4964dSYang Liu                     case 8: op = rv_op_vfwcvt_xu_f_v; break;
361807f4964dSYang Liu                     case 9: op = rv_op_vfwcvt_x_f_v; break;
361907f4964dSYang Liu                     case 10: op = rv_op_vfwcvt_f_xu_v; break;
362007f4964dSYang Liu                     case 11: op = rv_op_vfwcvt_f_x_v; break;
362107f4964dSYang Liu                     case 12: op = rv_op_vfwcvt_f_f_v; break;
362232b2d75bSWeiwei Li                     case 13: op = rv_op_vfwcvtbf16_f_f_v; break;
362307f4964dSYang Liu                     case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break;
362407f4964dSYang Liu                     case 15: op = rv_op_vfwcvt_rtz_x_f_v; break;
362507f4964dSYang Liu                     case 16: op = rv_op_vfncvt_xu_f_w; break;
362607f4964dSYang Liu                     case 17: op = rv_op_vfncvt_x_f_w; break;
362707f4964dSYang Liu                     case 18: op = rv_op_vfncvt_f_xu_w; break;
362807f4964dSYang Liu                     case 19: op = rv_op_vfncvt_f_x_w; break;
362907f4964dSYang Liu                     case 20: op = rv_op_vfncvt_f_f_w; break;
363007f4964dSYang Liu                     case 21: op = rv_op_vfncvt_rod_f_f_w; break;
363107f4964dSYang Liu                     case 22: op = rv_op_vfncvt_rtz_xu_f_w; break;
363207f4964dSYang Liu                     case 23: op = rv_op_vfncvt_rtz_x_f_w; break;
363332b2d75bSWeiwei Li                     case 29: op = rv_op_vfncvtbf16_f_f_w; break;
363407f4964dSYang Liu                     }
363507f4964dSYang Liu                     break;
363607f4964dSYang Liu                 case 19:
36373bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
363807f4964dSYang Liu                     case 0: op = rv_op_vfsqrt_v; break;
363907f4964dSYang Liu                     case 4: op = rv_op_vfrsqrt7_v; break;
364007f4964dSYang Liu                     case 5: op = rv_op_vfrec7_v; break;
364107f4964dSYang Liu                     case 16: op = rv_op_vfclass_v; break;
364207f4964dSYang Liu                     }
364307f4964dSYang Liu                     break;
364407f4964dSYang Liu                 case 24: op = rv_op_vmfeq_vv; break;
364507f4964dSYang Liu                 case 25: op = rv_op_vmfle_vv; break;
364607f4964dSYang Liu                 case 27: op = rv_op_vmflt_vv; break;
364707f4964dSYang Liu                 case 28: op = rv_op_vmfne_vv; break;
364807f4964dSYang Liu                 case 32: op = rv_op_vfdiv_vv; break;
364907f4964dSYang Liu                 case 36: op = rv_op_vfmul_vv; break;
365007f4964dSYang Liu                 case 40: op = rv_op_vfmadd_vv; break;
365107f4964dSYang Liu                 case 41: op = rv_op_vfnmadd_vv; break;
365207f4964dSYang Liu                 case 42: op = rv_op_vfmsub_vv; break;
365307f4964dSYang Liu                 case 43: op = rv_op_vfnmsub_vv; break;
365407f4964dSYang Liu                 case 44: op = rv_op_vfmacc_vv; break;
365507f4964dSYang Liu                 case 45: op = rv_op_vfnmacc_vv; break;
365607f4964dSYang Liu                 case 46: op = rv_op_vfmsac_vv; break;
365707f4964dSYang Liu                 case 47: op = rv_op_vfnmsac_vv; break;
365807f4964dSYang Liu                 case 48: op = rv_op_vfwadd_vv; break;
365907f4964dSYang Liu                 case 49: op = rv_op_vfwredusum_vs; break;
366007f4964dSYang Liu                 case 50: op = rv_op_vfwsub_vv; break;
366107f4964dSYang Liu                 case 51: op = rv_op_vfwredosum_vs; break;
366207f4964dSYang Liu                 case 52: op = rv_op_vfwadd_wv; break;
366307f4964dSYang Liu                 case 54: op = rv_op_vfwsub_wv; break;
366407f4964dSYang Liu                 case 56: op = rv_op_vfwmul_vv; break;
366532b2d75bSWeiwei Li                 case 59: op = rv_op_vfwmaccbf16_vv; break;
366607f4964dSYang Liu                 case 60: op = rv_op_vfwmacc_vv; break;
366707f4964dSYang Liu                 case 61: op = rv_op_vfwnmacc_vv; break;
366807f4964dSYang Liu                 case 62: op = rv_op_vfwmsac_vv; break;
366907f4964dSYang Liu                 case 63: op = rv_op_vfwnmsac_vv; break;
367007f4964dSYang Liu                 }
367107f4964dSYang Liu                 break;
367207f4964dSYang Liu             case 2:
36733bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
367407f4964dSYang Liu                 case 0: op = rv_op_vredsum_vs; break;
367507f4964dSYang Liu                 case 1: op = rv_op_vredand_vs; break;
367607f4964dSYang Liu                 case 2: op = rv_op_vredor_vs; break;
367707f4964dSYang Liu                 case 3: op = rv_op_vredxor_vs; break;
367807f4964dSYang Liu                 case 4: op = rv_op_vredminu_vs; break;
367907f4964dSYang Liu                 case 5: op = rv_op_vredmin_vs; break;
368007f4964dSYang Liu                 case 6: op = rv_op_vredmaxu_vs; break;
368107f4964dSYang Liu                 case 7: op = rv_op_vredmax_vs; break;
368207f4964dSYang Liu                 case 8: op = rv_op_vaaddu_vv; break;
368307f4964dSYang Liu                 case 9: op = rv_op_vaadd_vv; break;
368407f4964dSYang Liu                 case 10: op = rv_op_vasubu_vv; break;
368507f4964dSYang Liu                 case 11: op = rv_op_vasub_vv; break;
36869d92f56dSMax Chou                 case 12: op = rv_op_vclmul_vv; break;
36879d92f56dSMax Chou                 case 13: op = rv_op_vclmulh_vv; break;
368807f4964dSYang Liu                 case 16:
36893bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
369007f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break;
369107f4964dSYang Liu                     case 16: op = rv_op_vcpop_m; break;
369207f4964dSYang Liu                     case 17: op = rv_op_vfirst_m; break;
369307f4964dSYang Liu                     }
369407f4964dSYang Liu                     break;
369507f4964dSYang Liu                 case 18:
36963bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
369707f4964dSYang Liu                     case 2: op = rv_op_vzext_vf8; break;
369807f4964dSYang Liu                     case 3: op = rv_op_vsext_vf8; break;
369907f4964dSYang Liu                     case 4: op = rv_op_vzext_vf4; break;
370007f4964dSYang Liu                     case 5: op = rv_op_vsext_vf4; break;
370107f4964dSYang Liu                     case 6: op = rv_op_vzext_vf2; break;
370207f4964dSYang Liu                     case 7: op = rv_op_vsext_vf2; break;
37039d92f56dSMax Chou                     case 8: op = rv_op_vbrev8_v; break;
37049d92f56dSMax Chou                     case 9: op = rv_op_vrev8_v; break;
37059d92f56dSMax Chou                     case 10: op = rv_op_vbrev_v; break;
37069d92f56dSMax Chou                     case 12: op = rv_op_vclz_v; break;
37079d92f56dSMax Chou                     case 13: op = rv_op_vctz_v; break;
37089d92f56dSMax Chou                     case 14: op = rv_op_vcpop_v; break;
370907f4964dSYang Liu                     }
371007f4964dSYang Liu                     break;
371107f4964dSYang Liu                 case 20:
37123bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
371307f4964dSYang Liu                     case 1: op = rv_op_vmsbf_m;  break;
371407f4964dSYang Liu                     case 2: op = rv_op_vmsof_m; break;
371507f4964dSYang Liu                     case 3: op = rv_op_vmsif_m; break;
371607f4964dSYang Liu                     case 16: op = rv_op_viota_m; break;
371798624d13SWeiwei Li                     case 17:
371898624d13SWeiwei Li                         if (((inst >> 20) & 0b11111) == 0) {
371998624d13SWeiwei Li                             op = rv_op_vid_v;
372098624d13SWeiwei Li                         }
372198624d13SWeiwei Li                         break;
372207f4964dSYang Liu                     }
372307f4964dSYang Liu                     break;
372407f4964dSYang Liu                 case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break;
372507f4964dSYang Liu                 case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break;
372607f4964dSYang Liu                 case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break;
372707f4964dSYang Liu                 case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break;
372807f4964dSYang Liu                 case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break;
372907f4964dSYang Liu                 case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break;
373007f4964dSYang Liu                 case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break;
373107f4964dSYang Liu                 case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break;
373207f4964dSYang Liu                 case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break;
373307f4964dSYang Liu                 case 32: op = rv_op_vdivu_vv; break;
373407f4964dSYang Liu                 case 33: op = rv_op_vdiv_vv; break;
373507f4964dSYang Liu                 case 34: op = rv_op_vremu_vv; break;
373607f4964dSYang Liu                 case 35: op = rv_op_vrem_vv; break;
373707f4964dSYang Liu                 case 36: op = rv_op_vmulhu_vv; break;
373807f4964dSYang Liu                 case 37: op = rv_op_vmul_vv; break;
373907f4964dSYang Liu                 case 38: op = rv_op_vmulhsu_vv; break;
374007f4964dSYang Liu                 case 39: op = rv_op_vmulh_vv; break;
374107f4964dSYang Liu                 case 41: op = rv_op_vmadd_vv; break;
374207f4964dSYang Liu                 case 43: op = rv_op_vnmsub_vv; break;
374307f4964dSYang Liu                 case 45: op = rv_op_vmacc_vv; break;
374407f4964dSYang Liu                 case 47: op = rv_op_vnmsac_vv; break;
374507f4964dSYang Liu                 case 48: op = rv_op_vwaddu_vv; break;
374607f4964dSYang Liu                 case 49: op = rv_op_vwadd_vv; break;
374707f4964dSYang Liu                 case 50: op = rv_op_vwsubu_vv; break;
374807f4964dSYang Liu                 case 51: op = rv_op_vwsub_vv; break;
374907f4964dSYang Liu                 case 52: op = rv_op_vwaddu_wv; break;
375007f4964dSYang Liu                 case 53: op = rv_op_vwadd_wv; break;
375107f4964dSYang Liu                 case 54: op = rv_op_vwsubu_wv; break;
375207f4964dSYang Liu                 case 55: op = rv_op_vwsub_wv; break;
375307f4964dSYang Liu                 case 56: op = rv_op_vwmulu_vv; break;
375407f4964dSYang Liu                 case 58: op = rv_op_vwmulsu_vv; break;
375507f4964dSYang Liu                 case 59: op = rv_op_vwmul_vv; break;
375607f4964dSYang Liu                 case 60: op = rv_op_vwmaccu_vv; break;
375707f4964dSYang Liu                 case 61: op = rv_op_vwmacc_vv; break;
375807f4964dSYang Liu                 case 63: op = rv_op_vwmaccsu_vv; break;
375907f4964dSYang Liu                 }
376007f4964dSYang Liu                 break;
376107f4964dSYang Liu             case 3:
37623bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
376307f4964dSYang Liu                 case 0: op = rv_op_vadd_vi; break;
376407f4964dSYang Liu                 case 3: op = rv_op_vrsub_vi; break;
376507f4964dSYang Liu                 case 9: op = rv_op_vand_vi; break;
376607f4964dSYang Liu                 case 10: op = rv_op_vor_vi; break;
376707f4964dSYang Liu                 case 11: op = rv_op_vxor_vi; break;
376807f4964dSYang Liu                 case 12: op = rv_op_vrgather_vi; break;
376907f4964dSYang Liu                 case 14: op = rv_op_vslideup_vi; break;
377007f4964dSYang Liu                 case 15: op = rv_op_vslidedown_vi; break;
377198624d13SWeiwei Li                 case 16:
377298624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
377398624d13SWeiwei Li                         op = rv_op_vadc_vim;
377498624d13SWeiwei Li                     }
377598624d13SWeiwei Li                     break;
377607f4964dSYang Liu                 case 17: op = rv_op_vmadc_vim; break;
37779d92f56dSMax Chou                 case 20: case 21: op = rv_op_vror_vi; break;
377807f4964dSYang Liu                 case 23:
377907f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
378007f4964dSYang Liu                         op = rv_op_vmv_v_i;
378107f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
378207f4964dSYang Liu                         op = rv_op_vmerge_vim;
378307f4964dSYang Liu                     break;
378407f4964dSYang Liu                 case 24: op = rv_op_vmseq_vi; break;
378507f4964dSYang Liu                 case 25: op = rv_op_vmsne_vi; break;
378607f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vi; break;
378707f4964dSYang Liu                 case 29: op = rv_op_vmsle_vi; break;
378807f4964dSYang Liu                 case 30: op = rv_op_vmsgtu_vi; break;
378907f4964dSYang Liu                 case 31: op = rv_op_vmsgt_vi; break;
379007f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vi; break;
379107f4964dSYang Liu                 case 33: op = rv_op_vsadd_vi; break;
379207f4964dSYang Liu                 case 37: op = rv_op_vsll_vi; break;
379307f4964dSYang Liu                 case 39:
37943bd87176SWeiwei Li                     switch ((inst >> 15) & 0b11111) {
379507f4964dSYang Liu                     case 0: op = rv_op_vmv1r_v; break;
379607f4964dSYang Liu                     case 1: op = rv_op_vmv2r_v; break;
379707f4964dSYang Liu                     case 3: op = rv_op_vmv4r_v; break;
379807f4964dSYang Liu                     case 7: op = rv_op_vmv8r_v; break;
379907f4964dSYang Liu                     }
380007f4964dSYang Liu                     break;
380107f4964dSYang Liu                 case 40: op = rv_op_vsrl_vi; break;
380207f4964dSYang Liu                 case 41: op = rv_op_vsra_vi; break;
380307f4964dSYang Liu                 case 42: op = rv_op_vssrl_vi; break;
380407f4964dSYang Liu                 case 43: op = rv_op_vssra_vi; break;
380507f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wi; break;
380607f4964dSYang Liu                 case 45: op = rv_op_vnsra_wi; break;
380707f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wi; break;
380807f4964dSYang Liu                 case 47: op = rv_op_vnclip_wi; break;
38099d92f56dSMax Chou                 case 53: op = rv_op_vwsll_vi; break;
381007f4964dSYang Liu                 }
381107f4964dSYang Liu                 break;
381207f4964dSYang Liu             case 4:
38133bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
381407f4964dSYang Liu                 case 0: op = rv_op_vadd_vx; break;
38159d92f56dSMax Chou                 case 1: op = rv_op_vandn_vx; break;
381607f4964dSYang Liu                 case 2: op = rv_op_vsub_vx; break;
381707f4964dSYang Liu                 case 3: op = rv_op_vrsub_vx; break;
381807f4964dSYang Liu                 case 4: op = rv_op_vminu_vx; break;
381907f4964dSYang Liu                 case 5: op = rv_op_vmin_vx; break;
382007f4964dSYang Liu                 case 6: op = rv_op_vmaxu_vx; break;
382107f4964dSYang Liu                 case 7: op = rv_op_vmax_vx; break;
382207f4964dSYang Liu                 case 9: op = rv_op_vand_vx; break;
382307f4964dSYang Liu                 case 10: op = rv_op_vor_vx; break;
382407f4964dSYang Liu                 case 11: op = rv_op_vxor_vx; break;
382507f4964dSYang Liu                 case 12: op = rv_op_vrgather_vx; break;
382607f4964dSYang Liu                 case 14: op = rv_op_vslideup_vx; break;
382707f4964dSYang Liu                 case 15: op = rv_op_vslidedown_vx; break;
382898624d13SWeiwei Li                 case 16:
382998624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
383098624d13SWeiwei Li                         op = rv_op_vadc_vxm;
383198624d13SWeiwei Li                     }
383298624d13SWeiwei Li                     break;
383307f4964dSYang Liu                 case 17: op = rv_op_vmadc_vxm; break;
383498624d13SWeiwei Li                 case 18:
383598624d13SWeiwei Li                     if (((inst >> 25) & 1) == 0) {
383698624d13SWeiwei Li                         op = rv_op_vsbc_vxm;
383798624d13SWeiwei Li                     }
383898624d13SWeiwei Li                     break;
383907f4964dSYang Liu                 case 19: op = rv_op_vmsbc_vxm; break;
38409d92f56dSMax Chou                 case 20: op = rv_op_vror_vx; break;
38419d92f56dSMax Chou                 case 21: op = rv_op_vrol_vx; break;
384207f4964dSYang Liu                 case 23:
384307f4964dSYang Liu                     if (((inst >> 20) & 0b111111) == 32)
384407f4964dSYang Liu                         op = rv_op_vmv_v_x;
384507f4964dSYang Liu                     else if (((inst >> 25) & 1) == 0)
384607f4964dSYang Liu                         op = rv_op_vmerge_vxm;
384707f4964dSYang Liu                     break;
384807f4964dSYang Liu                 case 24: op = rv_op_vmseq_vx; break;
384907f4964dSYang Liu                 case 25: op = rv_op_vmsne_vx; break;
385007f4964dSYang Liu                 case 26: op = rv_op_vmsltu_vx; break;
385107f4964dSYang Liu                 case 27: op = rv_op_vmslt_vx; break;
385207f4964dSYang Liu                 case 28: op = rv_op_vmsleu_vx; break;
385307f4964dSYang Liu                 case 29: op = rv_op_vmsle_vx; break;
385407f4964dSYang Liu                 case 30: op = rv_op_vmsgtu_vx; break;
385507f4964dSYang Liu                 case 31: op = rv_op_vmsgt_vx; break;
385607f4964dSYang Liu                 case 32: op = rv_op_vsaddu_vx; break;
385707f4964dSYang Liu                 case 33: op = rv_op_vsadd_vx; break;
385807f4964dSYang Liu                 case 34: op = rv_op_vssubu_vx; break;
385907f4964dSYang Liu                 case 35: op = rv_op_vssub_vx; break;
386007f4964dSYang Liu                 case 37: op = rv_op_vsll_vx; break;
386107f4964dSYang Liu                 case 39: op = rv_op_vsmul_vx; break;
386207f4964dSYang Liu                 case 40: op = rv_op_vsrl_vx; break;
386307f4964dSYang Liu                 case 41: op = rv_op_vsra_vx; break;
386407f4964dSYang Liu                 case 42: op = rv_op_vssrl_vx; break;
386507f4964dSYang Liu                 case 43: op = rv_op_vssra_vx; break;
386607f4964dSYang Liu                 case 44: op = rv_op_vnsrl_wx; break;
386707f4964dSYang Liu                 case 45: op = rv_op_vnsra_wx; break;
386807f4964dSYang Liu                 case 46: op = rv_op_vnclipu_wx; break;
386907f4964dSYang Liu                 case 47: op = rv_op_vnclip_wx; break;
38709d92f56dSMax Chou                 case 53: op = rv_op_vwsll_vx; break;
387107f4964dSYang Liu                 }
387207f4964dSYang Liu                 break;
387307f4964dSYang Liu             case 5:
38743bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
387507f4964dSYang Liu                 case 0: op = rv_op_vfadd_vf; break;
387607f4964dSYang Liu                 case 2: op = rv_op_vfsub_vf; break;
387707f4964dSYang Liu                 case 4: op = rv_op_vfmin_vf; break;
387807f4964dSYang Liu                 case 6: op = rv_op_vfmax_vf; break;
387907f4964dSYang Liu                 case 8: op = rv_op_vfsgnj_vf; break;
388007f4964dSYang Liu                 case 9: op = rv_op_vfsgnjn_vf; break;
388107f4964dSYang Liu                 case 10: op = rv_op_vfsgnjx_vf; break;
388207f4964dSYang Liu                 case 14: op = rv_op_vfslide1up_vf; break;
388307f4964dSYang Liu                 case 15: op = rv_op_vfslide1down_vf; break;
388407f4964dSYang Liu                 case 16:
38853bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
388607f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break;
388707f4964dSYang Liu                     }
388807f4964dSYang Liu                     break;
388907f4964dSYang Liu                 case 23:
389007f4964dSYang Liu                     if (((inst >> 25) & 1) == 0)
389107f4964dSYang Liu                         op = rv_op_vfmerge_vfm;
389207f4964dSYang Liu                     else if (((inst >> 20) & 0b111111) == 32)
389307f4964dSYang Liu                         op = rv_op_vfmv_v_f;
389407f4964dSYang Liu                     break;
389507f4964dSYang Liu                 case 24: op = rv_op_vmfeq_vf; break;
389607f4964dSYang Liu                 case 25: op = rv_op_vmfle_vf; break;
389707f4964dSYang Liu                 case 27: op = rv_op_vmflt_vf; break;
389807f4964dSYang Liu                 case 28: op = rv_op_vmfne_vf; break;
389907f4964dSYang Liu                 case 29: op = rv_op_vmfgt_vf; break;
390007f4964dSYang Liu                 case 31: op = rv_op_vmfge_vf; break;
390107f4964dSYang Liu                 case 32: op = rv_op_vfdiv_vf; break;
390207f4964dSYang Liu                 case 33: op = rv_op_vfrdiv_vf; break;
390307f4964dSYang Liu                 case 36: op = rv_op_vfmul_vf; break;
390407f4964dSYang Liu                 case 39: op = rv_op_vfrsub_vf; break;
390507f4964dSYang Liu                 case 40: op = rv_op_vfmadd_vf; break;
390607f4964dSYang Liu                 case 41: op = rv_op_vfnmadd_vf; break;
390707f4964dSYang Liu                 case 42: op = rv_op_vfmsub_vf; break;
390807f4964dSYang Liu                 case 43: op = rv_op_vfnmsub_vf; break;
390907f4964dSYang Liu                 case 44: op = rv_op_vfmacc_vf; break;
391007f4964dSYang Liu                 case 45: op = rv_op_vfnmacc_vf; break;
391107f4964dSYang Liu                 case 46: op = rv_op_vfmsac_vf; break;
391207f4964dSYang Liu                 case 47: op = rv_op_vfnmsac_vf; break;
391307f4964dSYang Liu                 case 48: op = rv_op_vfwadd_vf; break;
391407f4964dSYang Liu                 case 50: op = rv_op_vfwsub_vf; break;
391507f4964dSYang Liu                 case 52: op = rv_op_vfwadd_wf; break;
391607f4964dSYang Liu                 case 54: op = rv_op_vfwsub_wf; break;
391707f4964dSYang Liu                 case 56: op = rv_op_vfwmul_vf; break;
391832b2d75bSWeiwei Li                 case 59: op = rv_op_vfwmaccbf16_vf; break;
391907f4964dSYang Liu                 case 60: op = rv_op_vfwmacc_vf; break;
392007f4964dSYang Liu                 case 61: op = rv_op_vfwnmacc_vf; break;
392107f4964dSYang Liu                 case 62: op = rv_op_vfwmsac_vf; break;
392207f4964dSYang Liu                 case 63: op = rv_op_vfwnmsac_vf; break;
392307f4964dSYang Liu                 }
392407f4964dSYang Liu                 break;
392507f4964dSYang Liu             case 6:
39263bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
392707f4964dSYang Liu                 case 8: op = rv_op_vaaddu_vx; break;
392807f4964dSYang Liu                 case 9: op = rv_op_vaadd_vx; break;
392907f4964dSYang Liu                 case 10: op = rv_op_vasubu_vx; break;
393007f4964dSYang Liu                 case 11: op = rv_op_vasub_vx; break;
39319d92f56dSMax Chou                 case 12: op = rv_op_vclmul_vx; break;
39329d92f56dSMax Chou                 case 13: op = rv_op_vclmulh_vx; break;
393307f4964dSYang Liu                 case 14: op = rv_op_vslide1up_vx; break;
393407f4964dSYang Liu                 case 15: op = rv_op_vslide1down_vx; break;
393507f4964dSYang Liu                 case 16:
39363bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
393707f4964dSYang Liu                     case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break;
393807f4964dSYang Liu                     }
393907f4964dSYang Liu                     break;
394007f4964dSYang Liu                 case 32: op = rv_op_vdivu_vx; break;
394107f4964dSYang Liu                 case 33: op = rv_op_vdiv_vx; break;
394207f4964dSYang Liu                 case 34: op = rv_op_vremu_vx; break;
394307f4964dSYang Liu                 case 35: op = rv_op_vrem_vx; break;
394407f4964dSYang Liu                 case 36: op = rv_op_vmulhu_vx; break;
394507f4964dSYang Liu                 case 37: op = rv_op_vmul_vx; break;
394607f4964dSYang Liu                 case 38: op = rv_op_vmulhsu_vx; break;
394707f4964dSYang Liu                 case 39: op = rv_op_vmulh_vx; break;
394807f4964dSYang Liu                 case 41: op = rv_op_vmadd_vx; break;
394907f4964dSYang Liu                 case 43: op = rv_op_vnmsub_vx; break;
395007f4964dSYang Liu                 case 45: op = rv_op_vmacc_vx; break;
395107f4964dSYang Liu                 case 47: op = rv_op_vnmsac_vx; break;
395207f4964dSYang Liu                 case 48: op = rv_op_vwaddu_vx; break;
395307f4964dSYang Liu                 case 49: op = rv_op_vwadd_vx; break;
395407f4964dSYang Liu                 case 50: op = rv_op_vwsubu_vx; break;
395507f4964dSYang Liu                 case 51: op = rv_op_vwsub_vx; break;
395607f4964dSYang Liu                 case 52: op = rv_op_vwaddu_wx; break;
395707f4964dSYang Liu                 case 53: op = rv_op_vwadd_wx; break;
395807f4964dSYang Liu                 case 54: op = rv_op_vwsubu_wx; break;
395907f4964dSYang Liu                 case 55: op = rv_op_vwsub_wx; break;
396007f4964dSYang Liu                 case 56: op = rv_op_vwmulu_vx; break;
396107f4964dSYang Liu                 case 58: op = rv_op_vwmulsu_vx; break;
396207f4964dSYang Liu                 case 59: op = rv_op_vwmul_vx; break;
396307f4964dSYang Liu                 case 60: op = rv_op_vwmaccu_vx; break;
396407f4964dSYang Liu                 case 61: op = rv_op_vwmacc_vx; break;
396507f4964dSYang Liu                 case 62: op = rv_op_vwmaccus_vx; break;
396607f4964dSYang Liu                 case 63: op = rv_op_vwmaccsu_vx; break;
396707f4964dSYang Liu                 }
396807f4964dSYang Liu                 break;
396907f4964dSYang Liu             case 7:
397007f4964dSYang Liu                 if (((inst >> 31) & 1) == 0) {
397107f4964dSYang Liu                     op = rv_op_vsetvli;
397207f4964dSYang Liu                 } else if ((inst >> 30) & 1) {
397307f4964dSYang Liu                     op = rv_op_vsetivli;
397407f4964dSYang Liu                 } else if (((inst >> 25) & 0b11111) == 0) {
397507f4964dSYang Liu                     op = rv_op_vsetvl;
397607f4964dSYang Liu                 }
397707f4964dSYang Liu                 break;
397807f4964dSYang Liu             }
397907f4964dSYang Liu             break;
3980ea103259SMichael Clark         case 22:
39813bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
3982ea103259SMichael Clark             case 0: op = rv_op_addid; break;
3983ea103259SMichael Clark             case 1:
39843bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
3985ea103259SMichael Clark                 case 0: op = rv_op_sllid; break;
3986ea103259SMichael Clark                 }
3987ea103259SMichael Clark                 break;
3988ea103259SMichael Clark             case 5:
39893bd87176SWeiwei Li                 switch ((inst >> 26) & 0b111111) {
3990ea103259SMichael Clark                 case 0: op = rv_op_srlid; break;
3991ea103259SMichael Clark                 case 16: op = rv_op_sraid; break;
3992ea103259SMichael Clark                 }
3993ea103259SMichael Clark                 break;
3994ea103259SMichael Clark             }
3995ea103259SMichael Clark             break;
3996ea103259SMichael Clark         case 24:
39973bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
3998ea103259SMichael Clark             case 0: op = rv_op_beq; break;
3999ea103259SMichael Clark             case 1: op = rv_op_bne; break;
4000ea103259SMichael Clark             case 4: op = rv_op_blt; break;
4001ea103259SMichael Clark             case 5: op = rv_op_bge; break;
4002ea103259SMichael Clark             case 6: op = rv_op_bltu; break;
4003ea103259SMichael Clark             case 7: op = rv_op_bgeu; break;
4004ea103259SMichael Clark             }
4005ea103259SMichael Clark             break;
4006ea103259SMichael Clark         case 25:
40073bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
4008ea103259SMichael Clark             case 0: op = rv_op_jalr; break;
4009ea103259SMichael Clark             }
4010ea103259SMichael Clark             break;
4011ea103259SMichael Clark         case 27: op = rv_op_jal; break;
4012ea103259SMichael Clark         case 28:
40133bd87176SWeiwei Li             switch ((inst >> 12) & 0b111) {
4014ea103259SMichael Clark             case 0:
401598624d13SWeiwei Li                 switch (((inst >> 20) & 0b111111100000) |
401698624d13SWeiwei Li                         ((inst >> 7) & 0b000000011111)) {
4017ea103259SMichael Clark                 case 0:
40183bd87176SWeiwei Li                     switch ((inst >> 15) & 0b1111111111) {
4019ea103259SMichael Clark                     case 0: op = rv_op_ecall; break;
4020ea103259SMichael Clark                     case 32: op = rv_op_ebreak; break;
4021ea103259SMichael Clark                     case 64: op = rv_op_uret; break;
40224d46d84eSBalaji Ravikumar                     case 416: op = rv_op_wrs_nto; break;
40234d46d84eSBalaji Ravikumar                     case 928: op = rv_op_wrs_sto; break;
4024ea103259SMichael Clark                     }
4025ea103259SMichael Clark                     break;
4026ea103259SMichael Clark                 case 256:
40273bd87176SWeiwei Li                     switch ((inst >> 20) & 0b11111) {
4028ea103259SMichael Clark                     case 2:
40293bd87176SWeiwei Li                         switch ((inst >> 15) & 0b11111) {
4030ea103259SMichael Clark                         case 0: op = rv_op_sret; break;
4031ea103259SMichael Clark                         }
4032ea103259SMichael Clark                         break;
4033ea103259SMichael Clark                     case 4: op = rv_op_sfence_vm; break;
4034ea103259SMichael Clark                     case 5:
40353bd87176SWeiwei Li                         switch ((inst >> 15) & 0b11111) {
4036ea103259SMichael Clark                         case 0: op = rv_op_wfi; break;
4037ea103259SMichael Clark                         }
4038ea103259SMichael Clark                         break;
4039ea103259SMichael Clark                     }
4040ea103259SMichael Clark                     break;
4041ea103259SMichael Clark                 case 288: op = rv_op_sfence_vma; break;
4042ea103259SMichael Clark                 case 512:
40433bd87176SWeiwei Li                     switch ((inst >> 15) & 0b1111111111) {
4044ea103259SMichael Clark                     case 64: op = rv_op_hret; break;
4045ea103259SMichael Clark                     }
4046ea103259SMichael Clark                     break;
4047ea103259SMichael Clark                 case 768:
40483bd87176SWeiwei Li                     switch ((inst >> 15) & 0b1111111111) {
4049ea103259SMichael Clark                     case 64: op = rv_op_mret; break;
4050ea103259SMichael Clark                     }
4051ea103259SMichael Clark                     break;
4052ea103259SMichael Clark                 case 1952:
40533bd87176SWeiwei Li                     switch ((inst >> 15) & 0b1111111111) {
4054ea103259SMichael Clark                     case 576: op = rv_op_dret; break;
4055ea103259SMichael Clark                     }
4056ea103259SMichael Clark                     break;
4057ea103259SMichael Clark                 }
4058ea103259SMichael Clark                 break;
4059ea103259SMichael Clark             case 1: op = rv_op_csrrw; break;
4060ea103259SMichael Clark             case 2: op = rv_op_csrrs; break;
4061ea103259SMichael Clark             case 3: op = rv_op_csrrc; break;
4062d98883d1SLIU Zhiwei             case 4:
4063f65f3ebfSLIU Zhiwei                 if (dec->cfg && dec->cfg->ext_zimop) {
4064b9080d07SDeepak Gupta                     int imm_mop5, imm_mop3, reg_num;
4065d98883d1SLIU Zhiwei                     if ((extract32(inst, 22, 10) & 0b1011001111)
4066d98883d1SLIU Zhiwei                         == 0b1000000111) {
4067d98883d1SLIU Zhiwei                         imm_mop5 = deposit32(deposit32(extract32(inst, 20, 2),
4068d98883d1SLIU Zhiwei                                                        2, 2,
4069d98883d1SLIU Zhiwei                                                        extract32(inst, 26, 2)),
4070d98883d1SLIU Zhiwei                                              4, 1, extract32(inst, 30, 1));
4071d98883d1SLIU Zhiwei                         op = rv_mop_r_0 + imm_mop5;
4072b9080d07SDeepak Gupta                         /* if zicfiss enabled and mop5 is shadow stack */
4073b9080d07SDeepak Gupta                         if (dec->cfg->ext_zicfiss &&
4074b9080d07SDeepak Gupta                             ((imm_mop5 & 0b11100) == 0b11100)) {
4075b9080d07SDeepak Gupta                                 /* rs1=0 means ssrdp */
4076b9080d07SDeepak Gupta                                 if ((inst & (0b011111 << 15)) == 0) {
4077b9080d07SDeepak Gupta                                     op = rv_op_ssrdp;
4078b9080d07SDeepak Gupta                                 }
4079b9080d07SDeepak Gupta                                 /* rd=0 means sspopchk */
4080b9080d07SDeepak Gupta                                 reg_num = (inst >> 15) & 0b011111;
4081b9080d07SDeepak Gupta                                 if (((inst & (0b011111 << 7)) == 0) &&
4082b9080d07SDeepak Gupta                                     ((reg_num == 1) || (reg_num == 5))) {
4083b9080d07SDeepak Gupta                                     op = rv_op_sspopchk;
4084b9080d07SDeepak Gupta                                 }
4085b9080d07SDeepak Gupta                         }
4086d98883d1SLIU Zhiwei                     } else if ((extract32(inst, 25, 7) & 0b1011001)
4087d98883d1SLIU Zhiwei                                == 0b1000001) {
4088d98883d1SLIU Zhiwei                         imm_mop3 = deposit32(extract32(inst, 26, 2),
4089d98883d1SLIU Zhiwei                                              2, 1, extract32(inst, 30, 1));
4090d98883d1SLIU Zhiwei                         op = rv_mop_rr_0 + imm_mop3;
4091b9080d07SDeepak Gupta                         /* if zicfiss enabled and mop3 is shadow stack */
4092b9080d07SDeepak Gupta                         if (dec->cfg->ext_zicfiss &&
4093b9080d07SDeepak Gupta                             ((imm_mop3 & 0b111) == 0b111)) {
4094b9080d07SDeepak Gupta                                 /* rs1=0 and rd=0 means sspush */
4095b9080d07SDeepak Gupta                                 reg_num = (inst >> 20) & 0b011111;
4096b9080d07SDeepak Gupta                                 if (((inst & (0b011111 << 15)) == 0) &&
4097b9080d07SDeepak Gupta                                     ((inst & (0b011111 << 7)) == 0) &&
4098b9080d07SDeepak Gupta                                     ((reg_num == 1) || (reg_num == 5))) {
4099b9080d07SDeepak Gupta                                     op = rv_op_sspush;
4100b9080d07SDeepak Gupta                                 }
4101b9080d07SDeepak Gupta                         }
4102d98883d1SLIU Zhiwei                     }
4103d98883d1SLIU Zhiwei                 }
4104d98883d1SLIU Zhiwei                 break;
4105ea103259SMichael Clark             case 5: op = rv_op_csrrwi; break;
4106ea103259SMichael Clark             case 6: op = rv_op_csrrsi; break;
4107ea103259SMichael Clark             case 7: op = rv_op_csrrci; break;
4108ea103259SMichael Clark             }
4109ea103259SMichael Clark             break;
41109d92f56dSMax Chou         case 29:
41119d92f56dSMax Chou             if (((inst >> 25) & 1) == 1 && ((inst >> 12) & 0b111) == 2) {
41129d92f56dSMax Chou                 switch ((inst >> 26) & 0b111111) {
41139d92f56dSMax Chou                 case 32: op = rv_op_vsm3me_vv; break;
41149d92f56dSMax Chou                 case 33: op = rv_op_vsm4k_vi; break;
41159d92f56dSMax Chou                 case 34: op = rv_op_vaeskf1_vi; break;
41169d92f56dSMax Chou                 case 40:
41179d92f56dSMax Chou                     switch ((inst >> 15) & 0b11111) {
41189d92f56dSMax Chou                     case 0: op = rv_op_vaesdm_vv; break;
41199d92f56dSMax Chou                     case 1: op = rv_op_vaesdf_vv; break;
41209d92f56dSMax Chou                     case 2: op = rv_op_vaesem_vv; break;
41219d92f56dSMax Chou                     case 3: op = rv_op_vaesef_vv; break;
41229d92f56dSMax Chou                     case 16: op = rv_op_vsm4r_vv; break;
41239d92f56dSMax Chou                     case 17: op = rv_op_vgmul_vv; break;
41249d92f56dSMax Chou                     }
41259d92f56dSMax Chou                     break;
41269d92f56dSMax Chou                 case 41:
41279d92f56dSMax Chou                     switch ((inst >> 15) & 0b11111) {
41289d92f56dSMax Chou                     case 0: op = rv_op_vaesdm_vs; break;
41299d92f56dSMax Chou                     case 1: op = rv_op_vaesdf_vs; break;
41309d92f56dSMax Chou                     case 2: op = rv_op_vaesem_vs; break;
41319d92f56dSMax Chou                     case 3: op = rv_op_vaesef_vs; break;
41329d92f56dSMax Chou                     case 7: op = rv_op_vaesz_vs; break;
41339d92f56dSMax Chou                     case 16: op = rv_op_vsm4r_vs; break;
41349d92f56dSMax Chou                     }
41359d92f56dSMax Chou                     break;
41369d92f56dSMax Chou                 case 42: op = rv_op_vaeskf2_vi; break;
41379d92f56dSMax Chou                 case 43: op = rv_op_vsm3c_vi; break;
41389d92f56dSMax Chou                 case 44: op = rv_op_vghsh_vv; break;
41399d92f56dSMax Chou                 case 45: op = rv_op_vsha2ms_vv; break;
41409d92f56dSMax Chou                 case 46: op = rv_op_vsha2ch_vv; break;
41419d92f56dSMax Chou                 case 47: op = rv_op_vsha2cl_vv; break;
41429d92f56dSMax Chou                 }
41439d92f56dSMax Chou             }
41449d92f56dSMax Chou             break;
4145ea103259SMichael Clark         case 30:
414698624d13SWeiwei Li             switch (((inst >> 22) & 0b1111111000) |
414798624d13SWeiwei Li                     ((inst >> 12) & 0b0000000111)) {
4148ea103259SMichael Clark             case 0: op = rv_op_addd; break;
4149ea103259SMichael Clark             case 1: op = rv_op_slld; break;
4150ea103259SMichael Clark             case 5: op = rv_op_srld; break;
4151ea103259SMichael Clark             case 8: op = rv_op_muld; break;
4152ea103259SMichael Clark             case 12: op = rv_op_divd; break;
4153ea103259SMichael Clark             case 13: op = rv_op_divud; break;
4154ea103259SMichael Clark             case 14: op = rv_op_remd; break;
4155ea103259SMichael Clark             case 15: op = rv_op_remud; break;
4156ea103259SMichael Clark             case 256: op = rv_op_subd; break;
4157ea103259SMichael Clark             case 261: op = rv_op_srad; break;
4158ea103259SMichael Clark             }
4159ea103259SMichael Clark             break;
4160ea103259SMichael Clark         }
4161ea103259SMichael Clark         break;
4162ea103259SMichael Clark     }
4163ea103259SMichael Clark     dec->op = op;
4164ea103259SMichael Clark }
4165ea103259SMichael Clark 
4166ea103259SMichael Clark /* operand extractors */
4167ea103259SMichael Clark 
operand_rd(rv_inst inst)4168ea103259SMichael Clark static uint32_t operand_rd(rv_inst inst)
4169ea103259SMichael Clark {
4170ea103259SMichael Clark     return (inst << 52) >> 59;
4171ea103259SMichael Clark }
4172ea103259SMichael Clark 
operand_rs1(rv_inst inst)4173ea103259SMichael Clark static uint32_t operand_rs1(rv_inst inst)
4174ea103259SMichael Clark {
4175ea103259SMichael Clark     return (inst << 44) >> 59;
4176ea103259SMichael Clark }
4177ea103259SMichael Clark 
operand_rs2(rv_inst inst)4178ea103259SMichael Clark static uint32_t operand_rs2(rv_inst inst)
4179ea103259SMichael Clark {
4180ea103259SMichael Clark     return (inst << 39) >> 59;
4181ea103259SMichael Clark }
4182ea103259SMichael Clark 
operand_rs3(rv_inst inst)4183ea103259SMichael Clark static uint32_t operand_rs3(rv_inst inst)
4184ea103259SMichael Clark {
4185ea103259SMichael Clark     return (inst << 32) >> 59;
4186ea103259SMichael Clark }
4187ea103259SMichael Clark 
operand_aq(rv_inst inst)4188ea103259SMichael Clark static uint32_t operand_aq(rv_inst inst)
4189ea103259SMichael Clark {
4190ea103259SMichael Clark     return (inst << 37) >> 63;
4191ea103259SMichael Clark }
4192ea103259SMichael Clark 
operand_rl(rv_inst inst)4193ea103259SMichael Clark static uint32_t operand_rl(rv_inst inst)
4194ea103259SMichael Clark {
4195ea103259SMichael Clark     return (inst << 38) >> 63;
4196ea103259SMichael Clark }
4197ea103259SMichael Clark 
operand_pred(rv_inst inst)4198ea103259SMichael Clark static uint32_t operand_pred(rv_inst inst)
4199ea103259SMichael Clark {
4200ea103259SMichael Clark     return (inst << 36) >> 60;
4201ea103259SMichael Clark }
4202ea103259SMichael Clark 
operand_succ(rv_inst inst)4203ea103259SMichael Clark static uint32_t operand_succ(rv_inst inst)
4204ea103259SMichael Clark {
4205ea103259SMichael Clark     return (inst << 40) >> 60;
4206ea103259SMichael Clark }
4207ea103259SMichael Clark 
operand_rm(rv_inst inst)4208ea103259SMichael Clark static uint32_t operand_rm(rv_inst inst)
4209ea103259SMichael Clark {
4210ea103259SMichael Clark     return (inst << 49) >> 61;
4211ea103259SMichael Clark }
4212ea103259SMichael Clark 
operand_shamt5(rv_inst inst)4213ea103259SMichael Clark static uint32_t operand_shamt5(rv_inst inst)
4214ea103259SMichael Clark {
4215ea103259SMichael Clark     return (inst << 39) >> 59;
4216ea103259SMichael Clark }
4217ea103259SMichael Clark 
operand_shamt6(rv_inst inst)4218ea103259SMichael Clark static uint32_t operand_shamt6(rv_inst inst)
4219ea103259SMichael Clark {
4220ea103259SMichael Clark     return (inst << 38) >> 58;
4221ea103259SMichael Clark }
4222ea103259SMichael Clark 
operand_shamt7(rv_inst inst)4223ea103259SMichael Clark static uint32_t operand_shamt7(rv_inst inst)
4224ea103259SMichael Clark {
4225ea103259SMichael Clark     return (inst << 37) >> 57;
4226ea103259SMichael Clark }
4227ea103259SMichael Clark 
operand_crdq(rv_inst inst)4228ea103259SMichael Clark static uint32_t operand_crdq(rv_inst inst)
4229ea103259SMichael Clark {
4230ea103259SMichael Clark     return (inst << 59) >> 61;
4231ea103259SMichael Clark }
4232ea103259SMichael Clark 
operand_crs1q(rv_inst inst)4233ea103259SMichael Clark static uint32_t operand_crs1q(rv_inst inst)
4234ea103259SMichael Clark {
4235ea103259SMichael Clark     return (inst << 54) >> 61;
4236ea103259SMichael Clark }
4237ea103259SMichael Clark 
operand_crs1rdq(rv_inst inst)4238ea103259SMichael Clark static uint32_t operand_crs1rdq(rv_inst inst)
4239ea103259SMichael Clark {
4240ea103259SMichael Clark     return (inst << 54) >> 61;
4241ea103259SMichael Clark }
4242ea103259SMichael Clark 
operand_crs2q(rv_inst inst)4243ea103259SMichael Clark static uint32_t operand_crs2q(rv_inst inst)
4244ea103259SMichael Clark {
4245ea103259SMichael Clark     return (inst << 59) >> 61;
4246ea103259SMichael Clark }
4247ea103259SMichael Clark 
calculate_xreg(uint32_t sreg)42482c71d02eSWeiwei Li static uint32_t calculate_xreg(uint32_t sreg)
42492c71d02eSWeiwei Li {
42502c71d02eSWeiwei Li     return sreg < 2 ? sreg + 8 : sreg + 16;
42512c71d02eSWeiwei Li }
42522c71d02eSWeiwei Li 
operand_sreg1(rv_inst inst)42532c71d02eSWeiwei Li static uint32_t operand_sreg1(rv_inst inst)
42542c71d02eSWeiwei Li {
42552c71d02eSWeiwei Li     return calculate_xreg((inst << 54) >> 61);
42562c71d02eSWeiwei Li }
42572c71d02eSWeiwei Li 
operand_sreg2(rv_inst inst)42582c71d02eSWeiwei Li static uint32_t operand_sreg2(rv_inst inst)
42592c71d02eSWeiwei Li {
42602c71d02eSWeiwei Li     return calculate_xreg((inst << 59) >> 61);
42612c71d02eSWeiwei Li }
42622c71d02eSWeiwei Li 
operand_crd(rv_inst inst)4263ea103259SMichael Clark static uint32_t operand_crd(rv_inst inst)
4264ea103259SMichael Clark {
4265ea103259SMichael Clark     return (inst << 52) >> 59;
4266ea103259SMichael Clark }
4267ea103259SMichael Clark 
operand_crs1(rv_inst inst)4268ea103259SMichael Clark static uint32_t operand_crs1(rv_inst inst)
4269ea103259SMichael Clark {
4270ea103259SMichael Clark     return (inst << 52) >> 59;
4271ea103259SMichael Clark }
4272ea103259SMichael Clark 
operand_crs1rd(rv_inst inst)4273ea103259SMichael Clark static uint32_t operand_crs1rd(rv_inst inst)
4274ea103259SMichael Clark {
4275ea103259SMichael Clark     return (inst << 52) >> 59;
4276ea103259SMichael Clark }
4277ea103259SMichael Clark 
operand_crs2(rv_inst inst)4278ea103259SMichael Clark static uint32_t operand_crs2(rv_inst inst)
4279ea103259SMichael Clark {
4280ea103259SMichael Clark     return (inst << 57) >> 59;
4281ea103259SMichael Clark }
4282ea103259SMichael Clark 
operand_cimmsh5(rv_inst inst)4283ea103259SMichael Clark static uint32_t operand_cimmsh5(rv_inst inst)
4284ea103259SMichael Clark {
4285ea103259SMichael Clark     return (inst << 57) >> 59;
4286ea103259SMichael Clark }
4287ea103259SMichael Clark 
operand_csr12(rv_inst inst)4288ea103259SMichael Clark static uint32_t operand_csr12(rv_inst inst)
4289ea103259SMichael Clark {
4290ea103259SMichael Clark     return (inst << 32) >> 52;
4291ea103259SMichael Clark }
4292ea103259SMichael Clark 
operand_imm12(rv_inst inst)4293ea103259SMichael Clark static int32_t operand_imm12(rv_inst inst)
4294ea103259SMichael Clark {
4295ea103259SMichael Clark     return ((int64_t)inst << 32) >> 52;
4296ea103259SMichael Clark }
4297ea103259SMichael Clark 
operand_imm20(rv_inst inst)4298ea103259SMichael Clark static int32_t operand_imm20(rv_inst inst)
4299ea103259SMichael Clark {
4300ea103259SMichael Clark     return (((int64_t)inst << 32) >> 44) << 12;
4301ea103259SMichael Clark }
4302ea103259SMichael Clark 
operand_jimm20(rv_inst inst)4303ea103259SMichael Clark static int32_t operand_jimm20(rv_inst inst)
4304ea103259SMichael Clark {
4305ea103259SMichael Clark     return (((int64_t)inst << 32) >> 63) << 20 |
4306ea103259SMichael Clark         ((inst << 33) >> 54) << 1 |
4307ea103259SMichael Clark         ((inst << 43) >> 63) << 11 |
4308ea103259SMichael Clark         ((inst << 44) >> 56) << 12;
4309ea103259SMichael Clark }
4310ea103259SMichael Clark 
operand_simm12(rv_inst inst)4311ea103259SMichael Clark static int32_t operand_simm12(rv_inst inst)
4312ea103259SMichael Clark {
4313ea103259SMichael Clark     return (((int64_t)inst << 32) >> 57) << 5 |
4314ea103259SMichael Clark         (inst << 52) >> 59;
4315ea103259SMichael Clark }
4316ea103259SMichael Clark 
operand_sbimm12(rv_inst inst)4317ea103259SMichael Clark static int32_t operand_sbimm12(rv_inst inst)
4318ea103259SMichael Clark {
4319ea103259SMichael Clark     return (((int64_t)inst << 32) >> 63) << 12 |
4320ea103259SMichael Clark         ((inst << 33) >> 58) << 5 |
4321ea103259SMichael Clark         ((inst << 52) >> 60) << 1 |
4322ea103259SMichael Clark         ((inst << 56) >> 63) << 11;
4323ea103259SMichael Clark }
4324ea103259SMichael Clark 
operand_cimmshl6(rv_inst inst,rv_isa isa)432533632775SFrédéric Pétrot static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa)
4326ea103259SMichael Clark {
432733632775SFrédéric Pétrot     int imm = ((inst << 51) >> 63) << 5 |
4328ea103259SMichael Clark         (inst << 57) >> 59;
432933632775SFrédéric Pétrot     if (isa == rv128) {
433033632775SFrédéric Pétrot         imm = imm ? imm : 64;
433133632775SFrédéric Pétrot     }
433233632775SFrédéric Pétrot     return imm;
433333632775SFrédéric Pétrot }
433433632775SFrédéric Pétrot 
operand_cimmshr6(rv_inst inst,rv_isa isa)433533632775SFrédéric Pétrot static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa)
433633632775SFrédéric Pétrot {
433733632775SFrédéric Pétrot     int imm = ((inst << 51) >> 63) << 5 |
433833632775SFrédéric Pétrot         (inst << 57) >> 59;
433933632775SFrédéric Pétrot     if (isa == rv128) {
434033632775SFrédéric Pétrot         imm = imm | (imm & 32) << 1;
434133632775SFrédéric Pétrot         imm = imm ? imm : 64;
434233632775SFrédéric Pétrot     }
434333632775SFrédéric Pétrot     return imm;
4344ea103259SMichael Clark }
4345ea103259SMichael Clark 
operand_cimmi(rv_inst inst)4346ea103259SMichael Clark static int32_t operand_cimmi(rv_inst inst)
4347ea103259SMichael Clark {
4348ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 5 |
4349ea103259SMichael Clark         (inst << 57) >> 59;
4350ea103259SMichael Clark }
4351ea103259SMichael Clark 
operand_cimmui(rv_inst inst)4352ea103259SMichael Clark static int32_t operand_cimmui(rv_inst inst)
4353ea103259SMichael Clark {
4354ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 17 |
4355ea103259SMichael Clark         ((inst << 57) >> 59) << 12;
4356ea103259SMichael Clark }
4357ea103259SMichael Clark 
operand_cimmlwsp(rv_inst inst)4358ea103259SMichael Clark static uint32_t operand_cimmlwsp(rv_inst inst)
4359ea103259SMichael Clark {
4360ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
4361ea103259SMichael Clark         ((inst << 57) >> 61) << 2 |
4362ea103259SMichael Clark         ((inst << 60) >> 62) << 6;
4363ea103259SMichael Clark }
4364ea103259SMichael Clark 
operand_cimmldsp(rv_inst inst)4365ea103259SMichael Clark static uint32_t operand_cimmldsp(rv_inst inst)
4366ea103259SMichael Clark {
4367ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
4368ea103259SMichael Clark         ((inst << 57) >> 62) << 3 |
4369ea103259SMichael Clark         ((inst << 59) >> 61) << 6;
4370ea103259SMichael Clark }
4371ea103259SMichael Clark 
operand_cimmlqsp(rv_inst inst)4372ea103259SMichael Clark static uint32_t operand_cimmlqsp(rv_inst inst)
4373ea103259SMichael Clark {
4374ea103259SMichael Clark     return ((inst << 51) >> 63) << 5 |
4375ea103259SMichael Clark         ((inst << 57) >> 63) << 4 |
4376ea103259SMichael Clark         ((inst << 58) >> 60) << 6;
4377ea103259SMichael Clark }
4378ea103259SMichael Clark 
operand_cimm16sp(rv_inst inst)4379ea103259SMichael Clark static int32_t operand_cimm16sp(rv_inst inst)
4380ea103259SMichael Clark {
4381ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 9 |
4382ea103259SMichael Clark         ((inst << 57) >> 63) << 4 |
4383ea103259SMichael Clark         ((inst << 58) >> 63) << 6 |
4384ea103259SMichael Clark         ((inst << 59) >> 62) << 7 |
4385ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4386ea103259SMichael Clark }
4387ea103259SMichael Clark 
operand_cimmj(rv_inst inst)4388ea103259SMichael Clark static int32_t operand_cimmj(rv_inst inst)
4389ea103259SMichael Clark {
4390ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 11 |
4391ea103259SMichael Clark         ((inst << 52) >> 63) << 4 |
4392ea103259SMichael Clark         ((inst << 53) >> 62) << 8 |
4393ea103259SMichael Clark         ((inst << 55) >> 63) << 10 |
4394ea103259SMichael Clark         ((inst << 56) >> 63) << 6 |
4395ea103259SMichael Clark         ((inst << 57) >> 63) << 7 |
4396ea103259SMichael Clark         ((inst << 58) >> 61) << 1 |
4397ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4398ea103259SMichael Clark }
4399ea103259SMichael Clark 
operand_cimmb(rv_inst inst)4400ea103259SMichael Clark static int32_t operand_cimmb(rv_inst inst)
4401ea103259SMichael Clark {
4402ea103259SMichael Clark     return (((int64_t)inst << 51) >> 63) << 8 |
4403ea103259SMichael Clark         ((inst << 52) >> 62) << 3 |
4404ea103259SMichael Clark         ((inst << 57) >> 62) << 6 |
4405ea103259SMichael Clark         ((inst << 59) >> 62) << 1 |
4406ea103259SMichael Clark         ((inst << 61) >> 63) << 5;
4407ea103259SMichael Clark }
4408ea103259SMichael Clark 
operand_cimmswsp(rv_inst inst)4409ea103259SMichael Clark static uint32_t operand_cimmswsp(rv_inst inst)
4410ea103259SMichael Clark {
4411ea103259SMichael Clark     return ((inst << 51) >> 60) << 2 |
4412ea103259SMichael Clark         ((inst << 55) >> 62) << 6;
4413ea103259SMichael Clark }
4414ea103259SMichael Clark 
operand_cimmsdsp(rv_inst inst)4415ea103259SMichael Clark static uint32_t operand_cimmsdsp(rv_inst inst)
4416ea103259SMichael Clark {
4417ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4418ea103259SMichael Clark         ((inst << 54) >> 61) << 6;
4419ea103259SMichael Clark }
4420ea103259SMichael Clark 
operand_cimmsqsp(rv_inst inst)4421ea103259SMichael Clark static uint32_t operand_cimmsqsp(rv_inst inst)
4422ea103259SMichael Clark {
4423ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4424ea103259SMichael Clark         ((inst << 53) >> 60) << 6;
4425ea103259SMichael Clark }
4426ea103259SMichael Clark 
operand_cimm4spn(rv_inst inst)4427ea103259SMichael Clark static uint32_t operand_cimm4spn(rv_inst inst)
4428ea103259SMichael Clark {
4429ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4430ea103259SMichael Clark         ((inst << 53) >> 60) << 6 |
4431ea103259SMichael Clark         ((inst << 57) >> 63) << 2 |
4432ea103259SMichael Clark         ((inst << 58) >> 63) << 3;
4433ea103259SMichael Clark }
4434ea103259SMichael Clark 
operand_cimmw(rv_inst inst)4435ea103259SMichael Clark static uint32_t operand_cimmw(rv_inst inst)
4436ea103259SMichael Clark {
4437ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4438ea103259SMichael Clark         ((inst << 57) >> 63) << 2 |
4439ea103259SMichael Clark         ((inst << 58) >> 63) << 6;
4440ea103259SMichael Clark }
4441ea103259SMichael Clark 
operand_cimmd(rv_inst inst)4442ea103259SMichael Clark static uint32_t operand_cimmd(rv_inst inst)
4443ea103259SMichael Clark {
4444ea103259SMichael Clark     return ((inst << 51) >> 61) << 3 |
4445ea103259SMichael Clark         ((inst << 57) >> 62) << 6;
4446ea103259SMichael Clark }
4447ea103259SMichael Clark 
operand_cimmq(rv_inst inst)4448ea103259SMichael Clark static uint32_t operand_cimmq(rv_inst inst)
4449ea103259SMichael Clark {
4450ea103259SMichael Clark     return ((inst << 51) >> 62) << 4 |
4451ea103259SMichael Clark         ((inst << 53) >> 63) << 8 |
4452ea103259SMichael Clark         ((inst << 57) >> 62) << 6;
4453ea103259SMichael Clark }
4454ea103259SMichael Clark 
operand_vimm(rv_inst inst)445507f4964dSYang Liu static uint32_t operand_vimm(rv_inst inst)
445607f4964dSYang Liu {
445707f4964dSYang Liu     return (int64_t)(inst << 44) >> 59;
445807f4964dSYang Liu }
445907f4964dSYang Liu 
operand_vzimm11(rv_inst inst)446007f4964dSYang Liu static uint32_t operand_vzimm11(rv_inst inst)
446107f4964dSYang Liu {
446207f4964dSYang Liu     return (inst << 33) >> 53;
446307f4964dSYang Liu }
446407f4964dSYang Liu 
operand_vzimm10(rv_inst inst)446507f4964dSYang Liu static uint32_t operand_vzimm10(rv_inst inst)
446607f4964dSYang Liu {
446707f4964dSYang Liu     return (inst << 34) >> 54;
446807f4964dSYang Liu }
446907f4964dSYang Liu 
operand_vzimm6(rv_inst inst)4470434c609bSMax Chou static uint32_t operand_vzimm6(rv_inst inst)
4471434c609bSMax Chou {
4472434c609bSMax Chou     return ((inst << 37) >> 63) << 5 |
4473434c609bSMax Chou         ((inst << 44) >> 59);
4474434c609bSMax Chou }
4475434c609bSMax Chou 
operand_bs(rv_inst inst)44765748c886SWeiwei Li static uint32_t operand_bs(rv_inst inst)
44775748c886SWeiwei Li {
44785748c886SWeiwei Li     return (inst << 32) >> 62;
44795748c886SWeiwei Li }
44805748c886SWeiwei Li 
operand_rnum(rv_inst inst)44815748c886SWeiwei Li static uint32_t operand_rnum(rv_inst inst)
44825748c886SWeiwei Li {
44835748c886SWeiwei Li     return (inst << 40) >> 60;
44845748c886SWeiwei Li }
44855748c886SWeiwei Li 
operand_vm(rv_inst inst)448607f4964dSYang Liu static uint32_t operand_vm(rv_inst inst)
448707f4964dSYang Liu {
448807f4964dSYang Liu     return (inst << 38) >> 63;
448907f4964dSYang Liu }
449007f4964dSYang Liu 
operand_uimm_c_lb(rv_inst inst)44912c71d02eSWeiwei Li static uint32_t operand_uimm_c_lb(rv_inst inst)
44922c71d02eSWeiwei Li {
44932c71d02eSWeiwei Li     return (((inst << 58) >> 63) << 1) |
44942c71d02eSWeiwei Li         ((inst << 57) >> 63);
44952c71d02eSWeiwei Li }
44962c71d02eSWeiwei Li 
operand_uimm_c_lh(rv_inst inst)44972c71d02eSWeiwei Li static uint32_t operand_uimm_c_lh(rv_inst inst)
44982c71d02eSWeiwei Li {
44992c71d02eSWeiwei Li     return (((inst << 58) >> 63) << 1);
45002c71d02eSWeiwei Li }
45012c71d02eSWeiwei Li 
operand_zcmp_spimm(rv_inst inst)45022c71d02eSWeiwei Li static uint32_t operand_zcmp_spimm(rv_inst inst)
45032c71d02eSWeiwei Li {
45042c71d02eSWeiwei Li     return ((inst << 60) >> 62) << 4;
45052c71d02eSWeiwei Li }
45062c71d02eSWeiwei Li 
operand_zcmp_rlist(rv_inst inst)45072c71d02eSWeiwei Li static uint32_t operand_zcmp_rlist(rv_inst inst)
45082c71d02eSWeiwei Li {
45092c71d02eSWeiwei Li     return ((inst << 56) >> 60);
45102c71d02eSWeiwei Li }
45112c71d02eSWeiwei Li 
operand_imm6(rv_inst inst)4512318df723SChristoph Müllner static uint32_t operand_imm6(rv_inst inst)
4513318df723SChristoph Müllner {
4514318df723SChristoph Müllner     return (inst << 38) >> 60;
4515318df723SChristoph Müllner }
4516318df723SChristoph Müllner 
operand_imm2(rv_inst inst)4517318df723SChristoph Müllner static uint32_t operand_imm2(rv_inst inst)
4518318df723SChristoph Müllner {
4519318df723SChristoph Müllner     return (inst << 37) >> 62;
4520318df723SChristoph Müllner }
4521318df723SChristoph Müllner 
operand_immh(rv_inst inst)4522318df723SChristoph Müllner static uint32_t operand_immh(rv_inst inst)
4523318df723SChristoph Müllner {
4524318df723SChristoph Müllner     return (inst << 32) >> 58;
4525318df723SChristoph Müllner }
4526318df723SChristoph Müllner 
operand_imml(rv_inst inst)4527318df723SChristoph Müllner static uint32_t operand_imml(rv_inst inst)
4528318df723SChristoph Müllner {
4529318df723SChristoph Müllner     return (inst << 38) >> 58;
4530318df723SChristoph Müllner }
4531318df723SChristoph Müllner 
calculate_stack_adj(rv_isa isa,uint32_t rlist,uint32_t spimm)45322c71d02eSWeiwei Li static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t spimm)
45332c71d02eSWeiwei Li {
45342c71d02eSWeiwei Li     int xlen_bytes_log2 = isa == rv64 ? 3 : 2;
45352c71d02eSWeiwei Li     int regs = rlist == 15 ? 13 : rlist - 3;
45362c71d02eSWeiwei Li     uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16);
45372c71d02eSWeiwei Li     return stack_adj_base + spimm;
45382c71d02eSWeiwei Li }
45392c71d02eSWeiwei Li 
operand_zcmp_stack_adj(rv_inst inst,rv_isa isa)45402c71d02eSWeiwei Li static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa)
45412c71d02eSWeiwei Li {
45422c71d02eSWeiwei Li     return calculate_stack_adj(isa, operand_zcmp_rlist(inst),
45432c71d02eSWeiwei Li                                operand_zcmp_spimm(inst));
45442c71d02eSWeiwei Li }
45452c71d02eSWeiwei Li 
operand_tbl_index(rv_inst inst)45462c71d02eSWeiwei Li static uint32_t operand_tbl_index(rv_inst inst)
45472c71d02eSWeiwei Li {
45482c71d02eSWeiwei Li     return ((inst << 54) >> 56);
45492c71d02eSWeiwei Li }
45502c71d02eSWeiwei Li 
operand_lpl(rv_inst inst)45515e761bd6SDeepak Gupta static uint32_t operand_lpl(rv_inst inst)
45525e761bd6SDeepak Gupta {
45535e761bd6SDeepak Gupta     return inst >> 12;
45545e761bd6SDeepak Gupta }
45555e761bd6SDeepak Gupta 
4556ea103259SMichael Clark /* decode operands */
4557ea103259SMichael Clark 
decode_inst_operands(rv_decode * dec,rv_isa isa)455833632775SFrédéric Pétrot static void decode_inst_operands(rv_decode *dec, rv_isa isa)
4559ea103259SMichael Clark {
4560fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
4561ea103259SMichael Clark     rv_inst inst = dec->inst;
4562ea103259SMichael Clark     dec->codec = opcode_data[dec->op].codec;
4563ea103259SMichael Clark     switch (dec->codec) {
4564ea103259SMichael Clark     case rv_codec_none:
4565ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4566ea103259SMichael Clark         dec->imm = 0;
4567ea103259SMichael Clark         break;
4568ea103259SMichael Clark     case rv_codec_u:
4569ea103259SMichael Clark         dec->rd = operand_rd(inst);
4570ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4571ea103259SMichael Clark         dec->imm = operand_imm20(inst);
4572ea103259SMichael Clark         break;
4573ea103259SMichael Clark     case rv_codec_uj:
4574ea103259SMichael Clark         dec->rd = operand_rd(inst);
4575ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4576ea103259SMichael Clark         dec->imm = operand_jimm20(inst);
4577ea103259SMichael Clark         break;
4578ea103259SMichael Clark     case rv_codec_i:
4579ea103259SMichael Clark         dec->rd = operand_rd(inst);
4580ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4581ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4582ea103259SMichael Clark         dec->imm = operand_imm12(inst);
4583ea103259SMichael Clark         break;
4584ea103259SMichael Clark     case rv_codec_i_sh5:
4585ea103259SMichael Clark         dec->rd = operand_rd(inst);
4586ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4587ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4588ea103259SMichael Clark         dec->imm = operand_shamt5(inst);
4589ea103259SMichael Clark         break;
4590ea103259SMichael Clark     case rv_codec_i_sh6:
4591ea103259SMichael Clark         dec->rd = operand_rd(inst);
4592ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4593ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4594ea103259SMichael Clark         dec->imm = operand_shamt6(inst);
4595ea103259SMichael Clark         break;
4596ea103259SMichael Clark     case rv_codec_i_sh7:
4597ea103259SMichael Clark         dec->rd = operand_rd(inst);
4598ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4599ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4600ea103259SMichael Clark         dec->imm = operand_shamt7(inst);
4601ea103259SMichael Clark         break;
4602ea103259SMichael Clark     case rv_codec_i_csr:
4603ea103259SMichael Clark         dec->rd = operand_rd(inst);
4604ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4605ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4606ea103259SMichael Clark         dec->imm = operand_csr12(inst);
4607ea103259SMichael Clark         break;
4608ea103259SMichael Clark     case rv_codec_s:
4609ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4610ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4611ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4612ea103259SMichael Clark         dec->imm = operand_simm12(inst);
4613ea103259SMichael Clark         break;
4614ea103259SMichael Clark     case rv_codec_sb:
4615ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4616ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4617ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4618ea103259SMichael Clark         dec->imm = operand_sbimm12(inst);
4619ea103259SMichael Clark         break;
4620ea103259SMichael Clark     case rv_codec_r:
4621ea103259SMichael Clark         dec->rd = operand_rd(inst);
4622ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4623ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4624ea103259SMichael Clark         dec->imm = 0;
4625ea103259SMichael Clark         break;
4626ea103259SMichael Clark     case rv_codec_r_m:
4627ea103259SMichael Clark         dec->rd = operand_rd(inst);
4628ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4629ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4630ea103259SMichael Clark         dec->imm = 0;
4631ea103259SMichael Clark         dec->rm = operand_rm(inst);
4632ea103259SMichael Clark         break;
4633ea103259SMichael Clark     case rv_codec_r4_m:
4634ea103259SMichael Clark         dec->rd = operand_rd(inst);
4635ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4636ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4637ea103259SMichael Clark         dec->rs3 = operand_rs3(inst);
4638ea103259SMichael Clark         dec->imm = 0;
4639ea103259SMichael Clark         dec->rm = operand_rm(inst);
4640ea103259SMichael Clark         break;
4641ea103259SMichael Clark     case rv_codec_r_a:
4642ea103259SMichael Clark         dec->rd = operand_rd(inst);
4643ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4644ea103259SMichael Clark         dec->rs2 = operand_rs2(inst);
4645ea103259SMichael Clark         dec->imm = 0;
4646ea103259SMichael Clark         dec->aq = operand_aq(inst);
4647ea103259SMichael Clark         dec->rl = operand_rl(inst);
4648ea103259SMichael Clark         break;
4649ea103259SMichael Clark     case rv_codec_r_l:
4650ea103259SMichael Clark         dec->rd = operand_rd(inst);
4651ea103259SMichael Clark         dec->rs1 = operand_rs1(inst);
4652ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4653ea103259SMichael Clark         dec->imm = 0;
4654ea103259SMichael Clark         dec->aq = operand_aq(inst);
4655ea103259SMichael Clark         dec->rl = operand_rl(inst);
4656ea103259SMichael Clark         break;
4657ea103259SMichael Clark     case rv_codec_r_f:
4658ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4659ea103259SMichael Clark         dec->pred = operand_pred(inst);
4660ea103259SMichael Clark         dec->succ = operand_succ(inst);
4661ea103259SMichael Clark         dec->imm = 0;
4662ea103259SMichael Clark         break;
4663ea103259SMichael Clark     case rv_codec_cb:
4664ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4665ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4666ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4667ea103259SMichael Clark         dec->imm = operand_cimmb(inst);
4668ea103259SMichael Clark         break;
4669ea103259SMichael Clark     case rv_codec_cb_imm:
4670ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4671ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4672ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4673ea103259SMichael Clark         break;
4674ea103259SMichael Clark     case rv_codec_cb_sh5:
4675ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4676ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4677ea103259SMichael Clark         dec->imm = operand_cimmsh5(inst);
4678ea103259SMichael Clark         break;
4679ea103259SMichael Clark     case rv_codec_cb_sh6:
4680ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4681ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
468233632775SFrédéric Pétrot         dec->imm = operand_cimmshr6(inst, isa);
4683ea103259SMichael Clark         break;
4684ea103259SMichael Clark     case rv_codec_ci:
4685ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4686ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4687ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4688ea103259SMichael Clark         break;
4689ea103259SMichael Clark     case rv_codec_ci_sh5:
4690ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4691ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4692ea103259SMichael Clark         dec->imm = operand_cimmsh5(inst);
4693ea103259SMichael Clark         break;
4694ea103259SMichael Clark     case rv_codec_ci_sh6:
4695ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4696ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
469733632775SFrédéric Pétrot         dec->imm = operand_cimmshl6(inst, isa);
4698ea103259SMichael Clark         break;
4699ea103259SMichael Clark     case rv_codec_ci_16sp:
4700ea103259SMichael Clark         dec->rd = rv_ireg_sp;
4701ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4702ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4703ea103259SMichael Clark         dec->imm = operand_cimm16sp(inst);
4704ea103259SMichael Clark         break;
4705ea103259SMichael Clark     case rv_codec_ci_lwsp:
4706ea103259SMichael Clark         dec->rd = operand_crd(inst);
4707ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4708ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4709ea103259SMichael Clark         dec->imm = operand_cimmlwsp(inst);
4710ea103259SMichael Clark         break;
4711ea103259SMichael Clark     case rv_codec_ci_ldsp:
4712ea103259SMichael Clark         dec->rd = operand_crd(inst);
4713ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4714ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4715ea103259SMichael Clark         dec->imm = operand_cimmldsp(inst);
4716ea103259SMichael Clark         break;
4717ea103259SMichael Clark     case rv_codec_ci_lqsp:
4718ea103259SMichael Clark         dec->rd = operand_crd(inst);
4719ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4720ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4721ea103259SMichael Clark         dec->imm = operand_cimmlqsp(inst);
4722ea103259SMichael Clark         break;
4723ea103259SMichael Clark     case rv_codec_ci_li:
4724ea103259SMichael Clark         dec->rd = operand_crd(inst);
4725ea103259SMichael Clark         dec->rs1 = rv_ireg_zero;
4726ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4727ea103259SMichael Clark         dec->imm = operand_cimmi(inst);
4728ea103259SMichael Clark         break;
4729ea103259SMichael Clark     case rv_codec_ci_lui:
4730ea103259SMichael Clark         dec->rd = operand_crd(inst);
4731ea103259SMichael Clark         dec->rs1 = rv_ireg_zero;
4732ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4733ea103259SMichael Clark         dec->imm = operand_cimmui(inst);
4734ea103259SMichael Clark         break;
4735ea103259SMichael Clark     case rv_codec_ci_none:
4736ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4737ea103259SMichael Clark         dec->imm = 0;
4738ea103259SMichael Clark         break;
4739ea103259SMichael Clark     case rv_codec_ciw_4spn:
4740ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4741ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4742ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4743ea103259SMichael Clark         dec->imm = operand_cimm4spn(inst);
4744ea103259SMichael Clark         break;
4745ea103259SMichael Clark     case rv_codec_cj:
4746ea103259SMichael Clark         dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero;
4747ea103259SMichael Clark         dec->imm = operand_cimmj(inst);
4748ea103259SMichael Clark         break;
4749ea103259SMichael Clark     case rv_codec_cj_jal:
4750ea103259SMichael Clark         dec->rd = rv_ireg_ra;
4751ea103259SMichael Clark         dec->rs1 = dec->rs2 = rv_ireg_zero;
4752ea103259SMichael Clark         dec->imm = operand_cimmj(inst);
4753ea103259SMichael Clark         break;
4754ea103259SMichael Clark     case rv_codec_cl_lw:
4755ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4756ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4757ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4758ea103259SMichael Clark         dec->imm = operand_cimmw(inst);
4759ea103259SMichael Clark         break;
4760ea103259SMichael Clark     case rv_codec_cl_ld:
4761ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4762ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4763ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4764ea103259SMichael Clark         dec->imm = operand_cimmd(inst);
4765ea103259SMichael Clark         break;
4766ea103259SMichael Clark     case rv_codec_cl_lq:
4767ea103259SMichael Clark         dec->rd = operand_crdq(inst) + 8;
4768ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4769ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4770ea103259SMichael Clark         dec->imm = operand_cimmq(inst);
4771ea103259SMichael Clark         break;
4772ea103259SMichael Clark     case rv_codec_cr:
4773ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rd(inst);
4774ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4775ea103259SMichael Clark         dec->imm = 0;
4776ea103259SMichael Clark         break;
4777ea103259SMichael Clark     case rv_codec_cr_mv:
4778ea103259SMichael Clark         dec->rd = operand_crd(inst);
4779ea103259SMichael Clark         dec->rs1 = operand_crs2(inst);
4780ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4781ea103259SMichael Clark         dec->imm = 0;
4782ea103259SMichael Clark         break;
4783ea103259SMichael Clark     case rv_codec_cr_jalr:
4784ea103259SMichael Clark         dec->rd = rv_ireg_ra;
4785ea103259SMichael Clark         dec->rs1 = operand_crs1(inst);
4786ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4787ea103259SMichael Clark         dec->imm = 0;
4788ea103259SMichael Clark         break;
4789ea103259SMichael Clark     case rv_codec_cr_jr:
4790ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4791ea103259SMichael Clark         dec->rs1 = operand_crs1(inst);
4792ea103259SMichael Clark         dec->rs2 = rv_ireg_zero;
4793ea103259SMichael Clark         dec->imm = 0;
4794ea103259SMichael Clark         break;
4795ea103259SMichael Clark     case rv_codec_cs:
4796ea103259SMichael Clark         dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8;
4797ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4798ea103259SMichael Clark         dec->imm = 0;
4799ea103259SMichael Clark         break;
4800ea103259SMichael Clark     case rv_codec_cs_sw:
4801ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4802ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4803ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4804ea103259SMichael Clark         dec->imm = operand_cimmw(inst);
4805ea103259SMichael Clark         break;
4806ea103259SMichael Clark     case rv_codec_cs_sd:
4807ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4808ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4809ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4810ea103259SMichael Clark         dec->imm = operand_cimmd(inst);
4811ea103259SMichael Clark         break;
4812ea103259SMichael Clark     case rv_codec_cs_sq:
4813ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4814ea103259SMichael Clark         dec->rs1 = operand_crs1q(inst) + 8;
4815ea103259SMichael Clark         dec->rs2 = operand_crs2q(inst) + 8;
4816ea103259SMichael Clark         dec->imm = operand_cimmq(inst);
4817ea103259SMichael Clark         break;
4818ea103259SMichael Clark     case rv_codec_css_swsp:
4819ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4820ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4821ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4822ea103259SMichael Clark         dec->imm = operand_cimmswsp(inst);
4823ea103259SMichael Clark         break;
4824ea103259SMichael Clark     case rv_codec_css_sdsp:
4825ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4826ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4827ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4828ea103259SMichael Clark         dec->imm = operand_cimmsdsp(inst);
4829ea103259SMichael Clark         break;
4830ea103259SMichael Clark     case rv_codec_css_sqsp:
4831ea103259SMichael Clark         dec->rd = rv_ireg_zero;
4832ea103259SMichael Clark         dec->rs1 = rv_ireg_sp;
4833ea103259SMichael Clark         dec->rs2 = operand_crs2(inst);
4834ea103259SMichael Clark         dec->imm = operand_cimmsqsp(inst);
4835ea103259SMichael Clark         break;
48365748c886SWeiwei Li     case rv_codec_k_bs:
48375748c886SWeiwei Li         dec->rs1 = operand_rs1(inst);
48385748c886SWeiwei Li         dec->rs2 = operand_rs2(inst);
48395748c886SWeiwei Li         dec->bs = operand_bs(inst);
48405748c886SWeiwei Li         break;
48415748c886SWeiwei Li     case rv_codec_k_rnum:
48425748c886SWeiwei Li         dec->rd = operand_rd(inst);
48435748c886SWeiwei Li         dec->rs1 = operand_rs1(inst);
48445748c886SWeiwei Li         dec->rnum = operand_rnum(inst);
48455748c886SWeiwei Li         break;
484607f4964dSYang Liu     case rv_codec_v_r:
484707f4964dSYang Liu         dec->rd = operand_rd(inst);
484807f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
484907f4964dSYang Liu         dec->rs2 = operand_rs2(inst);
485007f4964dSYang Liu         dec->vm = operand_vm(inst);
485107f4964dSYang Liu         break;
485207f4964dSYang Liu     case rv_codec_v_ldst:
485307f4964dSYang Liu         dec->rd = operand_rd(inst);
485407f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
485507f4964dSYang Liu         dec->vm = operand_vm(inst);
485607f4964dSYang Liu         break;
485707f4964dSYang Liu     case rv_codec_v_i:
485807f4964dSYang Liu         dec->rd = operand_rd(inst);
485907f4964dSYang Liu         dec->rs2 = operand_rs2(inst);
486007f4964dSYang Liu         dec->imm = operand_vimm(inst);
486107f4964dSYang Liu         dec->vm = operand_vm(inst);
486207f4964dSYang Liu         break;
4863434c609bSMax Chou     case rv_codec_vror_vi:
4864434c609bSMax Chou         dec->rd = operand_rd(inst);
4865434c609bSMax Chou         dec->rs2 = operand_rs2(inst);
4866434c609bSMax Chou         dec->imm = operand_vzimm6(inst);
4867434c609bSMax Chou         dec->vm = operand_vm(inst);
4868434c609bSMax Chou         break;
486907f4964dSYang Liu     case rv_codec_vsetvli:
487007f4964dSYang Liu         dec->rd = operand_rd(inst);
487107f4964dSYang Liu         dec->rs1 = operand_rs1(inst);
487207f4964dSYang Liu         dec->vzimm = operand_vzimm11(inst);
487307f4964dSYang Liu         break;
487407f4964dSYang Liu     case rv_codec_vsetivli:
487507f4964dSYang Liu         dec->rd = operand_rd(inst);
4876be46e0bfSRichard Henderson         dec->imm = extract32(inst, 15, 5);
487707f4964dSYang Liu         dec->vzimm = operand_vzimm10(inst);
487807f4964dSYang Liu         break;
48792c71d02eSWeiwei Li     case rv_codec_zcb_lb:
48802c71d02eSWeiwei Li         dec->rs1 = operand_crs1q(inst) + 8;
48812c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
48822c71d02eSWeiwei Li         dec->imm = operand_uimm_c_lb(inst);
48832c71d02eSWeiwei Li         break;
48842c71d02eSWeiwei Li     case rv_codec_zcb_lh:
48852c71d02eSWeiwei Li         dec->rs1 = operand_crs1q(inst) + 8;
48862c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
48872c71d02eSWeiwei Li         dec->imm = operand_uimm_c_lh(inst);
48882c71d02eSWeiwei Li         break;
48892c71d02eSWeiwei Li     case rv_codec_zcb_ext:
48902c71d02eSWeiwei Li         dec->rd = operand_crs1q(inst) + 8;
48912c71d02eSWeiwei Li         break;
48922c71d02eSWeiwei Li     case rv_codec_zcb_mul:
48932c71d02eSWeiwei Li         dec->rd = operand_crs1rdq(inst) + 8;
48942c71d02eSWeiwei Li         dec->rs2 = operand_crs2q(inst) + 8;
48952c71d02eSWeiwei Li         break;
48962c71d02eSWeiwei Li     case rv_codec_zcmp_cm_pushpop:
48972c71d02eSWeiwei Li         dec->imm = operand_zcmp_stack_adj(inst, isa);
48982c71d02eSWeiwei Li         dec->rlist = operand_zcmp_rlist(inst);
48992c71d02eSWeiwei Li         break;
49002c71d02eSWeiwei Li     case rv_codec_zcmp_cm_mv:
49012c71d02eSWeiwei Li         dec->rd = operand_sreg1(inst);
49022c71d02eSWeiwei Li         dec->rs2 = operand_sreg2(inst);
49032c71d02eSWeiwei Li         break;
49042c71d02eSWeiwei Li     case rv_codec_zcmt_jt:
49052c71d02eSWeiwei Li         dec->imm = operand_tbl_index(inst);
49062c71d02eSWeiwei Li         break;
4907a47842d1SChristoph Müllner     case rv_codec_fli:
4908a47842d1SChristoph Müllner         dec->rd = operand_rd(inst);
4909a47842d1SChristoph Müllner         dec->imm = operand_rs1(inst);
4910a47842d1SChristoph Müllner         break;
4911318df723SChristoph Müllner     case rv_codec_r2_imm5:
4912318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4913318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4914318df723SChristoph Müllner         dec->imm = operand_rs2(inst);
4915318df723SChristoph Müllner         break;
4916318df723SChristoph Müllner     case rv_codec_r2:
4917318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4918318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4919318df723SChristoph Müllner         break;
4920318df723SChristoph Müllner     case rv_codec_r2_imm6:
4921318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4922318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4923318df723SChristoph Müllner         dec->imm = operand_imm6(inst);
4924318df723SChristoph Müllner         break;
4925318df723SChristoph Müllner     case rv_codec_r_imm2:
4926318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4927318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4928318df723SChristoph Müllner         dec->rs2 = operand_rs2(inst);
4929318df723SChristoph Müllner         dec->imm = operand_imm2(inst);
4930318df723SChristoph Müllner         break;
4931318df723SChristoph Müllner     case rv_codec_r2_immhl:
4932318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4933318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4934318df723SChristoph Müllner         dec->imm = operand_immh(inst);
4935318df723SChristoph Müllner         dec->imm1 = operand_imml(inst);
4936318df723SChristoph Müllner         break;
4937318df723SChristoph Müllner     case rv_codec_r2_imm2_imm5:
4938318df723SChristoph Müllner         dec->rd = operand_rd(inst);
4939318df723SChristoph Müllner         dec->rs1 = operand_rs1(inst);
4940318df723SChristoph Müllner         dec->imm = sextract32(operand_rs2(inst), 0, 5);
4941318df723SChristoph Müllner         dec->imm1 = operand_imm2(inst);
4942318df723SChristoph Müllner         break;
49435e761bd6SDeepak Gupta     case rv_codec_lp:
49445e761bd6SDeepak Gupta         dec->imm = operand_lpl(inst);
49455e761bd6SDeepak Gupta         break;
4946e75f9451SDeepak Gupta     case rv_codec_cmop_ss:
4947e75f9451SDeepak Gupta         dec->rd = rv_ireg_zero;
4948e75f9451SDeepak Gupta         dec->rs1 = dec->rs2 = operand_crs1(inst);
4949e75f9451SDeepak Gupta         dec->imm = 0;
4950e75f9451SDeepak Gupta         break;
4951ea103259SMichael Clark     };
4952ea103259SMichael Clark }
4953ea103259SMichael Clark 
4954ea103259SMichael Clark /* check constraint */
4955ea103259SMichael Clark 
check_constraints(rv_decode * dec,const rvc_constraint * c)4956ea103259SMichael Clark static bool check_constraints(rv_decode *dec, const rvc_constraint *c)
4957ea103259SMichael Clark {
4958ea103259SMichael Clark     int32_t imm = dec->imm;
4959ea103259SMichael Clark     uint8_t rd = dec->rd, rs1 = dec->rs1, rs2 = dec->rs2;
4960ea103259SMichael Clark     while (*c != rvc_end) {
4961ea103259SMichael Clark         switch (*c) {
4962ea103259SMichael Clark         case rvc_rd_eq_ra:
4963ea103259SMichael Clark             if (!(rd == 1)) {
4964ea103259SMichael Clark                 return false;
4965ea103259SMichael Clark             }
4966ea103259SMichael Clark             break;
4967ea103259SMichael Clark         case rvc_rd_eq_x0:
4968ea103259SMichael Clark             if (!(rd == 0)) {
4969ea103259SMichael Clark                 return false;
4970ea103259SMichael Clark             }
4971ea103259SMichael Clark             break;
4972ea103259SMichael Clark         case rvc_rs1_eq_x0:
4973ea103259SMichael Clark             if (!(rs1 == 0)) {
4974ea103259SMichael Clark                 return false;
4975ea103259SMichael Clark             }
4976ea103259SMichael Clark             break;
4977ea103259SMichael Clark         case rvc_rs2_eq_x0:
4978ea103259SMichael Clark             if (!(rs2 == 0)) {
4979ea103259SMichael Clark                 return false;
4980ea103259SMichael Clark             }
4981ea103259SMichael Clark             break;
4982ea103259SMichael Clark         case rvc_rs2_eq_rs1:
4983ea103259SMichael Clark             if (!(rs2 == rs1)) {
4984ea103259SMichael Clark                 return false;
4985ea103259SMichael Clark             }
4986ea103259SMichael Clark             break;
4987ea103259SMichael Clark         case rvc_rs1_eq_ra:
4988ea103259SMichael Clark             if (!(rs1 == 1)) {
4989ea103259SMichael Clark                 return false;
4990ea103259SMichael Clark             }
4991ea103259SMichael Clark             break;
4992ea103259SMichael Clark         case rvc_imm_eq_zero:
4993ea103259SMichael Clark             if (!(imm == 0)) {
4994ea103259SMichael Clark                 return false;
4995ea103259SMichael Clark             }
4996ea103259SMichael Clark             break;
4997ea103259SMichael Clark         case rvc_imm_eq_n1:
4998ea103259SMichael Clark             if (!(imm == -1)) {
4999ea103259SMichael Clark                 return false;
5000ea103259SMichael Clark             }
5001ea103259SMichael Clark             break;
5002ea103259SMichael Clark         case rvc_imm_eq_p1:
5003ea103259SMichael Clark             if (!(imm == 1)) {
5004ea103259SMichael Clark                 return false;
5005ea103259SMichael Clark             }
5006ea103259SMichael Clark             break;
5007ea103259SMichael Clark         case rvc_csr_eq_0x001:
5008ea103259SMichael Clark             if (!(imm == 0x001)) {
5009ea103259SMichael Clark                 return false;
5010ea103259SMichael Clark             }
5011ea103259SMichael Clark             break;
5012ea103259SMichael Clark         case rvc_csr_eq_0x002:
5013ea103259SMichael Clark             if (!(imm == 0x002)) {
5014ea103259SMichael Clark                 return false;
5015ea103259SMichael Clark             }
5016ea103259SMichael Clark             break;
5017ea103259SMichael Clark         case rvc_csr_eq_0x003:
5018ea103259SMichael Clark             if (!(imm == 0x003)) {
5019ea103259SMichael Clark                 return false;
5020ea103259SMichael Clark             }
5021ea103259SMichael Clark             break;
5022ea103259SMichael Clark         case rvc_csr_eq_0xc00:
5023ea103259SMichael Clark             if (!(imm == 0xc00)) {
5024ea103259SMichael Clark                 return false;
5025ea103259SMichael Clark             }
5026ea103259SMichael Clark             break;
5027ea103259SMichael Clark         case rvc_csr_eq_0xc01:
5028ea103259SMichael Clark             if (!(imm == 0xc01)) {
5029ea103259SMichael Clark                 return false;
5030ea103259SMichael Clark             }
5031ea103259SMichael Clark             break;
5032ea103259SMichael Clark         case rvc_csr_eq_0xc02:
5033ea103259SMichael Clark             if (!(imm == 0xc02)) {
5034ea103259SMichael Clark                 return false;
5035ea103259SMichael Clark             }
5036ea103259SMichael Clark             break;
5037ea103259SMichael Clark         case rvc_csr_eq_0xc80:
5038ea103259SMichael Clark             if (!(imm == 0xc80)) {
5039ea103259SMichael Clark                 return false;
5040ea103259SMichael Clark             }
5041ea103259SMichael Clark             break;
5042ea103259SMichael Clark         case rvc_csr_eq_0xc81:
5043ea103259SMichael Clark             if (!(imm == 0xc81)) {
5044ea103259SMichael Clark                 return false;
5045ea103259SMichael Clark             }
5046ea103259SMichael Clark             break;
5047ea103259SMichael Clark         case rvc_csr_eq_0xc82:
5048ea103259SMichael Clark             if (!(imm == 0xc82)) {
5049ea103259SMichael Clark                 return false;
5050ea103259SMichael Clark             }
5051ea103259SMichael Clark             break;
5052ea103259SMichael Clark         default: break;
5053ea103259SMichael Clark         }
5054ea103259SMichael Clark         c++;
5055ea103259SMichael Clark     }
5056ea103259SMichael Clark     return true;
5057ea103259SMichael Clark }
5058ea103259SMichael Clark 
5059ea103259SMichael Clark /* instruction length */
5060ea103259SMichael Clark 
inst_length(rv_inst inst)5061ea103259SMichael Clark static size_t inst_length(rv_inst inst)
5062ea103259SMichael Clark {
5063ea103259SMichael Clark     /* NOTE: supports maximum instruction size of 64-bits */
5064ea103259SMichael Clark 
50653bd87176SWeiwei Li     /*
50663bd87176SWeiwei Li      * instruction length coding
5067ea103259SMichael Clark      *
5068ea103259SMichael Clark      *      aa - 16 bit aa != 11
5069ea103259SMichael Clark      *   bbb11 - 32 bit bbb != 111
5070ea103259SMichael Clark      *  011111 - 48 bit
5071ea103259SMichael Clark      * 0111111 - 64 bit
5072ea103259SMichael Clark      */
5073ea103259SMichael Clark 
5074ea103259SMichael Clark     return (inst &      0b11) != 0b11      ? 2
5075ea103259SMichael Clark          : (inst &   0b11100) != 0b11100   ? 4
5076ea103259SMichael Clark          : (inst &  0b111111) == 0b011111  ? 6
5077ea103259SMichael Clark          : (inst & 0b1111111) == 0b0111111 ? 8
5078ea103259SMichael Clark          : 0;
5079ea103259SMichael Clark }
5080ea103259SMichael Clark 
5081ea103259SMichael Clark /* format instruction */
5082ea103259SMichael Clark 
format_inst(size_t tab,rv_decode * dec)5083b89fb575SRichard Henderson static GString *format_inst(size_t tab, rv_decode *dec)
5084ea103259SMichael Clark {
5085fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
5086b89fb575SRichard Henderson     GString *buf = g_string_sized_new(64);
5087ea103259SMichael Clark     const char *fmt;
5088ea103259SMichael Clark 
5089ea103259SMichael Clark     fmt = opcode_data[dec->op].format;
5090ea103259SMichael Clark     while (*fmt) {
5091ea103259SMichael Clark         switch (*fmt) {
5092ea103259SMichael Clark         case 'O':
5093b89fb575SRichard Henderson             g_string_append(buf, opcode_data[dec->op].name);
5094ea103259SMichael Clark             break;
5095ea103259SMichael Clark         case '(':
5096ea103259SMichael Clark         case ',':
5097ea103259SMichael Clark         case ')':
50982c71d02eSWeiwei Li         case '-':
5099b89fb575SRichard Henderson             g_string_append_c(buf, *fmt);
51002c71d02eSWeiwei Li             break;
51015748c886SWeiwei Li         case 'b':
5102b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->bs);
51035748c886SWeiwei Li             break;
51045748c886SWeiwei Li         case 'n':
5105b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->rnum);
51065748c886SWeiwei Li             break;
5107ea103259SMichael Clark         case '0':
5108b89fb575SRichard Henderson             g_string_append(buf, rv_ireg_name_sym[dec->rd]);
5109ea103259SMichael Clark             break;
5110ea103259SMichael Clark         case '1':
5111b89fb575SRichard Henderson             g_string_append(buf, rv_ireg_name_sym[dec->rs1]);
5112ea103259SMichael Clark             break;
5113ea103259SMichael Clark         case '2':
5114b89fb575SRichard Henderson             g_string_append(buf, rv_ireg_name_sym[dec->rs2]);
5115ea103259SMichael Clark             break;
5116ea103259SMichael Clark         case '3':
5117f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zfinx) {
5118b89fb575SRichard Henderson                 g_string_append(buf, rv_ireg_name_sym[dec->rd]);
5119b89fb575SRichard Henderson             } else {
5120b89fb575SRichard Henderson                 g_string_append(buf, rv_freg_name_sym[dec->rd]);
5121b89fb575SRichard Henderson             }
5122ea103259SMichael Clark             break;
5123ea103259SMichael Clark         case '4':
5124f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zfinx) {
5125b89fb575SRichard Henderson                 g_string_append(buf, rv_ireg_name_sym[dec->rs1]);
5126b89fb575SRichard Henderson             } else {
5127b89fb575SRichard Henderson                 g_string_append(buf, rv_freg_name_sym[dec->rs1]);
5128b89fb575SRichard Henderson             }
5129ea103259SMichael Clark             break;
5130ea103259SMichael Clark         case '5':
5131f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zfinx) {
5132b89fb575SRichard Henderson                 g_string_append(buf, rv_ireg_name_sym[dec->rs2]);
5133b89fb575SRichard Henderson             } else {
5134b89fb575SRichard Henderson                 g_string_append(buf, rv_freg_name_sym[dec->rs2]);
5135b89fb575SRichard Henderson             }
5136ea103259SMichael Clark             break;
5137ea103259SMichael Clark         case '6':
5138f65f3ebfSLIU Zhiwei             if (dec->cfg && dec->cfg->ext_zfinx) {
5139b89fb575SRichard Henderson                 g_string_append(buf, rv_ireg_name_sym[dec->rs3]);
5140b89fb575SRichard Henderson             } else {
5141b89fb575SRichard Henderson                 g_string_append(buf, rv_freg_name_sym[dec->rs3]);
5142b89fb575SRichard Henderson             }
5143ea103259SMichael Clark             break;
5144ea103259SMichael Clark         case '7':
5145b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->rs1);
5146ea103259SMichael Clark             break;
5147ea103259SMichael Clark         case 'i':
5148b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->imm);
5149ea103259SMichael Clark             break;
515007f4964dSYang Liu         case 'u':
5151b89fb575SRichard Henderson             g_string_append_printf(buf, "%u", ((uint32_t)dec->imm & 0b111111));
515207f4964dSYang Liu             break;
5153318df723SChristoph Müllner         case 'j':
5154b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->imm1);
5155318df723SChristoph Müllner             break;
5156ea103259SMichael Clark         case 'o':
5157b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->imm);
5158b89fb575SRichard Henderson             while (buf->len < tab * 2) {
5159b89fb575SRichard Henderson                 g_string_append_c(buf, ' ');
5160ea103259SMichael Clark             }
5161b89fb575SRichard Henderson             g_string_append_printf(buf, "# 0x%" PRIx64, dec->pc + dec->imm);
5162ea103259SMichael Clark             break;
516336df75a0SChristoph Müllner         case 'U':
516436df75a0SChristoph Müllner             fmt++;
5165b89fb575SRichard Henderson             g_string_append_printf(buf, "%d", dec->imm >> 12);
516636df75a0SChristoph Müllner             if (*fmt == 'o') {
5167b89fb575SRichard Henderson                 while (buf->len < tab * 2) {
5168b89fb575SRichard Henderson                     g_string_append_c(buf, ' ');
516936df75a0SChristoph Müllner                 }
5170b89fb575SRichard Henderson                 g_string_append_printf(buf, "# 0x%" PRIx64, dec->pc + dec->imm);
517136df75a0SChristoph Müllner             }
517236df75a0SChristoph Müllner             break;
5173ea103259SMichael Clark         case 'c': {
5174ea103259SMichael Clark             const char *name = csr_name(dec->imm & 0xfff);
5175ea103259SMichael Clark             if (name) {
5176b89fb575SRichard Henderson                 g_string_append(buf, name);
5177ea103259SMichael Clark             } else {
5178b89fb575SRichard Henderson                 g_string_append_printf(buf, "0x%03x", dec->imm & 0xfff);
5179ea103259SMichael Clark             }
5180ea103259SMichael Clark             break;
5181ea103259SMichael Clark         }
5182ea103259SMichael Clark         case 'r':
5183ea103259SMichael Clark             switch (dec->rm) {
5184ea103259SMichael Clark             case rv_rm_rne:
5185b89fb575SRichard Henderson                 g_string_append(buf, "rne");
5186ea103259SMichael Clark                 break;
5187ea103259SMichael Clark             case rv_rm_rtz:
5188b89fb575SRichard Henderson                 g_string_append(buf, "rtz");
5189ea103259SMichael Clark                 break;
5190ea103259SMichael Clark             case rv_rm_rdn:
5191b89fb575SRichard Henderson                 g_string_append(buf, "rdn");
5192ea103259SMichael Clark                 break;
5193ea103259SMichael Clark             case rv_rm_rup:
5194b89fb575SRichard Henderson                 g_string_append(buf, "rup");
5195ea103259SMichael Clark                 break;
5196ea103259SMichael Clark             case rv_rm_rmm:
5197b89fb575SRichard Henderson                 g_string_append(buf, "rmm");
5198ea103259SMichael Clark                 break;
5199ea103259SMichael Clark             case rv_rm_dyn:
5200b89fb575SRichard Henderson                 g_string_append(buf, "dyn");
5201ea103259SMichael Clark                 break;
5202ea103259SMichael Clark             default:
5203b89fb575SRichard Henderson                 g_string_append(buf, "inv");
5204ea103259SMichael Clark                 break;
5205ea103259SMichael Clark             }
5206ea103259SMichael Clark             break;
5207ea103259SMichael Clark         case 'p':
5208ea103259SMichael Clark             if (dec->pred & rv_fence_i) {
5209b89fb575SRichard Henderson                 g_string_append_c(buf, 'i');
5210ea103259SMichael Clark             }
5211ea103259SMichael Clark             if (dec->pred & rv_fence_o) {
5212b89fb575SRichard Henderson                 g_string_append_c(buf, 'o');
5213ea103259SMichael Clark             }
5214ea103259SMichael Clark             if (dec->pred & rv_fence_r) {
5215b89fb575SRichard Henderson                 g_string_append_c(buf, 'r');
5216ea103259SMichael Clark             }
5217ea103259SMichael Clark             if (dec->pred & rv_fence_w) {
5218b89fb575SRichard Henderson                 g_string_append_c(buf, 'w');
5219ea103259SMichael Clark             }
5220ea103259SMichael Clark             break;
5221ea103259SMichael Clark         case 's':
5222ea103259SMichael Clark             if (dec->succ & rv_fence_i) {
5223b89fb575SRichard Henderson                 g_string_append_c(buf, 'i');
5224ea103259SMichael Clark             }
5225ea103259SMichael Clark             if (dec->succ & rv_fence_o) {
5226b89fb575SRichard Henderson                 g_string_append_c(buf, 'o');
5227ea103259SMichael Clark             }
5228ea103259SMichael Clark             if (dec->succ & rv_fence_r) {
5229b89fb575SRichard Henderson                 g_string_append_c(buf, 'r');
5230ea103259SMichael Clark             }
5231ea103259SMichael Clark             if (dec->succ & rv_fence_w) {
5232b89fb575SRichard Henderson                 g_string_append_c(buf, 'w');
5233ea103259SMichael Clark             }
5234ea103259SMichael Clark             break;
5235ea103259SMichael Clark         case '\t':
5236b89fb575SRichard Henderson             while (buf->len < tab) {
5237b89fb575SRichard Henderson                 g_string_append_c(buf, ' ');
5238ea103259SMichael Clark             }
5239ea103259SMichael Clark             break;
5240ea103259SMichael Clark         case 'A':
5241ea103259SMichael Clark             if (dec->aq) {
5242b89fb575SRichard Henderson                 g_string_append(buf, ".aq");
5243ea103259SMichael Clark             }
5244ea103259SMichael Clark             break;
5245ea103259SMichael Clark         case 'R':
5246ea103259SMichael Clark             if (dec->rl) {
5247b89fb575SRichard Henderson                 g_string_append(buf, ".rl");
5248ea103259SMichael Clark             }
5249ea103259SMichael Clark             break;
525007f4964dSYang Liu         case 'l':
5251b89fb575SRichard Henderson             g_string_append(buf, ",v0");
525207f4964dSYang Liu             break;
525307f4964dSYang Liu         case 'm':
525407f4964dSYang Liu             if (dec->vm == 0) {
5255b89fb575SRichard Henderson                 g_string_append(buf, ",v0.t");
525607f4964dSYang Liu             }
525707f4964dSYang Liu             break;
525807f4964dSYang Liu         case 'D':
5259b89fb575SRichard Henderson             g_string_append(buf, rv_vreg_name_sym[dec->rd]);
526007f4964dSYang Liu             break;
526107f4964dSYang Liu         case 'E':
5262b89fb575SRichard Henderson             g_string_append(buf, rv_vreg_name_sym[dec->rs1]);
526307f4964dSYang Liu             break;
526407f4964dSYang Liu         case 'F':
5265b89fb575SRichard Henderson             g_string_append(buf, rv_vreg_name_sym[dec->rs2]);
526607f4964dSYang Liu             break;
526707f4964dSYang Liu         case 'G':
5268b89fb575SRichard Henderson             g_string_append(buf, rv_vreg_name_sym[dec->rs3]);
526907f4964dSYang Liu             break;
527007f4964dSYang Liu         case 'v': {
527107f4964dSYang Liu             const int sew = 1 << (((dec->vzimm >> 3) & 0b111) + 3);
527207f4964dSYang Liu             const int lmul = dec->vzimm & 0b11;
527307f4964dSYang Liu             const int flmul = (dec->vzimm >> 2) & 1;
527407f4964dSYang Liu             const char *vta = (dec->vzimm >> 6) & 1 ? "ta" : "tu";
527507f4964dSYang Liu             const char *vma = (dec->vzimm >> 7) & 1 ? "ma" : "mu";
5276b89fb575SRichard Henderson 
5277b89fb575SRichard Henderson             g_string_append_printf(buf, "e%d,m", sew);
527807f4964dSYang Liu             if (flmul) {
527907f4964dSYang Liu                 switch (lmul) {
528007f4964dSYang Liu                 case 3:
5281b89fb575SRichard Henderson                     g_string_append(buf, "f2");
528207f4964dSYang Liu                     break;
528307f4964dSYang Liu                 case 2:
5284b89fb575SRichard Henderson                     g_string_append(buf, "f4");
528507f4964dSYang Liu                     break;
528607f4964dSYang Liu                 case 1:
5287b89fb575SRichard Henderson                     g_string_append(buf, "f8");
528807f4964dSYang Liu                     break;
528907f4964dSYang Liu                 }
529007f4964dSYang Liu             } else {
5291b89fb575SRichard Henderson                 g_string_append_printf(buf, "%d", 1 << lmul);
529207f4964dSYang Liu             }
5293b89fb575SRichard Henderson             g_string_append_c(buf, ',');
5294b89fb575SRichard Henderson             g_string_append(buf, vta);
5295b89fb575SRichard Henderson             g_string_append_c(buf, ',');
5296b89fb575SRichard Henderson             g_string_append(buf, vma);
529707f4964dSYang Liu             break;
529807f4964dSYang Liu         }
52992c71d02eSWeiwei Li         case 'x': {
53002c71d02eSWeiwei Li             switch (dec->rlist) {
53012c71d02eSWeiwei Li             case 4:
5302b89fb575SRichard Henderson                 g_string_append(buf, "{ra}");
53032c71d02eSWeiwei Li                 break;
53042c71d02eSWeiwei Li             case 5:
5305b89fb575SRichard Henderson                 g_string_append(buf, "{ra, s0}");
53062c71d02eSWeiwei Li                 break;
53072c71d02eSWeiwei Li             case 15:
5308b89fb575SRichard Henderson                 g_string_append(buf, "{ra, s0-s11}");
53092c71d02eSWeiwei Li                 break;
53102c71d02eSWeiwei Li             default:
5311b89fb575SRichard Henderson                 g_string_append_printf(buf, "{ra, s0-s%d}", dec->rlist - 5);
53122c71d02eSWeiwei Li                 break;
53132c71d02eSWeiwei Li             }
53142c71d02eSWeiwei Li             break;
53152c71d02eSWeiwei Li         }
5316a47842d1SChristoph Müllner         case 'h':
5317b89fb575SRichard Henderson             g_string_append(buf, rv_fli_name_const[dec->imm]);
5318a47842d1SChristoph Müllner             break;
5319ea103259SMichael Clark         default:
5320ea103259SMichael Clark             break;
5321ea103259SMichael Clark         }
5322ea103259SMichael Clark         fmt++;
5323ea103259SMichael Clark     }
5324b89fb575SRichard Henderson 
5325b89fb575SRichard Henderson     return buf;
5326ea103259SMichael Clark }
5327ea103259SMichael Clark 
5328ea103259SMichael Clark /* lift instruction to pseudo-instruction */
5329ea103259SMichael Clark 
decode_inst_lift_pseudo(rv_decode * dec)5330ea103259SMichael Clark static void decode_inst_lift_pseudo(rv_decode *dec)
5331ea103259SMichael Clark {
5332fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
5333ea103259SMichael Clark     const rv_comp_data *comp_data = opcode_data[dec->op].pseudo;
5334ea103259SMichael Clark     if (!comp_data) {
5335ea103259SMichael Clark         return;
5336ea103259SMichael Clark     }
5337ea103259SMichael Clark     while (comp_data->constraints) {
5338ea103259SMichael Clark         if (check_constraints(dec, comp_data->constraints)) {
5339ea103259SMichael Clark             dec->op = comp_data->op;
5340ea103259SMichael Clark             dec->codec = opcode_data[dec->op].codec;
5341ea103259SMichael Clark             return;
5342ea103259SMichael Clark         }
5343ea103259SMichael Clark         comp_data++;
5344ea103259SMichael Clark     }
5345ea103259SMichael Clark }
5346ea103259SMichael Clark 
5347ea103259SMichael Clark /* decompress instruction */
5348ea103259SMichael Clark 
decode_inst_decompress_rv32(rv_decode * dec)5349ea103259SMichael Clark static void decode_inst_decompress_rv32(rv_decode *dec)
5350ea103259SMichael Clark {
5351fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
5352ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv32;
5353ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
5354f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
5355f88222daSMichael Clark             && dec->imm == 0) {
5356f88222daSMichael Clark             dec->op = rv_op_illegal;
5357f88222daSMichael Clark         } else {
5358ea103259SMichael Clark             dec->op = decomp_op;
5359ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
5360ea103259SMichael Clark         }
5361ea103259SMichael Clark     }
5362f88222daSMichael Clark }
5363ea103259SMichael Clark 
decode_inst_decompress_rv64(rv_decode * dec)5364ea103259SMichael Clark static void decode_inst_decompress_rv64(rv_decode *dec)
5365ea103259SMichael Clark {
5366fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
5367ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv64;
5368ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
5369f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
5370f88222daSMichael Clark             && dec->imm == 0) {
5371f88222daSMichael Clark             dec->op = rv_op_illegal;
5372f88222daSMichael Clark         } else {
5373ea103259SMichael Clark             dec->op = decomp_op;
5374ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
5375ea103259SMichael Clark         }
5376ea103259SMichael Clark     }
5377f88222daSMichael Clark }
5378ea103259SMichael Clark 
decode_inst_decompress_rv128(rv_decode * dec)5379ea103259SMichael Clark static void decode_inst_decompress_rv128(rv_decode *dec)
5380ea103259SMichael Clark {
5381fd7c64f6SChristoph Müllner     const rv_opcode_data *opcode_data = dec->opcode_data;
5382ea103259SMichael Clark     int decomp_op = opcode_data[dec->op].decomp_rv128;
5383ea103259SMichael Clark     if (decomp_op != rv_op_illegal) {
5384f88222daSMichael Clark         if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz)
5385f88222daSMichael Clark             && dec->imm == 0) {
5386f88222daSMichael Clark             dec->op = rv_op_illegal;
5387f88222daSMichael Clark         } else {
5388ea103259SMichael Clark             dec->op = decomp_op;
5389ea103259SMichael Clark             dec->codec = opcode_data[decomp_op].codec;
5390ea103259SMichael Clark         }
5391ea103259SMichael Clark     }
5392f88222daSMichael Clark }
5393ea103259SMichael Clark 
decode_inst_decompress(rv_decode * dec,rv_isa isa)5394ea103259SMichael Clark static void decode_inst_decompress(rv_decode *dec, rv_isa isa)
5395ea103259SMichael Clark {
5396ea103259SMichael Clark     switch (isa) {
5397ea103259SMichael Clark     case rv32:
5398ea103259SMichael Clark         decode_inst_decompress_rv32(dec);
5399ea103259SMichael Clark         break;
5400ea103259SMichael Clark     case rv64:
5401ea103259SMichael Clark         decode_inst_decompress_rv64(dec);
5402ea103259SMichael Clark         break;
5403ea103259SMichael Clark     case rv128:
5404ea103259SMichael Clark         decode_inst_decompress_rv128(dec);
5405ea103259SMichael Clark         break;
5406ea103259SMichael Clark     }
5407ea103259SMichael Clark }
5408ea103259SMichael Clark 
5409ea103259SMichael Clark /* disassemble instruction */
5410ea103259SMichael Clark 
disasm_inst(rv_isa isa,uint64_t pc,rv_inst inst,RISCVCPUConfig * cfg)5411b89fb575SRichard Henderson static GString *disasm_inst(rv_isa isa, uint64_t pc, rv_inst inst,
5412454c2201SWeiwei Li                             RISCVCPUConfig *cfg)
5413ea103259SMichael Clark {
5414ea103259SMichael Clark     rv_decode dec = { 0 };
5415ea103259SMichael Clark     dec.pc = pc;
5416ea103259SMichael Clark     dec.inst = inst;
5417454c2201SWeiwei Li     dec.cfg = cfg;
5418c859a242SChristoph Müllner 
5419c859a242SChristoph Müllner     static const struct {
5420c859a242SChristoph Müllner         bool (*guard_func)(const RISCVCPUConfig *);
5421c859a242SChristoph Müllner         const rv_opcode_data *opcode_data;
5422c859a242SChristoph Müllner         void (*decode_func)(rv_decode *, rv_isa);
5423c859a242SChristoph Müllner     } decoders[] = {
5424c859a242SChristoph Müllner         { always_true_p, rvi_opcode_data, decode_inst_opcode },
5425318df723SChristoph Müllner         { has_xtheadba_p, xthead_opcode_data, decode_xtheadba },
5426318df723SChristoph Müllner         { has_xtheadbb_p, xthead_opcode_data, decode_xtheadbb },
5427318df723SChristoph Müllner         { has_xtheadbs_p, xthead_opcode_data, decode_xtheadbs },
5428318df723SChristoph Müllner         { has_xtheadcmo_p, xthead_opcode_data, decode_xtheadcmo },
5429318df723SChristoph Müllner         { has_xtheadcondmov_p, xthead_opcode_data, decode_xtheadcondmov },
5430318df723SChristoph Müllner         { has_xtheadfmemidx_p, xthead_opcode_data, decode_xtheadfmemidx },
5431318df723SChristoph Müllner         { has_xtheadfmv_p, xthead_opcode_data, decode_xtheadfmv },
5432318df723SChristoph Müllner         { has_xtheadmac_p, xthead_opcode_data, decode_xtheadmac },
5433318df723SChristoph Müllner         { has_xtheadmemidx_p, xthead_opcode_data, decode_xtheadmemidx },
5434318df723SChristoph Müllner         { has_xtheadmempair_p, xthead_opcode_data, decode_xtheadmempair },
5435318df723SChristoph Müllner         { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync },
5436f6f72338SChristoph Müllner         { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanacondops },
5437c859a242SChristoph Müllner     };
5438c859a242SChristoph Müllner 
5439c859a242SChristoph Müllner     for (size_t i = 0; i < ARRAY_SIZE(decoders); i++) {
5440c859a242SChristoph Müllner         bool (*guard_func)(const RISCVCPUConfig *) = decoders[i].guard_func;
5441c859a242SChristoph Müllner         const rv_opcode_data *opcode_data = decoders[i].opcode_data;
5442c859a242SChristoph Müllner         void (*decode_func)(rv_decode *, rv_isa) = decoders[i].decode_func;
5443c859a242SChristoph Müllner 
5444f65f3ebfSLIU Zhiwei         /* always_true_p don't dereference cfg */
5445f65f3ebfSLIU Zhiwei         if (((i == 0) || cfg) && guard_func(cfg)) {
5446c859a242SChristoph Müllner             dec.opcode_data = opcode_data;
5447c859a242SChristoph Müllner             decode_func(&dec, isa);
5448c859a242SChristoph Müllner             if (dec.op != rv_op_illegal)
5449c859a242SChristoph Müllner                 break;
5450c859a242SChristoph Müllner         }
5451c859a242SChristoph Müllner     }
5452c859a242SChristoph Müllner 
5453c859a242SChristoph Müllner     if (dec.op == rv_op_illegal) {
5454c859a242SChristoph Müllner         dec.opcode_data = rvi_opcode_data;
5455c859a242SChristoph Müllner     }
5456c859a242SChristoph Müllner 
545733632775SFrédéric Pétrot     decode_inst_operands(&dec, isa);
5458ea103259SMichael Clark     decode_inst_decompress(&dec, isa);
5459ea103259SMichael Clark     decode_inst_lift_pseudo(&dec);
5460b89fb575SRichard Henderson     return format_inst(24, &dec);
5461ea103259SMichael Clark }
5462ea103259SMichael Clark 
54636296a799SMichael Clark #define INST_FMT_2 "%04" PRIx64 "              "
54646296a799SMichael Clark #define INST_FMT_4 "%08" PRIx64 "          "
54656296a799SMichael Clark #define INST_FMT_6 "%012" PRIx64 "      "
54666296a799SMichael Clark #define INST_FMT_8 "%016" PRIx64 "  "
54676296a799SMichael Clark 
5468ea103259SMichael Clark static int
print_insn_riscv(bfd_vma memaddr,struct disassemble_info * info,rv_isa isa)5469ea103259SMichael Clark print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa)
5470ea103259SMichael Clark {
5471ea103259SMichael Clark     bfd_byte packet[2];
5472ea103259SMichael Clark     rv_inst inst = 0;
5473ea103259SMichael Clark     size_t len = 2;
5474ea103259SMichael Clark     bfd_vma n;
5475ea103259SMichael Clark     int status;
5476ea103259SMichael Clark 
5477ea103259SMichael Clark     /* Instructions are made of 2-byte packets in little-endian order */
5478ea103259SMichael Clark     for (n = 0; n < len; n += 2) {
5479ea103259SMichael Clark         status = (*info->read_memory_func)(memaddr + n, packet, 2, info);
5480ea103259SMichael Clark         if (status != 0) {
5481ea103259SMichael Clark             /* Don't fail just because we fell off the end.  */
5482ea103259SMichael Clark             if (n > 0) {
5483ea103259SMichael Clark                 break;
5484ea103259SMichael Clark             }
5485ea103259SMichael Clark             (*info->memory_error_func)(status, memaddr, info);
5486ea103259SMichael Clark             return status;
5487ea103259SMichael Clark         }
5488ea103259SMichael Clark         inst |= ((rv_inst) bfd_getl16(packet)) << (8 * n);
5489ea103259SMichael Clark         if (n == 0) {
5490ea103259SMichael Clark             len = inst_length(inst);
5491ea103259SMichael Clark         }
5492ea103259SMichael Clark     }
5493ea103259SMichael Clark 
5494db7e8b1fSAlex Bennée     if (info->show_opcodes) {
54956296a799SMichael Clark         switch (len) {
54966296a799SMichael Clark         case 2:
54976296a799SMichael Clark             (*info->fprintf_func)(info->stream, INST_FMT_2, inst);
54986296a799SMichael Clark             break;
54996296a799SMichael Clark         case 4:
55006296a799SMichael Clark             (*info->fprintf_func)(info->stream, INST_FMT_4, inst);
55016296a799SMichael Clark             break;
55026296a799SMichael Clark         case 6:
55036296a799SMichael Clark             (*info->fprintf_func)(info->stream, INST_FMT_6, inst);
55046296a799SMichael Clark             break;
55056296a799SMichael Clark         default:
55066296a799SMichael Clark             (*info->fprintf_func)(info->stream, INST_FMT_8, inst);
55076296a799SMichael Clark             break;
55086296a799SMichael Clark         }
5509db7e8b1fSAlex Bennée     }
55106296a799SMichael Clark 
5511b89fb575SRichard Henderson     g_autoptr(GString) str =
5512b89fb575SRichard Henderson         disasm_inst(isa, memaddr, inst, (RISCVCPUConfig *)info->target_info);
5513b89fb575SRichard Henderson     (*info->fprintf_func)(info->stream, "%s", str->str);
5514ea103259SMichael Clark 
5515ea103259SMichael Clark     return len;
5516ea103259SMichael Clark }
5517ea103259SMichael Clark 
print_insn_riscv32(bfd_vma memaddr,struct disassemble_info * info)5518ea103259SMichael Clark int print_insn_riscv32(bfd_vma memaddr, struct disassemble_info *info)
5519ea103259SMichael Clark {
5520ea103259SMichael Clark     return print_insn_riscv(memaddr, info, rv32);
5521ea103259SMichael Clark }
5522ea103259SMichael Clark 
print_insn_riscv64(bfd_vma memaddr,struct disassemble_info * info)5523ea103259SMichael Clark int print_insn_riscv64(bfd_vma memaddr, struct disassemble_info *info)
5524ea103259SMichael Clark {
5525ea103259SMichael Clark     return print_insn_riscv(memaddr, info, rv64);
5526ea103259SMichael Clark }
5527332dab68SFrédéric Pétrot 
print_insn_riscv128(bfd_vma memaddr,struct disassemble_info * info)5528332dab68SFrédéric Pétrot int print_insn_riscv128(bfd_vma memaddr, struct disassemble_info *info)
5529332dab68SFrédéric Pétrot {
5530332dab68SFrédéric Pétrot     return print_insn_riscv(memaddr, info, rv128);
5531332dab68SFrédéric Pétrot }
5532