1ea103259SMichael Clark /* 2ea103259SMichael Clark * QEMU RISC-V Disassembler 3ea103259SMichael Clark * 4ea103259SMichael Clark * Copyright (c) 2016-2017 Michael Clark <michaeljclark@mac.com> 5ea103259SMichael Clark * Copyright (c) 2017-2018 SiFive, Inc. 6ea103259SMichael Clark * 7ea103259SMichael Clark * This program is free software; you can redistribute it and/or modify it 8ea103259SMichael Clark * under the terms and conditions of the GNU General Public License, 9ea103259SMichael Clark * version 2 or later, as published by the Free Software Foundation. 10ea103259SMichael Clark * 11ea103259SMichael Clark * This program is distributed in the hope it will be useful, but WITHOUT 12ea103259SMichael Clark * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13ea103259SMichael Clark * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14ea103259SMichael Clark * more details. 15ea103259SMichael Clark * 16ea103259SMichael Clark * You should have received a copy of the GNU General Public License along with 17ea103259SMichael Clark * this program. If not, see <http://www.gnu.org/licenses/>. 18ea103259SMichael Clark */ 19ea103259SMichael Clark 20ea103259SMichael Clark #include "qemu/osdep.h" 213979fca4SMarkus Armbruster #include "disas/dis-asm.h" 22ea103259SMichael Clark 23ea103259SMichael Clark 24ea103259SMichael Clark /* types */ 25ea103259SMichael Clark 26ea103259SMichael Clark typedef uint64_t rv_inst; 27ea103259SMichael Clark typedef uint16_t rv_opcode; 28ea103259SMichael Clark 29ea103259SMichael Clark /* enums */ 30ea103259SMichael Clark 31ea103259SMichael Clark typedef enum { 32ea103259SMichael Clark rv32, 33ea103259SMichael Clark rv64, 34ea103259SMichael Clark rv128 35ea103259SMichael Clark } rv_isa; 36ea103259SMichael Clark 37ea103259SMichael Clark typedef enum { 38ea103259SMichael Clark rv_rm_rne = 0, 39ea103259SMichael Clark rv_rm_rtz = 1, 40ea103259SMichael Clark rv_rm_rdn = 2, 41ea103259SMichael Clark rv_rm_rup = 3, 42ea103259SMichael Clark rv_rm_rmm = 4, 43ea103259SMichael Clark rv_rm_dyn = 7, 44ea103259SMichael Clark } rv_rm; 45ea103259SMichael Clark 46ea103259SMichael Clark typedef enum { 47ea103259SMichael Clark rv_fence_i = 8, 48ea103259SMichael Clark rv_fence_o = 4, 49ea103259SMichael Clark rv_fence_r = 2, 50ea103259SMichael Clark rv_fence_w = 1, 51ea103259SMichael Clark } rv_fence; 52ea103259SMichael Clark 53ea103259SMichael Clark typedef enum { 54ea103259SMichael Clark rv_ireg_zero, 55ea103259SMichael Clark rv_ireg_ra, 56ea103259SMichael Clark rv_ireg_sp, 57ea103259SMichael Clark rv_ireg_gp, 58ea103259SMichael Clark rv_ireg_tp, 59ea103259SMichael Clark rv_ireg_t0, 60ea103259SMichael Clark rv_ireg_t1, 61ea103259SMichael Clark rv_ireg_t2, 62ea103259SMichael Clark rv_ireg_s0, 63ea103259SMichael Clark rv_ireg_s1, 64ea103259SMichael Clark rv_ireg_a0, 65ea103259SMichael Clark rv_ireg_a1, 66ea103259SMichael Clark rv_ireg_a2, 67ea103259SMichael Clark rv_ireg_a3, 68ea103259SMichael Clark rv_ireg_a4, 69ea103259SMichael Clark rv_ireg_a5, 70ea103259SMichael Clark rv_ireg_a6, 71ea103259SMichael Clark rv_ireg_a7, 72ea103259SMichael Clark rv_ireg_s2, 73ea103259SMichael Clark rv_ireg_s3, 74ea103259SMichael Clark rv_ireg_s4, 75ea103259SMichael Clark rv_ireg_s5, 76ea103259SMichael Clark rv_ireg_s6, 77ea103259SMichael Clark rv_ireg_s7, 78ea103259SMichael Clark rv_ireg_s8, 79ea103259SMichael Clark rv_ireg_s9, 80ea103259SMichael Clark rv_ireg_s10, 81ea103259SMichael Clark rv_ireg_s11, 82ea103259SMichael Clark rv_ireg_t3, 83ea103259SMichael Clark rv_ireg_t4, 84ea103259SMichael Clark rv_ireg_t5, 85ea103259SMichael Clark rv_ireg_t6, 86ea103259SMichael Clark } rv_ireg; 87ea103259SMichael Clark 88ea103259SMichael Clark typedef enum { 89ea103259SMichael Clark rvc_end, 90ea103259SMichael Clark rvc_rd_eq_ra, 91ea103259SMichael Clark rvc_rd_eq_x0, 92ea103259SMichael Clark rvc_rs1_eq_x0, 93ea103259SMichael Clark rvc_rs2_eq_x0, 94ea103259SMichael Clark rvc_rs2_eq_rs1, 95ea103259SMichael Clark rvc_rs1_eq_ra, 96ea103259SMichael Clark rvc_imm_eq_zero, 97ea103259SMichael Clark rvc_imm_eq_n1, 98ea103259SMichael Clark rvc_imm_eq_p1, 99ea103259SMichael Clark rvc_csr_eq_0x001, 100ea103259SMichael Clark rvc_csr_eq_0x002, 101ea103259SMichael Clark rvc_csr_eq_0x003, 102ea103259SMichael Clark rvc_csr_eq_0xc00, 103ea103259SMichael Clark rvc_csr_eq_0xc01, 104ea103259SMichael Clark rvc_csr_eq_0xc02, 105ea103259SMichael Clark rvc_csr_eq_0xc80, 106ea103259SMichael Clark rvc_csr_eq_0xc81, 107ea103259SMichael Clark rvc_csr_eq_0xc82, 108ea103259SMichael Clark } rvc_constraint; 109ea103259SMichael Clark 110ea103259SMichael Clark typedef enum { 111ea103259SMichael Clark rv_codec_illegal, 112ea103259SMichael Clark rv_codec_none, 113ea103259SMichael Clark rv_codec_u, 114ea103259SMichael Clark rv_codec_uj, 115ea103259SMichael Clark rv_codec_i, 116ea103259SMichael Clark rv_codec_i_sh5, 117ea103259SMichael Clark rv_codec_i_sh6, 118ea103259SMichael Clark rv_codec_i_sh7, 119ea103259SMichael Clark rv_codec_i_csr, 120ea103259SMichael Clark rv_codec_s, 121ea103259SMichael Clark rv_codec_sb, 122ea103259SMichael Clark rv_codec_r, 123ea103259SMichael Clark rv_codec_r_m, 124ea103259SMichael Clark rv_codec_r4_m, 125ea103259SMichael Clark rv_codec_r_a, 126ea103259SMichael Clark rv_codec_r_l, 127ea103259SMichael Clark rv_codec_r_f, 128ea103259SMichael Clark rv_codec_cb, 129ea103259SMichael Clark rv_codec_cb_imm, 130ea103259SMichael Clark rv_codec_cb_sh5, 131ea103259SMichael Clark rv_codec_cb_sh6, 132ea103259SMichael Clark rv_codec_ci, 133ea103259SMichael Clark rv_codec_ci_sh5, 134ea103259SMichael Clark rv_codec_ci_sh6, 135ea103259SMichael Clark rv_codec_ci_16sp, 136ea103259SMichael Clark rv_codec_ci_lwsp, 137ea103259SMichael Clark rv_codec_ci_ldsp, 138ea103259SMichael Clark rv_codec_ci_lqsp, 139ea103259SMichael Clark rv_codec_ci_li, 140ea103259SMichael Clark rv_codec_ci_lui, 141ea103259SMichael Clark rv_codec_ci_none, 142ea103259SMichael Clark rv_codec_ciw_4spn, 143ea103259SMichael Clark rv_codec_cj, 144ea103259SMichael Clark rv_codec_cj_jal, 145ea103259SMichael Clark rv_codec_cl_lw, 146ea103259SMichael Clark rv_codec_cl_ld, 147ea103259SMichael Clark rv_codec_cl_lq, 148ea103259SMichael Clark rv_codec_cr, 149ea103259SMichael Clark rv_codec_cr_mv, 150ea103259SMichael Clark rv_codec_cr_jalr, 151ea103259SMichael Clark rv_codec_cr_jr, 152ea103259SMichael Clark rv_codec_cs, 153ea103259SMichael Clark rv_codec_cs_sw, 154ea103259SMichael Clark rv_codec_cs_sd, 155ea103259SMichael Clark rv_codec_cs_sq, 156ea103259SMichael Clark rv_codec_css_swsp, 157ea103259SMichael Clark rv_codec_css_sdsp, 158ea103259SMichael Clark rv_codec_css_sqsp, 1595748c886SWeiwei Li rv_codec_k_bs, 1605748c886SWeiwei Li rv_codec_k_rnum, 16107f4964dSYang Liu rv_codec_v_r, 16207f4964dSYang Liu rv_codec_v_ldst, 16307f4964dSYang Liu rv_codec_v_i, 16407f4964dSYang Liu rv_codec_vsetvli, 16507f4964dSYang Liu rv_codec_vsetivli, 166ea103259SMichael Clark } rv_codec; 167ea103259SMichael Clark 168ea103259SMichael Clark typedef enum { 169ea103259SMichael Clark rv_op_illegal = 0, 170ea103259SMichael Clark rv_op_lui = 1, 171ea103259SMichael Clark rv_op_auipc = 2, 172ea103259SMichael Clark rv_op_jal = 3, 173ea103259SMichael Clark rv_op_jalr = 4, 174ea103259SMichael Clark rv_op_beq = 5, 175ea103259SMichael Clark rv_op_bne = 6, 176ea103259SMichael Clark rv_op_blt = 7, 177ea103259SMichael Clark rv_op_bge = 8, 178ea103259SMichael Clark rv_op_bltu = 9, 179ea103259SMichael Clark rv_op_bgeu = 10, 180ea103259SMichael Clark rv_op_lb = 11, 181ea103259SMichael Clark rv_op_lh = 12, 182ea103259SMichael Clark rv_op_lw = 13, 183ea103259SMichael Clark rv_op_lbu = 14, 184ea103259SMichael Clark rv_op_lhu = 15, 185ea103259SMichael Clark rv_op_sb = 16, 186ea103259SMichael Clark rv_op_sh = 17, 187ea103259SMichael Clark rv_op_sw = 18, 188ea103259SMichael Clark rv_op_addi = 19, 189ea103259SMichael Clark rv_op_slti = 20, 190ea103259SMichael Clark rv_op_sltiu = 21, 191ea103259SMichael Clark rv_op_xori = 22, 192ea103259SMichael Clark rv_op_ori = 23, 193ea103259SMichael Clark rv_op_andi = 24, 194ea103259SMichael Clark rv_op_slli = 25, 195ea103259SMichael Clark rv_op_srli = 26, 196ea103259SMichael Clark rv_op_srai = 27, 197ea103259SMichael Clark rv_op_add = 28, 198ea103259SMichael Clark rv_op_sub = 29, 199ea103259SMichael Clark rv_op_sll = 30, 200ea103259SMichael Clark rv_op_slt = 31, 201ea103259SMichael Clark rv_op_sltu = 32, 202ea103259SMichael Clark rv_op_xor = 33, 203ea103259SMichael Clark rv_op_srl = 34, 204ea103259SMichael Clark rv_op_sra = 35, 205ea103259SMichael Clark rv_op_or = 36, 206ea103259SMichael Clark rv_op_and = 37, 207ea103259SMichael Clark rv_op_fence = 38, 208ea103259SMichael Clark rv_op_fence_i = 39, 209ea103259SMichael Clark rv_op_lwu = 40, 210ea103259SMichael Clark rv_op_ld = 41, 211ea103259SMichael Clark rv_op_sd = 42, 212ea103259SMichael Clark rv_op_addiw = 43, 213ea103259SMichael Clark rv_op_slliw = 44, 214ea103259SMichael Clark rv_op_srliw = 45, 215ea103259SMichael Clark rv_op_sraiw = 46, 216ea103259SMichael Clark rv_op_addw = 47, 217ea103259SMichael Clark rv_op_subw = 48, 218ea103259SMichael Clark rv_op_sllw = 49, 219ea103259SMichael Clark rv_op_srlw = 50, 220ea103259SMichael Clark rv_op_sraw = 51, 221ea103259SMichael Clark rv_op_ldu = 52, 222ea103259SMichael Clark rv_op_lq = 53, 223ea103259SMichael Clark rv_op_sq = 54, 224ea103259SMichael Clark rv_op_addid = 55, 225ea103259SMichael Clark rv_op_sllid = 56, 226ea103259SMichael Clark rv_op_srlid = 57, 227ea103259SMichael Clark rv_op_sraid = 58, 228ea103259SMichael Clark rv_op_addd = 59, 229ea103259SMichael Clark rv_op_subd = 60, 230ea103259SMichael Clark rv_op_slld = 61, 231ea103259SMichael Clark rv_op_srld = 62, 232ea103259SMichael Clark rv_op_srad = 63, 233ea103259SMichael Clark rv_op_mul = 64, 234ea103259SMichael Clark rv_op_mulh = 65, 235ea103259SMichael Clark rv_op_mulhsu = 66, 236ea103259SMichael Clark rv_op_mulhu = 67, 237ea103259SMichael Clark rv_op_div = 68, 238ea103259SMichael Clark rv_op_divu = 69, 239ea103259SMichael Clark rv_op_rem = 70, 240ea103259SMichael Clark rv_op_remu = 71, 241ea103259SMichael Clark rv_op_mulw = 72, 242ea103259SMichael Clark rv_op_divw = 73, 243ea103259SMichael Clark rv_op_divuw = 74, 244ea103259SMichael Clark rv_op_remw = 75, 245ea103259SMichael Clark rv_op_remuw = 76, 246ea103259SMichael Clark rv_op_muld = 77, 247ea103259SMichael Clark rv_op_divd = 78, 248ea103259SMichael Clark rv_op_divud = 79, 249ea103259SMichael Clark rv_op_remd = 80, 250ea103259SMichael Clark rv_op_remud = 81, 251ea103259SMichael Clark rv_op_lr_w = 82, 252ea103259SMichael Clark rv_op_sc_w = 83, 253ea103259SMichael Clark rv_op_amoswap_w = 84, 254ea103259SMichael Clark rv_op_amoadd_w = 85, 255ea103259SMichael Clark rv_op_amoxor_w = 86, 256ea103259SMichael Clark rv_op_amoor_w = 87, 257ea103259SMichael Clark rv_op_amoand_w = 88, 258ea103259SMichael Clark rv_op_amomin_w = 89, 259ea103259SMichael Clark rv_op_amomax_w = 90, 260ea103259SMichael Clark rv_op_amominu_w = 91, 261ea103259SMichael Clark rv_op_amomaxu_w = 92, 262ea103259SMichael Clark rv_op_lr_d = 93, 263ea103259SMichael Clark rv_op_sc_d = 94, 264ea103259SMichael Clark rv_op_amoswap_d = 95, 265ea103259SMichael Clark rv_op_amoadd_d = 96, 266ea103259SMichael Clark rv_op_amoxor_d = 97, 267ea103259SMichael Clark rv_op_amoor_d = 98, 268ea103259SMichael Clark rv_op_amoand_d = 99, 269ea103259SMichael Clark rv_op_amomin_d = 100, 270ea103259SMichael Clark rv_op_amomax_d = 101, 271ea103259SMichael Clark rv_op_amominu_d = 102, 272ea103259SMichael Clark rv_op_amomaxu_d = 103, 273ea103259SMichael Clark rv_op_lr_q = 104, 274ea103259SMichael Clark rv_op_sc_q = 105, 275ea103259SMichael Clark rv_op_amoswap_q = 106, 276ea103259SMichael Clark rv_op_amoadd_q = 107, 277ea103259SMichael Clark rv_op_amoxor_q = 108, 278ea103259SMichael Clark rv_op_amoor_q = 109, 279ea103259SMichael Clark rv_op_amoand_q = 110, 280ea103259SMichael Clark rv_op_amomin_q = 111, 281ea103259SMichael Clark rv_op_amomax_q = 112, 282ea103259SMichael Clark rv_op_amominu_q = 113, 283ea103259SMichael Clark rv_op_amomaxu_q = 114, 284ea103259SMichael Clark rv_op_ecall = 115, 285ea103259SMichael Clark rv_op_ebreak = 116, 286ea103259SMichael Clark rv_op_uret = 117, 287ea103259SMichael Clark rv_op_sret = 118, 288ea103259SMichael Clark rv_op_hret = 119, 289ea103259SMichael Clark rv_op_mret = 120, 290ea103259SMichael Clark rv_op_dret = 121, 291ea103259SMichael Clark rv_op_sfence_vm = 122, 292ea103259SMichael Clark rv_op_sfence_vma = 123, 293ea103259SMichael Clark rv_op_wfi = 124, 294ea103259SMichael Clark rv_op_csrrw = 125, 295ea103259SMichael Clark rv_op_csrrs = 126, 296ea103259SMichael Clark rv_op_csrrc = 127, 297ea103259SMichael Clark rv_op_csrrwi = 128, 298ea103259SMichael Clark rv_op_csrrsi = 129, 299ea103259SMichael Clark rv_op_csrrci = 130, 300ea103259SMichael Clark rv_op_flw = 131, 301ea103259SMichael Clark rv_op_fsw = 132, 302ea103259SMichael Clark rv_op_fmadd_s = 133, 303ea103259SMichael Clark rv_op_fmsub_s = 134, 304ea103259SMichael Clark rv_op_fnmsub_s = 135, 305ea103259SMichael Clark rv_op_fnmadd_s = 136, 306ea103259SMichael Clark rv_op_fadd_s = 137, 307ea103259SMichael Clark rv_op_fsub_s = 138, 308ea103259SMichael Clark rv_op_fmul_s = 139, 309ea103259SMichael Clark rv_op_fdiv_s = 140, 310ea103259SMichael Clark rv_op_fsgnj_s = 141, 311ea103259SMichael Clark rv_op_fsgnjn_s = 142, 312ea103259SMichael Clark rv_op_fsgnjx_s = 143, 313ea103259SMichael Clark rv_op_fmin_s = 144, 314ea103259SMichael Clark rv_op_fmax_s = 145, 315ea103259SMichael Clark rv_op_fsqrt_s = 146, 316ea103259SMichael Clark rv_op_fle_s = 147, 317ea103259SMichael Clark rv_op_flt_s = 148, 318ea103259SMichael Clark rv_op_feq_s = 149, 319ea103259SMichael Clark rv_op_fcvt_w_s = 150, 320ea103259SMichael Clark rv_op_fcvt_wu_s = 151, 321ea103259SMichael Clark rv_op_fcvt_s_w = 152, 322ea103259SMichael Clark rv_op_fcvt_s_wu = 153, 323ea103259SMichael Clark rv_op_fmv_x_s = 154, 324ea103259SMichael Clark rv_op_fclass_s = 155, 325ea103259SMichael Clark rv_op_fmv_s_x = 156, 326ea103259SMichael Clark rv_op_fcvt_l_s = 157, 327ea103259SMichael Clark rv_op_fcvt_lu_s = 158, 328ea103259SMichael Clark rv_op_fcvt_s_l = 159, 329ea103259SMichael Clark rv_op_fcvt_s_lu = 160, 330ea103259SMichael Clark rv_op_fld = 161, 331ea103259SMichael Clark rv_op_fsd = 162, 332ea103259SMichael Clark rv_op_fmadd_d = 163, 333ea103259SMichael Clark rv_op_fmsub_d = 164, 334ea103259SMichael Clark rv_op_fnmsub_d = 165, 335ea103259SMichael Clark rv_op_fnmadd_d = 166, 336ea103259SMichael Clark rv_op_fadd_d = 167, 337ea103259SMichael Clark rv_op_fsub_d = 168, 338ea103259SMichael Clark rv_op_fmul_d = 169, 339ea103259SMichael Clark rv_op_fdiv_d = 170, 340ea103259SMichael Clark rv_op_fsgnj_d = 171, 341ea103259SMichael Clark rv_op_fsgnjn_d = 172, 342ea103259SMichael Clark rv_op_fsgnjx_d = 173, 343ea103259SMichael Clark rv_op_fmin_d = 174, 344ea103259SMichael Clark rv_op_fmax_d = 175, 345ea103259SMichael Clark rv_op_fcvt_s_d = 176, 346ea103259SMichael Clark rv_op_fcvt_d_s = 177, 347ea103259SMichael Clark rv_op_fsqrt_d = 178, 348ea103259SMichael Clark rv_op_fle_d = 179, 349ea103259SMichael Clark rv_op_flt_d = 180, 350ea103259SMichael Clark rv_op_feq_d = 181, 351ea103259SMichael Clark rv_op_fcvt_w_d = 182, 352ea103259SMichael Clark rv_op_fcvt_wu_d = 183, 353ea103259SMichael Clark rv_op_fcvt_d_w = 184, 354ea103259SMichael Clark rv_op_fcvt_d_wu = 185, 355ea103259SMichael Clark rv_op_fclass_d = 186, 356ea103259SMichael Clark rv_op_fcvt_l_d = 187, 357ea103259SMichael Clark rv_op_fcvt_lu_d = 188, 358ea103259SMichael Clark rv_op_fmv_x_d = 189, 359ea103259SMichael Clark rv_op_fcvt_d_l = 190, 360ea103259SMichael Clark rv_op_fcvt_d_lu = 191, 361ea103259SMichael Clark rv_op_fmv_d_x = 192, 362ea103259SMichael Clark rv_op_flq = 193, 363ea103259SMichael Clark rv_op_fsq = 194, 364ea103259SMichael Clark rv_op_fmadd_q = 195, 365ea103259SMichael Clark rv_op_fmsub_q = 196, 366ea103259SMichael Clark rv_op_fnmsub_q = 197, 367ea103259SMichael Clark rv_op_fnmadd_q = 198, 368ea103259SMichael Clark rv_op_fadd_q = 199, 369ea103259SMichael Clark rv_op_fsub_q = 200, 370ea103259SMichael Clark rv_op_fmul_q = 201, 371ea103259SMichael Clark rv_op_fdiv_q = 202, 372ea103259SMichael Clark rv_op_fsgnj_q = 203, 373ea103259SMichael Clark rv_op_fsgnjn_q = 204, 374ea103259SMichael Clark rv_op_fsgnjx_q = 205, 375ea103259SMichael Clark rv_op_fmin_q = 206, 376ea103259SMichael Clark rv_op_fmax_q = 207, 377ea103259SMichael Clark rv_op_fcvt_s_q = 208, 378ea103259SMichael Clark rv_op_fcvt_q_s = 209, 379ea103259SMichael Clark rv_op_fcvt_d_q = 210, 380ea103259SMichael Clark rv_op_fcvt_q_d = 211, 381ea103259SMichael Clark rv_op_fsqrt_q = 212, 382ea103259SMichael Clark rv_op_fle_q = 213, 383ea103259SMichael Clark rv_op_flt_q = 214, 384ea103259SMichael Clark rv_op_feq_q = 215, 385ea103259SMichael Clark rv_op_fcvt_w_q = 216, 386ea103259SMichael Clark rv_op_fcvt_wu_q = 217, 387ea103259SMichael Clark rv_op_fcvt_q_w = 218, 388ea103259SMichael Clark rv_op_fcvt_q_wu = 219, 389ea103259SMichael Clark rv_op_fclass_q = 220, 390ea103259SMichael Clark rv_op_fcvt_l_q = 221, 391ea103259SMichael Clark rv_op_fcvt_lu_q = 222, 392ea103259SMichael Clark rv_op_fcvt_q_l = 223, 393ea103259SMichael Clark rv_op_fcvt_q_lu = 224, 394ea103259SMichael Clark rv_op_fmv_x_q = 225, 395ea103259SMichael Clark rv_op_fmv_q_x = 226, 396ea103259SMichael Clark rv_op_c_addi4spn = 227, 397ea103259SMichael Clark rv_op_c_fld = 228, 398ea103259SMichael Clark rv_op_c_lw = 229, 399ea103259SMichael Clark rv_op_c_flw = 230, 400ea103259SMichael Clark rv_op_c_fsd = 231, 401ea103259SMichael Clark rv_op_c_sw = 232, 402ea103259SMichael Clark rv_op_c_fsw = 233, 403ea103259SMichael Clark rv_op_c_nop = 234, 404ea103259SMichael Clark rv_op_c_addi = 235, 405ea103259SMichael Clark rv_op_c_jal = 236, 406ea103259SMichael Clark rv_op_c_li = 237, 407ea103259SMichael Clark rv_op_c_addi16sp = 238, 408ea103259SMichael Clark rv_op_c_lui = 239, 409ea103259SMichael Clark rv_op_c_srli = 240, 410ea103259SMichael Clark rv_op_c_srai = 241, 411ea103259SMichael Clark rv_op_c_andi = 242, 412ea103259SMichael Clark rv_op_c_sub = 243, 413ea103259SMichael Clark rv_op_c_xor = 244, 414ea103259SMichael Clark rv_op_c_or = 245, 415ea103259SMichael Clark rv_op_c_and = 246, 416ea103259SMichael Clark rv_op_c_subw = 247, 417ea103259SMichael Clark rv_op_c_addw = 248, 418ea103259SMichael Clark rv_op_c_j = 249, 419ea103259SMichael Clark rv_op_c_beqz = 250, 420ea103259SMichael Clark rv_op_c_bnez = 251, 421ea103259SMichael Clark rv_op_c_slli = 252, 422ea103259SMichael Clark rv_op_c_fldsp = 253, 423ea103259SMichael Clark rv_op_c_lwsp = 254, 424ea103259SMichael Clark rv_op_c_flwsp = 255, 425ea103259SMichael Clark rv_op_c_jr = 256, 426ea103259SMichael Clark rv_op_c_mv = 257, 427ea103259SMichael Clark rv_op_c_ebreak = 258, 428ea103259SMichael Clark rv_op_c_jalr = 259, 429ea103259SMichael Clark rv_op_c_add = 260, 430ea103259SMichael Clark rv_op_c_fsdsp = 261, 431ea103259SMichael Clark rv_op_c_swsp = 262, 432ea103259SMichael Clark rv_op_c_fswsp = 263, 433ea103259SMichael Clark rv_op_c_ld = 264, 434ea103259SMichael Clark rv_op_c_sd = 265, 435ea103259SMichael Clark rv_op_c_addiw = 266, 436ea103259SMichael Clark rv_op_c_ldsp = 267, 437ea103259SMichael Clark rv_op_c_sdsp = 268, 438ea103259SMichael Clark rv_op_c_lq = 269, 439ea103259SMichael Clark rv_op_c_sq = 270, 440ea103259SMichael Clark rv_op_c_lqsp = 271, 441ea103259SMichael Clark rv_op_c_sqsp = 272, 442ea103259SMichael Clark rv_op_nop = 273, 443ea103259SMichael Clark rv_op_mv = 274, 444ea103259SMichael Clark rv_op_not = 275, 445ea103259SMichael Clark rv_op_neg = 276, 446ea103259SMichael Clark rv_op_negw = 277, 447ea103259SMichael Clark rv_op_sext_w = 278, 448ea103259SMichael Clark rv_op_seqz = 279, 449ea103259SMichael Clark rv_op_snez = 280, 450ea103259SMichael Clark rv_op_sltz = 281, 451ea103259SMichael Clark rv_op_sgtz = 282, 452ea103259SMichael Clark rv_op_fmv_s = 283, 453ea103259SMichael Clark rv_op_fabs_s = 284, 454ea103259SMichael Clark rv_op_fneg_s = 285, 455ea103259SMichael Clark rv_op_fmv_d = 286, 456ea103259SMichael Clark rv_op_fabs_d = 287, 457ea103259SMichael Clark rv_op_fneg_d = 288, 458ea103259SMichael Clark rv_op_fmv_q = 289, 459ea103259SMichael Clark rv_op_fabs_q = 290, 460ea103259SMichael Clark rv_op_fneg_q = 291, 461ea103259SMichael Clark rv_op_beqz = 292, 462ea103259SMichael Clark rv_op_bnez = 293, 463ea103259SMichael Clark rv_op_blez = 294, 464ea103259SMichael Clark rv_op_bgez = 295, 465ea103259SMichael Clark rv_op_bltz = 296, 466ea103259SMichael Clark rv_op_bgtz = 297, 467ea103259SMichael Clark rv_op_ble = 298, 468ea103259SMichael Clark rv_op_bleu = 299, 469ea103259SMichael Clark rv_op_bgt = 300, 470ea103259SMichael Clark rv_op_bgtu = 301, 471ea103259SMichael Clark rv_op_j = 302, 472ea103259SMichael Clark rv_op_ret = 303, 473ea103259SMichael Clark rv_op_jr = 304, 474ea103259SMichael Clark rv_op_rdcycle = 305, 475ea103259SMichael Clark rv_op_rdtime = 306, 476ea103259SMichael Clark rv_op_rdinstret = 307, 477ea103259SMichael Clark rv_op_rdcycleh = 308, 478ea103259SMichael Clark rv_op_rdtimeh = 309, 479ea103259SMichael Clark rv_op_rdinstreth = 310, 480ea103259SMichael Clark rv_op_frcsr = 311, 481ea103259SMichael Clark rv_op_frrm = 312, 482ea103259SMichael Clark rv_op_frflags = 313, 483ea103259SMichael Clark rv_op_fscsr = 314, 484ea103259SMichael Clark rv_op_fsrm = 315, 485ea103259SMichael Clark rv_op_fsflags = 316, 486ea103259SMichael Clark rv_op_fsrmi = 317, 487ea103259SMichael Clark rv_op_fsflagsi = 318, 48802c1b569SPhilipp Tomsich rv_op_bseti = 319, 48902c1b569SPhilipp Tomsich rv_op_bclri = 320, 49002c1b569SPhilipp Tomsich rv_op_binvi = 321, 49102c1b569SPhilipp Tomsich rv_op_bexti = 322, 49202c1b569SPhilipp Tomsich rv_op_rori = 323, 49302c1b569SPhilipp Tomsich rv_op_clz = 324, 49402c1b569SPhilipp Tomsich rv_op_ctz = 325, 49502c1b569SPhilipp Tomsich rv_op_cpop = 326, 49602c1b569SPhilipp Tomsich rv_op_sext_h = 327, 49702c1b569SPhilipp Tomsich rv_op_sext_b = 328, 49802c1b569SPhilipp Tomsich rv_op_xnor = 329, 49902c1b569SPhilipp Tomsich rv_op_orn = 330, 50002c1b569SPhilipp Tomsich rv_op_andn = 331, 50102c1b569SPhilipp Tomsich rv_op_rol = 332, 50202c1b569SPhilipp Tomsich rv_op_ror = 333, 50302c1b569SPhilipp Tomsich rv_op_sh1add = 334, 50402c1b569SPhilipp Tomsich rv_op_sh2add = 335, 50502c1b569SPhilipp Tomsich rv_op_sh3add = 336, 50602c1b569SPhilipp Tomsich rv_op_sh1add_uw = 337, 50702c1b569SPhilipp Tomsich rv_op_sh2add_uw = 338, 50802c1b569SPhilipp Tomsich rv_op_sh3add_uw = 339, 50902c1b569SPhilipp Tomsich rv_op_clmul = 340, 51002c1b569SPhilipp Tomsich rv_op_clmulr = 341, 51102c1b569SPhilipp Tomsich rv_op_clmulh = 342, 51202c1b569SPhilipp Tomsich rv_op_min = 343, 51302c1b569SPhilipp Tomsich rv_op_minu = 344, 51402c1b569SPhilipp Tomsich rv_op_max = 345, 51502c1b569SPhilipp Tomsich rv_op_maxu = 346, 51602c1b569SPhilipp Tomsich rv_op_clzw = 347, 51702c1b569SPhilipp Tomsich rv_op_ctzw = 348, 51802c1b569SPhilipp Tomsich rv_op_cpopw = 349, 51902c1b569SPhilipp Tomsich rv_op_slli_uw = 350, 52002c1b569SPhilipp Tomsich rv_op_add_uw = 351, 52102c1b569SPhilipp Tomsich rv_op_rolw = 352, 52202c1b569SPhilipp Tomsich rv_op_rorw = 353, 52302c1b569SPhilipp Tomsich rv_op_rev8 = 354, 52402c1b569SPhilipp Tomsich rv_op_zext_h = 355, 52502c1b569SPhilipp Tomsich rv_op_roriw = 356, 52602c1b569SPhilipp Tomsich rv_op_orc_b = 357, 52702c1b569SPhilipp Tomsich rv_op_bset = 358, 52802c1b569SPhilipp Tomsich rv_op_bclr = 359, 52902c1b569SPhilipp Tomsich rv_op_binv = 360, 53002c1b569SPhilipp Tomsich rv_op_bext = 361, 5315748c886SWeiwei Li rv_op_aes32esmi = 362, 5325748c886SWeiwei Li rv_op_aes32esi = 363, 5335748c886SWeiwei Li rv_op_aes32dsmi = 364, 5345748c886SWeiwei Li rv_op_aes32dsi = 365, 5355748c886SWeiwei Li rv_op_aes64ks1i = 366, 5365748c886SWeiwei Li rv_op_aes64ks2 = 367, 5375748c886SWeiwei Li rv_op_aes64im = 368, 5385748c886SWeiwei Li rv_op_aes64esm = 369, 5395748c886SWeiwei Li rv_op_aes64es = 370, 5405748c886SWeiwei Li rv_op_aes64dsm = 371, 5415748c886SWeiwei Li rv_op_aes64ds = 372, 5425748c886SWeiwei Li rv_op_sha256sig0 = 373, 5435748c886SWeiwei Li rv_op_sha256sig1 = 374, 5445748c886SWeiwei Li rv_op_sha256sum0 = 375, 5455748c886SWeiwei Li rv_op_sha256sum1 = 376, 5465748c886SWeiwei Li rv_op_sha512sig0 = 377, 5475748c886SWeiwei Li rv_op_sha512sig1 = 378, 5485748c886SWeiwei Li rv_op_sha512sum0 = 379, 5495748c886SWeiwei Li rv_op_sha512sum1 = 380, 5505748c886SWeiwei Li rv_op_sha512sum0r = 381, 5515748c886SWeiwei Li rv_op_sha512sum1r = 382, 5525748c886SWeiwei Li rv_op_sha512sig0l = 383, 5535748c886SWeiwei Li rv_op_sha512sig0h = 384, 5545748c886SWeiwei Li rv_op_sha512sig1l = 385, 5555748c886SWeiwei Li rv_op_sha512sig1h = 386, 5565748c886SWeiwei Li rv_op_sm3p0 = 387, 5575748c886SWeiwei Li rv_op_sm3p1 = 388, 5585748c886SWeiwei Li rv_op_sm4ed = 389, 5595748c886SWeiwei Li rv_op_sm4ks = 390, 5605748c886SWeiwei Li rv_op_brev8 = 391, 5615748c886SWeiwei Li rv_op_pack = 392, 5625748c886SWeiwei Li rv_op_packh = 393, 5635748c886SWeiwei Li rv_op_packw = 394, 5645748c886SWeiwei Li rv_op_unzip = 395, 5655748c886SWeiwei Li rv_op_zip = 396, 5665748c886SWeiwei Li rv_op_xperm4 = 397, 5675748c886SWeiwei Li rv_op_xperm8 = 398, 56807f4964dSYang Liu rv_op_vle8_v = 399, 56907f4964dSYang Liu rv_op_vle16_v = 400, 57007f4964dSYang Liu rv_op_vle32_v = 401, 57107f4964dSYang Liu rv_op_vle64_v = 402, 57207f4964dSYang Liu rv_op_vse8_v = 403, 57307f4964dSYang Liu rv_op_vse16_v = 404, 57407f4964dSYang Liu rv_op_vse32_v = 405, 57507f4964dSYang Liu rv_op_vse64_v = 406, 57607f4964dSYang Liu rv_op_vlm_v = 407, 57707f4964dSYang Liu rv_op_vsm_v = 408, 57807f4964dSYang Liu rv_op_vlse8_v = 409, 57907f4964dSYang Liu rv_op_vlse16_v = 410, 58007f4964dSYang Liu rv_op_vlse32_v = 411, 58107f4964dSYang Liu rv_op_vlse64_v = 412, 58207f4964dSYang Liu rv_op_vsse8_v = 413, 58307f4964dSYang Liu rv_op_vsse16_v = 414, 58407f4964dSYang Liu rv_op_vsse32_v = 415, 58507f4964dSYang Liu rv_op_vsse64_v = 416, 58607f4964dSYang Liu rv_op_vluxei8_v = 417, 58707f4964dSYang Liu rv_op_vluxei16_v = 418, 58807f4964dSYang Liu rv_op_vluxei32_v = 419, 58907f4964dSYang Liu rv_op_vluxei64_v = 420, 59007f4964dSYang Liu rv_op_vloxei8_v = 421, 59107f4964dSYang Liu rv_op_vloxei16_v = 422, 59207f4964dSYang Liu rv_op_vloxei32_v = 423, 59307f4964dSYang Liu rv_op_vloxei64_v = 424, 59407f4964dSYang Liu rv_op_vsuxei8_v = 425, 59507f4964dSYang Liu rv_op_vsuxei16_v = 426, 59607f4964dSYang Liu rv_op_vsuxei32_v = 427, 59707f4964dSYang Liu rv_op_vsuxei64_v = 428, 59807f4964dSYang Liu rv_op_vsoxei8_v = 429, 59907f4964dSYang Liu rv_op_vsoxei16_v = 430, 60007f4964dSYang Liu rv_op_vsoxei32_v = 431, 60107f4964dSYang Liu rv_op_vsoxei64_v = 432, 60207f4964dSYang Liu rv_op_vle8ff_v = 433, 60307f4964dSYang Liu rv_op_vle16ff_v = 434, 60407f4964dSYang Liu rv_op_vle32ff_v = 435, 60507f4964dSYang Liu rv_op_vle64ff_v = 436, 60607f4964dSYang Liu rv_op_vl1re8_v = 437, 60707f4964dSYang Liu rv_op_vl1re16_v = 438, 60807f4964dSYang Liu rv_op_vl1re32_v = 439, 60907f4964dSYang Liu rv_op_vl1re64_v = 440, 61007f4964dSYang Liu rv_op_vl2re8_v = 441, 61107f4964dSYang Liu rv_op_vl2re16_v = 442, 61207f4964dSYang Liu rv_op_vl2re32_v = 443, 61307f4964dSYang Liu rv_op_vl2re64_v = 444, 61407f4964dSYang Liu rv_op_vl4re8_v = 445, 61507f4964dSYang Liu rv_op_vl4re16_v = 446, 61607f4964dSYang Liu rv_op_vl4re32_v = 447, 61707f4964dSYang Liu rv_op_vl4re64_v = 448, 61807f4964dSYang Liu rv_op_vl8re8_v = 449, 61907f4964dSYang Liu rv_op_vl8re16_v = 450, 62007f4964dSYang Liu rv_op_vl8re32_v = 451, 62107f4964dSYang Liu rv_op_vl8re64_v = 452, 62207f4964dSYang Liu rv_op_vs1r_v = 453, 62307f4964dSYang Liu rv_op_vs2r_v = 454, 62407f4964dSYang Liu rv_op_vs4r_v = 455, 62507f4964dSYang Liu rv_op_vs8r_v = 456, 62607f4964dSYang Liu rv_op_vadd_vv = 457, 62707f4964dSYang Liu rv_op_vadd_vx = 458, 62807f4964dSYang Liu rv_op_vadd_vi = 459, 62907f4964dSYang Liu rv_op_vsub_vv = 460, 63007f4964dSYang Liu rv_op_vsub_vx = 461, 63107f4964dSYang Liu rv_op_vrsub_vx = 462, 63207f4964dSYang Liu rv_op_vrsub_vi = 463, 63307f4964dSYang Liu rv_op_vwaddu_vv = 464, 63407f4964dSYang Liu rv_op_vwaddu_vx = 465, 63507f4964dSYang Liu rv_op_vwadd_vv = 466, 63607f4964dSYang Liu rv_op_vwadd_vx = 467, 63707f4964dSYang Liu rv_op_vwsubu_vv = 468, 63807f4964dSYang Liu rv_op_vwsubu_vx = 469, 63907f4964dSYang Liu rv_op_vwsub_vv = 470, 64007f4964dSYang Liu rv_op_vwsub_vx = 471, 64107f4964dSYang Liu rv_op_vwaddu_wv = 472, 64207f4964dSYang Liu rv_op_vwaddu_wx = 473, 64307f4964dSYang Liu rv_op_vwadd_wv = 474, 64407f4964dSYang Liu rv_op_vwadd_wx = 475, 64507f4964dSYang Liu rv_op_vwsubu_wv = 476, 64607f4964dSYang Liu rv_op_vwsubu_wx = 477, 64707f4964dSYang Liu rv_op_vwsub_wv = 478, 64807f4964dSYang Liu rv_op_vwsub_wx = 479, 64907f4964dSYang Liu rv_op_vadc_vvm = 480, 65007f4964dSYang Liu rv_op_vadc_vxm = 481, 65107f4964dSYang Liu rv_op_vadc_vim = 482, 65207f4964dSYang Liu rv_op_vmadc_vvm = 483, 65307f4964dSYang Liu rv_op_vmadc_vxm = 484, 65407f4964dSYang Liu rv_op_vmadc_vim = 485, 65507f4964dSYang Liu rv_op_vsbc_vvm = 486, 65607f4964dSYang Liu rv_op_vsbc_vxm = 487, 65707f4964dSYang Liu rv_op_vmsbc_vvm = 488, 65807f4964dSYang Liu rv_op_vmsbc_vxm = 489, 65907f4964dSYang Liu rv_op_vand_vv = 490, 66007f4964dSYang Liu rv_op_vand_vx = 491, 66107f4964dSYang Liu rv_op_vand_vi = 492, 66207f4964dSYang Liu rv_op_vor_vv = 493, 66307f4964dSYang Liu rv_op_vor_vx = 494, 66407f4964dSYang Liu rv_op_vor_vi = 495, 66507f4964dSYang Liu rv_op_vxor_vv = 496, 66607f4964dSYang Liu rv_op_vxor_vx = 497, 66707f4964dSYang Liu rv_op_vxor_vi = 498, 66807f4964dSYang Liu rv_op_vsll_vv = 499, 66907f4964dSYang Liu rv_op_vsll_vx = 500, 67007f4964dSYang Liu rv_op_vsll_vi = 501, 67107f4964dSYang Liu rv_op_vsrl_vv = 502, 67207f4964dSYang Liu rv_op_vsrl_vx = 503, 67307f4964dSYang Liu rv_op_vsrl_vi = 504, 67407f4964dSYang Liu rv_op_vsra_vv = 505, 67507f4964dSYang Liu rv_op_vsra_vx = 506, 67607f4964dSYang Liu rv_op_vsra_vi = 507, 67707f4964dSYang Liu rv_op_vnsrl_wv = 508, 67807f4964dSYang Liu rv_op_vnsrl_wx = 509, 67907f4964dSYang Liu rv_op_vnsrl_wi = 510, 68007f4964dSYang Liu rv_op_vnsra_wv = 511, 68107f4964dSYang Liu rv_op_vnsra_wx = 512, 68207f4964dSYang Liu rv_op_vnsra_wi = 513, 68307f4964dSYang Liu rv_op_vmseq_vv = 514, 68407f4964dSYang Liu rv_op_vmseq_vx = 515, 68507f4964dSYang Liu rv_op_vmseq_vi = 516, 68607f4964dSYang Liu rv_op_vmsne_vv = 517, 68707f4964dSYang Liu rv_op_vmsne_vx = 518, 68807f4964dSYang Liu rv_op_vmsne_vi = 519, 68907f4964dSYang Liu rv_op_vmsltu_vv = 520, 69007f4964dSYang Liu rv_op_vmsltu_vx = 521, 69107f4964dSYang Liu rv_op_vmslt_vv = 522, 69207f4964dSYang Liu rv_op_vmslt_vx = 523, 69307f4964dSYang Liu rv_op_vmsleu_vv = 524, 69407f4964dSYang Liu rv_op_vmsleu_vx = 525, 69507f4964dSYang Liu rv_op_vmsleu_vi = 526, 69607f4964dSYang Liu rv_op_vmsle_vv = 527, 69707f4964dSYang Liu rv_op_vmsle_vx = 528, 69807f4964dSYang Liu rv_op_vmsle_vi = 529, 69907f4964dSYang Liu rv_op_vmsgtu_vx = 530, 70007f4964dSYang Liu rv_op_vmsgtu_vi = 531, 70107f4964dSYang Liu rv_op_vmsgt_vx = 532, 70207f4964dSYang Liu rv_op_vmsgt_vi = 533, 70307f4964dSYang Liu rv_op_vminu_vv = 534, 70407f4964dSYang Liu rv_op_vminu_vx = 535, 70507f4964dSYang Liu rv_op_vmin_vv = 536, 70607f4964dSYang Liu rv_op_vmin_vx = 537, 70707f4964dSYang Liu rv_op_vmaxu_vv = 538, 70807f4964dSYang Liu rv_op_vmaxu_vx = 539, 70907f4964dSYang Liu rv_op_vmax_vv = 540, 71007f4964dSYang Liu rv_op_vmax_vx = 541, 71107f4964dSYang Liu rv_op_vmul_vv = 542, 71207f4964dSYang Liu rv_op_vmul_vx = 543, 71307f4964dSYang Liu rv_op_vmulh_vv = 544, 71407f4964dSYang Liu rv_op_vmulh_vx = 545, 71507f4964dSYang Liu rv_op_vmulhu_vv = 546, 71607f4964dSYang Liu rv_op_vmulhu_vx = 547, 71707f4964dSYang Liu rv_op_vmulhsu_vv = 548, 71807f4964dSYang Liu rv_op_vmulhsu_vx = 549, 71907f4964dSYang Liu rv_op_vdivu_vv = 550, 72007f4964dSYang Liu rv_op_vdivu_vx = 551, 72107f4964dSYang Liu rv_op_vdiv_vv = 552, 72207f4964dSYang Liu rv_op_vdiv_vx = 553, 72307f4964dSYang Liu rv_op_vremu_vv = 554, 72407f4964dSYang Liu rv_op_vremu_vx = 555, 72507f4964dSYang Liu rv_op_vrem_vv = 556, 72607f4964dSYang Liu rv_op_vrem_vx = 557, 72707f4964dSYang Liu rv_op_vwmulu_vv = 558, 72807f4964dSYang Liu rv_op_vwmulu_vx = 559, 72907f4964dSYang Liu rv_op_vwmulsu_vv = 560, 73007f4964dSYang Liu rv_op_vwmulsu_vx = 561, 73107f4964dSYang Liu rv_op_vwmul_vv = 562, 73207f4964dSYang Liu rv_op_vwmul_vx = 563, 73307f4964dSYang Liu rv_op_vmacc_vv = 564, 73407f4964dSYang Liu rv_op_vmacc_vx = 565, 73507f4964dSYang Liu rv_op_vnmsac_vv = 566, 73607f4964dSYang Liu rv_op_vnmsac_vx = 567, 73707f4964dSYang Liu rv_op_vmadd_vv = 568, 73807f4964dSYang Liu rv_op_vmadd_vx = 569, 73907f4964dSYang Liu rv_op_vnmsub_vv = 570, 74007f4964dSYang Liu rv_op_vnmsub_vx = 571, 74107f4964dSYang Liu rv_op_vwmaccu_vv = 572, 74207f4964dSYang Liu rv_op_vwmaccu_vx = 573, 74307f4964dSYang Liu rv_op_vwmacc_vv = 574, 74407f4964dSYang Liu rv_op_vwmacc_vx = 575, 74507f4964dSYang Liu rv_op_vwmaccsu_vv = 576, 74607f4964dSYang Liu rv_op_vwmaccsu_vx = 577, 74707f4964dSYang Liu rv_op_vwmaccus_vx = 578, 74807f4964dSYang Liu rv_op_vmv_v_v = 579, 74907f4964dSYang Liu rv_op_vmv_v_x = 580, 75007f4964dSYang Liu rv_op_vmv_v_i = 581, 75107f4964dSYang Liu rv_op_vmerge_vvm = 582, 75207f4964dSYang Liu rv_op_vmerge_vxm = 583, 75307f4964dSYang Liu rv_op_vmerge_vim = 584, 75407f4964dSYang Liu rv_op_vsaddu_vv = 585, 75507f4964dSYang Liu rv_op_vsaddu_vx = 586, 75607f4964dSYang Liu rv_op_vsaddu_vi = 587, 75707f4964dSYang Liu rv_op_vsadd_vv = 588, 75807f4964dSYang Liu rv_op_vsadd_vx = 589, 75907f4964dSYang Liu rv_op_vsadd_vi = 590, 76007f4964dSYang Liu rv_op_vssubu_vv = 591, 76107f4964dSYang Liu rv_op_vssubu_vx = 592, 76207f4964dSYang Liu rv_op_vssub_vv = 593, 76307f4964dSYang Liu rv_op_vssub_vx = 594, 76407f4964dSYang Liu rv_op_vaadd_vv = 595, 76507f4964dSYang Liu rv_op_vaadd_vx = 596, 76607f4964dSYang Liu rv_op_vaaddu_vv = 597, 76707f4964dSYang Liu rv_op_vaaddu_vx = 598, 76807f4964dSYang Liu rv_op_vasub_vv = 599, 76907f4964dSYang Liu rv_op_vasub_vx = 600, 77007f4964dSYang Liu rv_op_vasubu_vv = 601, 77107f4964dSYang Liu rv_op_vasubu_vx = 602, 77207f4964dSYang Liu rv_op_vsmul_vv = 603, 77307f4964dSYang Liu rv_op_vsmul_vx = 604, 77407f4964dSYang Liu rv_op_vssrl_vv = 605, 77507f4964dSYang Liu rv_op_vssrl_vx = 606, 77607f4964dSYang Liu rv_op_vssrl_vi = 607, 77707f4964dSYang Liu rv_op_vssra_vv = 608, 77807f4964dSYang Liu rv_op_vssra_vx = 609, 77907f4964dSYang Liu rv_op_vssra_vi = 610, 78007f4964dSYang Liu rv_op_vnclipu_wv = 611, 78107f4964dSYang Liu rv_op_vnclipu_wx = 612, 78207f4964dSYang Liu rv_op_vnclipu_wi = 613, 78307f4964dSYang Liu rv_op_vnclip_wv = 614, 78407f4964dSYang Liu rv_op_vnclip_wx = 615, 78507f4964dSYang Liu rv_op_vnclip_wi = 616, 78607f4964dSYang Liu rv_op_vfadd_vv = 617, 78707f4964dSYang Liu rv_op_vfadd_vf = 618, 78807f4964dSYang Liu rv_op_vfsub_vv = 619, 78907f4964dSYang Liu rv_op_vfsub_vf = 620, 79007f4964dSYang Liu rv_op_vfrsub_vf = 621, 79107f4964dSYang Liu rv_op_vfwadd_vv = 622, 79207f4964dSYang Liu rv_op_vfwadd_vf = 623, 79307f4964dSYang Liu rv_op_vfwadd_wv = 624, 79407f4964dSYang Liu rv_op_vfwadd_wf = 625, 79507f4964dSYang Liu rv_op_vfwsub_vv = 626, 79607f4964dSYang Liu rv_op_vfwsub_vf = 627, 79707f4964dSYang Liu rv_op_vfwsub_wv = 628, 79807f4964dSYang Liu rv_op_vfwsub_wf = 629, 79907f4964dSYang Liu rv_op_vfmul_vv = 630, 80007f4964dSYang Liu rv_op_vfmul_vf = 631, 80107f4964dSYang Liu rv_op_vfdiv_vv = 632, 80207f4964dSYang Liu rv_op_vfdiv_vf = 633, 80307f4964dSYang Liu rv_op_vfrdiv_vf = 634, 80407f4964dSYang Liu rv_op_vfwmul_vv = 635, 80507f4964dSYang Liu rv_op_vfwmul_vf = 636, 80607f4964dSYang Liu rv_op_vfmacc_vv = 637, 80707f4964dSYang Liu rv_op_vfmacc_vf = 638, 80807f4964dSYang Liu rv_op_vfnmacc_vv = 639, 80907f4964dSYang Liu rv_op_vfnmacc_vf = 640, 81007f4964dSYang Liu rv_op_vfmsac_vv = 641, 81107f4964dSYang Liu rv_op_vfmsac_vf = 642, 81207f4964dSYang Liu rv_op_vfnmsac_vv = 643, 81307f4964dSYang Liu rv_op_vfnmsac_vf = 644, 81407f4964dSYang Liu rv_op_vfmadd_vv = 645, 81507f4964dSYang Liu rv_op_vfmadd_vf = 646, 81607f4964dSYang Liu rv_op_vfnmadd_vv = 647, 81707f4964dSYang Liu rv_op_vfnmadd_vf = 648, 81807f4964dSYang Liu rv_op_vfmsub_vv = 649, 81907f4964dSYang Liu rv_op_vfmsub_vf = 650, 82007f4964dSYang Liu rv_op_vfnmsub_vv = 651, 82107f4964dSYang Liu rv_op_vfnmsub_vf = 652, 82207f4964dSYang Liu rv_op_vfwmacc_vv = 653, 82307f4964dSYang Liu rv_op_vfwmacc_vf = 654, 82407f4964dSYang Liu rv_op_vfwnmacc_vv = 655, 82507f4964dSYang Liu rv_op_vfwnmacc_vf = 656, 82607f4964dSYang Liu rv_op_vfwmsac_vv = 657, 82707f4964dSYang Liu rv_op_vfwmsac_vf = 658, 82807f4964dSYang Liu rv_op_vfwnmsac_vv = 659, 82907f4964dSYang Liu rv_op_vfwnmsac_vf = 660, 83007f4964dSYang Liu rv_op_vfsqrt_v = 661, 83107f4964dSYang Liu rv_op_vfrsqrt7_v = 662, 83207f4964dSYang Liu rv_op_vfrec7_v = 663, 83307f4964dSYang Liu rv_op_vfmin_vv = 664, 83407f4964dSYang Liu rv_op_vfmin_vf = 665, 83507f4964dSYang Liu rv_op_vfmax_vv = 666, 83607f4964dSYang Liu rv_op_vfmax_vf = 667, 83707f4964dSYang Liu rv_op_vfsgnj_vv = 668, 83807f4964dSYang Liu rv_op_vfsgnj_vf = 669, 83907f4964dSYang Liu rv_op_vfsgnjn_vv = 670, 84007f4964dSYang Liu rv_op_vfsgnjn_vf = 671, 84107f4964dSYang Liu rv_op_vfsgnjx_vv = 672, 84207f4964dSYang Liu rv_op_vfsgnjx_vf = 673, 84307f4964dSYang Liu rv_op_vfslide1up_vf = 674, 84407f4964dSYang Liu rv_op_vfslide1down_vf = 675, 84507f4964dSYang Liu rv_op_vmfeq_vv = 676, 84607f4964dSYang Liu rv_op_vmfeq_vf = 677, 84707f4964dSYang Liu rv_op_vmfne_vv = 678, 84807f4964dSYang Liu rv_op_vmfne_vf = 679, 84907f4964dSYang Liu rv_op_vmflt_vv = 680, 85007f4964dSYang Liu rv_op_vmflt_vf = 681, 85107f4964dSYang Liu rv_op_vmfle_vv = 682, 85207f4964dSYang Liu rv_op_vmfle_vf = 683, 85307f4964dSYang Liu rv_op_vmfgt_vf = 684, 85407f4964dSYang Liu rv_op_vmfge_vf = 685, 85507f4964dSYang Liu rv_op_vfclass_v = 686, 85607f4964dSYang Liu rv_op_vfmerge_vfm = 687, 85707f4964dSYang Liu rv_op_vfmv_v_f = 688, 85807f4964dSYang Liu rv_op_vfcvt_xu_f_v = 689, 85907f4964dSYang Liu rv_op_vfcvt_x_f_v = 690, 86007f4964dSYang Liu rv_op_vfcvt_f_xu_v = 691, 86107f4964dSYang Liu rv_op_vfcvt_f_x_v = 692, 86207f4964dSYang Liu rv_op_vfcvt_rtz_xu_f_v = 693, 86307f4964dSYang Liu rv_op_vfcvt_rtz_x_f_v = 694, 86407f4964dSYang Liu rv_op_vfwcvt_xu_f_v = 695, 86507f4964dSYang Liu rv_op_vfwcvt_x_f_v = 696, 86607f4964dSYang Liu rv_op_vfwcvt_f_xu_v = 697, 86707f4964dSYang Liu rv_op_vfwcvt_f_x_v = 698, 86807f4964dSYang Liu rv_op_vfwcvt_f_f_v = 699, 86907f4964dSYang Liu rv_op_vfwcvt_rtz_xu_f_v = 700, 87007f4964dSYang Liu rv_op_vfwcvt_rtz_x_f_v = 701, 87107f4964dSYang Liu rv_op_vfncvt_xu_f_w = 702, 87207f4964dSYang Liu rv_op_vfncvt_x_f_w = 703, 87307f4964dSYang Liu rv_op_vfncvt_f_xu_w = 704, 87407f4964dSYang Liu rv_op_vfncvt_f_x_w = 705, 87507f4964dSYang Liu rv_op_vfncvt_f_f_w = 706, 87607f4964dSYang Liu rv_op_vfncvt_rod_f_f_w = 707, 87707f4964dSYang Liu rv_op_vfncvt_rtz_xu_f_w = 708, 87807f4964dSYang Liu rv_op_vfncvt_rtz_x_f_w = 709, 87907f4964dSYang Liu rv_op_vredsum_vs = 710, 88007f4964dSYang Liu rv_op_vredand_vs = 711, 88107f4964dSYang Liu rv_op_vredor_vs = 712, 88207f4964dSYang Liu rv_op_vredxor_vs = 713, 88307f4964dSYang Liu rv_op_vredminu_vs = 714, 88407f4964dSYang Liu rv_op_vredmin_vs = 715, 88507f4964dSYang Liu rv_op_vredmaxu_vs = 716, 88607f4964dSYang Liu rv_op_vredmax_vs = 717, 88707f4964dSYang Liu rv_op_vwredsumu_vs = 718, 88807f4964dSYang Liu rv_op_vwredsum_vs = 719, 88907f4964dSYang Liu rv_op_vfredusum_vs = 720, 89007f4964dSYang Liu rv_op_vfredosum_vs = 721, 89107f4964dSYang Liu rv_op_vfredmin_vs = 722, 89207f4964dSYang Liu rv_op_vfredmax_vs = 723, 89307f4964dSYang Liu rv_op_vfwredusum_vs = 724, 89407f4964dSYang Liu rv_op_vfwredosum_vs = 725, 89507f4964dSYang Liu rv_op_vmand_mm = 726, 89607f4964dSYang Liu rv_op_vmnand_mm = 727, 89707f4964dSYang Liu rv_op_vmandn_mm = 728, 89807f4964dSYang Liu rv_op_vmxor_mm = 729, 89907f4964dSYang Liu rv_op_vmor_mm = 730, 90007f4964dSYang Liu rv_op_vmnor_mm = 731, 90107f4964dSYang Liu rv_op_vmorn_mm = 732, 90207f4964dSYang Liu rv_op_vmxnor_mm = 733, 90307f4964dSYang Liu rv_op_vcpop_m = 734, 90407f4964dSYang Liu rv_op_vfirst_m = 735, 90507f4964dSYang Liu rv_op_vmsbf_m = 736, 90607f4964dSYang Liu rv_op_vmsif_m = 737, 90707f4964dSYang Liu rv_op_vmsof_m = 738, 90807f4964dSYang Liu rv_op_viota_m = 739, 90907f4964dSYang Liu rv_op_vid_v = 740, 91007f4964dSYang Liu rv_op_vmv_x_s = 741, 91107f4964dSYang Liu rv_op_vmv_s_x = 742, 91207f4964dSYang Liu rv_op_vfmv_f_s = 743, 91307f4964dSYang Liu rv_op_vfmv_s_f = 744, 91407f4964dSYang Liu rv_op_vslideup_vx = 745, 91507f4964dSYang Liu rv_op_vslideup_vi = 746, 91607f4964dSYang Liu rv_op_vslide1up_vx = 747, 91707f4964dSYang Liu rv_op_vslidedown_vx = 748, 91807f4964dSYang Liu rv_op_vslidedown_vi = 749, 91907f4964dSYang Liu rv_op_vslide1down_vx = 750, 92007f4964dSYang Liu rv_op_vrgather_vv = 751, 92107f4964dSYang Liu rv_op_vrgatherei16_vv = 752, 92207f4964dSYang Liu rv_op_vrgather_vx = 753, 92307f4964dSYang Liu rv_op_vrgather_vi = 754, 92407f4964dSYang Liu rv_op_vcompress_vm = 755, 92507f4964dSYang Liu rv_op_vmv1r_v = 756, 92607f4964dSYang Liu rv_op_vmv2r_v = 757, 92707f4964dSYang Liu rv_op_vmv4r_v = 758, 92807f4964dSYang Liu rv_op_vmv8r_v = 759, 92907f4964dSYang Liu rv_op_vzext_vf2 = 760, 93007f4964dSYang Liu rv_op_vzext_vf4 = 761, 93107f4964dSYang Liu rv_op_vzext_vf8 = 762, 93207f4964dSYang Liu rv_op_vsext_vf2 = 763, 93307f4964dSYang Liu rv_op_vsext_vf4 = 764, 93407f4964dSYang Liu rv_op_vsext_vf8 = 765, 93507f4964dSYang Liu rv_op_vsetvli = 766, 93607f4964dSYang Liu rv_op_vsetivli = 767, 93707f4964dSYang Liu rv_op_vsetvl = 768, 938ea103259SMichael Clark } rv_op; 939ea103259SMichael Clark 940ea103259SMichael Clark /* structures */ 941ea103259SMichael Clark 942ea103259SMichael Clark typedef struct { 943ea103259SMichael Clark uint64_t pc; 944ea103259SMichael Clark uint64_t inst; 945ea103259SMichael Clark int32_t imm; 946ea103259SMichael Clark uint16_t op; 947ea103259SMichael Clark uint8_t codec; 948ea103259SMichael Clark uint8_t rd; 949ea103259SMichael Clark uint8_t rs1; 950ea103259SMichael Clark uint8_t rs2; 951ea103259SMichael Clark uint8_t rs3; 952ea103259SMichael Clark uint8_t rm; 953ea103259SMichael Clark uint8_t pred; 954ea103259SMichael Clark uint8_t succ; 955ea103259SMichael Clark uint8_t aq; 956ea103259SMichael Clark uint8_t rl; 9575748c886SWeiwei Li uint8_t bs; 9585748c886SWeiwei Li uint8_t rnum; 95907f4964dSYang Liu uint8_t vm; 96007f4964dSYang Liu uint32_t vzimm; 961ea103259SMichael Clark } rv_decode; 962ea103259SMichael Clark 963ea103259SMichael Clark typedef struct { 964ea103259SMichael Clark const int op; 965ea103259SMichael Clark const rvc_constraint *constraints; 966ea103259SMichael Clark } rv_comp_data; 967ea103259SMichael Clark 968f88222daSMichael Clark enum { 969f88222daSMichael Clark rvcd_imm_nz = 0x1 970f88222daSMichael Clark }; 971f88222daSMichael Clark 972ea103259SMichael Clark typedef struct { 973ea103259SMichael Clark const char * const name; 974ea103259SMichael Clark const rv_codec codec; 975ea103259SMichael Clark const char * const format; 976ea103259SMichael Clark const rv_comp_data *pseudo; 977f88222daSMichael Clark const short decomp_rv32; 978f88222daSMichael Clark const short decomp_rv64; 979f88222daSMichael Clark const short decomp_rv128; 980f88222daSMichael Clark const short decomp_data; 981ea103259SMichael Clark } rv_opcode_data; 982ea103259SMichael Clark 983ea103259SMichael Clark /* register names */ 984ea103259SMichael Clark 985ea103259SMichael Clark static const char rv_ireg_name_sym[32][5] = { 986ea103259SMichael Clark "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", 987ea103259SMichael Clark "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", 988ea103259SMichael Clark "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", 989ea103259SMichael Clark "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6", 990ea103259SMichael Clark }; 991ea103259SMichael Clark 992ea103259SMichael Clark static const char rv_freg_name_sym[32][5] = { 993ea103259SMichael Clark "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", 994ea103259SMichael Clark "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", 995ea103259SMichael Clark "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", 996ea103259SMichael Clark "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11", 997ea103259SMichael Clark }; 998ea103259SMichael Clark 99907f4964dSYang Liu static const char rv_vreg_name_sym[32][4] = { 100007f4964dSYang Liu "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", 100107f4964dSYang Liu "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", 100207f4964dSYang Liu "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", 100307f4964dSYang Liu "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" 100407f4964dSYang Liu }; 100507f4964dSYang Liu 1006ea103259SMichael Clark /* instruction formats */ 1007ea103259SMichael Clark 1008ea103259SMichael Clark #define rv_fmt_none "O\t" 1009ea103259SMichael Clark #define rv_fmt_rs1 "O\t1" 1010ea103259SMichael Clark #define rv_fmt_offset "O\to" 1011ea103259SMichael Clark #define rv_fmt_pred_succ "O\tp,s" 1012ea103259SMichael Clark #define rv_fmt_rs1_rs2 "O\t1,2" 1013ea103259SMichael Clark #define rv_fmt_rd_imm "O\t0,i" 1014ea103259SMichael Clark #define rv_fmt_rd_offset "O\t0,o" 1015ea103259SMichael Clark #define rv_fmt_rd_rs1_rs2 "O\t0,1,2" 1016ea103259SMichael Clark #define rv_fmt_frd_rs1 "O\t3,1" 1017ea103259SMichael Clark #define rv_fmt_rd_frs1 "O\t0,4" 1018ea103259SMichael Clark #define rv_fmt_rd_frs1_frs2 "O\t0,4,5" 1019ea103259SMichael Clark #define rv_fmt_frd_frs1_frs2 "O\t3,4,5" 1020ea103259SMichael Clark #define rv_fmt_rm_frd_frs1 "O\tr,3,4" 1021ea103259SMichael Clark #define rv_fmt_rm_frd_rs1 "O\tr,3,1" 1022ea103259SMichael Clark #define rv_fmt_rm_rd_frs1 "O\tr,0,4" 1023ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2 "O\tr,3,4,5" 1024ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2_frs3 "O\tr,3,4,5,6" 1025ea103259SMichael Clark #define rv_fmt_rd_rs1_imm "O\t0,1,i" 1026ea103259SMichael Clark #define rv_fmt_rd_rs1_offset "O\t0,1,i" 1027ea103259SMichael Clark #define rv_fmt_rd_offset_rs1 "O\t0,i(1)" 1028ea103259SMichael Clark #define rv_fmt_frd_offset_rs1 "O\t3,i(1)" 1029ea103259SMichael Clark #define rv_fmt_rd_csr_rs1 "O\t0,c,1" 1030ea103259SMichael Clark #define rv_fmt_rd_csr_zimm "O\t0,c,7" 1031ea103259SMichael Clark #define rv_fmt_rs2_offset_rs1 "O\t2,i(1)" 1032ea103259SMichael Clark #define rv_fmt_frs2_offset_rs1 "O\t5,i(1)" 1033ea103259SMichael Clark #define rv_fmt_rs1_rs2_offset "O\t1,2,o" 1034ea103259SMichael Clark #define rv_fmt_rs2_rs1_offset "O\t2,1,o" 1035ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs2_rs1 "OAR\t0,2,(1)" 1036ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs1 "OAR\t0,(1)" 1037ea103259SMichael Clark #define rv_fmt_rd "O\t0" 1038ea103259SMichael Clark #define rv_fmt_rd_zimm "O\t0,7" 1039ea103259SMichael Clark #define rv_fmt_rd_rs1 "O\t0,1" 1040ea103259SMichael Clark #define rv_fmt_rd_rs2 "O\t0,2" 1041ea103259SMichael Clark #define rv_fmt_rs1_offset "O\t1,o" 1042ea103259SMichael Clark #define rv_fmt_rs2_offset "O\t2,o" 10435748c886SWeiwei Li #define rv_fmt_rs1_rs2_bs "O\t1,2,b" 10445748c886SWeiwei Li #define rv_fmt_rd_rs1_rnum "O\t0,1,n" 104507f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vm "O\tD,(1)m" 104607f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_rs2_vm "O\tD,(1),2m" 104707f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vs2_vm "O\tD,(1),Fm" 104807f4964dSYang Liu #define rv_fmt_vd_vs2_vs1 "O\tD,F,E" 104907f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vl "O\tD,F,El" 105007f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vm "O\tD,F,Em" 105107f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vl "O\tD,F,1l" 105207f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vl "O\tD,F,4l" 105307f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vm "O\tD,F,1m" 105407f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vm "O\tD,F,4m" 105507f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vl "O\tD,F,il" 105607f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vm "O\tD,F,im" 105707f4964dSYang Liu #define rv_fmt_vd_vs2_uimm_vm "O\tD,F,um" 105807f4964dSYang Liu #define rv_fmt_vd_vs1_vs2_vm "O\tD,E,Fm" 105907f4964dSYang Liu #define rv_fmt_vd_rs1_vs2_vm "O\tD,1,Fm" 106007f4964dSYang Liu #define rv_fmt_vd_fs1_vs2_vm "O\tD,4,Fm" 106107f4964dSYang Liu #define rv_fmt_vd_vs1 "O\tD,E" 106207f4964dSYang Liu #define rv_fmt_vd_rs1 "O\tD,1" 106307f4964dSYang Liu #define rv_fmt_vd_fs1 "O\tD,4" 106407f4964dSYang Liu #define rv_fmt_vd_imm "O\tD,i" 106507f4964dSYang Liu #define rv_fmt_vd_vs2 "O\tD,F" 106607f4964dSYang Liu #define rv_fmt_vd_vs2_vm "O\tD,Fm" 106707f4964dSYang Liu #define rv_fmt_rd_vs2_vm "O\t0,Fm" 106807f4964dSYang Liu #define rv_fmt_rd_vs2 "O\t0,F" 106907f4964dSYang Liu #define rv_fmt_fd_vs2 "O\t3,F" 107007f4964dSYang Liu #define rv_fmt_vd_vm "O\tDm" 107107f4964dSYang Liu #define rv_fmt_vsetvli "O\t0,1,v" 107207f4964dSYang Liu #define rv_fmt_vsetivli "O\t0,u,v" 1073ea103259SMichael Clark 1074ea103259SMichael Clark /* pseudo-instruction constraints */ 1075ea103259SMichael Clark 1076ea103259SMichael Clark static const rvc_constraint rvcc_jal[] = { rvc_rd_eq_ra, rvc_end }; 1077ea103259SMichael Clark static const rvc_constraint rvcc_jalr[] = { rvc_rd_eq_ra, rvc_imm_eq_zero, rvc_end }; 1078ea103259SMichael Clark static const rvc_constraint rvcc_nop[] = { rvc_rd_eq_x0, rvc_rs1_eq_x0, rvc_imm_eq_zero, rvc_end }; 1079ea103259SMichael Clark static const rvc_constraint rvcc_mv[] = { rvc_imm_eq_zero, rvc_end }; 1080ea103259SMichael Clark static const rvc_constraint rvcc_not[] = { rvc_imm_eq_n1, rvc_end }; 1081ea103259SMichael Clark static const rvc_constraint rvcc_neg[] = { rvc_rs1_eq_x0, rvc_end }; 1082ea103259SMichael Clark static const rvc_constraint rvcc_negw[] = { rvc_rs1_eq_x0, rvc_end }; 108333b4f859SMichael Clark static const rvc_constraint rvcc_sext_w[] = { rvc_imm_eq_zero, rvc_end }; 1084ea103259SMichael Clark static const rvc_constraint rvcc_seqz[] = { rvc_imm_eq_p1, rvc_end }; 1085ea103259SMichael Clark static const rvc_constraint rvcc_snez[] = { rvc_rs1_eq_x0, rvc_end }; 1086ea103259SMichael Clark static const rvc_constraint rvcc_sltz[] = { rvc_rs2_eq_x0, rvc_end }; 1087ea103259SMichael Clark static const rvc_constraint rvcc_sgtz[] = { rvc_rs1_eq_x0, rvc_end }; 1088ea103259SMichael Clark static const rvc_constraint rvcc_fmv_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1089ea103259SMichael Clark static const rvc_constraint rvcc_fabs_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1090ea103259SMichael Clark static const rvc_constraint rvcc_fneg_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1091ea103259SMichael Clark static const rvc_constraint rvcc_fmv_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1092ea103259SMichael Clark static const rvc_constraint rvcc_fabs_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1093ea103259SMichael Clark static const rvc_constraint rvcc_fneg_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1094ea103259SMichael Clark static const rvc_constraint rvcc_fmv_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1095ea103259SMichael Clark static const rvc_constraint rvcc_fabs_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1096ea103259SMichael Clark static const rvc_constraint rvcc_fneg_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1097ea103259SMichael Clark static const rvc_constraint rvcc_beqz[] = { rvc_rs2_eq_x0, rvc_end }; 1098ea103259SMichael Clark static const rvc_constraint rvcc_bnez[] = { rvc_rs2_eq_x0, rvc_end }; 1099ea103259SMichael Clark static const rvc_constraint rvcc_blez[] = { rvc_rs1_eq_x0, rvc_end }; 1100ea103259SMichael Clark static const rvc_constraint rvcc_bgez[] = { rvc_rs2_eq_x0, rvc_end }; 1101ea103259SMichael Clark static const rvc_constraint rvcc_bltz[] = { rvc_rs2_eq_x0, rvc_end }; 1102ea103259SMichael Clark static const rvc_constraint rvcc_bgtz[] = { rvc_rs1_eq_x0, rvc_end }; 1103ea103259SMichael Clark static const rvc_constraint rvcc_ble[] = { rvc_end }; 1104ea103259SMichael Clark static const rvc_constraint rvcc_bleu[] = { rvc_end }; 1105ea103259SMichael Clark static const rvc_constraint rvcc_bgt[] = { rvc_end }; 1106ea103259SMichael Clark static const rvc_constraint rvcc_bgtu[] = { rvc_end }; 1107ea103259SMichael Clark static const rvc_constraint rvcc_j[] = { rvc_rd_eq_x0, rvc_end }; 1108ea103259SMichael Clark static const rvc_constraint rvcc_ret[] = { rvc_rd_eq_x0, rvc_rs1_eq_ra, rvc_end }; 1109ea103259SMichael Clark static const rvc_constraint rvcc_jr[] = { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; 1110ea103259SMichael Clark static const rvc_constraint rvcc_rdcycle[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc00, rvc_end }; 1111ea103259SMichael Clark static const rvc_constraint rvcc_rdtime[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc01, rvc_end }; 1112ea103259SMichael Clark static const rvc_constraint rvcc_rdinstret[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc02, rvc_end }; 1113ea103259SMichael Clark static const rvc_constraint rvcc_rdcycleh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc80, rvc_end }; 1114ea103259SMichael Clark static const rvc_constraint rvcc_rdtimeh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc81, rvc_end }; 11152e3df911SWladimir J. van der Laan static const rvc_constraint rvcc_rdinstreth[] = { rvc_rs1_eq_x0, 11162e3df911SWladimir J. van der Laan rvc_csr_eq_0xc82, rvc_end }; 1117ea103259SMichael Clark static const rvc_constraint rvcc_frcsr[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x003, rvc_end }; 1118ea103259SMichael Clark static const rvc_constraint rvcc_frrm[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x002, rvc_end }; 1119ea103259SMichael Clark static const rvc_constraint rvcc_frflags[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x001, rvc_end }; 1120ea103259SMichael Clark static const rvc_constraint rvcc_fscsr[] = { rvc_csr_eq_0x003, rvc_end }; 1121ea103259SMichael Clark static const rvc_constraint rvcc_fsrm[] = { rvc_csr_eq_0x002, rvc_end }; 1122ea103259SMichael Clark static const rvc_constraint rvcc_fsflags[] = { rvc_csr_eq_0x001, rvc_end }; 1123ea103259SMichael Clark static const rvc_constraint rvcc_fsrmi[] = { rvc_csr_eq_0x002, rvc_end }; 1124ea103259SMichael Clark static const rvc_constraint rvcc_fsflagsi[] = { rvc_csr_eq_0x001, rvc_end }; 1125ea103259SMichael Clark 1126ea103259SMichael Clark /* pseudo-instruction metadata */ 1127ea103259SMichael Clark 1128ea103259SMichael Clark static const rv_comp_data rvcp_jal[] = { 1129ea103259SMichael Clark { rv_op_j, rvcc_j }, 1130ea103259SMichael Clark { rv_op_jal, rvcc_jal }, 1131ea103259SMichael Clark { rv_op_illegal, NULL } 1132ea103259SMichael Clark }; 1133ea103259SMichael Clark 1134ea103259SMichael Clark static const rv_comp_data rvcp_jalr[] = { 1135ea103259SMichael Clark { rv_op_ret, rvcc_ret }, 1136ea103259SMichael Clark { rv_op_jr, rvcc_jr }, 1137ea103259SMichael Clark { rv_op_jalr, rvcc_jalr }, 1138ea103259SMichael Clark { rv_op_illegal, NULL } 1139ea103259SMichael Clark }; 1140ea103259SMichael Clark 1141ea103259SMichael Clark static const rv_comp_data rvcp_beq[] = { 1142ea103259SMichael Clark { rv_op_beqz, rvcc_beqz }, 1143ea103259SMichael Clark { rv_op_illegal, NULL } 1144ea103259SMichael Clark }; 1145ea103259SMichael Clark 1146ea103259SMichael Clark static const rv_comp_data rvcp_bne[] = { 1147ea103259SMichael Clark { rv_op_bnez, rvcc_bnez }, 1148ea103259SMichael Clark { rv_op_illegal, NULL } 1149ea103259SMichael Clark }; 1150ea103259SMichael Clark 1151ea103259SMichael Clark static const rv_comp_data rvcp_blt[] = { 1152ea103259SMichael Clark { rv_op_bltz, rvcc_bltz }, 1153ea103259SMichael Clark { rv_op_bgtz, rvcc_bgtz }, 1154ea103259SMichael Clark { rv_op_bgt, rvcc_bgt }, 1155ea103259SMichael Clark { rv_op_illegal, NULL } 1156ea103259SMichael Clark }; 1157ea103259SMichael Clark 1158ea103259SMichael Clark static const rv_comp_data rvcp_bge[] = { 1159ea103259SMichael Clark { rv_op_blez, rvcc_blez }, 1160ea103259SMichael Clark { rv_op_bgez, rvcc_bgez }, 1161ea103259SMichael Clark { rv_op_ble, rvcc_ble }, 1162ea103259SMichael Clark { rv_op_illegal, NULL } 1163ea103259SMichael Clark }; 1164ea103259SMichael Clark 1165ea103259SMichael Clark static const rv_comp_data rvcp_bltu[] = { 1166ea103259SMichael Clark { rv_op_bgtu, rvcc_bgtu }, 1167ea103259SMichael Clark { rv_op_illegal, NULL } 1168ea103259SMichael Clark }; 1169ea103259SMichael Clark 1170ea103259SMichael Clark static const rv_comp_data rvcp_bgeu[] = { 1171ea103259SMichael Clark { rv_op_bleu, rvcc_bleu }, 1172ea103259SMichael Clark { rv_op_illegal, NULL } 1173ea103259SMichael Clark }; 1174ea103259SMichael Clark 1175ea103259SMichael Clark static const rv_comp_data rvcp_addi[] = { 1176ea103259SMichael Clark { rv_op_nop, rvcc_nop }, 1177ea103259SMichael Clark { rv_op_mv, rvcc_mv }, 1178ea103259SMichael Clark { rv_op_illegal, NULL } 1179ea103259SMichael Clark }; 1180ea103259SMichael Clark 1181ea103259SMichael Clark static const rv_comp_data rvcp_sltiu[] = { 1182ea103259SMichael Clark { rv_op_seqz, rvcc_seqz }, 1183ea103259SMichael Clark { rv_op_illegal, NULL } 1184ea103259SMichael Clark }; 1185ea103259SMichael Clark 1186ea103259SMichael Clark static const rv_comp_data rvcp_xori[] = { 1187ea103259SMichael Clark { rv_op_not, rvcc_not }, 1188ea103259SMichael Clark { rv_op_illegal, NULL } 1189ea103259SMichael Clark }; 1190ea103259SMichael Clark 1191ea103259SMichael Clark static const rv_comp_data rvcp_sub[] = { 1192ea103259SMichael Clark { rv_op_neg, rvcc_neg }, 1193ea103259SMichael Clark { rv_op_illegal, NULL } 1194ea103259SMichael Clark }; 1195ea103259SMichael Clark 1196ea103259SMichael Clark static const rv_comp_data rvcp_slt[] = { 1197ea103259SMichael Clark { rv_op_sltz, rvcc_sltz }, 1198ea103259SMichael Clark { rv_op_sgtz, rvcc_sgtz }, 1199ea103259SMichael Clark { rv_op_illegal, NULL } 1200ea103259SMichael Clark }; 1201ea103259SMichael Clark 1202ea103259SMichael Clark static const rv_comp_data rvcp_sltu[] = { 1203ea103259SMichael Clark { rv_op_snez, rvcc_snez }, 1204ea103259SMichael Clark { rv_op_illegal, NULL } 1205ea103259SMichael Clark }; 1206ea103259SMichael Clark 1207ea103259SMichael Clark static const rv_comp_data rvcp_addiw[] = { 1208ea103259SMichael Clark { rv_op_sext_w, rvcc_sext_w }, 1209ea103259SMichael Clark { rv_op_illegal, NULL } 1210ea103259SMichael Clark }; 1211ea103259SMichael Clark 1212ea103259SMichael Clark static const rv_comp_data rvcp_subw[] = { 1213ea103259SMichael Clark { rv_op_negw, rvcc_negw }, 1214ea103259SMichael Clark { rv_op_illegal, NULL } 1215ea103259SMichael Clark }; 1216ea103259SMichael Clark 1217ea103259SMichael Clark static const rv_comp_data rvcp_csrrw[] = { 1218ea103259SMichael Clark { rv_op_fscsr, rvcc_fscsr }, 1219ea103259SMichael Clark { rv_op_fsrm, rvcc_fsrm }, 1220ea103259SMichael Clark { rv_op_fsflags, rvcc_fsflags }, 1221ea103259SMichael Clark { rv_op_illegal, NULL } 1222ea103259SMichael Clark }; 1223ea103259SMichael Clark 12245748c886SWeiwei Li 1225ea103259SMichael Clark static const rv_comp_data rvcp_csrrs[] = { 1226ea103259SMichael Clark { rv_op_rdcycle, rvcc_rdcycle }, 1227ea103259SMichael Clark { rv_op_rdtime, rvcc_rdtime }, 1228ea103259SMichael Clark { rv_op_rdinstret, rvcc_rdinstret }, 1229ea103259SMichael Clark { rv_op_rdcycleh, rvcc_rdcycleh }, 1230ea103259SMichael Clark { rv_op_rdtimeh, rvcc_rdtimeh }, 1231ea103259SMichael Clark { rv_op_rdinstreth, rvcc_rdinstreth }, 1232ea103259SMichael Clark { rv_op_frcsr, rvcc_frcsr }, 1233ea103259SMichael Clark { rv_op_frrm, rvcc_frrm }, 1234ea103259SMichael Clark { rv_op_frflags, rvcc_frflags }, 1235ea103259SMichael Clark { rv_op_illegal, NULL } 1236ea103259SMichael Clark }; 1237ea103259SMichael Clark 1238ea103259SMichael Clark static const rv_comp_data rvcp_csrrwi[] = { 1239ea103259SMichael Clark { rv_op_fsrmi, rvcc_fsrmi }, 1240ea103259SMichael Clark { rv_op_fsflagsi, rvcc_fsflagsi }, 1241ea103259SMichael Clark { rv_op_illegal, NULL } 1242ea103259SMichael Clark }; 1243ea103259SMichael Clark 1244ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_s[] = { 1245ea103259SMichael Clark { rv_op_fmv_s, rvcc_fmv_s }, 1246ea103259SMichael Clark { rv_op_illegal, NULL } 1247ea103259SMichael Clark }; 1248ea103259SMichael Clark 1249ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_s[] = { 1250ea103259SMichael Clark { rv_op_fneg_s, rvcc_fneg_s }, 1251ea103259SMichael Clark { rv_op_illegal, NULL } 1252ea103259SMichael Clark }; 1253ea103259SMichael Clark 1254ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_s[] = { 1255ea103259SMichael Clark { rv_op_fabs_s, rvcc_fabs_s }, 1256ea103259SMichael Clark { rv_op_illegal, NULL } 1257ea103259SMichael Clark }; 1258ea103259SMichael Clark 1259ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_d[] = { 1260ea103259SMichael Clark { rv_op_fmv_d, rvcc_fmv_d }, 1261ea103259SMichael Clark { rv_op_illegal, NULL } 1262ea103259SMichael Clark }; 1263ea103259SMichael Clark 1264ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_d[] = { 1265ea103259SMichael Clark { rv_op_fneg_d, rvcc_fneg_d }, 1266ea103259SMichael Clark { rv_op_illegal, NULL } 1267ea103259SMichael Clark }; 1268ea103259SMichael Clark 1269ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_d[] = { 1270ea103259SMichael Clark { rv_op_fabs_d, rvcc_fabs_d }, 1271ea103259SMichael Clark { rv_op_illegal, NULL } 1272ea103259SMichael Clark }; 1273ea103259SMichael Clark 1274ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_q[] = { 1275ea103259SMichael Clark { rv_op_fmv_q, rvcc_fmv_q }, 1276ea103259SMichael Clark { rv_op_illegal, NULL } 1277ea103259SMichael Clark }; 1278ea103259SMichael Clark 1279ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_q[] = { 1280ea103259SMichael Clark { rv_op_fneg_q, rvcc_fneg_q }, 1281ea103259SMichael Clark { rv_op_illegal, NULL } 1282ea103259SMichael Clark }; 1283ea103259SMichael Clark 1284ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_q[] = { 1285ea103259SMichael Clark { rv_op_fabs_q, rvcc_fabs_q }, 1286ea103259SMichael Clark { rv_op_illegal, NULL } 1287ea103259SMichael Clark }; 1288ea103259SMichael Clark 1289ea103259SMichael Clark /* instruction metadata */ 1290ea103259SMichael Clark 1291ea103259SMichael Clark const rv_opcode_data opcode_data[] = { 1292ea103259SMichael Clark { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, 1293ea103259SMichael Clark { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 }, 1294ea103259SMichael Clark { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 }, 1295ea103259SMichael Clark { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 }, 1296ea103259SMichael Clark { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 }, 1297ea103259SMichael Clark { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 }, 1298ea103259SMichael Clark { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 }, 1299ea103259SMichael Clark { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 }, 1300ea103259SMichael Clark { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 }, 1301ea103259SMichael Clark { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 }, 1302ea103259SMichael Clark { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 }, 1303ea103259SMichael Clark { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1304ea103259SMichael Clark { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1305ea103259SMichael Clark { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1306ea103259SMichael Clark { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1307ea103259SMichael Clark { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1308ea103259SMichael Clark { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1309ea103259SMichael Clark { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1310ea103259SMichael Clark { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1311ea103259SMichael Clark { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 }, 1312ea103259SMichael Clark { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1313ea103259SMichael Clark { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 }, 1314ea103259SMichael Clark { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 }, 1315ea103259SMichael Clark { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1316ea103259SMichael Clark { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1317ea103259SMichael Clark { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1318ea103259SMichael Clark { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1319ea103259SMichael Clark { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1320ea103259SMichael Clark { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1321ea103259SMichael Clark { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 }, 1322ea103259SMichael Clark { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1323ea103259SMichael Clark { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 }, 1324ea103259SMichael Clark { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 }, 1325ea103259SMichael Clark { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1326ea103259SMichael Clark { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1327ea103259SMichael Clark { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1328ea103259SMichael Clark { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1329ea103259SMichael Clark { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1330ea103259SMichael Clark { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 }, 1331ea103259SMichael Clark { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1332ea103259SMichael Clark { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1333ea103259SMichael Clark { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1334ea103259SMichael Clark { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1335ea103259SMichael Clark { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 }, 1336ea103259SMichael Clark { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1337ea103259SMichael Clark { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1338ea103259SMichael Clark { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1339ea103259SMichael Clark { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1340ea103259SMichael Clark { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 }, 1341ea103259SMichael Clark { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1342ea103259SMichael Clark { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1343ea103259SMichael Clark { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1344ea103259SMichael Clark { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1345ea103259SMichael Clark { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1346ea103259SMichael Clark { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1347ea103259SMichael Clark { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1348ea103259SMichael Clark { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1349ea103259SMichael Clark { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1350ea103259SMichael Clark { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1351ea103259SMichael Clark { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1352ea103259SMichael Clark { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1353ea103259SMichael Clark { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1354ea103259SMichael Clark { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1355ea103259SMichael Clark { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1356ea103259SMichael Clark { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1357ea103259SMichael Clark { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1358ea103259SMichael Clark { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1359ea103259SMichael Clark { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1360ea103259SMichael Clark { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1361ea103259SMichael Clark { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1362ea103259SMichael Clark { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1363ea103259SMichael Clark { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1364ea103259SMichael Clark { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1365ea103259SMichael Clark { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1366ea103259SMichael Clark { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1367ea103259SMichael Clark { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1368ea103259SMichael Clark { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1369ea103259SMichael Clark { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1370ea103259SMichael Clark { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1371ea103259SMichael Clark { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1372ea103259SMichael Clark { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1373ea103259SMichael Clark { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1374ea103259SMichael Clark { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1375ea103259SMichael Clark { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1376ea103259SMichael Clark { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1377ea103259SMichael Clark { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1378ea103259SMichael Clark { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1379ea103259SMichael Clark { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1380ea103259SMichael Clark { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1381ea103259SMichael Clark { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1382ea103259SMichael Clark { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1383ea103259SMichael Clark { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1384ea103259SMichael Clark { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1385ea103259SMichael Clark { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1386ea103259SMichael Clark { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1387ea103259SMichael Clark { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1388ea103259SMichael Clark { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1389ea103259SMichael Clark { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1390ea103259SMichael Clark { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1391ea103259SMichael Clark { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1392ea103259SMichael Clark { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1393ea103259SMichael Clark { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1394ea103259SMichael Clark { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1395ea103259SMichael Clark { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1396ea103259SMichael Clark { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1397ea103259SMichael Clark { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1398ea103259SMichael Clark { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1399ea103259SMichael Clark { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1400ea103259SMichael Clark { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1401ea103259SMichael Clark { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1402ea103259SMichael Clark { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1403ea103259SMichael Clark { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1404ea103259SMichael Clark { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1405ea103259SMichael Clark { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1406ea103259SMichael Clark { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1407ea103259SMichael Clark { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1408ea103259SMichael Clark { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1409ea103259SMichael Clark { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1410ea103259SMichael Clark { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1411ea103259SMichael Clark { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1412ea103259SMichael Clark { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1413ea103259SMichael Clark { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1414ea103259SMichael Clark { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, 1415ea103259SMichael Clark { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 }, 1416ea103259SMichael Clark { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1417ea103259SMichael Clark { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 }, 1418ea103259SMichael Clark { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 }, 1419ea103259SMichael Clark { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 }, 1420ea103259SMichael Clark { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 }, 1421ea103259SMichael Clark { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1422ea103259SMichael Clark { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1423ea103259SMichael Clark { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1424ea103259SMichael Clark { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1425ea103259SMichael Clark { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1426ea103259SMichael Clark { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1427ea103259SMichael Clark { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1428ea103259SMichael Clark { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1429ea103259SMichael Clark { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1430ea103259SMichael Clark { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1431ea103259SMichael Clark { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1432ea103259SMichael Clark { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1433ea103259SMichael Clark { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 }, 1434ea103259SMichael Clark { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 }, 1435ea103259SMichael Clark { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 }, 1436ea103259SMichael Clark { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1437ea103259SMichael Clark { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1438ea103259SMichael Clark { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1439ea103259SMichael Clark { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1440ea103259SMichael Clark { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1441ea103259SMichael Clark { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1442ea103259SMichael Clark { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1443ea103259SMichael Clark { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1444ea103259SMichael Clark { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1445ea103259SMichael Clark { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1446ea103259SMichael Clark { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1447ea103259SMichael Clark { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1448ea103259SMichael Clark { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1449ea103259SMichael Clark { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1450ea103259SMichael Clark { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1451ea103259SMichael Clark { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1452ea103259SMichael Clark { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1453ea103259SMichael Clark { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1454ea103259SMichael Clark { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1455ea103259SMichael Clark { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1456ea103259SMichael Clark { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1457ea103259SMichael Clark { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1458ea103259SMichael Clark { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1459ea103259SMichael Clark { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1460ea103259SMichael Clark { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1461ea103259SMichael Clark { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1462ea103259SMichael Clark { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1463ea103259SMichael Clark { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 }, 1464ea103259SMichael Clark { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 }, 1465ea103259SMichael Clark { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 }, 1466ea103259SMichael Clark { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1467ea103259SMichael Clark { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1468ea103259SMichael Clark { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1469ea103259SMichael Clark { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1470ea103259SMichael Clark { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1471ea103259SMichael Clark { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1472ea103259SMichael Clark { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1473ea103259SMichael Clark { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1474ea103259SMichael Clark { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1475ea103259SMichael Clark { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1476ea103259SMichael Clark { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1477ea103259SMichael Clark { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1478ea103259SMichael Clark { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1479ea103259SMichael Clark { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1480ea103259SMichael Clark { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1481ea103259SMichael Clark { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1482ea103259SMichael Clark { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1483ea103259SMichael Clark { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1484ea103259SMichael Clark { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1485ea103259SMichael Clark { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1486ea103259SMichael Clark { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1487ea103259SMichael Clark { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1488ea103259SMichael Clark { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1489ea103259SMichael Clark { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1490ea103259SMichael Clark { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1491ea103259SMichael Clark { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1492ea103259SMichael Clark { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1493ea103259SMichael Clark { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1494ea103259SMichael Clark { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1495ea103259SMichael Clark { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 }, 1496ea103259SMichael Clark { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 }, 1497ea103259SMichael Clark { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 }, 1498ea103259SMichael Clark { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1499ea103259SMichael Clark { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1500ea103259SMichael Clark { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1501ea103259SMichael Clark { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1502ea103259SMichael Clark { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1503ea103259SMichael Clark { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1504ea103259SMichael Clark { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1505ea103259SMichael Clark { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1506ea103259SMichael Clark { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1507ea103259SMichael Clark { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1508ea103259SMichael Clark { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1509ea103259SMichael Clark { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1510ea103259SMichael Clark { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1511ea103259SMichael Clark { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1512ea103259SMichael Clark { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1513ea103259SMichael Clark { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1514ea103259SMichael Clark { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1515ea103259SMichael Clark { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1516ea103259SMichael Clark { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1517ea103259SMichael Clark { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1518ea103259SMichael Clark { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1519f88222daSMichael Clark { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1520f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 1521ea103259SMichael Clark { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, 0 }, 1522ea103259SMichael Clark { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw, rv_op_lw }, 1523ea103259SMichael Clark { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 }, 1524ea103259SMichael Clark { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, rv_op_fsd, 0 }, 1525ea103259SMichael Clark { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw, rv_op_sw }, 1526ea103259SMichael Clark { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 }, 1527ea103259SMichael Clark { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1528f88222daSMichael Clark { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, 1529f88222daSMichael Clark rv_op_addi, rvcd_imm_nz }, 1530ea103259SMichael Clark { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, 1531ea103259SMichael Clark { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1532f88222daSMichael Clark { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1533f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 1534f88222daSMichael Clark { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui, 1535f88222daSMichael Clark rv_op_lui, rvcd_imm_nz }, 1536f88222daSMichael Clark { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, 1537f88222daSMichael Clark rv_op_srli, rv_op_srli, rvcd_imm_nz }, 1538f88222daSMichael Clark { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, 1539f88222daSMichael Clark rv_op_srai, rv_op_srai, rvcd_imm_nz }, 1540f88222daSMichael Clark { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, 15412e3df911SWladimir J. van der Laan rv_op_andi, rv_op_andi }, 1542ea103259SMichael Clark { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub, rv_op_sub }, 1543ea103259SMichael Clark { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor, rv_op_xor }, 1544ea103259SMichael Clark { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or, rv_op_or }, 1545ea103259SMichael Clark { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and, rv_op_and }, 1546ea103259SMichael Clark { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_subw, rv_op_subw }, 1547ea103259SMichael Clark { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_addw, rv_op_addw }, 1548ea103259SMichael Clark { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal, rv_op_jal }, 1549ea103259SMichael Clark { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op_beq, rv_op_beq }, 1550ea103259SMichael Clark { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne, rv_op_bne }, 1551f88222daSMichael Clark { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, 1552f88222daSMichael Clark rv_op_slli, rv_op_slli, rvcd_imm_nz }, 1553ea103259SMichael Clark { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, rv_op_fld }, 1554ea103259SMichael Clark { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw, rv_op_lw }, 1555ea103259SMichael Clark { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 }, 1556ea103259SMichael Clark { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, rv_op_jalr, rv_op_jalr }, 1557ea103259SMichael Clark { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1558ea103259SMichael Clark { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak, rv_op_ebreak, rv_op_ebreak }, 1559ea103259SMichael Clark { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, rv_op_jalr, rv_op_jalr }, 1560ea103259SMichael Clark { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add, rv_op_add }, 1561ea103259SMichael Clark { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, rv_op_fsd, rv_op_fsd }, 1562ea103259SMichael Clark { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw, rv_op_sw }, 1563ea103259SMichael Clark { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 }, 1564ea103259SMichael Clark { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, rv_op_ld }, 1565ea103259SMichael Clark { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, rv_op_sd }, 1566ea103259SMichael Clark { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw, rv_op_addiw }, 1567ea103259SMichael Clark { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, rv_op_ld }, 1568ea103259SMichael Clark { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, rv_op_sd }, 1569ea103259SMichael Clark { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 1570ea103259SMichael Clark { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, 1571ea103259SMichael Clark { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 1572ea103259SMichael Clark { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, 1573ea103259SMichael Clark { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1574ea103259SMichael Clark { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1575ea103259SMichael Clark { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1576ea103259SMichael Clark { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1577ea103259SMichael Clark { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1578ea103259SMichael Clark { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1579ea103259SMichael Clark { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1580ea103259SMichael Clark { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1581ea103259SMichael Clark { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1582ea103259SMichael Clark { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1583ea103259SMichael Clark { "fmv.s", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1584ea103259SMichael Clark { "fabs.s", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1585ea103259SMichael Clark { "fneg.s", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1586ea103259SMichael Clark { "fmv.d", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1587ea103259SMichael Clark { "fabs.d", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1588ea103259SMichael Clark { "fneg.d", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1589ea103259SMichael Clark { "fmv.q", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1590ea103259SMichael Clark { "fabs.q", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1591ea103259SMichael Clark { "fneg.q", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1592ea103259SMichael Clark { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1593ea103259SMichael Clark { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1594ea103259SMichael Clark { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1595ea103259SMichael Clark { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1596ea103259SMichael Clark { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1597ea103259SMichael Clark { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1598ea103259SMichael Clark { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1599ea103259SMichael Clark { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1600ea103259SMichael Clark { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1601ea103259SMichael Clark { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1602ea103259SMichael Clark { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 }, 1603ea103259SMichael Clark { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1604ea103259SMichael Clark { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 }, 1605ea103259SMichael Clark { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1606ea103259SMichael Clark { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1607ea103259SMichael Clark { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1608ea103259SMichael Clark { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1609ea103259SMichael Clark { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1610ea103259SMichael Clark { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1611ea103259SMichael Clark { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1612ea103259SMichael Clark { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1613ea103259SMichael Clark { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1614ea103259SMichael Clark { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1615ea103259SMichael Clark { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1616ea103259SMichael Clark { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1617ea103259SMichael Clark { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 1618ea103259SMichael Clark { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 161902c1b569SPhilipp Tomsich { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 162002c1b569SPhilipp Tomsich { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 162102c1b569SPhilipp Tomsich { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 162202c1b569SPhilipp Tomsich { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 162302c1b569SPhilipp Tomsich { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 162402c1b569SPhilipp Tomsich { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 162502c1b569SPhilipp Tomsich { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 162602c1b569SPhilipp Tomsich { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 162702c1b569SPhilipp Tomsich { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 162802c1b569SPhilipp Tomsich { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16293de1fb71SPhilipp Tomsich { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16303de1fb71SPhilipp Tomsich { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16313de1fb71SPhilipp Tomsich { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163202c1b569SPhilipp Tomsich { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163302c1b569SPhilipp Tomsich { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163402c1b569SPhilipp Tomsich { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163502c1b569SPhilipp Tomsich { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163602c1b569SPhilipp Tomsich { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163702c1b569SPhilipp Tomsich { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163802c1b569SPhilipp Tomsich { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 163902c1b569SPhilipp Tomsich { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164002c1b569SPhilipp Tomsich { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164102c1b569SPhilipp Tomsich { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164202c1b569SPhilipp Tomsich { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164302c1b569SPhilipp Tomsich { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164402c1b569SPhilipp Tomsich { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164502c1b569SPhilipp Tomsich { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164602c1b569SPhilipp Tomsich { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 164702c1b569SPhilipp Tomsich { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1648*27062902SIvan Klokov { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 164902c1b569SPhilipp Tomsich { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16503de1fb71SPhilipp Tomsich { "slli.uw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165102c1b569SPhilipp Tomsich { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 165202c1b569SPhilipp Tomsich { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 165302c1b569SPhilipp Tomsich { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 165402c1b569SPhilipp Tomsich { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 165502c1b569SPhilipp Tomsich { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 165602c1b569SPhilipp Tomsich { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165702c1b569SPhilipp Tomsich { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 165802c1b569SPhilipp Tomsich { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 165902c1b569SPhilipp Tomsich { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 166002c1b569SPhilipp Tomsich { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 166102c1b569SPhilipp Tomsich { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16625748c886SWeiwei Li { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16635748c886SWeiwei Li { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16645748c886SWeiwei Li { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16655748c886SWeiwei Li { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16665748c886SWeiwei Li { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 }, 16675748c886SWeiwei Li { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16685748c886SWeiwei Li { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16695748c886SWeiwei Li { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16705748c886SWeiwei Li { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16715748c886SWeiwei Li { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16725748c886SWeiwei Li { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16735748c886SWeiwei Li { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16745748c886SWeiwei Li { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16755748c886SWeiwei Li { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16765748c886SWeiwei Li { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16775748c886SWeiwei Li { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16785748c886SWeiwei Li { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16795748c886SWeiwei Li { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16805748c886SWeiwei Li { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16815748c886SWeiwei Li { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16825748c886SWeiwei Li { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16835748c886SWeiwei Li { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16845748c886SWeiwei Li { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16855748c886SWeiwei Li { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16865748c886SWeiwei Li { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16875748c886SWeiwei Li { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16885748c886SWeiwei Li { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 16895748c886SWeiwei Li { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16905748c886SWeiwei Li { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16915748c886SWeiwei Li { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16925748c886SWeiwei Li { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16935748c886SWeiwei Li { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16945748c886SWeiwei Li { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16955748c886SWeiwei Li { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16965748c886SWeiwei Li { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16975748c886SWeiwei Li { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 169807f4964dSYang Liu { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 169907f4964dSYang Liu { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle8_v, rv_op_vle8_v, 0 }, 170007f4964dSYang Liu { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle16_v, rv_op_vle16_v, 0 }, 170107f4964dSYang Liu { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle32_v, rv_op_vle32_v, 0 }, 170207f4964dSYang Liu { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle64_v, rv_op_vle64_v, 0 }, 170307f4964dSYang Liu { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse8_v, rv_op_vse8_v, 0 }, 170407f4964dSYang Liu { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse16_v, rv_op_vse16_v, 0 }, 170507f4964dSYang Liu { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse32_v, rv_op_vse32_v, 0 }, 170607f4964dSYang Liu { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse64_v, rv_op_vse64_v, 0 }, 170707f4964dSYang Liu { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vlm_v, rv_op_vlm_v, 0 }, 170807f4964dSYang Liu { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vsm_v, rv_op_vsm_v, 0 }, 170907f4964dSYang Liu { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse8_v, rv_op_vlse8_v, 0 }, 171007f4964dSYang Liu { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse16_v, rv_op_vlse16_v, 0 }, 171107f4964dSYang Liu { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse32_v, rv_op_vlse32_v, 0 }, 171207f4964dSYang Liu { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse64_v, rv_op_vlse64_v, 0 }, 171307f4964dSYang Liu { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse8_v, rv_op_vsse8_v, 0 }, 171407f4964dSYang Liu { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse16_v, rv_op_vsse16_v, 0 }, 171507f4964dSYang Liu { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse32_v, rv_op_vsse32_v, 0 }, 171607f4964dSYang Liu { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse64_v, rv_op_vsse64_v, 0 }, 171707f4964dSYang Liu { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei8_v, rv_op_vluxei8_v, 0 }, 171807f4964dSYang Liu { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei16_v, rv_op_vluxei16_v, 0 }, 171907f4964dSYang Liu { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei32_v, rv_op_vluxei32_v, 0 }, 172007f4964dSYang Liu { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei64_v, rv_op_vluxei64_v, 0 }, 172107f4964dSYang Liu { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei8_v, rv_op_vloxei8_v, 0 }, 172207f4964dSYang Liu { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei16_v, rv_op_vloxei16_v, 0 }, 172307f4964dSYang Liu { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei32_v, rv_op_vloxei32_v, 0 }, 172407f4964dSYang Liu { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei64_v, rv_op_vloxei64_v, 0 }, 172507f4964dSYang Liu { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei8_v, rv_op_vsuxei8_v, 0 }, 172607f4964dSYang Liu { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei16_v, rv_op_vsuxei16_v, 0 }, 172707f4964dSYang Liu { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei32_v, rv_op_vsuxei32_v, 0 }, 172807f4964dSYang Liu { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei64_v, rv_op_vsuxei64_v, 0 }, 172907f4964dSYang Liu { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei8_v, rv_op_vsoxei8_v, 0 }, 173007f4964dSYang Liu { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei16_v, rv_op_vsoxei16_v, 0 }, 173107f4964dSYang Liu { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei32_v, rv_op_vsoxei32_v, 0 }, 173207f4964dSYang Liu { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei64_v, rv_op_vsoxei64_v, 0 }, 173307f4964dSYang Liu { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle8ff_v, rv_op_vle8ff_v, 0 }, 173407f4964dSYang Liu { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle16ff_v, rv_op_vle16ff_v, 0 }, 173507f4964dSYang Liu { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle32ff_v, rv_op_vle32ff_v, 0 }, 173607f4964dSYang Liu { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle64ff_v, rv_op_vle64ff_v, 0 }, 173707f4964dSYang Liu { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re8_v, rv_op_vl1re8_v, 0 }, 173807f4964dSYang Liu { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re16_v, rv_op_vl1re16_v, 0 }, 173907f4964dSYang Liu { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re32_v, rv_op_vl1re32_v, 0 }, 174007f4964dSYang Liu { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re64_v, rv_op_vl1re64_v, 0 }, 174107f4964dSYang Liu { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re8_v, rv_op_vl2re8_v, 0 }, 174207f4964dSYang Liu { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re16_v, rv_op_vl2re16_v, 0 }, 174307f4964dSYang Liu { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re32_v, rv_op_vl2re32_v, 0 }, 174407f4964dSYang Liu { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re64_v, rv_op_vl2re64_v, 0 }, 174507f4964dSYang Liu { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re8_v, rv_op_vl4re8_v, 0 }, 174607f4964dSYang Liu { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re16_v, rv_op_vl4re16_v, 0 }, 174707f4964dSYang Liu { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re32_v, rv_op_vl4re32_v, 0 }, 174807f4964dSYang Liu { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re64_v, rv_op_vl4re64_v, 0 }, 174907f4964dSYang Liu { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re8_v, rv_op_vl8re8_v, 0 }, 175007f4964dSYang Liu { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re16_v, rv_op_vl8re16_v, 0 }, 175107f4964dSYang Liu { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re32_v, rv_op_vl8re32_v, 0 }, 175207f4964dSYang Liu { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re64_v, rv_op_vl8re64_v, 0 }, 175307f4964dSYang Liu { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs1r_v, rv_op_vs1r_v, 0 }, 175407f4964dSYang Liu { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs2r_v, rv_op_vs2r_v, 0 }, 175507f4964dSYang Liu { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs4r_v, rv_op_vs4r_v, 0 }, 175607f4964dSYang Liu { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs8r_v, rv_op_vs8r_v, 0 }, 175707f4964dSYang Liu { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vadd_vv, rv_op_vadd_vv, 0 }, 175807f4964dSYang Liu { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vadd_vx, rv_op_vadd_vx, 0 }, 175907f4964dSYang Liu { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vadd_vi, rv_op_vadd_vi, 0 }, 176007f4964dSYang Liu { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsub_vv, rv_op_vsub_vv, 0 }, 176107f4964dSYang Liu { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsub_vx, rv_op_vsub_vx, 0 }, 176207f4964dSYang Liu { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrsub_vx, rv_op_vrsub_vx, 0 }, 176307f4964dSYang Liu { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vrsub_vi, rv_op_vrsub_vi, 0 }, 176407f4964dSYang Liu { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwaddu_vv, rv_op_vwaddu_vv, 0 }, 176507f4964dSYang Liu { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwaddu_vx, rv_op_vwaddu_vx, 0 }, 176607f4964dSYang Liu { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwadd_vv, rv_op_vwadd_vv, 0 }, 176707f4964dSYang Liu { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwadd_vx, rv_op_vwadd_vx, 0 }, 176807f4964dSYang Liu { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsubu_vv, rv_op_vwsubu_vv, 0 }, 176907f4964dSYang Liu { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsubu_vx, rv_op_vwsubu_vx, 0 }, 177007f4964dSYang Liu { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsub_vv, rv_op_vwsub_vv, 0 }, 177107f4964dSYang Liu { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsub_vx, rv_op_vwsub_vx, 0 }, 177207f4964dSYang Liu { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwaddu_wv, rv_op_vwaddu_wv, 0 }, 177307f4964dSYang Liu { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwaddu_wx, rv_op_vwaddu_wx, 0 }, 177407f4964dSYang Liu { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwadd_wv, rv_op_vwadd_wv, 0 }, 177507f4964dSYang Liu { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwadd_wx, rv_op_vwadd_wx, 0 }, 177607f4964dSYang Liu { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsubu_wv, rv_op_vwsubu_wv, 0 }, 177707f4964dSYang Liu { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsubu_wx, rv_op_vwsubu_wx, 0 }, 177807f4964dSYang Liu { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsub_wv, rv_op_vwsub_wv, 0 }, 177907f4964dSYang Liu { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsub_wx, rv_op_vwsub_wx, 0 }, 178007f4964dSYang Liu { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vadc_vvm, rv_op_vadc_vvm, 0 }, 178107f4964dSYang Liu { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vadc_vxm, rv_op_vadc_vxm, 0 }, 178207f4964dSYang Liu { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vadc_vim, rv_op_vadc_vim, 0 }, 178307f4964dSYang Liu { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmadc_vvm, rv_op_vmadc_vvm, 0 }, 178407f4964dSYang Liu { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmadc_vxm, rv_op_vmadc_vxm, 0 }, 178507f4964dSYang Liu { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vmadc_vim, rv_op_vmadc_vim, 0 }, 178607f4964dSYang Liu { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vsbc_vvm, rv_op_vsbc_vvm, 0 }, 178707f4964dSYang Liu { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vsbc_vxm, rv_op_vsbc_vxm, 0 }, 178807f4964dSYang Liu { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmsbc_vvm, rv_op_vmsbc_vvm, 0 }, 178907f4964dSYang Liu { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmsbc_vxm, rv_op_vmsbc_vxm, 0 }, 179007f4964dSYang Liu { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vand_vv, rv_op_vand_vv, 0 }, 179107f4964dSYang Liu { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vand_vx, rv_op_vand_vx, 0 }, 179207f4964dSYang Liu { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vand_vi, rv_op_vand_vi, 0 }, 179307f4964dSYang Liu { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vor_vv, rv_op_vor_vv, 0 }, 179407f4964dSYang Liu { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vor_vx, rv_op_vor_vx, 0 }, 179507f4964dSYang Liu { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vor_vi, rv_op_vor_vi, 0 }, 179607f4964dSYang Liu { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vxor_vv, rv_op_vxor_vv, 0 }, 179707f4964dSYang Liu { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vxor_vx, rv_op_vxor_vx, 0 }, 179807f4964dSYang Liu { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vxor_vi, rv_op_vxor_vi, 0 }, 179907f4964dSYang Liu { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsll_vv, rv_op_vsll_vv, 0 }, 180007f4964dSYang Liu { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsll_vx, rv_op_vsll_vx, 0 }, 180107f4964dSYang Liu { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsll_vi, rv_op_vsll_vi, 0 }, 180207f4964dSYang Liu { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsrl_vv, rv_op_vsrl_vv, 0 }, 180307f4964dSYang Liu { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsrl_vx, rv_op_vsrl_vx, 0 }, 180407f4964dSYang Liu { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsrl_vi, rv_op_vsrl_vi, 0 }, 180507f4964dSYang Liu { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsra_vv, rv_op_vsra_vv, 0 }, 180607f4964dSYang Liu { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsra_vx, rv_op_vsra_vx, 0 }, 180707f4964dSYang Liu { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsra_vi, rv_op_vsra_vi, 0 }, 180807f4964dSYang Liu { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnsrl_wv, rv_op_vnsrl_wv, 0 }, 180907f4964dSYang Liu { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnsrl_wx, rv_op_vnsrl_wx, 0 }, 181007f4964dSYang Liu { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnsrl_wi, rv_op_vnsrl_wi, 0 }, 181107f4964dSYang Liu { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnsra_wv, rv_op_vnsra_wv, 0 }, 181207f4964dSYang Liu { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnsra_wx, rv_op_vnsra_wx, 0 }, 181307f4964dSYang Liu { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnsra_wi, rv_op_vnsra_wi, 0 }, 181407f4964dSYang Liu { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmseq_vv, rv_op_vmseq_vv, 0 }, 181507f4964dSYang Liu { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmseq_vx, rv_op_vmseq_vx, 0 }, 181607f4964dSYang Liu { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmseq_vi, rv_op_vmseq_vi, 0 }, 181707f4964dSYang Liu { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsne_vv, rv_op_vmsne_vv, 0 }, 181807f4964dSYang Liu { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsne_vx, rv_op_vmsne_vx, 0 }, 181907f4964dSYang Liu { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsne_vi, rv_op_vmsne_vi, 0 }, 182007f4964dSYang Liu { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsltu_vv, rv_op_vmsltu_vv, 0 }, 182107f4964dSYang Liu { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsltu_vx, rv_op_vmsltu_vx, 0 }, 182207f4964dSYang Liu { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmslt_vv, rv_op_vmslt_vv, 0 }, 182307f4964dSYang Liu { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmslt_vx, rv_op_vmslt_vx, 0 }, 182407f4964dSYang Liu { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsleu_vv, rv_op_vmsleu_vv, 0 }, 182507f4964dSYang Liu { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsleu_vx, rv_op_vmsleu_vx, 0 }, 182607f4964dSYang Liu { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsleu_vi, rv_op_vmsleu_vi, 0 }, 182707f4964dSYang Liu { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsle_vv, rv_op_vmsle_vv, 0 }, 182807f4964dSYang Liu { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsle_vx, rv_op_vmsle_vx, 0 }, 182907f4964dSYang Liu { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsle_vi, rv_op_vmsle_vi, 0 }, 183007f4964dSYang Liu { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsgtu_vx, rv_op_vmsgtu_vx, 0 }, 183107f4964dSYang Liu { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsgtu_vi, rv_op_vmsgtu_vi, 0 }, 183207f4964dSYang Liu { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsgt_vx, rv_op_vmsgt_vx, 0 }, 183307f4964dSYang Liu { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsgt_vi, rv_op_vmsgt_vi, 0 }, 183407f4964dSYang Liu { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vminu_vv, rv_op_vminu_vv, 0 }, 183507f4964dSYang Liu { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vminu_vx, rv_op_vminu_vx, 0 }, 183607f4964dSYang Liu { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmin_vv, rv_op_vmin_vv, 0 }, 183707f4964dSYang Liu { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmin_vx, rv_op_vmin_vx, 0 }, 183807f4964dSYang Liu { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmaxu_vv, rv_op_vmaxu_vv, 0 }, 183907f4964dSYang Liu { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmaxu_vx, rv_op_vmaxu_vx, 0 }, 184007f4964dSYang Liu { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmax_vv, rv_op_vmax_vv, 0 }, 184107f4964dSYang Liu { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmax_vx, rv_op_vmax_vx, 0 }, 184207f4964dSYang Liu { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmul_vv, rv_op_vmul_vv, 0 }, 184307f4964dSYang Liu { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmul_vx, rv_op_vmul_vx, 0 }, 184407f4964dSYang Liu { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulh_vv, rv_op_vmulh_vv, 0 }, 184507f4964dSYang Liu { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulh_vx, rv_op_vmulh_vx, 0 }, 184607f4964dSYang Liu { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulhu_vv, rv_op_vmulhu_vv, 0 }, 184707f4964dSYang Liu { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulhu_vx, rv_op_vmulhu_vx, 0 }, 184807f4964dSYang Liu { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulhsu_vv, rv_op_vmulhsu_vv, 0 }, 184907f4964dSYang Liu { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulhsu_vx, rv_op_vmulhsu_vx, 0 }, 185007f4964dSYang Liu { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vdivu_vv, rv_op_vdivu_vv, 0 }, 185107f4964dSYang Liu { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vdivu_vx, rv_op_vdivu_vx, 0 }, 185207f4964dSYang Liu { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vdiv_vv, rv_op_vdiv_vv, 0 }, 185307f4964dSYang Liu { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vdiv_vx, rv_op_vdiv_vx, 0 }, 185407f4964dSYang Liu { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vremu_vv, rv_op_vremu_vv, 0 }, 185507f4964dSYang Liu { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vremu_vx, rv_op_vremu_vx, 0 }, 185607f4964dSYang Liu { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrem_vv, rv_op_vrem_vv, 0 }, 185707f4964dSYang Liu { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrem_vx, rv_op_vrem_vx, 0 }, 185807f4964dSYang Liu { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmulu_vv, rv_op_vwmulu_vv, 0 }, 185907f4964dSYang Liu { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmulu_vx, rv_op_vwmulu_vx, 0 }, 186007f4964dSYang Liu { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmulsu_vv, rv_op_vwmulsu_vv, 0 }, 186107f4964dSYang Liu { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmulsu_vx, rv_op_vwmulsu_vx, 0 }, 186207f4964dSYang Liu { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmul_vv, rv_op_vwmul_vv, 0 }, 186307f4964dSYang Liu { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmul_vx, rv_op_vwmul_vx, 0 }, 186407f4964dSYang Liu { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vmacc_vv, rv_op_vmacc_vv, 0 }, 186507f4964dSYang Liu { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vmacc_vx, rv_op_vmacc_vx, 0 }, 186607f4964dSYang Liu { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vnmsac_vv, rv_op_vnmsac_vv, 0 }, 186707f4964dSYang Liu { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vnmsac_vx, rv_op_vnmsac_vx, 0 }, 186807f4964dSYang Liu { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vmadd_vv, rv_op_vmadd_vv, 0 }, 186907f4964dSYang Liu { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vmadd_vx, rv_op_vmadd_vx, 0 }, 187007f4964dSYang Liu { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vnmsub_vv, rv_op_vnmsub_vv, 0 }, 187107f4964dSYang Liu { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vnmsub_vx, rv_op_vnmsub_vx, 0 }, 187207f4964dSYang Liu { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmaccu_vv, rv_op_vwmaccu_vv, 0 }, 187307f4964dSYang Liu { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccu_vx, rv_op_vwmaccu_vx, 0 }, 187407f4964dSYang Liu { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmacc_vv, rv_op_vwmacc_vv, 0 }, 187507f4964dSYang Liu { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmacc_vx, rv_op_vwmacc_vx, 0 }, 187607f4964dSYang Liu { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmaccsu_vv, rv_op_vwmaccsu_vv, 0 }, 187707f4964dSYang Liu { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccsu_vx, rv_op_vwmaccsu_vx, 0 }, 187807f4964dSYang Liu { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccus_vx, rv_op_vwmaccus_vx, 0 }, 187907f4964dSYang Liu { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, rv_op_vmv_v_v, rv_op_vmv_v_v, 0 }, 188007f4964dSYang Liu { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, rv_op_vmv_v_x, rv_op_vmv_v_x, 0 }, 188107f4964dSYang Liu { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, rv_op_vmv_v_i, rv_op_vmv_v_i, 0 }, 188207f4964dSYang Liu { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmerge_vvm, rv_op_vmerge_vvm, 0 }, 188307f4964dSYang Liu { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmerge_vxm, rv_op_vmerge_vxm, 0 }, 188407f4964dSYang Liu { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vmerge_vim, rv_op_vmerge_vim, 0 }, 188507f4964dSYang Liu { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsaddu_vv, rv_op_vsaddu_vv, 0 }, 188607f4964dSYang Liu { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsaddu_vx, rv_op_vsaddu_vx, 0 }, 188707f4964dSYang Liu { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vsaddu_vi, rv_op_vsaddu_vi, 0 }, 188807f4964dSYang Liu { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsadd_vv, rv_op_vsadd_vv, 0 }, 188907f4964dSYang Liu { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsadd_vx, rv_op_vsadd_vx, 0 }, 189007f4964dSYang Liu { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vsadd_vi, rv_op_vsadd_vi, 0 }, 189107f4964dSYang Liu { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssubu_vv, rv_op_vssubu_vv, 0 }, 189207f4964dSYang Liu { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssubu_vx, rv_op_vssubu_vx, 0 }, 189307f4964dSYang Liu { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssub_vv, rv_op_vssub_vv, 0 }, 189407f4964dSYang Liu { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssub_vx, rv_op_vssub_vx, 0 }, 189507f4964dSYang Liu { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vaadd_vv, rv_op_vaadd_vv, 0 }, 189607f4964dSYang Liu { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vaadd_vx, rv_op_vaadd_vx, 0 }, 189707f4964dSYang Liu { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vaaddu_vv, rv_op_vaaddu_vv, 0 }, 189807f4964dSYang Liu { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vaaddu_vx, rv_op_vaaddu_vx, 0 }, 189907f4964dSYang Liu { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vasub_vv, rv_op_vasub_vv, 0 }, 190007f4964dSYang Liu { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vasub_vx, rv_op_vasub_vx, 0 }, 190107f4964dSYang Liu { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vasubu_vv, rv_op_vasubu_vv, 0 }, 190207f4964dSYang Liu { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vasubu_vx, rv_op_vasubu_vx, 0 }, 190307f4964dSYang Liu { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsmul_vv, rv_op_vsmul_vv, 0 }, 190407f4964dSYang Liu { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsmul_vx, rv_op_vsmul_vx, 0 }, 190507f4964dSYang Liu { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssrl_vv, rv_op_vssrl_vv, 0 }, 190607f4964dSYang Liu { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssrl_vx, rv_op_vssrl_vx, 0 }, 190707f4964dSYang Liu { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vssrl_vi, rv_op_vssrl_vi, 0 }, 190807f4964dSYang Liu { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssra_vv, rv_op_vssra_vv, 0 }, 190907f4964dSYang Liu { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssra_vx, rv_op_vssra_vx, 0 }, 191007f4964dSYang Liu { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vssra_vi, rv_op_vssra_vi, 0 }, 191107f4964dSYang Liu { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnclipu_wv, rv_op_vnclipu_wv, 0 }, 191207f4964dSYang Liu { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnclipu_wx, rv_op_vnclipu_wx, 0 }, 191307f4964dSYang Liu { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnclipu_wi, rv_op_vnclipu_wi, 0 }, 191407f4964dSYang Liu { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnclip_wv, rv_op_vnclip_wv, 0 }, 191507f4964dSYang Liu { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnclip_wx, rv_op_vnclip_wx, 0 }, 191607f4964dSYang Liu { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnclip_wi, rv_op_vnclip_wi, 0 }, 191707f4964dSYang Liu { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfadd_vv, rv_op_vfadd_vv, 0 }, 191807f4964dSYang Liu { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfadd_vf, rv_op_vfadd_vf, 0 }, 191907f4964dSYang Liu { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsub_vv, rv_op_vfsub_vv, 0 }, 192007f4964dSYang Liu { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsub_vf, rv_op_vfsub_vf, 0 }, 192107f4964dSYang Liu { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfrsub_vf, rv_op_vfrsub_vf, 0 }, 192207f4964dSYang Liu { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwadd_vv, rv_op_vfwadd_vv, 0 }, 192307f4964dSYang Liu { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwadd_vf, rv_op_vfwadd_vf, 0 }, 192407f4964dSYang Liu { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwadd_wv, rv_op_vfwadd_wv, 0 }, 192507f4964dSYang Liu { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwadd_wf, rv_op_vfwadd_wf, 0 }, 192607f4964dSYang Liu { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwsub_vv, rv_op_vfwsub_vv, 0 }, 192707f4964dSYang Liu { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwsub_vf, rv_op_vfwsub_vf, 0 }, 192807f4964dSYang Liu { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwsub_wv, rv_op_vfwsub_wv, 0 }, 192907f4964dSYang Liu { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwsub_wf, rv_op_vfwsub_wf, 0 }, 193007f4964dSYang Liu { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmul_vv, rv_op_vfmul_vv, 0 }, 193107f4964dSYang Liu { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmul_vf, rv_op_vfmul_vf, 0 }, 193207f4964dSYang Liu { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfdiv_vv, rv_op_vfdiv_vv, 0 }, 193307f4964dSYang Liu { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfdiv_vf, rv_op_vfdiv_vf, 0 }, 193407f4964dSYang Liu { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfrdiv_vf, rv_op_vfrdiv_vf, 0 }, 193507f4964dSYang Liu { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwmul_vv, rv_op_vfwmul_vv, 0 }, 193607f4964dSYang Liu { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwmul_vf, rv_op_vfwmul_vf, 0 }, 193707f4964dSYang Liu { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmacc_vv, rv_op_vfmacc_vv, 0 }, 193807f4964dSYang Liu { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmacc_vf, rv_op_vfmacc_vf, 0 }, 193907f4964dSYang Liu { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmacc_vv, rv_op_vfnmacc_vv, 0 }, 194007f4964dSYang Liu { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmacc_vf, rv_op_vfnmacc_vf, 0 }, 194107f4964dSYang Liu { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmsac_vv, rv_op_vfmsac_vv, 0 }, 194207f4964dSYang Liu { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmsac_vf, rv_op_vfmsac_vf, 0 }, 194307f4964dSYang Liu { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmsac_vv, rv_op_vfnmsac_vv, 0 }, 194407f4964dSYang Liu { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmsac_vf, rv_op_vfnmsac_vf, 0 }, 194507f4964dSYang Liu { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmadd_vv, rv_op_vfmadd_vv, 0 }, 194607f4964dSYang Liu { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmadd_vf, rv_op_vfmadd_vf, 0 }, 194707f4964dSYang Liu { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmadd_vv, rv_op_vfnmadd_vv, 0 }, 194807f4964dSYang Liu { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmadd_vf, rv_op_vfnmadd_vf, 0 }, 194907f4964dSYang Liu { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmsub_vv, rv_op_vfmsub_vv, 0 }, 195007f4964dSYang Liu { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmsub_vf, rv_op_vfmsub_vf, 0 }, 195107f4964dSYang Liu { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmsub_vv, rv_op_vfnmsub_vv, 0 }, 195207f4964dSYang Liu { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmsub_vf, rv_op_vfnmsub_vf, 0 }, 195307f4964dSYang Liu { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwmacc_vv, rv_op_vfwmacc_vv, 0 }, 195407f4964dSYang Liu { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwmacc_vf, rv_op_vfwmacc_vf, 0 }, 195507f4964dSYang Liu { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwnmacc_vv, rv_op_vfwnmacc_vv, 0 }, 195607f4964dSYang Liu { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwnmacc_vf, rv_op_vfwnmacc_vf, 0 }, 195707f4964dSYang Liu { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwmsac_vv, rv_op_vfwmsac_vv, 0 }, 195807f4964dSYang Liu { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwmsac_vf, rv_op_vfwmsac_vf, 0 }, 195907f4964dSYang Liu { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwnmsac_vv, rv_op_vfwnmsac_vv, 0 }, 196007f4964dSYang Liu { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwnmsac_vf, rv_op_vfwnmsac_vf, 0 }, 196107f4964dSYang Liu { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfsqrt_v, rv_op_vfsqrt_v, 0 }, 196207f4964dSYang Liu { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfrsqrt7_v, rv_op_vfrsqrt7_v, 0 }, 196307f4964dSYang Liu { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfrec7_v, rv_op_vfrec7_v, 0 }, 196407f4964dSYang Liu { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmin_vv, rv_op_vfmin_vv, 0 }, 196507f4964dSYang Liu { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmin_vf, rv_op_vfmin_vf, 0 }, 196607f4964dSYang Liu { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmax_vv, rv_op_vfmax_vv, 0 }, 196707f4964dSYang Liu { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmax_vf, rv_op_vfmax_vf, 0 }, 196807f4964dSYang Liu { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnj_vv, rv_op_vfsgnj_vv, 0 }, 196907f4964dSYang Liu { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnj_vf, rv_op_vfsgnj_vf, 0 }, 197007f4964dSYang Liu { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnjn_vv, rv_op_vfsgnjn_vv, 0 }, 197107f4964dSYang Liu { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnjn_vf, rv_op_vfsgnjn_vf, 0 }, 197207f4964dSYang Liu { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnjx_vv, rv_op_vfsgnjx_vv, 0 }, 197307f4964dSYang Liu { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnjx_vf, rv_op_vfsgnjx_vf, 0 }, 197407f4964dSYang Liu { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfslide1up_vf, rv_op_vfslide1up_vf, 0 }, 197507f4964dSYang Liu { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfslide1down_vf, rv_op_vfslide1down_vf, 0 }, 197607f4964dSYang Liu { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfeq_vv, rv_op_vmfeq_vv, 0 }, 197707f4964dSYang Liu { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfeq_vf, rv_op_vmfeq_vf, 0 }, 197807f4964dSYang Liu { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfne_vv, rv_op_vmfne_vv, 0 }, 197907f4964dSYang Liu { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfne_vf, rv_op_vmfne_vf, 0 }, 198007f4964dSYang Liu { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmflt_vv, rv_op_vmflt_vv, 0 }, 198107f4964dSYang Liu { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmflt_vf, rv_op_vmflt_vf, 0 }, 198207f4964dSYang Liu { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfle_vv, rv_op_vmfle_vv, 0 }, 198307f4964dSYang Liu { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfle_vf, rv_op_vmfle_vf, 0 }, 198407f4964dSYang Liu { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfgt_vf, rv_op_vmfgt_vf, 0 }, 198507f4964dSYang Liu { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfge_vf, rv_op_vmfge_vf, 0 }, 198607f4964dSYang Liu { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfclass_v, rv_op_vfclass_v, 0 }, 198707f4964dSYang Liu { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, rv_op_vfmerge_vfm, rv_op_vfmerge_vfm, 0 }, 198807f4964dSYang Liu { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, rv_op_vfmv_v_f, rv_op_vfmv_v_f, 0 }, 198907f4964dSYang Liu { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_xu_f_v, rv_op_vfcvt_xu_f_v, 0 }, 199007f4964dSYang Liu { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_x_f_v, rv_op_vfcvt_x_f_v, 0 }, 199107f4964dSYang Liu { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_f_xu_v, rv_op_vfcvt_f_xu_v, 0 }, 199207f4964dSYang Liu { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_f_x_v, rv_op_vfcvt_f_x_v, 0 }, 199307f4964dSYang Liu { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_rtz_xu_f_v, rv_op_vfcvt_rtz_xu_f_v, 0 }, 199407f4964dSYang Liu { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfcvt_rtz_x_f_v, rv_op_vfcvt_rtz_x_f_v, 0 }, 199507f4964dSYang Liu { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_xu_f_v, rv_op_vfwcvt_xu_f_v, 0 }, 199607f4964dSYang Liu { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_x_f_v, rv_op_vfwcvt_x_f_v, 0 }, 199707f4964dSYang Liu { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_f_xu_v, rv_op_vfwcvt_f_xu_v, 0 }, 199807f4964dSYang Liu { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_f_x_v, rv_op_vfwcvt_f_x_v, 0 }, 199907f4964dSYang Liu { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_f_f_v, rv_op_vfwcvt_f_f_v, 0 }, 200007f4964dSYang Liu { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_rtz_xu_f_v, rv_op_vfwcvt_rtz_xu_f_v, 0 }, 200107f4964dSYang Liu { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfwcvt_rtz_x_f_v, rv_op_vfwcvt_rtz_x_f_v, 0 }, 200207f4964dSYang Liu { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_xu_f_w, rv_op_vfncvt_xu_f_w, 0 }, 200307f4964dSYang Liu { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_x_f_w, rv_op_vfncvt_x_f_w, 0 }, 200407f4964dSYang Liu { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_f_xu_w, rv_op_vfncvt_f_xu_w, 0 }, 200507f4964dSYang Liu { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_f_x_w, rv_op_vfncvt_f_x_w, 0 }, 200607f4964dSYang Liu { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_f_f_w, rv_op_vfncvt_f_f_w, 0 }, 200707f4964dSYang Liu { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_rod_f_f_w, rv_op_vfncvt_rod_f_f_w, 0 }, 200807f4964dSYang Liu { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_rtz_xu_f_w, rv_op_vfncvt_rtz_xu_f_w, 0 }, 200907f4964dSYang Liu { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfncvt_rtz_x_f_w, rv_op_vfncvt_rtz_x_f_w, 0 }, 201007f4964dSYang Liu { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredsum_vs, rv_op_vredsum_vs, 0 }, 201107f4964dSYang Liu { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredand_vs, rv_op_vredand_vs, 0 }, 201207f4964dSYang Liu { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredor_vs, rv_op_vredor_vs, 0 }, 201307f4964dSYang Liu { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredxor_vs, rv_op_vredxor_vs, 0 }, 201407f4964dSYang Liu { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredminu_vs, rv_op_vredminu_vs, 0 }, 201507f4964dSYang Liu { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmin_vs, rv_op_vredmin_vs, 0 }, 201607f4964dSYang Liu { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmaxu_vs, rv_op_vredmaxu_vs, 0 }, 201707f4964dSYang Liu { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmax_vs, rv_op_vredmax_vs, 0 }, 201807f4964dSYang Liu { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwredsumu_vs, rv_op_vwredsumu_vs, 0 }, 201907f4964dSYang Liu { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwredsum_vs, rv_op_vwredsum_vs, 0 }, 202007f4964dSYang Liu { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredusum_vs, rv_op_vfredusum_vs, 0 }, 202107f4964dSYang Liu { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredosum_vs, rv_op_vfredosum_vs, 0 }, 202207f4964dSYang Liu { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredmin_vs, rv_op_vfredmin_vs, 0 }, 202307f4964dSYang Liu { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredmax_vs, rv_op_vfredmax_vs, 0 }, 202407f4964dSYang Liu { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwredusum_vs, rv_op_vfwredusum_vs, 0 }, 202507f4964dSYang Liu { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwredosum_vs, rv_op_vfwredosum_vs, 0 }, 202607f4964dSYang Liu { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmand_mm, rv_op_vmand_mm, 0 }, 202707f4964dSYang Liu { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmnand_mm, rv_op_vmnand_mm, 0 }, 202807f4964dSYang Liu { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmandn_mm, rv_op_vmandn_mm, 0 }, 202907f4964dSYang Liu { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmxor_mm, rv_op_vmxor_mm, 0 }, 203007f4964dSYang Liu { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmor_mm, rv_op_vmor_mm, 0 }, 203107f4964dSYang Liu { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmnor_mm, rv_op_vmnor_mm, 0 }, 203207f4964dSYang Liu { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmorn_mm, rv_op_vmorn_mm, 0 }, 203307f4964dSYang Liu { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmxnor_mm, rv_op_vmxnor_mm, 0 }, 203407f4964dSYang Liu { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, rv_op_vcpop_m, rv_op_vcpop_m, 0 }, 203507f4964dSYang Liu { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, rv_op_vfirst_m, rv_op_vfirst_m, 0 }, 203607f4964dSYang Liu { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsbf_m, rv_op_vmsbf_m, 0 }, 203707f4964dSYang Liu { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsif_m, rv_op_vmsif_m, 0 }, 203807f4964dSYang Liu { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsof_m, rv_op_vmsof_m, 0 }, 203907f4964dSYang Liu { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_viota_m, rv_op_viota_m, 0 }, 204007f4964dSYang Liu { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, rv_op_vid_v, rv_op_vid_v, 0 }, 204107f4964dSYang Liu { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, rv_op_vmv_x_s, rv_op_vmv_x_s, 0 }, 204207f4964dSYang Liu { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, rv_op_vmv_s_x, rv_op_vmv_s_x, 0 }, 204307f4964dSYang Liu { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, rv_op_vfmv_f_s, rv_op_vfmv_f_s, 0 }, 204407f4964dSYang Liu { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, rv_op_vfmv_s_f, rv_op_vfmv_s_f, 0 }, 204507f4964dSYang Liu { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslideup_vx, rv_op_vslideup_vx, 0 }, 204607f4964dSYang Liu { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vslideup_vi, rv_op_vslideup_vi, 0 }, 204707f4964dSYang Liu { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslide1up_vx, rv_op_vslide1up_vx, 0 }, 204807f4964dSYang Liu { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslidedown_vx, rv_op_vslidedown_vx, 0 }, 204907f4964dSYang Liu { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vslidedown_vi, rv_op_vslidedown_vi, 0 }, 205007f4964dSYang Liu { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslide1down_vx, rv_op_vslide1down_vx, 0 }, 205107f4964dSYang Liu { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrgather_vv, rv_op_vrgather_vv, 0 }, 205207f4964dSYang Liu { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrgatherei16_vv, rv_op_vrgatherei16_vv, 0 }, 205307f4964dSYang Liu { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrgather_vx, rv_op_vrgather_vx, 0 }, 205407f4964dSYang Liu { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vrgather_vi, rv_op_vrgather_vi, 0 }, 205507f4964dSYang Liu { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, rv_op_vcompress_vm, rv_op_vcompress_vm, 0 }, 205607f4964dSYang Liu { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv1r_v, rv_op_vmv1r_v, 0 }, 205707f4964dSYang Liu { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv2r_v, rv_op_vmv2r_v, 0 }, 205807f4964dSYang Liu { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv4r_v, rv_op_vmv4r_v, 0 }, 205907f4964dSYang Liu { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv8r_v, rv_op_vmv8r_v, 0 }, 206007f4964dSYang Liu { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf2, rv_op_vzext_vf2, 0 }, 206107f4964dSYang Liu { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf4, rv_op_vzext_vf4, 0 }, 206207f4964dSYang Liu { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf8, rv_op_vzext_vf8, 0 }, 206307f4964dSYang Liu { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf2, rv_op_vsext_vf2, 0 }, 206407f4964dSYang Liu { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf4, rv_op_vsext_vf4, 0 }, 206507f4964dSYang Liu { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf8, rv_op_vsext_vf8, 0 }, 206607f4964dSYang Liu { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, rv_op_vsetvli, rv_op_vsetvli, 0 }, 206707f4964dSYang Liu { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, rv_op_vsetivli, rv_op_vsetivli, 0 }, 206807f4964dSYang Liu { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, rv_op_vsetvl, rv_op_vsetvl, 0 } 2069ea103259SMichael Clark }; 2070ea103259SMichael Clark 2071ea103259SMichael Clark /* CSR names */ 2072ea103259SMichael Clark 2073ea103259SMichael Clark static const char *csr_name(int csrno) 2074ea103259SMichael Clark { 2075ea103259SMichael Clark switch (csrno) { 2076ea103259SMichael Clark case 0x0000: return "ustatus"; 2077ea103259SMichael Clark case 0x0001: return "fflags"; 2078ea103259SMichael Clark case 0x0002: return "frm"; 2079ea103259SMichael Clark case 0x0003: return "fcsr"; 2080ea103259SMichael Clark case 0x0004: return "uie"; 2081ea103259SMichael Clark case 0x0005: return "utvec"; 208207f4964dSYang Liu case 0x0008: return "vstart"; 208307f4964dSYang Liu case 0x0009: return "vxsat"; 208407f4964dSYang Liu case 0x000a: return "vxrm"; 208507f4964dSYang Liu case 0x000f: return "vcsr"; 20865748c886SWeiwei Li case 0x0015: return "seed"; 2087ea103259SMichael Clark case 0x0040: return "uscratch"; 2088ea103259SMichael Clark case 0x0041: return "uepc"; 2089ea103259SMichael Clark case 0x0042: return "ucause"; 2090ea103259SMichael Clark case 0x0043: return "utval"; 2091ea103259SMichael Clark case 0x0044: return "uip"; 2092ea103259SMichael Clark case 0x0100: return "sstatus"; 2093ea103259SMichael Clark case 0x0104: return "sie"; 2094ea103259SMichael Clark case 0x0105: return "stvec"; 2095ea103259SMichael Clark case 0x0106: return "scounteren"; 2096ea103259SMichael Clark case 0x0140: return "sscratch"; 2097ea103259SMichael Clark case 0x0141: return "sepc"; 2098ea103259SMichael Clark case 0x0142: return "scause"; 2099ea103259SMichael Clark case 0x0143: return "stval"; 2100ea103259SMichael Clark case 0x0144: return "sip"; 2101ea103259SMichael Clark case 0x0180: return "satp"; 2102ea103259SMichael Clark case 0x0200: return "hstatus"; 2103ea103259SMichael Clark case 0x0202: return "hedeleg"; 2104ea103259SMichael Clark case 0x0203: return "hideleg"; 2105ea103259SMichael Clark case 0x0204: return "hie"; 2106ea103259SMichael Clark case 0x0205: return "htvec"; 2107ea103259SMichael Clark case 0x0240: return "hscratch"; 2108ea103259SMichael Clark case 0x0241: return "hepc"; 2109ea103259SMichael Clark case 0x0242: return "hcause"; 2110ea103259SMichael Clark case 0x0243: return "hbadaddr"; 2111ea103259SMichael Clark case 0x0244: return "hip"; 2112ea103259SMichael Clark case 0x0300: return "mstatus"; 2113ea103259SMichael Clark case 0x0301: return "misa"; 2114ea103259SMichael Clark case 0x0302: return "medeleg"; 2115ea103259SMichael Clark case 0x0303: return "mideleg"; 2116ea103259SMichael Clark case 0x0304: return "mie"; 2117ea103259SMichael Clark case 0x0305: return "mtvec"; 2118ea103259SMichael Clark case 0x0306: return "mcounteren"; 2119ea103259SMichael Clark case 0x0320: return "mucounteren"; 2120ea103259SMichael Clark case 0x0321: return "mscounteren"; 2121ea103259SMichael Clark case 0x0322: return "mhcounteren"; 2122ea103259SMichael Clark case 0x0323: return "mhpmevent3"; 2123ea103259SMichael Clark case 0x0324: return "mhpmevent4"; 2124ea103259SMichael Clark case 0x0325: return "mhpmevent5"; 2125ea103259SMichael Clark case 0x0326: return "mhpmevent6"; 2126ea103259SMichael Clark case 0x0327: return "mhpmevent7"; 2127ea103259SMichael Clark case 0x0328: return "mhpmevent8"; 2128ea103259SMichael Clark case 0x0329: return "mhpmevent9"; 2129ea103259SMichael Clark case 0x032a: return "mhpmevent10"; 2130ea103259SMichael Clark case 0x032b: return "mhpmevent11"; 2131ea103259SMichael Clark case 0x032c: return "mhpmevent12"; 2132ea103259SMichael Clark case 0x032d: return "mhpmevent13"; 2133ea103259SMichael Clark case 0x032e: return "mhpmevent14"; 2134ea103259SMichael Clark case 0x032f: return "mhpmevent15"; 2135ea103259SMichael Clark case 0x0330: return "mhpmevent16"; 2136ea103259SMichael Clark case 0x0331: return "mhpmevent17"; 2137ea103259SMichael Clark case 0x0332: return "mhpmevent18"; 2138ea103259SMichael Clark case 0x0333: return "mhpmevent19"; 2139ea103259SMichael Clark case 0x0334: return "mhpmevent20"; 2140ea103259SMichael Clark case 0x0335: return "mhpmevent21"; 2141ea103259SMichael Clark case 0x0336: return "mhpmevent22"; 2142ea103259SMichael Clark case 0x0337: return "mhpmevent23"; 2143ea103259SMichael Clark case 0x0338: return "mhpmevent24"; 2144ea103259SMichael Clark case 0x0339: return "mhpmevent25"; 2145ea103259SMichael Clark case 0x033a: return "mhpmevent26"; 2146ea103259SMichael Clark case 0x033b: return "mhpmevent27"; 2147ea103259SMichael Clark case 0x033c: return "mhpmevent28"; 2148ea103259SMichael Clark case 0x033d: return "mhpmevent29"; 2149ea103259SMichael Clark case 0x033e: return "mhpmevent30"; 2150ea103259SMichael Clark case 0x033f: return "mhpmevent31"; 2151ea103259SMichael Clark case 0x0340: return "mscratch"; 2152ea103259SMichael Clark case 0x0341: return "mepc"; 2153ea103259SMichael Clark case 0x0342: return "mcause"; 2154ea103259SMichael Clark case 0x0343: return "mtval"; 2155ea103259SMichael Clark case 0x0344: return "mip"; 2156ea103259SMichael Clark case 0x0380: return "mbase"; 2157ea103259SMichael Clark case 0x0381: return "mbound"; 2158ea103259SMichael Clark case 0x0382: return "mibase"; 2159ea103259SMichael Clark case 0x0383: return "mibound"; 2160ea103259SMichael Clark case 0x0384: return "mdbase"; 2161ea103259SMichael Clark case 0x0385: return "mdbound"; 2162ea103259SMichael Clark case 0x03a0: return "pmpcfg3"; 2163ea103259SMichael Clark case 0x03b0: return "pmpaddr0"; 2164ea103259SMichael Clark case 0x03b1: return "pmpaddr1"; 2165ea103259SMichael Clark case 0x03b2: return "pmpaddr2"; 2166ea103259SMichael Clark case 0x03b3: return "pmpaddr3"; 2167ea103259SMichael Clark case 0x03b4: return "pmpaddr4"; 2168ea103259SMichael Clark case 0x03b5: return "pmpaddr5"; 2169ea103259SMichael Clark case 0x03b6: return "pmpaddr6"; 2170ea103259SMichael Clark case 0x03b7: return "pmpaddr7"; 2171ea103259SMichael Clark case 0x03b8: return "pmpaddr8"; 2172ea103259SMichael Clark case 0x03b9: return "pmpaddr9"; 2173ea103259SMichael Clark case 0x03ba: return "pmpaddr10"; 2174ea103259SMichael Clark case 0x03bb: return "pmpaddr11"; 2175ea103259SMichael Clark case 0x03bc: return "pmpaddr12"; 2176ea103259SMichael Clark case 0x03bd: return "pmpaddr14"; 2177ea103259SMichael Clark case 0x03be: return "pmpaddr13"; 2178ea103259SMichael Clark case 0x03bf: return "pmpaddr15"; 2179ea103259SMichael Clark case 0x0780: return "mtohost"; 2180ea103259SMichael Clark case 0x0781: return "mfromhost"; 2181ea103259SMichael Clark case 0x0782: return "mreset"; 2182ea103259SMichael Clark case 0x0783: return "mipi"; 2183ea103259SMichael Clark case 0x0784: return "miobase"; 2184ea103259SMichael Clark case 0x07a0: return "tselect"; 2185ea103259SMichael Clark case 0x07a1: return "tdata1"; 2186ea103259SMichael Clark case 0x07a2: return "tdata2"; 2187ea103259SMichael Clark case 0x07a3: return "tdata3"; 2188ea103259SMichael Clark case 0x07b0: return "dcsr"; 2189ea103259SMichael Clark case 0x07b1: return "dpc"; 2190ea103259SMichael Clark case 0x07b2: return "dscratch"; 2191ea103259SMichael Clark case 0x0b00: return "mcycle"; 2192ea103259SMichael Clark case 0x0b01: return "mtime"; 2193ea103259SMichael Clark case 0x0b02: return "minstret"; 2194ea103259SMichael Clark case 0x0b03: return "mhpmcounter3"; 2195ea103259SMichael Clark case 0x0b04: return "mhpmcounter4"; 2196ea103259SMichael Clark case 0x0b05: return "mhpmcounter5"; 2197ea103259SMichael Clark case 0x0b06: return "mhpmcounter6"; 2198ea103259SMichael Clark case 0x0b07: return "mhpmcounter7"; 2199ea103259SMichael Clark case 0x0b08: return "mhpmcounter8"; 2200ea103259SMichael Clark case 0x0b09: return "mhpmcounter9"; 2201ea103259SMichael Clark case 0x0b0a: return "mhpmcounter10"; 2202ea103259SMichael Clark case 0x0b0b: return "mhpmcounter11"; 2203ea103259SMichael Clark case 0x0b0c: return "mhpmcounter12"; 2204ea103259SMichael Clark case 0x0b0d: return "mhpmcounter13"; 2205ea103259SMichael Clark case 0x0b0e: return "mhpmcounter14"; 2206ea103259SMichael Clark case 0x0b0f: return "mhpmcounter15"; 2207ea103259SMichael Clark case 0x0b10: return "mhpmcounter16"; 2208ea103259SMichael Clark case 0x0b11: return "mhpmcounter17"; 2209ea103259SMichael Clark case 0x0b12: return "mhpmcounter18"; 2210ea103259SMichael Clark case 0x0b13: return "mhpmcounter19"; 2211ea103259SMichael Clark case 0x0b14: return "mhpmcounter20"; 2212ea103259SMichael Clark case 0x0b15: return "mhpmcounter21"; 2213ea103259SMichael Clark case 0x0b16: return "mhpmcounter22"; 2214ea103259SMichael Clark case 0x0b17: return "mhpmcounter23"; 2215ea103259SMichael Clark case 0x0b18: return "mhpmcounter24"; 2216ea103259SMichael Clark case 0x0b19: return "mhpmcounter25"; 2217ea103259SMichael Clark case 0x0b1a: return "mhpmcounter26"; 2218ea103259SMichael Clark case 0x0b1b: return "mhpmcounter27"; 2219ea103259SMichael Clark case 0x0b1c: return "mhpmcounter28"; 2220ea103259SMichael Clark case 0x0b1d: return "mhpmcounter29"; 2221ea103259SMichael Clark case 0x0b1e: return "mhpmcounter30"; 2222ea103259SMichael Clark case 0x0b1f: return "mhpmcounter31"; 2223ea103259SMichael Clark case 0x0b80: return "mcycleh"; 2224ea103259SMichael Clark case 0x0b81: return "mtimeh"; 2225ea103259SMichael Clark case 0x0b82: return "minstreth"; 2226ea103259SMichael Clark case 0x0b83: return "mhpmcounter3h"; 2227ea103259SMichael Clark case 0x0b84: return "mhpmcounter4h"; 2228ea103259SMichael Clark case 0x0b85: return "mhpmcounter5h"; 2229ea103259SMichael Clark case 0x0b86: return "mhpmcounter6h"; 2230ea103259SMichael Clark case 0x0b87: return "mhpmcounter7h"; 2231ea103259SMichael Clark case 0x0b88: return "mhpmcounter8h"; 2232ea103259SMichael Clark case 0x0b89: return "mhpmcounter9h"; 2233ea103259SMichael Clark case 0x0b8a: return "mhpmcounter10h"; 2234ea103259SMichael Clark case 0x0b8b: return "mhpmcounter11h"; 2235ea103259SMichael Clark case 0x0b8c: return "mhpmcounter12h"; 2236ea103259SMichael Clark case 0x0b8d: return "mhpmcounter13h"; 2237ea103259SMichael Clark case 0x0b8e: return "mhpmcounter14h"; 2238ea103259SMichael Clark case 0x0b8f: return "mhpmcounter15h"; 2239ea103259SMichael Clark case 0x0b90: return "mhpmcounter16h"; 2240ea103259SMichael Clark case 0x0b91: return "mhpmcounter17h"; 2241ea103259SMichael Clark case 0x0b92: return "mhpmcounter18h"; 2242ea103259SMichael Clark case 0x0b93: return "mhpmcounter19h"; 2243ea103259SMichael Clark case 0x0b94: return "mhpmcounter20h"; 2244ea103259SMichael Clark case 0x0b95: return "mhpmcounter21h"; 2245ea103259SMichael Clark case 0x0b96: return "mhpmcounter22h"; 2246ea103259SMichael Clark case 0x0b97: return "mhpmcounter23h"; 2247ea103259SMichael Clark case 0x0b98: return "mhpmcounter24h"; 2248ea103259SMichael Clark case 0x0b99: return "mhpmcounter25h"; 2249ea103259SMichael Clark case 0x0b9a: return "mhpmcounter26h"; 2250ea103259SMichael Clark case 0x0b9b: return "mhpmcounter27h"; 2251ea103259SMichael Clark case 0x0b9c: return "mhpmcounter28h"; 2252ea103259SMichael Clark case 0x0b9d: return "mhpmcounter29h"; 2253ea103259SMichael Clark case 0x0b9e: return "mhpmcounter30h"; 2254ea103259SMichael Clark case 0x0b9f: return "mhpmcounter31h"; 2255ea103259SMichael Clark case 0x0c00: return "cycle"; 2256ea103259SMichael Clark case 0x0c01: return "time"; 2257ea103259SMichael Clark case 0x0c02: return "instret"; 225807f4964dSYang Liu case 0x0c20: return "vl"; 225907f4964dSYang Liu case 0x0c21: return "vtype"; 226007f4964dSYang Liu case 0x0c22: return "vlenb"; 2261ea103259SMichael Clark case 0x0c80: return "cycleh"; 2262ea103259SMichael Clark case 0x0c81: return "timeh"; 2263ea103259SMichael Clark case 0x0c82: return "instreth"; 2264ea103259SMichael Clark case 0x0d00: return "scycle"; 2265ea103259SMichael Clark case 0x0d01: return "stime"; 2266ea103259SMichael Clark case 0x0d02: return "sinstret"; 2267ea103259SMichael Clark case 0x0d80: return "scycleh"; 2268ea103259SMichael Clark case 0x0d81: return "stimeh"; 2269ea103259SMichael Clark case 0x0d82: return "sinstreth"; 2270ea103259SMichael Clark case 0x0e00: return "hcycle"; 2271ea103259SMichael Clark case 0x0e01: return "htime"; 2272ea103259SMichael Clark case 0x0e02: return "hinstret"; 2273ea103259SMichael Clark case 0x0e80: return "hcycleh"; 2274ea103259SMichael Clark case 0x0e81: return "htimeh"; 2275ea103259SMichael Clark case 0x0e82: return "hinstreth"; 2276ea103259SMichael Clark case 0x0f11: return "mvendorid"; 2277ea103259SMichael Clark case 0x0f12: return "marchid"; 2278ea103259SMichael Clark case 0x0f13: return "mimpid"; 2279ea103259SMichael Clark case 0x0f14: return "mhartid"; 2280ea103259SMichael Clark default: return NULL; 2281ea103259SMichael Clark } 2282ea103259SMichael Clark } 2283ea103259SMichael Clark 2284ea103259SMichael Clark /* decode opcode */ 2285ea103259SMichael Clark 2286ea103259SMichael Clark static void decode_inst_opcode(rv_decode *dec, rv_isa isa) 2287ea103259SMichael Clark { 2288ea103259SMichael Clark rv_inst inst = dec->inst; 2289ea103259SMichael Clark rv_opcode op = rv_op_illegal; 2290ea103259SMichael Clark switch (((inst >> 0) & 0b11)) { 2291ea103259SMichael Clark case 0: 2292ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2293ea103259SMichael Clark case 0: op = rv_op_c_addi4spn; break; 2294ea103259SMichael Clark case 1: 2295ea103259SMichael Clark if (isa == rv128) { 2296ea103259SMichael Clark op = rv_op_c_lq; 2297ea103259SMichael Clark } else { 2298ea103259SMichael Clark op = rv_op_c_fld; 2299ea103259SMichael Clark } 2300ea103259SMichael Clark break; 2301ea103259SMichael Clark case 2: op = rv_op_c_lw; break; 2302ea103259SMichael Clark case 3: 2303ea103259SMichael Clark if (isa == rv32) { 2304ea103259SMichael Clark op = rv_op_c_flw; 2305ea103259SMichael Clark } else { 2306ea103259SMichael Clark op = rv_op_c_ld; 2307ea103259SMichael Clark } 2308ea103259SMichael Clark break; 2309ea103259SMichael Clark case 5: 2310ea103259SMichael Clark if (isa == rv128) { 2311ea103259SMichael Clark op = rv_op_c_sq; 2312ea103259SMichael Clark } else { 2313ea103259SMichael Clark op = rv_op_c_fsd; 2314ea103259SMichael Clark } 2315ea103259SMichael Clark break; 2316ea103259SMichael Clark case 6: op = rv_op_c_sw; break; 2317ea103259SMichael Clark case 7: 2318ea103259SMichael Clark if (isa == rv32) { 2319ea103259SMichael Clark op = rv_op_c_fsw; 2320ea103259SMichael Clark } else { 2321ea103259SMichael Clark op = rv_op_c_sd; 2322ea103259SMichael Clark } 2323ea103259SMichael Clark break; 2324ea103259SMichael Clark } 2325ea103259SMichael Clark break; 2326ea103259SMichael Clark case 1: 2327ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2328ea103259SMichael Clark case 0: 2329ea103259SMichael Clark switch (((inst >> 2) & 0b11111111111)) { 2330ea103259SMichael Clark case 0: op = rv_op_c_nop; break; 2331ea103259SMichael Clark default: op = rv_op_c_addi; break; 2332ea103259SMichael Clark } 2333ea103259SMichael Clark break; 2334ea103259SMichael Clark case 1: 2335ea103259SMichael Clark if (isa == rv32) { 2336ea103259SMichael Clark op = rv_op_c_jal; 2337ea103259SMichael Clark } else { 2338ea103259SMichael Clark op = rv_op_c_addiw; 2339ea103259SMichael Clark } 2340ea103259SMichael Clark break; 2341ea103259SMichael Clark case 2: op = rv_op_c_li; break; 2342ea103259SMichael Clark case 3: 2343ea103259SMichael Clark switch (((inst >> 7) & 0b11111)) { 2344ea103259SMichael Clark case 2: op = rv_op_c_addi16sp; break; 2345ea103259SMichael Clark default: op = rv_op_c_lui; break; 2346ea103259SMichael Clark } 2347ea103259SMichael Clark break; 2348ea103259SMichael Clark case 4: 2349ea103259SMichael Clark switch (((inst >> 10) & 0b11)) { 2350ea103259SMichael Clark case 0: 2351ea103259SMichael Clark op = rv_op_c_srli; 2352ea103259SMichael Clark break; 2353ea103259SMichael Clark case 1: 2354ea103259SMichael Clark op = rv_op_c_srai; 2355ea103259SMichael Clark break; 2356ea103259SMichael Clark case 2: op = rv_op_c_andi; break; 2357ea103259SMichael Clark case 3: 2358ea103259SMichael Clark switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) { 2359ea103259SMichael Clark case 0: op = rv_op_c_sub; break; 2360ea103259SMichael Clark case 1: op = rv_op_c_xor; break; 2361ea103259SMichael Clark case 2: op = rv_op_c_or; break; 2362ea103259SMichael Clark case 3: op = rv_op_c_and; break; 2363ea103259SMichael Clark case 4: op = rv_op_c_subw; break; 2364ea103259SMichael Clark case 5: op = rv_op_c_addw; break; 2365ea103259SMichael Clark } 2366ea103259SMichael Clark break; 2367ea103259SMichael Clark } 2368ea103259SMichael Clark break; 2369ea103259SMichael Clark case 5: op = rv_op_c_j; break; 2370ea103259SMichael Clark case 6: op = rv_op_c_beqz; break; 2371ea103259SMichael Clark case 7: op = rv_op_c_bnez; break; 2372ea103259SMichael Clark } 2373ea103259SMichael Clark break; 2374ea103259SMichael Clark case 2: 2375ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2376ea103259SMichael Clark case 0: 2377ea103259SMichael Clark op = rv_op_c_slli; 2378ea103259SMichael Clark break; 2379ea103259SMichael Clark case 1: 2380ea103259SMichael Clark if (isa == rv128) { 2381ea103259SMichael Clark op = rv_op_c_lqsp; 2382ea103259SMichael Clark } else { 2383ea103259SMichael Clark op = rv_op_c_fldsp; 2384ea103259SMichael Clark } 2385ea103259SMichael Clark break; 2386ea103259SMichael Clark case 2: op = rv_op_c_lwsp; break; 2387ea103259SMichael Clark case 3: 2388ea103259SMichael Clark if (isa == rv32) { 2389ea103259SMichael Clark op = rv_op_c_flwsp; 2390ea103259SMichael Clark } else { 2391ea103259SMichael Clark op = rv_op_c_ldsp; 2392ea103259SMichael Clark } 2393ea103259SMichael Clark break; 2394ea103259SMichael Clark case 4: 2395ea103259SMichael Clark switch (((inst >> 12) & 0b1)) { 2396ea103259SMichael Clark case 0: 2397ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2398ea103259SMichael Clark case 0: op = rv_op_c_jr; break; 2399ea103259SMichael Clark default: op = rv_op_c_mv; break; 2400ea103259SMichael Clark } 2401ea103259SMichael Clark break; 2402ea103259SMichael Clark case 1: 2403ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2404ea103259SMichael Clark case 0: 2405ea103259SMichael Clark switch (((inst >> 7) & 0b11111)) { 2406ea103259SMichael Clark case 0: op = rv_op_c_ebreak; break; 2407ea103259SMichael Clark default: op = rv_op_c_jalr; break; 2408ea103259SMichael Clark } 2409ea103259SMichael Clark break; 2410ea103259SMichael Clark default: op = rv_op_c_add; break; 2411ea103259SMichael Clark } 2412ea103259SMichael Clark break; 2413ea103259SMichael Clark } 2414ea103259SMichael Clark break; 2415ea103259SMichael Clark case 5: 2416ea103259SMichael Clark if (isa == rv128) { 2417ea103259SMichael Clark op = rv_op_c_sqsp; 2418ea103259SMichael Clark } else { 24191dc34be1SMichael Clark op = rv_op_c_fsdsp; 2420ea103259SMichael Clark } 24211dc34be1SMichael Clark break; 2422ea103259SMichael Clark case 6: op = rv_op_c_swsp; break; 2423ea103259SMichael Clark case 7: 2424ea103259SMichael Clark if (isa == rv32) { 2425ea103259SMichael Clark op = rv_op_c_fswsp; 2426ea103259SMichael Clark } else { 2427ea103259SMichael Clark op = rv_op_c_sdsp; 2428ea103259SMichael Clark } 2429ea103259SMichael Clark break; 2430ea103259SMichael Clark } 2431ea103259SMichael Clark break; 2432ea103259SMichael Clark case 3: 2433ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2434ea103259SMichael Clark case 0: 2435ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2436ea103259SMichael Clark case 0: op = rv_op_lb; break; 2437ea103259SMichael Clark case 1: op = rv_op_lh; break; 2438ea103259SMichael Clark case 2: op = rv_op_lw; break; 2439ea103259SMichael Clark case 3: op = rv_op_ld; break; 2440ea103259SMichael Clark case 4: op = rv_op_lbu; break; 2441ea103259SMichael Clark case 5: op = rv_op_lhu; break; 2442ea103259SMichael Clark case 6: op = rv_op_lwu; break; 2443ea103259SMichael Clark case 7: op = rv_op_ldu; break; 2444ea103259SMichael Clark } 2445ea103259SMichael Clark break; 2446ea103259SMichael Clark case 1: 2447ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 244807f4964dSYang Liu case 0: 244907f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 245007f4964dSYang Liu case 40: op = rv_op_vl1re8_v; break; 245107f4964dSYang Liu case 552: op = rv_op_vl2re8_v; break; 245207f4964dSYang Liu case 1576: op = rv_op_vl4re8_v; break; 245307f4964dSYang Liu case 3624: op = rv_op_vl8re8_v; break; 245407f4964dSYang Liu } 245507f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 245607f4964dSYang Liu case 0: 245707f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 245807f4964dSYang Liu case 0: op = rv_op_vle8_v; break; 245907f4964dSYang Liu case 11: op = rv_op_vlm_v; break; 246007f4964dSYang Liu case 16: op = rv_op_vle8ff_v; break; 246107f4964dSYang Liu } 246207f4964dSYang Liu break; 246307f4964dSYang Liu case 1: op = rv_op_vluxei8_v; break; 246407f4964dSYang Liu case 2: op = rv_op_vlse8_v; break; 246507f4964dSYang Liu case 3: op = rv_op_vloxei8_v; break; 246607f4964dSYang Liu } 246707f4964dSYang Liu break; 2468ea103259SMichael Clark case 2: op = rv_op_flw; break; 2469ea103259SMichael Clark case 3: op = rv_op_fld; break; 2470ea103259SMichael Clark case 4: op = rv_op_flq; break; 247107f4964dSYang Liu case 5: 247207f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 247307f4964dSYang Liu case 40: op = rv_op_vl1re16_v; break; 247407f4964dSYang Liu case 552: op = rv_op_vl2re16_v; break; 247507f4964dSYang Liu case 1576: op = rv_op_vl4re16_v; break; 247607f4964dSYang Liu case 3624: op = rv_op_vl8re16_v; break; 247707f4964dSYang Liu } 247807f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 247907f4964dSYang Liu case 0: 248007f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 248107f4964dSYang Liu case 0: op = rv_op_vle16_v; break; 248207f4964dSYang Liu case 16: op = rv_op_vle16ff_v; break; 248307f4964dSYang Liu } 248407f4964dSYang Liu break; 248507f4964dSYang Liu case 1: op = rv_op_vluxei16_v; break; 248607f4964dSYang Liu case 2: op = rv_op_vlse16_v; break; 248707f4964dSYang Liu case 3: op = rv_op_vloxei16_v; break; 248807f4964dSYang Liu } 248907f4964dSYang Liu break; 249007f4964dSYang Liu case 6: 249107f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 249207f4964dSYang Liu case 40: op = rv_op_vl1re32_v; break; 249307f4964dSYang Liu case 552: op = rv_op_vl2re32_v; break; 249407f4964dSYang Liu case 1576: op = rv_op_vl4re32_v; break; 249507f4964dSYang Liu case 3624: op = rv_op_vl8re32_v; break; 249607f4964dSYang Liu } 249707f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 249807f4964dSYang Liu case 0: 249907f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 250007f4964dSYang Liu case 0: op = rv_op_vle32_v; break; 250107f4964dSYang Liu case 16: op = rv_op_vle32ff_v; break; 250207f4964dSYang Liu } 250307f4964dSYang Liu break; 250407f4964dSYang Liu case 1: op = rv_op_vluxei32_v; break; 250507f4964dSYang Liu case 2: op = rv_op_vlse32_v; break; 250607f4964dSYang Liu case 3: op = rv_op_vloxei32_v; break; 250707f4964dSYang Liu } 250807f4964dSYang Liu break; 250907f4964dSYang Liu case 7: 251007f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 251107f4964dSYang Liu case 40: op = rv_op_vl1re64_v; break; 251207f4964dSYang Liu case 552: op = rv_op_vl2re64_v; break; 251307f4964dSYang Liu case 1576: op = rv_op_vl4re64_v; break; 251407f4964dSYang Liu case 3624: op = rv_op_vl8re64_v; break; 251507f4964dSYang Liu } 251607f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 251707f4964dSYang Liu case 0: 251807f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 251907f4964dSYang Liu case 0: op = rv_op_vle64_v; break; 252007f4964dSYang Liu case 16: op = rv_op_vle64ff_v; break; 252107f4964dSYang Liu } 252207f4964dSYang Liu break; 252307f4964dSYang Liu case 1: op = rv_op_vluxei64_v; break; 252407f4964dSYang Liu case 2: op = rv_op_vlse64_v; break; 252507f4964dSYang Liu case 3: op = rv_op_vloxei64_v; break; 252607f4964dSYang Liu } 252707f4964dSYang Liu break; 2528ea103259SMichael Clark } 2529ea103259SMichael Clark break; 2530ea103259SMichael Clark case 3: 2531ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2532ea103259SMichael Clark case 0: op = rv_op_fence; break; 2533ea103259SMichael Clark case 1: op = rv_op_fence_i; break; 2534ea103259SMichael Clark case 2: op = rv_op_lq; break; 2535ea103259SMichael Clark } 2536ea103259SMichael Clark break; 2537ea103259SMichael Clark case 4: 2538ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2539ea103259SMichael Clark case 0: op = rv_op_addi; break; 2540ea103259SMichael Clark case 1: 2541ea103259SMichael Clark switch (((inst >> 27) & 0b11111)) { 254202c1b569SPhilipp Tomsich case 0b00000: op = rv_op_slli; break; 25435748c886SWeiwei Li case 0b00001: 25445748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 25455748c886SWeiwei Li case 0b0001111: op = rv_op_zip; break; 25465748c886SWeiwei Li } 25475748c886SWeiwei Li break; 25485748c886SWeiwei Li case 0b00010: 25495748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 25505748c886SWeiwei Li case 0b0000000: op = rv_op_sha256sum0; break; 25515748c886SWeiwei Li case 0b0000001: op = rv_op_sha256sum1; break; 25525748c886SWeiwei Li case 0b0000010: op = rv_op_sha256sig0; break; 25535748c886SWeiwei Li case 0b0000011: op = rv_op_sha256sig1; break; 25545748c886SWeiwei Li case 0b0000100: op = rv_op_sha512sum0; break; 25555748c886SWeiwei Li case 0b0000101: op = rv_op_sha512sum1; break; 25565748c886SWeiwei Li case 0b0000110: op = rv_op_sha512sig0; break; 25575748c886SWeiwei Li case 0b0000111: op = rv_op_sha512sig1; break; 25585748c886SWeiwei Li case 0b0001000: op = rv_op_sm3p0; break; 25595748c886SWeiwei Li case 0b0001001: op = rv_op_sm3p1; break; 25605748c886SWeiwei Li } 25615748c886SWeiwei Li break; 256202c1b569SPhilipp Tomsich case 0b00101: op = rv_op_bseti; break; 25635748c886SWeiwei Li case 0b00110: 25645748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 25655748c886SWeiwei Li case 0b0000000: op = rv_op_aes64im; break; 25665748c886SWeiwei Li default: 25675748c886SWeiwei Li if (((inst >> 24) & 0b0111) == 0b001) { 25685748c886SWeiwei Li op = rv_op_aes64ks1i; 25695748c886SWeiwei Li } 25705748c886SWeiwei Li break; 25715748c886SWeiwei Li } 25725748c886SWeiwei Li break; 257302c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bclri; break; 257402c1b569SPhilipp Tomsich case 0b01101: op = rv_op_binvi; break; 257502c1b569SPhilipp Tomsich case 0b01100: 257602c1b569SPhilipp Tomsich switch (((inst >> 20) & 0b1111111)) { 257702c1b569SPhilipp Tomsich case 0b0000000: op = rv_op_clz; break; 257802c1b569SPhilipp Tomsich case 0b0000001: op = rv_op_ctz; break; 257902c1b569SPhilipp Tomsich case 0b0000010: op = rv_op_cpop; break; 258002c1b569SPhilipp Tomsich /* 0b0000011 */ 258102c1b569SPhilipp Tomsich case 0b0000100: op = rv_op_sext_b; break; 258202c1b569SPhilipp Tomsich case 0b0000101: op = rv_op_sext_h; break; 258302c1b569SPhilipp Tomsich } 258402c1b569SPhilipp Tomsich break; 2585ea103259SMichael Clark } 2586ea103259SMichael Clark break; 2587ea103259SMichael Clark case 2: op = rv_op_slti; break; 2588ea103259SMichael Clark case 3: op = rv_op_sltiu; break; 2589ea103259SMichael Clark case 4: op = rv_op_xori; break; 2590ea103259SMichael Clark case 5: 2591ea103259SMichael Clark switch (((inst >> 27) & 0b11111)) { 259202c1b569SPhilipp Tomsich case 0b00000: op = rv_op_srli; break; 25935748c886SWeiwei Li case 0b00001: 25945748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 25955748c886SWeiwei Li case 0b0001111: op = rv_op_unzip; break; 25965748c886SWeiwei Li } 25975748c886SWeiwei Li break; 259802c1b569SPhilipp Tomsich case 0b00101: op = rv_op_orc_b; break; 259902c1b569SPhilipp Tomsich case 0b01000: op = rv_op_srai; break; 260002c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bexti; break; 260102c1b569SPhilipp Tomsich case 0b01100: op = rv_op_rori; break; 260202c1b569SPhilipp Tomsich case 0b01101: 260302c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b1111111) { 26045748c886SWeiwei Li case 0b0011000: op = rv_op_rev8; break; 260502c1b569SPhilipp Tomsich case 0b0111000: op = rv_op_rev8; break; 26065748c886SWeiwei Li case 0b0000111: op = rv_op_brev8; break; 260702c1b569SPhilipp Tomsich } 260802c1b569SPhilipp Tomsich break; 2609ea103259SMichael Clark } 2610ea103259SMichael Clark break; 2611ea103259SMichael Clark case 6: op = rv_op_ori; break; 2612ea103259SMichael Clark case 7: op = rv_op_andi; break; 2613ea103259SMichael Clark } 2614ea103259SMichael Clark break; 2615ea103259SMichael Clark case 5: op = rv_op_auipc; break; 2616ea103259SMichael Clark case 6: 2617ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2618ea103259SMichael Clark case 0: op = rv_op_addiw; break; 2619ea103259SMichael Clark case 1: 2620ea103259SMichael Clark switch (((inst >> 25) & 0b1111111)) { 2621ea103259SMichael Clark case 0: op = rv_op_slliw; break; 262202c1b569SPhilipp Tomsich case 4: op = rv_op_slli_uw; break; 262302c1b569SPhilipp Tomsich case 48: 262402c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 262502c1b569SPhilipp Tomsich case 0b00000: op = rv_op_clzw; break; 262602c1b569SPhilipp Tomsich case 0b00001: op = rv_op_ctzw; break; 262702c1b569SPhilipp Tomsich case 0b00010: op = rv_op_cpopw; break; 262802c1b569SPhilipp Tomsich } 262902c1b569SPhilipp Tomsich break; 2630ea103259SMichael Clark } 2631ea103259SMichael Clark break; 2632ea103259SMichael Clark case 5: 2633ea103259SMichael Clark switch (((inst >> 25) & 0b1111111)) { 2634ea103259SMichael Clark case 0: op = rv_op_srliw; break; 2635ea103259SMichael Clark case 32: op = rv_op_sraiw; break; 263602c1b569SPhilipp Tomsich case 48: op = rv_op_roriw; break; 2637ea103259SMichael Clark } 2638ea103259SMichael Clark break; 2639ea103259SMichael Clark } 2640ea103259SMichael Clark break; 2641ea103259SMichael Clark case 8: 2642ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2643ea103259SMichael Clark case 0: op = rv_op_sb; break; 2644ea103259SMichael Clark case 1: op = rv_op_sh; break; 2645ea103259SMichael Clark case 2: op = rv_op_sw; break; 2646ea103259SMichael Clark case 3: op = rv_op_sd; break; 2647ea103259SMichael Clark case 4: op = rv_op_sq; break; 2648ea103259SMichael Clark } 2649ea103259SMichael Clark break; 2650ea103259SMichael Clark case 9: 2651ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 265207f4964dSYang Liu case 0: 265307f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 265407f4964dSYang Liu case 40: op = rv_op_vs1r_v; break; 265507f4964dSYang Liu case 552: op = rv_op_vs2r_v; break; 265607f4964dSYang Liu case 1576: op = rv_op_vs4r_v; break; 265707f4964dSYang Liu case 3624: op = rv_op_vs8r_v; break; 265807f4964dSYang Liu } 265907f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 266007f4964dSYang Liu case 0: 266107f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 266207f4964dSYang Liu case 0: op = rv_op_vse8_v; break; 266307f4964dSYang Liu case 11: op = rv_op_vsm_v; break; 266407f4964dSYang Liu } 266507f4964dSYang Liu break; 266607f4964dSYang Liu case 1: op = rv_op_vsuxei8_v; break; 266707f4964dSYang Liu case 2: op = rv_op_vsse8_v; break; 266807f4964dSYang Liu case 3: op = rv_op_vsoxei8_v; break; 266907f4964dSYang Liu } 267007f4964dSYang Liu break; 2671ea103259SMichael Clark case 2: op = rv_op_fsw; break; 2672ea103259SMichael Clark case 3: op = rv_op_fsd; break; 2673ea103259SMichael Clark case 4: op = rv_op_fsq; break; 267407f4964dSYang Liu case 5: 267507f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 267607f4964dSYang Liu case 0: 267707f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 267807f4964dSYang Liu case 0: op = rv_op_vse16_v; break; 267907f4964dSYang Liu } 268007f4964dSYang Liu break; 268107f4964dSYang Liu case 1: op = rv_op_vsuxei16_v; break; 268207f4964dSYang Liu case 2: op = rv_op_vsse16_v; break; 268307f4964dSYang Liu case 3: op = rv_op_vsoxei16_v; break; 268407f4964dSYang Liu } 268507f4964dSYang Liu break; 268607f4964dSYang Liu case 6: 268707f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 268807f4964dSYang Liu case 0: 268907f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 269007f4964dSYang Liu case 0: op = rv_op_vse32_v; break; 269107f4964dSYang Liu } 269207f4964dSYang Liu break; 269307f4964dSYang Liu case 1: op = rv_op_vsuxei32_v; break; 269407f4964dSYang Liu case 2: op = rv_op_vsse32_v; break; 269507f4964dSYang Liu case 3: op = rv_op_vsoxei32_v; break; 269607f4964dSYang Liu } 269707f4964dSYang Liu break; 269807f4964dSYang Liu case 7: 269907f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 270007f4964dSYang Liu case 0: 270107f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 270207f4964dSYang Liu case 0: op = rv_op_vse64_v; break; 270307f4964dSYang Liu } 270407f4964dSYang Liu break; 270507f4964dSYang Liu case 1: op = rv_op_vsuxei64_v; break; 270607f4964dSYang Liu case 2: op = rv_op_vsse64_v; break; 270707f4964dSYang Liu case 3: op = rv_op_vsoxei64_v; break; 270807f4964dSYang Liu } 270907f4964dSYang Liu break; 2710ea103259SMichael Clark } 2711ea103259SMichael Clark break; 2712ea103259SMichael Clark case 11: 2713ea103259SMichael Clark switch (((inst >> 24) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 2714ea103259SMichael Clark case 2: op = rv_op_amoadd_w; break; 2715ea103259SMichael Clark case 3: op = rv_op_amoadd_d; break; 2716ea103259SMichael Clark case 4: op = rv_op_amoadd_q; break; 2717ea103259SMichael Clark case 10: op = rv_op_amoswap_w; break; 2718ea103259SMichael Clark case 11: op = rv_op_amoswap_d; break; 2719ea103259SMichael Clark case 12: op = rv_op_amoswap_q; break; 2720ea103259SMichael Clark case 18: 2721ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2722ea103259SMichael Clark case 0: op = rv_op_lr_w; break; 2723ea103259SMichael Clark } 2724ea103259SMichael Clark break; 2725ea103259SMichael Clark case 19: 2726ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2727ea103259SMichael Clark case 0: op = rv_op_lr_d; break; 2728ea103259SMichael Clark } 2729ea103259SMichael Clark break; 2730ea103259SMichael Clark case 20: 2731ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2732ea103259SMichael Clark case 0: op = rv_op_lr_q; break; 2733ea103259SMichael Clark } 2734ea103259SMichael Clark break; 2735ea103259SMichael Clark case 26: op = rv_op_sc_w; break; 2736ea103259SMichael Clark case 27: op = rv_op_sc_d; break; 2737ea103259SMichael Clark case 28: op = rv_op_sc_q; break; 2738ea103259SMichael Clark case 34: op = rv_op_amoxor_w; break; 2739ea103259SMichael Clark case 35: op = rv_op_amoxor_d; break; 2740ea103259SMichael Clark case 36: op = rv_op_amoxor_q; break; 2741ea103259SMichael Clark case 66: op = rv_op_amoor_w; break; 2742ea103259SMichael Clark case 67: op = rv_op_amoor_d; break; 2743ea103259SMichael Clark case 68: op = rv_op_amoor_q; break; 2744ea103259SMichael Clark case 98: op = rv_op_amoand_w; break; 2745ea103259SMichael Clark case 99: op = rv_op_amoand_d; break; 2746ea103259SMichael Clark case 100: op = rv_op_amoand_q; break; 2747ea103259SMichael Clark case 130: op = rv_op_amomin_w; break; 2748ea103259SMichael Clark case 131: op = rv_op_amomin_d; break; 2749ea103259SMichael Clark case 132: op = rv_op_amomin_q; break; 2750ea103259SMichael Clark case 162: op = rv_op_amomax_w; break; 2751ea103259SMichael Clark case 163: op = rv_op_amomax_d; break; 2752ea103259SMichael Clark case 164: op = rv_op_amomax_q; break; 2753ea103259SMichael Clark case 194: op = rv_op_amominu_w; break; 2754ea103259SMichael Clark case 195: op = rv_op_amominu_d; break; 2755ea103259SMichael Clark case 196: op = rv_op_amominu_q; break; 2756ea103259SMichael Clark case 226: op = rv_op_amomaxu_w; break; 2757ea103259SMichael Clark case 227: op = rv_op_amomaxu_d; break; 2758ea103259SMichael Clark case 228: op = rv_op_amomaxu_q; break; 2759ea103259SMichael Clark } 2760ea103259SMichael Clark break; 2761ea103259SMichael Clark case 12: 2762ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 2763ea103259SMichael Clark case 0: op = rv_op_add; break; 2764ea103259SMichael Clark case 1: op = rv_op_sll; break; 2765ea103259SMichael Clark case 2: op = rv_op_slt; break; 2766ea103259SMichael Clark case 3: op = rv_op_sltu; break; 2767ea103259SMichael Clark case 4: op = rv_op_xor; break; 2768ea103259SMichael Clark case 5: op = rv_op_srl; break; 2769ea103259SMichael Clark case 6: op = rv_op_or; break; 2770ea103259SMichael Clark case 7: op = rv_op_and; break; 2771ea103259SMichael Clark case 8: op = rv_op_mul; break; 2772ea103259SMichael Clark case 9: op = rv_op_mulh; break; 2773ea103259SMichael Clark case 10: op = rv_op_mulhsu; break; 2774ea103259SMichael Clark case 11: op = rv_op_mulhu; break; 2775ea103259SMichael Clark case 12: op = rv_op_div; break; 2776ea103259SMichael Clark case 13: op = rv_op_divu; break; 2777ea103259SMichael Clark case 14: op = rv_op_rem; break; 2778ea103259SMichael Clark case 15: op = rv_op_remu; break; 277902c1b569SPhilipp Tomsich case 36: 278002c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 278102c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 27825748c886SWeiwei Li default: op = rv_op_pack; break; 278302c1b569SPhilipp Tomsich } 278402c1b569SPhilipp Tomsich break; 27855748c886SWeiwei Li case 39: op = rv_op_packh; break; 27865748c886SWeiwei Li 278702c1b569SPhilipp Tomsich case 41: op = rv_op_clmul; break; 278802c1b569SPhilipp Tomsich case 42: op = rv_op_clmulr; break; 278902c1b569SPhilipp Tomsich case 43: op = rv_op_clmulh; break; 279002c1b569SPhilipp Tomsich case 44: op = rv_op_min; break; 279102c1b569SPhilipp Tomsich case 45: op = rv_op_minu; break; 279202c1b569SPhilipp Tomsich case 46: op = rv_op_max; break; 279302c1b569SPhilipp Tomsich case 47: op = rv_op_maxu; break; 279402c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add; break; 279502c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add; break; 279602c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add; break; 279702c1b569SPhilipp Tomsich case 161: op = rv_op_bset; break; 27985748c886SWeiwei Li case 162: op = rv_op_xperm4; break; 27995748c886SWeiwei Li case 164: op = rv_op_xperm8; break; 28005748c886SWeiwei Li case 200: op = rv_op_aes64es; break; 28015748c886SWeiwei Li case 216: op = rv_op_aes64esm; break; 28025748c886SWeiwei Li case 232: op = rv_op_aes64ds; break; 28035748c886SWeiwei Li case 248: op = rv_op_aes64dsm; break; 2804ea103259SMichael Clark case 256: op = rv_op_sub; break; 280502c1b569SPhilipp Tomsich case 260: op = rv_op_xnor; break; 2806ea103259SMichael Clark case 261: op = rv_op_sra; break; 280702c1b569SPhilipp Tomsich case 262: op = rv_op_orn; break; 280802c1b569SPhilipp Tomsich case 263: op = rv_op_andn; break; 280902c1b569SPhilipp Tomsich case 289: op = rv_op_bclr; break; 281002c1b569SPhilipp Tomsich case 293: op = rv_op_bext; break; 28115748c886SWeiwei Li case 320: op = rv_op_sha512sum0r; break; 28125748c886SWeiwei Li case 328: op = rv_op_sha512sum1r; break; 28135748c886SWeiwei Li case 336: op = rv_op_sha512sig0l; break; 28145748c886SWeiwei Li case 344: op = rv_op_sha512sig1l; break; 28155748c886SWeiwei Li case 368: op = rv_op_sha512sig0h; break; 28165748c886SWeiwei Li case 376: op = rv_op_sha512sig1h; break; 281702c1b569SPhilipp Tomsich case 385: op = rv_op_rol; break; 28185748c886SWeiwei Li case 389: op = rv_op_ror; break; 281902c1b569SPhilipp Tomsich case 417: op = rv_op_binv; break; 28205748c886SWeiwei Li case 504: op = rv_op_aes64ks2; break; 28215748c886SWeiwei Li } 28225748c886SWeiwei Li switch ((inst >> 25) & 0b0011111) { 28235748c886SWeiwei Li case 17: op = rv_op_aes32esi; break; 28245748c886SWeiwei Li case 19: op = rv_op_aes32esmi; break; 28255748c886SWeiwei Li case 21: op = rv_op_aes32dsi; break; 28265748c886SWeiwei Li case 23: op = rv_op_aes32dsmi; break; 28275748c886SWeiwei Li case 24: op = rv_op_sm4ed; break; 28285748c886SWeiwei Li case 26: op = rv_op_sm4ks; break; 2829ea103259SMichael Clark } 2830ea103259SMichael Clark break; 2831ea103259SMichael Clark case 13: op = rv_op_lui; break; 2832ea103259SMichael Clark case 14: 2833ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 2834ea103259SMichael Clark case 0: op = rv_op_addw; break; 2835ea103259SMichael Clark case 1: op = rv_op_sllw; break; 2836ea103259SMichael Clark case 5: op = rv_op_srlw; break; 2837ea103259SMichael Clark case 8: op = rv_op_mulw; break; 2838ea103259SMichael Clark case 12: op = rv_op_divw; break; 2839ea103259SMichael Clark case 13: op = rv_op_divuw; break; 2840ea103259SMichael Clark case 14: op = rv_op_remw; break; 2841ea103259SMichael Clark case 15: op = rv_op_remuw; break; 284202c1b569SPhilipp Tomsich case 32: op = rv_op_add_uw; break; 284302c1b569SPhilipp Tomsich case 36: 284402c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 284502c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 28465748c886SWeiwei Li default: op = rv_op_packw; break; 284702c1b569SPhilipp Tomsich } 284802c1b569SPhilipp Tomsich break; 284902c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add_uw; break; 285002c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add_uw; break; 285102c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add_uw; break; 2852ea103259SMichael Clark case 256: op = rv_op_subw; break; 2853ea103259SMichael Clark case 261: op = rv_op_sraw; break; 285402c1b569SPhilipp Tomsich case 385: op = rv_op_rolw; break; 285502c1b569SPhilipp Tomsich case 389: op = rv_op_rorw; break; 2856ea103259SMichael Clark } 2857ea103259SMichael Clark break; 2858ea103259SMichael Clark case 16: 2859ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2860ea103259SMichael Clark case 0: op = rv_op_fmadd_s; break; 2861ea103259SMichael Clark case 1: op = rv_op_fmadd_d; break; 2862ea103259SMichael Clark case 3: op = rv_op_fmadd_q; break; 2863ea103259SMichael Clark } 2864ea103259SMichael Clark break; 2865ea103259SMichael Clark case 17: 2866ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2867ea103259SMichael Clark case 0: op = rv_op_fmsub_s; break; 2868ea103259SMichael Clark case 1: op = rv_op_fmsub_d; break; 2869ea103259SMichael Clark case 3: op = rv_op_fmsub_q; break; 2870ea103259SMichael Clark } 2871ea103259SMichael Clark break; 2872ea103259SMichael Clark case 18: 2873ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2874ea103259SMichael Clark case 0: op = rv_op_fnmsub_s; break; 2875ea103259SMichael Clark case 1: op = rv_op_fnmsub_d; break; 2876ea103259SMichael Clark case 3: op = rv_op_fnmsub_q; break; 2877ea103259SMichael Clark } 2878ea103259SMichael Clark break; 2879ea103259SMichael Clark case 19: 2880ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2881ea103259SMichael Clark case 0: op = rv_op_fnmadd_s; break; 2882ea103259SMichael Clark case 1: op = rv_op_fnmadd_d; break; 2883ea103259SMichael Clark case 3: op = rv_op_fnmadd_q; break; 2884ea103259SMichael Clark } 2885ea103259SMichael Clark break; 2886ea103259SMichael Clark case 20: 2887ea103259SMichael Clark switch (((inst >> 25) & 0b1111111)) { 2888ea103259SMichael Clark case 0: op = rv_op_fadd_s; break; 2889ea103259SMichael Clark case 1: op = rv_op_fadd_d; break; 2890ea103259SMichael Clark case 3: op = rv_op_fadd_q; break; 2891ea103259SMichael Clark case 4: op = rv_op_fsub_s; break; 2892ea103259SMichael Clark case 5: op = rv_op_fsub_d; break; 2893ea103259SMichael Clark case 7: op = rv_op_fsub_q; break; 2894ea103259SMichael Clark case 8: op = rv_op_fmul_s; break; 2895ea103259SMichael Clark case 9: op = rv_op_fmul_d; break; 2896ea103259SMichael Clark case 11: op = rv_op_fmul_q; break; 2897ea103259SMichael Clark case 12: op = rv_op_fdiv_s; break; 2898ea103259SMichael Clark case 13: op = rv_op_fdiv_d; break; 2899ea103259SMichael Clark case 15: op = rv_op_fdiv_q; break; 2900ea103259SMichael Clark case 16: 2901ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2902ea103259SMichael Clark case 0: op = rv_op_fsgnj_s; break; 2903ea103259SMichael Clark case 1: op = rv_op_fsgnjn_s; break; 2904ea103259SMichael Clark case 2: op = rv_op_fsgnjx_s; break; 2905ea103259SMichael Clark } 2906ea103259SMichael Clark break; 2907ea103259SMichael Clark case 17: 2908ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2909ea103259SMichael Clark case 0: op = rv_op_fsgnj_d; break; 2910ea103259SMichael Clark case 1: op = rv_op_fsgnjn_d; break; 2911ea103259SMichael Clark case 2: op = rv_op_fsgnjx_d; break; 2912ea103259SMichael Clark } 2913ea103259SMichael Clark break; 2914ea103259SMichael Clark case 19: 2915ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2916ea103259SMichael Clark case 0: op = rv_op_fsgnj_q; break; 2917ea103259SMichael Clark case 1: op = rv_op_fsgnjn_q; break; 2918ea103259SMichael Clark case 2: op = rv_op_fsgnjx_q; break; 2919ea103259SMichael Clark } 2920ea103259SMichael Clark break; 2921ea103259SMichael Clark case 20: 2922ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2923ea103259SMichael Clark case 0: op = rv_op_fmin_s; break; 2924ea103259SMichael Clark case 1: op = rv_op_fmax_s; break; 2925ea103259SMichael Clark } 2926ea103259SMichael Clark break; 2927ea103259SMichael Clark case 21: 2928ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2929ea103259SMichael Clark case 0: op = rv_op_fmin_d; break; 2930ea103259SMichael Clark case 1: op = rv_op_fmax_d; break; 2931ea103259SMichael Clark } 2932ea103259SMichael Clark break; 2933ea103259SMichael Clark case 23: 2934ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2935ea103259SMichael Clark case 0: op = rv_op_fmin_q; break; 2936ea103259SMichael Clark case 1: op = rv_op_fmax_q; break; 2937ea103259SMichael Clark } 2938ea103259SMichael Clark break; 2939ea103259SMichael Clark case 32: 2940ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2941ea103259SMichael Clark case 1: op = rv_op_fcvt_s_d; break; 2942ea103259SMichael Clark case 3: op = rv_op_fcvt_s_q; break; 2943ea103259SMichael Clark } 2944ea103259SMichael Clark break; 2945ea103259SMichael Clark case 33: 2946ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2947ea103259SMichael Clark case 0: op = rv_op_fcvt_d_s; break; 2948ea103259SMichael Clark case 3: op = rv_op_fcvt_d_q; break; 2949ea103259SMichael Clark } 2950ea103259SMichael Clark break; 2951ea103259SMichael Clark case 35: 2952ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2953ea103259SMichael Clark case 0: op = rv_op_fcvt_q_s; break; 2954ea103259SMichael Clark case 1: op = rv_op_fcvt_q_d; break; 2955ea103259SMichael Clark } 2956ea103259SMichael Clark break; 2957ea103259SMichael Clark case 44: 2958ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2959ea103259SMichael Clark case 0: op = rv_op_fsqrt_s; break; 2960ea103259SMichael Clark } 2961ea103259SMichael Clark break; 2962ea103259SMichael Clark case 45: 2963ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2964ea103259SMichael Clark case 0: op = rv_op_fsqrt_d; break; 2965ea103259SMichael Clark } 2966ea103259SMichael Clark break; 2967ea103259SMichael Clark case 47: 2968ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2969ea103259SMichael Clark case 0: op = rv_op_fsqrt_q; break; 2970ea103259SMichael Clark } 2971ea103259SMichael Clark break; 2972ea103259SMichael Clark case 80: 2973ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2974ea103259SMichael Clark case 0: op = rv_op_fle_s; break; 2975ea103259SMichael Clark case 1: op = rv_op_flt_s; break; 2976ea103259SMichael Clark case 2: op = rv_op_feq_s; break; 2977ea103259SMichael Clark } 2978ea103259SMichael Clark break; 2979ea103259SMichael Clark case 81: 2980ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2981ea103259SMichael Clark case 0: op = rv_op_fle_d; break; 2982ea103259SMichael Clark case 1: op = rv_op_flt_d; break; 2983ea103259SMichael Clark case 2: op = rv_op_feq_d; break; 2984ea103259SMichael Clark } 2985ea103259SMichael Clark break; 2986ea103259SMichael Clark case 83: 2987ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2988ea103259SMichael Clark case 0: op = rv_op_fle_q; break; 2989ea103259SMichael Clark case 1: op = rv_op_flt_q; break; 2990ea103259SMichael Clark case 2: op = rv_op_feq_q; break; 2991ea103259SMichael Clark } 2992ea103259SMichael Clark break; 2993ea103259SMichael Clark case 96: 2994ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2995ea103259SMichael Clark case 0: op = rv_op_fcvt_w_s; break; 2996ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_s; break; 2997ea103259SMichael Clark case 2: op = rv_op_fcvt_l_s; break; 2998ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_s; break; 2999ea103259SMichael Clark } 3000ea103259SMichael Clark break; 3001ea103259SMichael Clark case 97: 3002ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3003ea103259SMichael Clark case 0: op = rv_op_fcvt_w_d; break; 3004ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_d; break; 3005ea103259SMichael Clark case 2: op = rv_op_fcvt_l_d; break; 3006ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_d; break; 3007ea103259SMichael Clark } 3008ea103259SMichael Clark break; 3009ea103259SMichael Clark case 99: 3010ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3011ea103259SMichael Clark case 0: op = rv_op_fcvt_w_q; break; 3012ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_q; break; 3013ea103259SMichael Clark case 2: op = rv_op_fcvt_l_q; break; 3014ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_q; break; 3015ea103259SMichael Clark } 3016ea103259SMichael Clark break; 3017ea103259SMichael Clark case 104: 3018ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3019ea103259SMichael Clark case 0: op = rv_op_fcvt_s_w; break; 3020ea103259SMichael Clark case 1: op = rv_op_fcvt_s_wu; break; 3021ea103259SMichael Clark case 2: op = rv_op_fcvt_s_l; break; 3022ea103259SMichael Clark case 3: op = rv_op_fcvt_s_lu; break; 3023ea103259SMichael Clark } 3024ea103259SMichael Clark break; 3025ea103259SMichael Clark case 105: 3026ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3027ea103259SMichael Clark case 0: op = rv_op_fcvt_d_w; break; 3028ea103259SMichael Clark case 1: op = rv_op_fcvt_d_wu; break; 3029ea103259SMichael Clark case 2: op = rv_op_fcvt_d_l; break; 3030ea103259SMichael Clark case 3: op = rv_op_fcvt_d_lu; break; 3031ea103259SMichael Clark } 3032ea103259SMichael Clark break; 3033ea103259SMichael Clark case 107: 3034ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3035ea103259SMichael Clark case 0: op = rv_op_fcvt_q_w; break; 3036ea103259SMichael Clark case 1: op = rv_op_fcvt_q_wu; break; 3037ea103259SMichael Clark case 2: op = rv_op_fcvt_q_l; break; 3038ea103259SMichael Clark case 3: op = rv_op_fcvt_q_lu; break; 3039ea103259SMichael Clark } 3040ea103259SMichael Clark break; 3041ea103259SMichael Clark case 112: 3042ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3043ea103259SMichael Clark case 0: op = rv_op_fmv_x_s; break; 3044ea103259SMichael Clark case 1: op = rv_op_fclass_s; break; 3045ea103259SMichael Clark } 3046ea103259SMichael Clark break; 3047ea103259SMichael Clark case 113: 3048ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3049ea103259SMichael Clark case 0: op = rv_op_fmv_x_d; break; 3050ea103259SMichael Clark case 1: op = rv_op_fclass_d; break; 3051ea103259SMichael Clark } 3052ea103259SMichael Clark break; 3053ea103259SMichael Clark case 115: 3054ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3055ea103259SMichael Clark case 0: op = rv_op_fmv_x_q; break; 3056ea103259SMichael Clark case 1: op = rv_op_fclass_q; break; 3057ea103259SMichael Clark } 3058ea103259SMichael Clark break; 3059ea103259SMichael Clark case 120: 3060ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3061ea103259SMichael Clark case 0: op = rv_op_fmv_s_x; break; 3062ea103259SMichael Clark } 3063ea103259SMichael Clark break; 3064ea103259SMichael Clark case 121: 3065ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3066ea103259SMichael Clark case 0: op = rv_op_fmv_d_x; break; 3067ea103259SMichael Clark } 3068ea103259SMichael Clark break; 3069ea103259SMichael Clark case 123: 3070ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3071ea103259SMichael Clark case 0: op = rv_op_fmv_q_x; break; 3072ea103259SMichael Clark } 3073ea103259SMichael Clark break; 3074ea103259SMichael Clark } 3075ea103259SMichael Clark break; 307607f4964dSYang Liu case 21: 307707f4964dSYang Liu switch (((inst >> 12) & 0b111)) { 307807f4964dSYang Liu case 0: 307907f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 308007f4964dSYang Liu case 0: op = rv_op_vadd_vv; break; 308107f4964dSYang Liu case 2: op = rv_op_vsub_vv; break; 308207f4964dSYang Liu case 4: op = rv_op_vminu_vv; break; 308307f4964dSYang Liu case 5: op = rv_op_vmin_vv; break; 308407f4964dSYang Liu case 6: op = rv_op_vmaxu_vv; break; 308507f4964dSYang Liu case 7: op = rv_op_vmax_vv; break; 308607f4964dSYang Liu case 9: op = rv_op_vand_vv; break; 308707f4964dSYang Liu case 10: op = rv_op_vor_vv; break; 308807f4964dSYang Liu case 11: op = rv_op_vxor_vv; break; 308907f4964dSYang Liu case 12: op = rv_op_vrgather_vv; break; 309007f4964dSYang Liu case 14: op = rv_op_vrgatherei16_vv; break; 309107f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vvm; break; 309207f4964dSYang Liu case 17: op = rv_op_vmadc_vvm; break; 309307f4964dSYang Liu case 18: if (((inst >> 25) & 1) == 0) op = rv_op_vsbc_vvm; break; 309407f4964dSYang Liu case 19: op = rv_op_vmsbc_vvm; break; 309507f4964dSYang Liu case 23: 309607f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 309707f4964dSYang Liu op = rv_op_vmv_v_v; 309807f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 309907f4964dSYang Liu op = rv_op_vmerge_vvm; 310007f4964dSYang Liu break; 310107f4964dSYang Liu case 24: op = rv_op_vmseq_vv; break; 310207f4964dSYang Liu case 25: op = rv_op_vmsne_vv; break; 310307f4964dSYang Liu case 26: op = rv_op_vmsltu_vv; break; 310407f4964dSYang Liu case 27: op = rv_op_vmslt_vv; break; 310507f4964dSYang Liu case 28: op = rv_op_vmsleu_vv; break; 310607f4964dSYang Liu case 29: op = rv_op_vmsle_vv; break; 310707f4964dSYang Liu case 32: op = rv_op_vsaddu_vv; break; 310807f4964dSYang Liu case 33: op = rv_op_vsadd_vv; break; 310907f4964dSYang Liu case 34: op = rv_op_vssubu_vv; break; 311007f4964dSYang Liu case 35: op = rv_op_vssub_vv; break; 311107f4964dSYang Liu case 37: op = rv_op_vsll_vv; break; 311207f4964dSYang Liu case 39: op = rv_op_vsmul_vv; break; 311307f4964dSYang Liu case 40: op = rv_op_vsrl_vv; break; 311407f4964dSYang Liu case 41: op = rv_op_vsra_vv; break; 311507f4964dSYang Liu case 42: op = rv_op_vssrl_vv; break; 311607f4964dSYang Liu case 43: op = rv_op_vssra_vv; break; 311707f4964dSYang Liu case 44: op = rv_op_vnsrl_wv; break; 311807f4964dSYang Liu case 45: op = rv_op_vnsra_wv; break; 311907f4964dSYang Liu case 46: op = rv_op_vnclipu_wv; break; 312007f4964dSYang Liu case 47: op = rv_op_vnclip_wv; break; 312107f4964dSYang Liu case 48: op = rv_op_vwredsumu_vs; break; 312207f4964dSYang Liu case 49: op = rv_op_vwredsum_vs; break; 312307f4964dSYang Liu } 312407f4964dSYang Liu break; 312507f4964dSYang Liu case 1: 312607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 312707f4964dSYang Liu case 0: op = rv_op_vfadd_vv; break; 312807f4964dSYang Liu case 1: op = rv_op_vfredusum_vs; break; 312907f4964dSYang Liu case 2: op = rv_op_vfsub_vv; break; 313007f4964dSYang Liu case 3: op = rv_op_vfredosum_vs; break; 313107f4964dSYang Liu case 4: op = rv_op_vfmin_vv; break; 313207f4964dSYang Liu case 5: op = rv_op_vfredmin_vs; break; 313307f4964dSYang Liu case 6: op = rv_op_vfmax_vv; break; 313407f4964dSYang Liu case 7: op = rv_op_vfredmax_vs; break; 313507f4964dSYang Liu case 8: op = rv_op_vfsgnj_vv; break; 313607f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vv; break; 313707f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vv; break; 313807f4964dSYang Liu case 16: 313907f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 314007f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break; 314107f4964dSYang Liu } 314207f4964dSYang Liu break; 314307f4964dSYang Liu case 18: 314407f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 314507f4964dSYang Liu case 0: op = rv_op_vfcvt_xu_f_v; break; 314607f4964dSYang Liu case 1: op = rv_op_vfcvt_x_f_v; break; 314707f4964dSYang Liu case 2: op = rv_op_vfcvt_f_xu_v; break; 314807f4964dSYang Liu case 3: op = rv_op_vfcvt_f_x_v; break; 314907f4964dSYang Liu case 6: op = rv_op_vfcvt_rtz_xu_f_v; break; 315007f4964dSYang Liu case 7: op = rv_op_vfcvt_rtz_x_f_v; break; 315107f4964dSYang Liu case 8: op = rv_op_vfwcvt_xu_f_v; break; 315207f4964dSYang Liu case 9: op = rv_op_vfwcvt_x_f_v; break; 315307f4964dSYang Liu case 10: op = rv_op_vfwcvt_f_xu_v; break; 315407f4964dSYang Liu case 11: op = rv_op_vfwcvt_f_x_v; break; 315507f4964dSYang Liu case 12: op = rv_op_vfwcvt_f_f_v; break; 315607f4964dSYang Liu case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break; 315707f4964dSYang Liu case 15: op = rv_op_vfwcvt_rtz_x_f_v; break; 315807f4964dSYang Liu case 16: op = rv_op_vfncvt_xu_f_w; break; 315907f4964dSYang Liu case 17: op = rv_op_vfncvt_x_f_w; break; 316007f4964dSYang Liu case 18: op = rv_op_vfncvt_f_xu_w; break; 316107f4964dSYang Liu case 19: op = rv_op_vfncvt_f_x_w; break; 316207f4964dSYang Liu case 20: op = rv_op_vfncvt_f_f_w; break; 316307f4964dSYang Liu case 21: op = rv_op_vfncvt_rod_f_f_w; break; 316407f4964dSYang Liu case 22: op = rv_op_vfncvt_rtz_xu_f_w; break; 316507f4964dSYang Liu case 23: op = rv_op_vfncvt_rtz_x_f_w; break; 316607f4964dSYang Liu } 316707f4964dSYang Liu break; 316807f4964dSYang Liu case 19: 316907f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 317007f4964dSYang Liu case 0: op = rv_op_vfsqrt_v; break; 317107f4964dSYang Liu case 4: op = rv_op_vfrsqrt7_v; break; 317207f4964dSYang Liu case 5: op = rv_op_vfrec7_v; break; 317307f4964dSYang Liu case 16: op = rv_op_vfclass_v; break; 317407f4964dSYang Liu } 317507f4964dSYang Liu break; 317607f4964dSYang Liu case 24: op = rv_op_vmfeq_vv; break; 317707f4964dSYang Liu case 25: op = rv_op_vmfle_vv; break; 317807f4964dSYang Liu case 27: op = rv_op_vmflt_vv; break; 317907f4964dSYang Liu case 28: op = rv_op_vmfne_vv; break; 318007f4964dSYang Liu case 32: op = rv_op_vfdiv_vv; break; 318107f4964dSYang Liu case 36: op = rv_op_vfmul_vv; break; 318207f4964dSYang Liu case 40: op = rv_op_vfmadd_vv; break; 318307f4964dSYang Liu case 41: op = rv_op_vfnmadd_vv; break; 318407f4964dSYang Liu case 42: op = rv_op_vfmsub_vv; break; 318507f4964dSYang Liu case 43: op = rv_op_vfnmsub_vv; break; 318607f4964dSYang Liu case 44: op = rv_op_vfmacc_vv; break; 318707f4964dSYang Liu case 45: op = rv_op_vfnmacc_vv; break; 318807f4964dSYang Liu case 46: op = rv_op_vfmsac_vv; break; 318907f4964dSYang Liu case 47: op = rv_op_vfnmsac_vv; break; 319007f4964dSYang Liu case 48: op = rv_op_vfwadd_vv; break; 319107f4964dSYang Liu case 49: op = rv_op_vfwredusum_vs; break; 319207f4964dSYang Liu case 50: op = rv_op_vfwsub_vv; break; 319307f4964dSYang Liu case 51: op = rv_op_vfwredosum_vs; break; 319407f4964dSYang Liu case 52: op = rv_op_vfwadd_wv; break; 319507f4964dSYang Liu case 54: op = rv_op_vfwsub_wv; break; 319607f4964dSYang Liu case 56: op = rv_op_vfwmul_vv; break; 319707f4964dSYang Liu case 60: op = rv_op_vfwmacc_vv; break; 319807f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vv; break; 319907f4964dSYang Liu case 62: op = rv_op_vfwmsac_vv; break; 320007f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vv; break; 320107f4964dSYang Liu } 320207f4964dSYang Liu break; 320307f4964dSYang Liu case 2: 320407f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 320507f4964dSYang Liu case 0: op = rv_op_vredsum_vs; break; 320607f4964dSYang Liu case 1: op = rv_op_vredand_vs; break; 320707f4964dSYang Liu case 2: op = rv_op_vredor_vs; break; 320807f4964dSYang Liu case 3: op = rv_op_vredxor_vs; break; 320907f4964dSYang Liu case 4: op = rv_op_vredminu_vs; break; 321007f4964dSYang Liu case 5: op = rv_op_vredmin_vs; break; 321107f4964dSYang Liu case 6: op = rv_op_vredmaxu_vs; break; 321207f4964dSYang Liu case 7: op = rv_op_vredmax_vs; break; 321307f4964dSYang Liu case 8: op = rv_op_vaaddu_vv; break; 321407f4964dSYang Liu case 9: op = rv_op_vaadd_vv; break; 321507f4964dSYang Liu case 10: op = rv_op_vasubu_vv; break; 321607f4964dSYang Liu case 11: op = rv_op_vasub_vv; break; 321707f4964dSYang Liu case 16: 321807f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 321907f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break; 322007f4964dSYang Liu case 16: op = rv_op_vcpop_m; break; 322107f4964dSYang Liu case 17: op = rv_op_vfirst_m; break; 322207f4964dSYang Liu } 322307f4964dSYang Liu break; 322407f4964dSYang Liu case 18: 322507f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 322607f4964dSYang Liu case 2: op = rv_op_vzext_vf8; break; 322707f4964dSYang Liu case 3: op = rv_op_vsext_vf8; break; 322807f4964dSYang Liu case 4: op = rv_op_vzext_vf4; break; 322907f4964dSYang Liu case 5: op = rv_op_vsext_vf4; break; 323007f4964dSYang Liu case 6: op = rv_op_vzext_vf2; break; 323107f4964dSYang Liu case 7: op = rv_op_vsext_vf2; break; 323207f4964dSYang Liu } 323307f4964dSYang Liu break; 323407f4964dSYang Liu case 20: 323507f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 323607f4964dSYang Liu case 1: op = rv_op_vmsbf_m; break; 323707f4964dSYang Liu case 2: op = rv_op_vmsof_m; break; 323807f4964dSYang Liu case 3: op = rv_op_vmsif_m; break; 323907f4964dSYang Liu case 16: op = rv_op_viota_m; break; 324007f4964dSYang Liu case 17: if (((inst >> 20) & 0b11111) == 0) op = rv_op_vid_v; break; 324107f4964dSYang Liu } 324207f4964dSYang Liu break; 324307f4964dSYang Liu case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break; 324407f4964dSYang Liu case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break; 324507f4964dSYang Liu case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break; 324607f4964dSYang Liu case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break; 324707f4964dSYang Liu case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break; 324807f4964dSYang Liu case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break; 324907f4964dSYang Liu case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break; 325007f4964dSYang Liu case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break; 325107f4964dSYang Liu case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break; 325207f4964dSYang Liu case 32: op = rv_op_vdivu_vv; break; 325307f4964dSYang Liu case 33: op = rv_op_vdiv_vv; break; 325407f4964dSYang Liu case 34: op = rv_op_vremu_vv; break; 325507f4964dSYang Liu case 35: op = rv_op_vrem_vv; break; 325607f4964dSYang Liu case 36: op = rv_op_vmulhu_vv; break; 325707f4964dSYang Liu case 37: op = rv_op_vmul_vv; break; 325807f4964dSYang Liu case 38: op = rv_op_vmulhsu_vv; break; 325907f4964dSYang Liu case 39: op = rv_op_vmulh_vv; break; 326007f4964dSYang Liu case 41: op = rv_op_vmadd_vv; break; 326107f4964dSYang Liu case 43: op = rv_op_vnmsub_vv; break; 326207f4964dSYang Liu case 45: op = rv_op_vmacc_vv; break; 326307f4964dSYang Liu case 47: op = rv_op_vnmsac_vv; break; 326407f4964dSYang Liu case 48: op = rv_op_vwaddu_vv; break; 326507f4964dSYang Liu case 49: op = rv_op_vwadd_vv; break; 326607f4964dSYang Liu case 50: op = rv_op_vwsubu_vv; break; 326707f4964dSYang Liu case 51: op = rv_op_vwsub_vv; break; 326807f4964dSYang Liu case 52: op = rv_op_vwaddu_wv; break; 326907f4964dSYang Liu case 53: op = rv_op_vwadd_wv; break; 327007f4964dSYang Liu case 54: op = rv_op_vwsubu_wv; break; 327107f4964dSYang Liu case 55: op = rv_op_vwsub_wv; break; 327207f4964dSYang Liu case 56: op = rv_op_vwmulu_vv; break; 327307f4964dSYang Liu case 58: op = rv_op_vwmulsu_vv; break; 327407f4964dSYang Liu case 59: op = rv_op_vwmul_vv; break; 327507f4964dSYang Liu case 60: op = rv_op_vwmaccu_vv; break; 327607f4964dSYang Liu case 61: op = rv_op_vwmacc_vv; break; 327707f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vv; break; 327807f4964dSYang Liu } 327907f4964dSYang Liu break; 328007f4964dSYang Liu case 3: 328107f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 328207f4964dSYang Liu case 0: op = rv_op_vadd_vi; break; 328307f4964dSYang Liu case 3: op = rv_op_vrsub_vi; break; 328407f4964dSYang Liu case 9: op = rv_op_vand_vi; break; 328507f4964dSYang Liu case 10: op = rv_op_vor_vi; break; 328607f4964dSYang Liu case 11: op = rv_op_vxor_vi; break; 328707f4964dSYang Liu case 12: op = rv_op_vrgather_vi; break; 328807f4964dSYang Liu case 14: op = rv_op_vslideup_vi; break; 328907f4964dSYang Liu case 15: op = rv_op_vslidedown_vi; break; 329007f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vim; break; 329107f4964dSYang Liu case 17: op = rv_op_vmadc_vim; break; 329207f4964dSYang Liu case 23: 329307f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 329407f4964dSYang Liu op = rv_op_vmv_v_i; 329507f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 329607f4964dSYang Liu op = rv_op_vmerge_vim; 329707f4964dSYang Liu break; 329807f4964dSYang Liu case 24: op = rv_op_vmseq_vi; break; 329907f4964dSYang Liu case 25: op = rv_op_vmsne_vi; break; 330007f4964dSYang Liu case 28: op = rv_op_vmsleu_vi; break; 330107f4964dSYang Liu case 29: op = rv_op_vmsle_vi; break; 330207f4964dSYang Liu case 30: op = rv_op_vmsgtu_vi; break; 330307f4964dSYang Liu case 31: op = rv_op_vmsgt_vi; break; 330407f4964dSYang Liu case 32: op = rv_op_vsaddu_vi; break; 330507f4964dSYang Liu case 33: op = rv_op_vsadd_vi; break; 330607f4964dSYang Liu case 37: op = rv_op_vsll_vi; break; 330707f4964dSYang Liu case 39: 330807f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 330907f4964dSYang Liu case 0: op = rv_op_vmv1r_v; break; 331007f4964dSYang Liu case 1: op = rv_op_vmv2r_v; break; 331107f4964dSYang Liu case 3: op = rv_op_vmv4r_v; break; 331207f4964dSYang Liu case 7: op = rv_op_vmv8r_v; break; 331307f4964dSYang Liu } 331407f4964dSYang Liu break; 331507f4964dSYang Liu case 40: op = rv_op_vsrl_vi; break; 331607f4964dSYang Liu case 41: op = rv_op_vsra_vi; break; 331707f4964dSYang Liu case 42: op = rv_op_vssrl_vi; break; 331807f4964dSYang Liu case 43: op = rv_op_vssra_vi; break; 331907f4964dSYang Liu case 44: op = rv_op_vnsrl_wi; break; 332007f4964dSYang Liu case 45: op = rv_op_vnsra_wi; break; 332107f4964dSYang Liu case 46: op = rv_op_vnclipu_wi; break; 332207f4964dSYang Liu case 47: op = rv_op_vnclip_wi; break; 332307f4964dSYang Liu } 332407f4964dSYang Liu break; 332507f4964dSYang Liu case 4: 332607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 332707f4964dSYang Liu case 0: op = rv_op_vadd_vx; break; 332807f4964dSYang Liu case 2: op = rv_op_vsub_vx; break; 332907f4964dSYang Liu case 3: op = rv_op_vrsub_vx; break; 333007f4964dSYang Liu case 4: op = rv_op_vminu_vx; break; 333107f4964dSYang Liu case 5: op = rv_op_vmin_vx; break; 333207f4964dSYang Liu case 6: op = rv_op_vmaxu_vx; break; 333307f4964dSYang Liu case 7: op = rv_op_vmax_vx; break; 333407f4964dSYang Liu case 9: op = rv_op_vand_vx; break; 333507f4964dSYang Liu case 10: op = rv_op_vor_vx; break; 333607f4964dSYang Liu case 11: op = rv_op_vxor_vx; break; 333707f4964dSYang Liu case 12: op = rv_op_vrgather_vx; break; 333807f4964dSYang Liu case 14: op = rv_op_vslideup_vx; break; 333907f4964dSYang Liu case 15: op = rv_op_vslidedown_vx; break; 334007f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vxm; break; 334107f4964dSYang Liu case 17: op = rv_op_vmadc_vxm; break; 334207f4964dSYang Liu case 18: if (((inst >> 25) & 1) == 0) op = rv_op_vsbc_vxm; break; 334307f4964dSYang Liu case 19: op = rv_op_vmsbc_vxm; break; 334407f4964dSYang Liu case 23: 334507f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 334607f4964dSYang Liu op = rv_op_vmv_v_x; 334707f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 334807f4964dSYang Liu op = rv_op_vmerge_vxm; 334907f4964dSYang Liu break; 335007f4964dSYang Liu case 24: op = rv_op_vmseq_vx; break; 335107f4964dSYang Liu case 25: op = rv_op_vmsne_vx; break; 335207f4964dSYang Liu case 26: op = rv_op_vmsltu_vx; break; 335307f4964dSYang Liu case 27: op = rv_op_vmslt_vx; break; 335407f4964dSYang Liu case 28: op = rv_op_vmsleu_vx; break; 335507f4964dSYang Liu case 29: op = rv_op_vmsle_vx; break; 335607f4964dSYang Liu case 30: op = rv_op_vmsgtu_vx; break; 335707f4964dSYang Liu case 31: op = rv_op_vmsgt_vx; break; 335807f4964dSYang Liu case 32: op = rv_op_vsaddu_vx; break; 335907f4964dSYang Liu case 33: op = rv_op_vsadd_vx; break; 336007f4964dSYang Liu case 34: op = rv_op_vssubu_vx; break; 336107f4964dSYang Liu case 35: op = rv_op_vssub_vx; break; 336207f4964dSYang Liu case 37: op = rv_op_vsll_vx; break; 336307f4964dSYang Liu case 39: op = rv_op_vsmul_vx; break; 336407f4964dSYang Liu case 40: op = rv_op_vsrl_vx; break; 336507f4964dSYang Liu case 41: op = rv_op_vsra_vx; break; 336607f4964dSYang Liu case 42: op = rv_op_vssrl_vx; break; 336707f4964dSYang Liu case 43: op = rv_op_vssra_vx; break; 336807f4964dSYang Liu case 44: op = rv_op_vnsrl_wx; break; 336907f4964dSYang Liu case 45: op = rv_op_vnsra_wx; break; 337007f4964dSYang Liu case 46: op = rv_op_vnclipu_wx; break; 337107f4964dSYang Liu case 47: op = rv_op_vnclip_wx; break; 337207f4964dSYang Liu } 337307f4964dSYang Liu break; 337407f4964dSYang Liu case 5: 337507f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 337607f4964dSYang Liu case 0: op = rv_op_vfadd_vf; break; 337707f4964dSYang Liu case 2: op = rv_op_vfsub_vf; break; 337807f4964dSYang Liu case 4: op = rv_op_vfmin_vf; break; 337907f4964dSYang Liu case 6: op = rv_op_vfmax_vf; break; 338007f4964dSYang Liu case 8: op = rv_op_vfsgnj_vf; break; 338107f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vf; break; 338207f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vf; break; 338307f4964dSYang Liu case 14: op = rv_op_vfslide1up_vf; break; 338407f4964dSYang Liu case 15: op = rv_op_vfslide1down_vf; break; 338507f4964dSYang Liu case 16: 338607f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 338707f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break; 338807f4964dSYang Liu } 338907f4964dSYang Liu break; 339007f4964dSYang Liu case 23: 339107f4964dSYang Liu if (((inst >> 25) & 1) == 0) 339207f4964dSYang Liu op = rv_op_vfmerge_vfm; 339307f4964dSYang Liu else if (((inst >> 20) & 0b111111) == 32) 339407f4964dSYang Liu op = rv_op_vfmv_v_f; 339507f4964dSYang Liu break; 339607f4964dSYang Liu case 24: op = rv_op_vmfeq_vf; break; 339707f4964dSYang Liu case 25: op = rv_op_vmfle_vf; break; 339807f4964dSYang Liu case 27: op = rv_op_vmflt_vf; break; 339907f4964dSYang Liu case 28: op = rv_op_vmfne_vf; break; 340007f4964dSYang Liu case 29: op = rv_op_vmfgt_vf; break; 340107f4964dSYang Liu case 31: op = rv_op_vmfge_vf; break; 340207f4964dSYang Liu case 32: op = rv_op_vfdiv_vf; break; 340307f4964dSYang Liu case 33: op = rv_op_vfrdiv_vf; break; 340407f4964dSYang Liu case 36: op = rv_op_vfmul_vf; break; 340507f4964dSYang Liu case 39: op = rv_op_vfrsub_vf; break; 340607f4964dSYang Liu case 40: op = rv_op_vfmadd_vf; break; 340707f4964dSYang Liu case 41: op = rv_op_vfnmadd_vf; break; 340807f4964dSYang Liu case 42: op = rv_op_vfmsub_vf; break; 340907f4964dSYang Liu case 43: op = rv_op_vfnmsub_vf; break; 341007f4964dSYang Liu case 44: op = rv_op_vfmacc_vf; break; 341107f4964dSYang Liu case 45: op = rv_op_vfnmacc_vf; break; 341207f4964dSYang Liu case 46: op = rv_op_vfmsac_vf; break; 341307f4964dSYang Liu case 47: op = rv_op_vfnmsac_vf; break; 341407f4964dSYang Liu case 48: op = rv_op_vfwadd_vf; break; 341507f4964dSYang Liu case 50: op = rv_op_vfwsub_vf; break; 341607f4964dSYang Liu case 52: op = rv_op_vfwadd_wf; break; 341707f4964dSYang Liu case 54: op = rv_op_vfwsub_wf; break; 341807f4964dSYang Liu case 56: op = rv_op_vfwmul_vf; break; 341907f4964dSYang Liu case 60: op = rv_op_vfwmacc_vf; break; 342007f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vf; break; 342107f4964dSYang Liu case 62: op = rv_op_vfwmsac_vf; break; 342207f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vf; break; 342307f4964dSYang Liu } 342407f4964dSYang Liu break; 342507f4964dSYang Liu case 6: 342607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 342707f4964dSYang Liu case 8: op = rv_op_vaaddu_vx; break; 342807f4964dSYang Liu case 9: op = rv_op_vaadd_vx; break; 342907f4964dSYang Liu case 10: op = rv_op_vasubu_vx; break; 343007f4964dSYang Liu case 11: op = rv_op_vasub_vx; break; 343107f4964dSYang Liu case 14: op = rv_op_vslide1up_vx; break; 343207f4964dSYang Liu case 15: op = rv_op_vslide1down_vx; break; 343307f4964dSYang Liu case 16: 343407f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 343507f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break; 343607f4964dSYang Liu } 343707f4964dSYang Liu break; 343807f4964dSYang Liu case 32: op = rv_op_vdivu_vx; break; 343907f4964dSYang Liu case 33: op = rv_op_vdiv_vx; break; 344007f4964dSYang Liu case 34: op = rv_op_vremu_vx; break; 344107f4964dSYang Liu case 35: op = rv_op_vrem_vx; break; 344207f4964dSYang Liu case 36: op = rv_op_vmulhu_vx; break; 344307f4964dSYang Liu case 37: op = rv_op_vmul_vx; break; 344407f4964dSYang Liu case 38: op = rv_op_vmulhsu_vx; break; 344507f4964dSYang Liu case 39: op = rv_op_vmulh_vx; break; 344607f4964dSYang Liu case 41: op = rv_op_vmadd_vx; break; 344707f4964dSYang Liu case 43: op = rv_op_vnmsub_vx; break; 344807f4964dSYang Liu case 45: op = rv_op_vmacc_vx; break; 344907f4964dSYang Liu case 47: op = rv_op_vnmsac_vx; break; 345007f4964dSYang Liu case 48: op = rv_op_vwaddu_vx; break; 345107f4964dSYang Liu case 49: op = rv_op_vwadd_vx; break; 345207f4964dSYang Liu case 50: op = rv_op_vwsubu_vx; break; 345307f4964dSYang Liu case 51: op = rv_op_vwsub_vx; break; 345407f4964dSYang Liu case 52: op = rv_op_vwaddu_wx; break; 345507f4964dSYang Liu case 53: op = rv_op_vwadd_wx; break; 345607f4964dSYang Liu case 54: op = rv_op_vwsubu_wx; break; 345707f4964dSYang Liu case 55: op = rv_op_vwsub_wx; break; 345807f4964dSYang Liu case 56: op = rv_op_vwmulu_vx; break; 345907f4964dSYang Liu case 58: op = rv_op_vwmulsu_vx; break; 346007f4964dSYang Liu case 59: op = rv_op_vwmul_vx; break; 346107f4964dSYang Liu case 60: op = rv_op_vwmaccu_vx; break; 346207f4964dSYang Liu case 61: op = rv_op_vwmacc_vx; break; 346307f4964dSYang Liu case 62: op = rv_op_vwmaccus_vx; break; 346407f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vx; break; 346507f4964dSYang Liu } 346607f4964dSYang Liu break; 346707f4964dSYang Liu case 7: 346807f4964dSYang Liu if (((inst >> 31) & 1) == 0) { 346907f4964dSYang Liu op = rv_op_vsetvli; 347007f4964dSYang Liu } else if ((inst >> 30) & 1) { 347107f4964dSYang Liu op = rv_op_vsetivli; 347207f4964dSYang Liu } else if (((inst >> 25) & 0b11111) == 0) { 347307f4964dSYang Liu op = rv_op_vsetvl; 347407f4964dSYang Liu } 347507f4964dSYang Liu break; 347607f4964dSYang Liu } 347707f4964dSYang Liu break; 3478ea103259SMichael Clark case 22: 3479ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3480ea103259SMichael Clark case 0: op = rv_op_addid; break; 3481ea103259SMichael Clark case 1: 3482ea103259SMichael Clark switch (((inst >> 26) & 0b111111)) { 3483ea103259SMichael Clark case 0: op = rv_op_sllid; break; 3484ea103259SMichael Clark } 3485ea103259SMichael Clark break; 3486ea103259SMichael Clark case 5: 3487ea103259SMichael Clark switch (((inst >> 26) & 0b111111)) { 3488ea103259SMichael Clark case 0: op = rv_op_srlid; break; 3489ea103259SMichael Clark case 16: op = rv_op_sraid; break; 3490ea103259SMichael Clark } 3491ea103259SMichael Clark break; 3492ea103259SMichael Clark } 3493ea103259SMichael Clark break; 3494ea103259SMichael Clark case 24: 3495ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3496ea103259SMichael Clark case 0: op = rv_op_beq; break; 3497ea103259SMichael Clark case 1: op = rv_op_bne; break; 3498ea103259SMichael Clark case 4: op = rv_op_blt; break; 3499ea103259SMichael Clark case 5: op = rv_op_bge; break; 3500ea103259SMichael Clark case 6: op = rv_op_bltu; break; 3501ea103259SMichael Clark case 7: op = rv_op_bgeu; break; 3502ea103259SMichael Clark } 3503ea103259SMichael Clark break; 3504ea103259SMichael Clark case 25: 3505ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3506ea103259SMichael Clark case 0: op = rv_op_jalr; break; 3507ea103259SMichael Clark } 3508ea103259SMichael Clark break; 3509ea103259SMichael Clark case 27: op = rv_op_jal; break; 3510ea103259SMichael Clark case 28: 3511ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3512ea103259SMichael Clark case 0: 3513ea103259SMichael Clark switch (((inst >> 20) & 0b111111100000) | ((inst >> 7) & 0b000000011111)) { 3514ea103259SMichael Clark case 0: 3515ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3516ea103259SMichael Clark case 0: op = rv_op_ecall; break; 3517ea103259SMichael Clark case 32: op = rv_op_ebreak; break; 3518ea103259SMichael Clark case 64: op = rv_op_uret; break; 3519ea103259SMichael Clark } 3520ea103259SMichael Clark break; 3521ea103259SMichael Clark case 256: 3522ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3523ea103259SMichael Clark case 2: 3524ea103259SMichael Clark switch (((inst >> 15) & 0b11111)) { 3525ea103259SMichael Clark case 0: op = rv_op_sret; break; 3526ea103259SMichael Clark } 3527ea103259SMichael Clark break; 3528ea103259SMichael Clark case 4: op = rv_op_sfence_vm; break; 3529ea103259SMichael Clark case 5: 3530ea103259SMichael Clark switch (((inst >> 15) & 0b11111)) { 3531ea103259SMichael Clark case 0: op = rv_op_wfi; break; 3532ea103259SMichael Clark } 3533ea103259SMichael Clark break; 3534ea103259SMichael Clark } 3535ea103259SMichael Clark break; 3536ea103259SMichael Clark case 288: op = rv_op_sfence_vma; break; 3537ea103259SMichael Clark case 512: 3538ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3539ea103259SMichael Clark case 64: op = rv_op_hret; break; 3540ea103259SMichael Clark } 3541ea103259SMichael Clark break; 3542ea103259SMichael Clark case 768: 3543ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3544ea103259SMichael Clark case 64: op = rv_op_mret; break; 3545ea103259SMichael Clark } 3546ea103259SMichael Clark break; 3547ea103259SMichael Clark case 1952: 3548ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3549ea103259SMichael Clark case 576: op = rv_op_dret; break; 3550ea103259SMichael Clark } 3551ea103259SMichael Clark break; 3552ea103259SMichael Clark } 3553ea103259SMichael Clark break; 3554ea103259SMichael Clark case 1: op = rv_op_csrrw; break; 3555ea103259SMichael Clark case 2: op = rv_op_csrrs; break; 3556ea103259SMichael Clark case 3: op = rv_op_csrrc; break; 3557ea103259SMichael Clark case 5: op = rv_op_csrrwi; break; 3558ea103259SMichael Clark case 6: op = rv_op_csrrsi; break; 3559ea103259SMichael Clark case 7: op = rv_op_csrrci; break; 3560ea103259SMichael Clark } 3561ea103259SMichael Clark break; 3562ea103259SMichael Clark case 30: 3563ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 3564ea103259SMichael Clark case 0: op = rv_op_addd; break; 3565ea103259SMichael Clark case 1: op = rv_op_slld; break; 3566ea103259SMichael Clark case 5: op = rv_op_srld; break; 3567ea103259SMichael Clark case 8: op = rv_op_muld; break; 3568ea103259SMichael Clark case 12: op = rv_op_divd; break; 3569ea103259SMichael Clark case 13: op = rv_op_divud; break; 3570ea103259SMichael Clark case 14: op = rv_op_remd; break; 3571ea103259SMichael Clark case 15: op = rv_op_remud; break; 3572ea103259SMichael Clark case 256: op = rv_op_subd; break; 3573ea103259SMichael Clark case 261: op = rv_op_srad; break; 3574ea103259SMichael Clark } 3575ea103259SMichael Clark break; 3576ea103259SMichael Clark } 3577ea103259SMichael Clark break; 3578ea103259SMichael Clark } 3579ea103259SMichael Clark dec->op = op; 3580ea103259SMichael Clark } 3581ea103259SMichael Clark 3582ea103259SMichael Clark /* operand extractors */ 3583ea103259SMichael Clark 3584ea103259SMichael Clark static uint32_t operand_rd(rv_inst inst) 3585ea103259SMichael Clark { 3586ea103259SMichael Clark return (inst << 52) >> 59; 3587ea103259SMichael Clark } 3588ea103259SMichael Clark 3589ea103259SMichael Clark static uint32_t operand_rs1(rv_inst inst) 3590ea103259SMichael Clark { 3591ea103259SMichael Clark return (inst << 44) >> 59; 3592ea103259SMichael Clark } 3593ea103259SMichael Clark 3594ea103259SMichael Clark static uint32_t operand_rs2(rv_inst inst) 3595ea103259SMichael Clark { 3596ea103259SMichael Clark return (inst << 39) >> 59; 3597ea103259SMichael Clark } 3598ea103259SMichael Clark 3599ea103259SMichael Clark static uint32_t operand_rs3(rv_inst inst) 3600ea103259SMichael Clark { 3601ea103259SMichael Clark return (inst << 32) >> 59; 3602ea103259SMichael Clark } 3603ea103259SMichael Clark 3604ea103259SMichael Clark static uint32_t operand_aq(rv_inst inst) 3605ea103259SMichael Clark { 3606ea103259SMichael Clark return (inst << 37) >> 63; 3607ea103259SMichael Clark } 3608ea103259SMichael Clark 3609ea103259SMichael Clark static uint32_t operand_rl(rv_inst inst) 3610ea103259SMichael Clark { 3611ea103259SMichael Clark return (inst << 38) >> 63; 3612ea103259SMichael Clark } 3613ea103259SMichael Clark 3614ea103259SMichael Clark static uint32_t operand_pred(rv_inst inst) 3615ea103259SMichael Clark { 3616ea103259SMichael Clark return (inst << 36) >> 60; 3617ea103259SMichael Clark } 3618ea103259SMichael Clark 3619ea103259SMichael Clark static uint32_t operand_succ(rv_inst inst) 3620ea103259SMichael Clark { 3621ea103259SMichael Clark return (inst << 40) >> 60; 3622ea103259SMichael Clark } 3623ea103259SMichael Clark 3624ea103259SMichael Clark static uint32_t operand_rm(rv_inst inst) 3625ea103259SMichael Clark { 3626ea103259SMichael Clark return (inst << 49) >> 61; 3627ea103259SMichael Clark } 3628ea103259SMichael Clark 3629ea103259SMichael Clark static uint32_t operand_shamt5(rv_inst inst) 3630ea103259SMichael Clark { 3631ea103259SMichael Clark return (inst << 39) >> 59; 3632ea103259SMichael Clark } 3633ea103259SMichael Clark 3634ea103259SMichael Clark static uint32_t operand_shamt6(rv_inst inst) 3635ea103259SMichael Clark { 3636ea103259SMichael Clark return (inst << 38) >> 58; 3637ea103259SMichael Clark } 3638ea103259SMichael Clark 3639ea103259SMichael Clark static uint32_t operand_shamt7(rv_inst inst) 3640ea103259SMichael Clark { 3641ea103259SMichael Clark return (inst << 37) >> 57; 3642ea103259SMichael Clark } 3643ea103259SMichael Clark 3644ea103259SMichael Clark static uint32_t operand_crdq(rv_inst inst) 3645ea103259SMichael Clark { 3646ea103259SMichael Clark return (inst << 59) >> 61; 3647ea103259SMichael Clark } 3648ea103259SMichael Clark 3649ea103259SMichael Clark static uint32_t operand_crs1q(rv_inst inst) 3650ea103259SMichael Clark { 3651ea103259SMichael Clark return (inst << 54) >> 61; 3652ea103259SMichael Clark } 3653ea103259SMichael Clark 3654ea103259SMichael Clark static uint32_t operand_crs1rdq(rv_inst inst) 3655ea103259SMichael Clark { 3656ea103259SMichael Clark return (inst << 54) >> 61; 3657ea103259SMichael Clark } 3658ea103259SMichael Clark 3659ea103259SMichael Clark static uint32_t operand_crs2q(rv_inst inst) 3660ea103259SMichael Clark { 3661ea103259SMichael Clark return (inst << 59) >> 61; 3662ea103259SMichael Clark } 3663ea103259SMichael Clark 3664ea103259SMichael Clark static uint32_t operand_crd(rv_inst inst) 3665ea103259SMichael Clark { 3666ea103259SMichael Clark return (inst << 52) >> 59; 3667ea103259SMichael Clark } 3668ea103259SMichael Clark 3669ea103259SMichael Clark static uint32_t operand_crs1(rv_inst inst) 3670ea103259SMichael Clark { 3671ea103259SMichael Clark return (inst << 52) >> 59; 3672ea103259SMichael Clark } 3673ea103259SMichael Clark 3674ea103259SMichael Clark static uint32_t operand_crs1rd(rv_inst inst) 3675ea103259SMichael Clark { 3676ea103259SMichael Clark return (inst << 52) >> 59; 3677ea103259SMichael Clark } 3678ea103259SMichael Clark 3679ea103259SMichael Clark static uint32_t operand_crs2(rv_inst inst) 3680ea103259SMichael Clark { 3681ea103259SMichael Clark return (inst << 57) >> 59; 3682ea103259SMichael Clark } 3683ea103259SMichael Clark 3684ea103259SMichael Clark static uint32_t operand_cimmsh5(rv_inst inst) 3685ea103259SMichael Clark { 3686ea103259SMichael Clark return (inst << 57) >> 59; 3687ea103259SMichael Clark } 3688ea103259SMichael Clark 3689ea103259SMichael Clark static uint32_t operand_csr12(rv_inst inst) 3690ea103259SMichael Clark { 3691ea103259SMichael Clark return (inst << 32) >> 52; 3692ea103259SMichael Clark } 3693ea103259SMichael Clark 3694ea103259SMichael Clark static int32_t operand_imm12(rv_inst inst) 3695ea103259SMichael Clark { 3696ea103259SMichael Clark return ((int64_t)inst << 32) >> 52; 3697ea103259SMichael Clark } 3698ea103259SMichael Clark 3699ea103259SMichael Clark static int32_t operand_imm20(rv_inst inst) 3700ea103259SMichael Clark { 3701ea103259SMichael Clark return (((int64_t)inst << 32) >> 44) << 12; 3702ea103259SMichael Clark } 3703ea103259SMichael Clark 3704ea103259SMichael Clark static int32_t operand_jimm20(rv_inst inst) 3705ea103259SMichael Clark { 3706ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 20 | 3707ea103259SMichael Clark ((inst << 33) >> 54) << 1 | 3708ea103259SMichael Clark ((inst << 43) >> 63) << 11 | 3709ea103259SMichael Clark ((inst << 44) >> 56) << 12; 3710ea103259SMichael Clark } 3711ea103259SMichael Clark 3712ea103259SMichael Clark static int32_t operand_simm12(rv_inst inst) 3713ea103259SMichael Clark { 3714ea103259SMichael Clark return (((int64_t)inst << 32) >> 57) << 5 | 3715ea103259SMichael Clark (inst << 52) >> 59; 3716ea103259SMichael Clark } 3717ea103259SMichael Clark 3718ea103259SMichael Clark static int32_t operand_sbimm12(rv_inst inst) 3719ea103259SMichael Clark { 3720ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 12 | 3721ea103259SMichael Clark ((inst << 33) >> 58) << 5 | 3722ea103259SMichael Clark ((inst << 52) >> 60) << 1 | 3723ea103259SMichael Clark ((inst << 56) >> 63) << 11; 3724ea103259SMichael Clark } 3725ea103259SMichael Clark 372633632775SFrédéric Pétrot static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) 3727ea103259SMichael Clark { 372833632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 3729ea103259SMichael Clark (inst << 57) >> 59; 373033632775SFrédéric Pétrot if (isa == rv128) { 373133632775SFrédéric Pétrot imm = imm ? imm : 64; 373233632775SFrédéric Pétrot } 373333632775SFrédéric Pétrot return imm; 373433632775SFrédéric Pétrot } 373533632775SFrédéric Pétrot 373633632775SFrédéric Pétrot static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) 373733632775SFrédéric Pétrot { 373833632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 373933632775SFrédéric Pétrot (inst << 57) >> 59; 374033632775SFrédéric Pétrot if (isa == rv128) { 374133632775SFrédéric Pétrot imm = imm | (imm & 32) << 1; 374233632775SFrédéric Pétrot imm = imm ? imm : 64; 374333632775SFrédéric Pétrot } 374433632775SFrédéric Pétrot return imm; 3745ea103259SMichael Clark } 3746ea103259SMichael Clark 3747ea103259SMichael Clark static int32_t operand_cimmi(rv_inst inst) 3748ea103259SMichael Clark { 3749ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 5 | 3750ea103259SMichael Clark (inst << 57) >> 59; 3751ea103259SMichael Clark } 3752ea103259SMichael Clark 3753ea103259SMichael Clark static int32_t operand_cimmui(rv_inst inst) 3754ea103259SMichael Clark { 3755ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 17 | 3756ea103259SMichael Clark ((inst << 57) >> 59) << 12; 3757ea103259SMichael Clark } 3758ea103259SMichael Clark 3759ea103259SMichael Clark static uint32_t operand_cimmlwsp(rv_inst inst) 3760ea103259SMichael Clark { 3761ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3762ea103259SMichael Clark ((inst << 57) >> 61) << 2 | 3763ea103259SMichael Clark ((inst << 60) >> 62) << 6; 3764ea103259SMichael Clark } 3765ea103259SMichael Clark 3766ea103259SMichael Clark static uint32_t operand_cimmldsp(rv_inst inst) 3767ea103259SMichael Clark { 3768ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3769ea103259SMichael Clark ((inst << 57) >> 62) << 3 | 3770ea103259SMichael Clark ((inst << 59) >> 61) << 6; 3771ea103259SMichael Clark } 3772ea103259SMichael Clark 3773ea103259SMichael Clark static uint32_t operand_cimmlqsp(rv_inst inst) 3774ea103259SMichael Clark { 3775ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3776ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3777ea103259SMichael Clark ((inst << 58) >> 60) << 6; 3778ea103259SMichael Clark } 3779ea103259SMichael Clark 3780ea103259SMichael Clark static int32_t operand_cimm16sp(rv_inst inst) 3781ea103259SMichael Clark { 3782ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 9 | 3783ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3784ea103259SMichael Clark ((inst << 58) >> 63) << 6 | 3785ea103259SMichael Clark ((inst << 59) >> 62) << 7 | 3786ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3787ea103259SMichael Clark } 3788ea103259SMichael Clark 3789ea103259SMichael Clark static int32_t operand_cimmj(rv_inst inst) 3790ea103259SMichael Clark { 3791ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 11 | 3792ea103259SMichael Clark ((inst << 52) >> 63) << 4 | 3793ea103259SMichael Clark ((inst << 53) >> 62) << 8 | 3794ea103259SMichael Clark ((inst << 55) >> 63) << 10 | 3795ea103259SMichael Clark ((inst << 56) >> 63) << 6 | 3796ea103259SMichael Clark ((inst << 57) >> 63) << 7 | 3797ea103259SMichael Clark ((inst << 58) >> 61) << 1 | 3798ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3799ea103259SMichael Clark } 3800ea103259SMichael Clark 3801ea103259SMichael Clark static int32_t operand_cimmb(rv_inst inst) 3802ea103259SMichael Clark { 3803ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 8 | 3804ea103259SMichael Clark ((inst << 52) >> 62) << 3 | 3805ea103259SMichael Clark ((inst << 57) >> 62) << 6 | 3806ea103259SMichael Clark ((inst << 59) >> 62) << 1 | 3807ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3808ea103259SMichael Clark } 3809ea103259SMichael Clark 3810ea103259SMichael Clark static uint32_t operand_cimmswsp(rv_inst inst) 3811ea103259SMichael Clark { 3812ea103259SMichael Clark return ((inst << 51) >> 60) << 2 | 3813ea103259SMichael Clark ((inst << 55) >> 62) << 6; 3814ea103259SMichael Clark } 3815ea103259SMichael Clark 3816ea103259SMichael Clark static uint32_t operand_cimmsdsp(rv_inst inst) 3817ea103259SMichael Clark { 3818ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3819ea103259SMichael Clark ((inst << 54) >> 61) << 6; 3820ea103259SMichael Clark } 3821ea103259SMichael Clark 3822ea103259SMichael Clark static uint32_t operand_cimmsqsp(rv_inst inst) 3823ea103259SMichael Clark { 3824ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3825ea103259SMichael Clark ((inst << 53) >> 60) << 6; 3826ea103259SMichael Clark } 3827ea103259SMichael Clark 3828ea103259SMichael Clark static uint32_t operand_cimm4spn(rv_inst inst) 3829ea103259SMichael Clark { 3830ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3831ea103259SMichael Clark ((inst << 53) >> 60) << 6 | 3832ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3833ea103259SMichael Clark ((inst << 58) >> 63) << 3; 3834ea103259SMichael Clark } 3835ea103259SMichael Clark 3836ea103259SMichael Clark static uint32_t operand_cimmw(rv_inst inst) 3837ea103259SMichael Clark { 3838ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3839ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3840ea103259SMichael Clark ((inst << 58) >> 63) << 6; 3841ea103259SMichael Clark } 3842ea103259SMichael Clark 3843ea103259SMichael Clark static uint32_t operand_cimmd(rv_inst inst) 3844ea103259SMichael Clark { 3845ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3846ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3847ea103259SMichael Clark } 3848ea103259SMichael Clark 3849ea103259SMichael Clark static uint32_t operand_cimmq(rv_inst inst) 3850ea103259SMichael Clark { 3851ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3852ea103259SMichael Clark ((inst << 53) >> 63) << 8 | 3853ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3854ea103259SMichael Clark } 3855ea103259SMichael Clark 385607f4964dSYang Liu static uint32_t operand_vimm(rv_inst inst) 385707f4964dSYang Liu { 385807f4964dSYang Liu return (int64_t)(inst << 44) >> 59; 385907f4964dSYang Liu } 386007f4964dSYang Liu 386107f4964dSYang Liu static uint32_t operand_vzimm11(rv_inst inst) 386207f4964dSYang Liu { 386307f4964dSYang Liu return (inst << 33) >> 53; 386407f4964dSYang Liu } 386507f4964dSYang Liu 386607f4964dSYang Liu static uint32_t operand_vzimm10(rv_inst inst) 386707f4964dSYang Liu { 386807f4964dSYang Liu return (inst << 34) >> 54; 386907f4964dSYang Liu } 387007f4964dSYang Liu 38715748c886SWeiwei Li static uint32_t operand_bs(rv_inst inst) 38725748c886SWeiwei Li { 38735748c886SWeiwei Li return (inst << 32) >> 62; 38745748c886SWeiwei Li } 38755748c886SWeiwei Li 38765748c886SWeiwei Li static uint32_t operand_rnum(rv_inst inst) 38775748c886SWeiwei Li { 38785748c886SWeiwei Li return (inst << 40) >> 60; 38795748c886SWeiwei Li } 38805748c886SWeiwei Li 388107f4964dSYang Liu static uint32_t operand_vm(rv_inst inst) 388207f4964dSYang Liu { 388307f4964dSYang Liu return (inst << 38) >> 63; 388407f4964dSYang Liu } 388507f4964dSYang Liu 3886ea103259SMichael Clark /* decode operands */ 3887ea103259SMichael Clark 388833632775SFrédéric Pétrot static void decode_inst_operands(rv_decode *dec, rv_isa isa) 3889ea103259SMichael Clark { 3890ea103259SMichael Clark rv_inst inst = dec->inst; 3891ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 3892ea103259SMichael Clark switch (dec->codec) { 3893ea103259SMichael Clark case rv_codec_none: 3894ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 3895ea103259SMichael Clark dec->imm = 0; 3896ea103259SMichael Clark break; 3897ea103259SMichael Clark case rv_codec_u: 3898ea103259SMichael Clark dec->rd = operand_rd(inst); 3899ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 3900ea103259SMichael Clark dec->imm = operand_imm20(inst); 3901ea103259SMichael Clark break; 3902ea103259SMichael Clark case rv_codec_uj: 3903ea103259SMichael Clark dec->rd = operand_rd(inst); 3904ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 3905ea103259SMichael Clark dec->imm = operand_jimm20(inst); 3906ea103259SMichael Clark break; 3907ea103259SMichael Clark case rv_codec_i: 3908ea103259SMichael Clark dec->rd = operand_rd(inst); 3909ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3910ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3911ea103259SMichael Clark dec->imm = operand_imm12(inst); 3912ea103259SMichael Clark break; 3913ea103259SMichael Clark case rv_codec_i_sh5: 3914ea103259SMichael Clark dec->rd = operand_rd(inst); 3915ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3916ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3917ea103259SMichael Clark dec->imm = operand_shamt5(inst); 3918ea103259SMichael Clark break; 3919ea103259SMichael Clark case rv_codec_i_sh6: 3920ea103259SMichael Clark dec->rd = operand_rd(inst); 3921ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3922ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3923ea103259SMichael Clark dec->imm = operand_shamt6(inst); 3924ea103259SMichael Clark break; 3925ea103259SMichael Clark case rv_codec_i_sh7: 3926ea103259SMichael Clark dec->rd = operand_rd(inst); 3927ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3928ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3929ea103259SMichael Clark dec->imm = operand_shamt7(inst); 3930ea103259SMichael Clark break; 3931ea103259SMichael Clark case rv_codec_i_csr: 3932ea103259SMichael Clark dec->rd = operand_rd(inst); 3933ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3934ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3935ea103259SMichael Clark dec->imm = operand_csr12(inst); 3936ea103259SMichael Clark break; 3937ea103259SMichael Clark case rv_codec_s: 3938ea103259SMichael Clark dec->rd = rv_ireg_zero; 3939ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3940ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3941ea103259SMichael Clark dec->imm = operand_simm12(inst); 3942ea103259SMichael Clark break; 3943ea103259SMichael Clark case rv_codec_sb: 3944ea103259SMichael Clark dec->rd = rv_ireg_zero; 3945ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3946ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3947ea103259SMichael Clark dec->imm = operand_sbimm12(inst); 3948ea103259SMichael Clark break; 3949ea103259SMichael Clark case rv_codec_r: 3950ea103259SMichael Clark dec->rd = operand_rd(inst); 3951ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3952ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3953ea103259SMichael Clark dec->imm = 0; 3954ea103259SMichael Clark break; 3955ea103259SMichael Clark case rv_codec_r_m: 3956ea103259SMichael Clark dec->rd = operand_rd(inst); 3957ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3958ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3959ea103259SMichael Clark dec->imm = 0; 3960ea103259SMichael Clark dec->rm = operand_rm(inst); 3961ea103259SMichael Clark break; 3962ea103259SMichael Clark case rv_codec_r4_m: 3963ea103259SMichael Clark dec->rd = operand_rd(inst); 3964ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3965ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3966ea103259SMichael Clark dec->rs3 = operand_rs3(inst); 3967ea103259SMichael Clark dec->imm = 0; 3968ea103259SMichael Clark dec->rm = operand_rm(inst); 3969ea103259SMichael Clark break; 3970ea103259SMichael Clark case rv_codec_r_a: 3971ea103259SMichael Clark dec->rd = operand_rd(inst); 3972ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3973ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 3974ea103259SMichael Clark dec->imm = 0; 3975ea103259SMichael Clark dec->aq = operand_aq(inst); 3976ea103259SMichael Clark dec->rl = operand_rl(inst); 3977ea103259SMichael Clark break; 3978ea103259SMichael Clark case rv_codec_r_l: 3979ea103259SMichael Clark dec->rd = operand_rd(inst); 3980ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 3981ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3982ea103259SMichael Clark dec->imm = 0; 3983ea103259SMichael Clark dec->aq = operand_aq(inst); 3984ea103259SMichael Clark dec->rl = operand_rl(inst); 3985ea103259SMichael Clark break; 3986ea103259SMichael Clark case rv_codec_r_f: 3987ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 3988ea103259SMichael Clark dec->pred = operand_pred(inst); 3989ea103259SMichael Clark dec->succ = operand_succ(inst); 3990ea103259SMichael Clark dec->imm = 0; 3991ea103259SMichael Clark break; 3992ea103259SMichael Clark case rv_codec_cb: 3993ea103259SMichael Clark dec->rd = rv_ireg_zero; 3994ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 3995ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 3996ea103259SMichael Clark dec->imm = operand_cimmb(inst); 3997ea103259SMichael Clark break; 3998ea103259SMichael Clark case rv_codec_cb_imm: 3999ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4000ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4001ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4002ea103259SMichael Clark break; 4003ea103259SMichael Clark case rv_codec_cb_sh5: 4004ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4005ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4006ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4007ea103259SMichael Clark break; 4008ea103259SMichael Clark case rv_codec_cb_sh6: 4009ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4010ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 401133632775SFrédéric Pétrot dec->imm = operand_cimmshr6(inst, isa); 4012ea103259SMichael Clark break; 4013ea103259SMichael Clark case rv_codec_ci: 4014ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4015ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4016ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4017ea103259SMichael Clark break; 4018ea103259SMichael Clark case rv_codec_ci_sh5: 4019ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4020ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4021ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4022ea103259SMichael Clark break; 4023ea103259SMichael Clark case rv_codec_ci_sh6: 4024ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4025ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 402633632775SFrédéric Pétrot dec->imm = operand_cimmshl6(inst, isa); 4027ea103259SMichael Clark break; 4028ea103259SMichael Clark case rv_codec_ci_16sp: 4029ea103259SMichael Clark dec->rd = rv_ireg_sp; 4030ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4031ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4032ea103259SMichael Clark dec->imm = operand_cimm16sp(inst); 4033ea103259SMichael Clark break; 4034ea103259SMichael Clark case rv_codec_ci_lwsp: 4035ea103259SMichael Clark dec->rd = operand_crd(inst); 4036ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4037ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4038ea103259SMichael Clark dec->imm = operand_cimmlwsp(inst); 4039ea103259SMichael Clark break; 4040ea103259SMichael Clark case rv_codec_ci_ldsp: 4041ea103259SMichael Clark dec->rd = operand_crd(inst); 4042ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4043ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4044ea103259SMichael Clark dec->imm = operand_cimmldsp(inst); 4045ea103259SMichael Clark break; 4046ea103259SMichael Clark case rv_codec_ci_lqsp: 4047ea103259SMichael Clark dec->rd = operand_crd(inst); 4048ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4049ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4050ea103259SMichael Clark dec->imm = operand_cimmlqsp(inst); 4051ea103259SMichael Clark break; 4052ea103259SMichael Clark case rv_codec_ci_li: 4053ea103259SMichael Clark dec->rd = operand_crd(inst); 4054ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4055ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4056ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4057ea103259SMichael Clark break; 4058ea103259SMichael Clark case rv_codec_ci_lui: 4059ea103259SMichael Clark dec->rd = operand_crd(inst); 4060ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4061ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4062ea103259SMichael Clark dec->imm = operand_cimmui(inst); 4063ea103259SMichael Clark break; 4064ea103259SMichael Clark case rv_codec_ci_none: 4065ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4066ea103259SMichael Clark dec->imm = 0; 4067ea103259SMichael Clark break; 4068ea103259SMichael Clark case rv_codec_ciw_4spn: 4069ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4070ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4071ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4072ea103259SMichael Clark dec->imm = operand_cimm4spn(inst); 4073ea103259SMichael Clark break; 4074ea103259SMichael Clark case rv_codec_cj: 4075ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4076ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4077ea103259SMichael Clark break; 4078ea103259SMichael Clark case rv_codec_cj_jal: 4079ea103259SMichael Clark dec->rd = rv_ireg_ra; 4080ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4081ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4082ea103259SMichael Clark break; 4083ea103259SMichael Clark case rv_codec_cl_lw: 4084ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4085ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4086ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4087ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4088ea103259SMichael Clark break; 4089ea103259SMichael Clark case rv_codec_cl_ld: 4090ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4091ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4092ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4093ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4094ea103259SMichael Clark break; 4095ea103259SMichael Clark case rv_codec_cl_lq: 4096ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4097ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4098ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4099ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4100ea103259SMichael Clark break; 4101ea103259SMichael Clark case rv_codec_cr: 4102ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4103ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4104ea103259SMichael Clark dec->imm = 0; 4105ea103259SMichael Clark break; 4106ea103259SMichael Clark case rv_codec_cr_mv: 4107ea103259SMichael Clark dec->rd = operand_crd(inst); 4108ea103259SMichael Clark dec->rs1 = operand_crs2(inst); 4109ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4110ea103259SMichael Clark dec->imm = 0; 4111ea103259SMichael Clark break; 4112ea103259SMichael Clark case rv_codec_cr_jalr: 4113ea103259SMichael Clark dec->rd = rv_ireg_ra; 4114ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4115ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4116ea103259SMichael Clark dec->imm = 0; 4117ea103259SMichael Clark break; 4118ea103259SMichael Clark case rv_codec_cr_jr: 4119ea103259SMichael Clark dec->rd = rv_ireg_zero; 4120ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4121ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4122ea103259SMichael Clark dec->imm = 0; 4123ea103259SMichael Clark break; 4124ea103259SMichael Clark case rv_codec_cs: 4125ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4126ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4127ea103259SMichael Clark dec->imm = 0; 4128ea103259SMichael Clark break; 4129ea103259SMichael Clark case rv_codec_cs_sw: 4130ea103259SMichael Clark dec->rd = rv_ireg_zero; 4131ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4132ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4133ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4134ea103259SMichael Clark break; 4135ea103259SMichael Clark case rv_codec_cs_sd: 4136ea103259SMichael Clark dec->rd = rv_ireg_zero; 4137ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4138ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4139ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4140ea103259SMichael Clark break; 4141ea103259SMichael Clark case rv_codec_cs_sq: 4142ea103259SMichael Clark dec->rd = rv_ireg_zero; 4143ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4144ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4145ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4146ea103259SMichael Clark break; 4147ea103259SMichael Clark case rv_codec_css_swsp: 4148ea103259SMichael Clark dec->rd = rv_ireg_zero; 4149ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4150ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4151ea103259SMichael Clark dec->imm = operand_cimmswsp(inst); 4152ea103259SMichael Clark break; 4153ea103259SMichael Clark case rv_codec_css_sdsp: 4154ea103259SMichael Clark dec->rd = rv_ireg_zero; 4155ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4156ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4157ea103259SMichael Clark dec->imm = operand_cimmsdsp(inst); 4158ea103259SMichael Clark break; 4159ea103259SMichael Clark case rv_codec_css_sqsp: 4160ea103259SMichael Clark dec->rd = rv_ireg_zero; 4161ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4162ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4163ea103259SMichael Clark dec->imm = operand_cimmsqsp(inst); 4164ea103259SMichael Clark break; 41655748c886SWeiwei Li case rv_codec_k_bs: 41665748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 41675748c886SWeiwei Li dec->rs2 = operand_rs2(inst); 41685748c886SWeiwei Li dec->bs = operand_bs(inst); 41695748c886SWeiwei Li break; 41705748c886SWeiwei Li case rv_codec_k_rnum: 41715748c886SWeiwei Li dec->rd = operand_rd(inst); 41725748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 41735748c886SWeiwei Li dec->rnum = operand_rnum(inst); 41745748c886SWeiwei Li break; 417507f4964dSYang Liu case rv_codec_v_r: 417607f4964dSYang Liu dec->rd = operand_rd(inst); 417707f4964dSYang Liu dec->rs1 = operand_rs1(inst); 417807f4964dSYang Liu dec->rs2 = operand_rs2(inst); 417907f4964dSYang Liu dec->vm = operand_vm(inst); 418007f4964dSYang Liu break; 418107f4964dSYang Liu case rv_codec_v_ldst: 418207f4964dSYang Liu dec->rd = operand_rd(inst); 418307f4964dSYang Liu dec->rs1 = operand_rs1(inst); 418407f4964dSYang Liu dec->vm = operand_vm(inst); 418507f4964dSYang Liu break; 418607f4964dSYang Liu case rv_codec_v_i: 418707f4964dSYang Liu dec->rd = operand_rd(inst); 418807f4964dSYang Liu dec->rs2 = operand_rs2(inst); 418907f4964dSYang Liu dec->imm = operand_vimm(inst); 419007f4964dSYang Liu dec->vm = operand_vm(inst); 419107f4964dSYang Liu break; 419207f4964dSYang Liu case rv_codec_vsetvli: 419307f4964dSYang Liu dec->rd = operand_rd(inst); 419407f4964dSYang Liu dec->rs1 = operand_rs1(inst); 419507f4964dSYang Liu dec->vzimm = operand_vzimm11(inst); 419607f4964dSYang Liu break; 419707f4964dSYang Liu case rv_codec_vsetivli: 419807f4964dSYang Liu dec->rd = operand_rd(inst); 419907f4964dSYang Liu dec->imm = operand_vimm(inst); 420007f4964dSYang Liu dec->vzimm = operand_vzimm10(inst); 420107f4964dSYang Liu break; 4202ea103259SMichael Clark }; 4203ea103259SMichael Clark } 4204ea103259SMichael Clark 4205ea103259SMichael Clark /* check constraint */ 4206ea103259SMichael Clark 4207ea103259SMichael Clark static bool check_constraints(rv_decode *dec, const rvc_constraint *c) 4208ea103259SMichael Clark { 4209ea103259SMichael Clark int32_t imm = dec->imm; 4210ea103259SMichael Clark uint8_t rd = dec->rd, rs1 = dec->rs1, rs2 = dec->rs2; 4211ea103259SMichael Clark while (*c != rvc_end) { 4212ea103259SMichael Clark switch (*c) { 4213ea103259SMichael Clark case rvc_rd_eq_ra: 4214ea103259SMichael Clark if (!(rd == 1)) { 4215ea103259SMichael Clark return false; 4216ea103259SMichael Clark } 4217ea103259SMichael Clark break; 4218ea103259SMichael Clark case rvc_rd_eq_x0: 4219ea103259SMichael Clark if (!(rd == 0)) { 4220ea103259SMichael Clark return false; 4221ea103259SMichael Clark } 4222ea103259SMichael Clark break; 4223ea103259SMichael Clark case rvc_rs1_eq_x0: 4224ea103259SMichael Clark if (!(rs1 == 0)) { 4225ea103259SMichael Clark return false; 4226ea103259SMichael Clark } 4227ea103259SMichael Clark break; 4228ea103259SMichael Clark case rvc_rs2_eq_x0: 4229ea103259SMichael Clark if (!(rs2 == 0)) { 4230ea103259SMichael Clark return false; 4231ea103259SMichael Clark } 4232ea103259SMichael Clark break; 4233ea103259SMichael Clark case rvc_rs2_eq_rs1: 4234ea103259SMichael Clark if (!(rs2 == rs1)) { 4235ea103259SMichael Clark return false; 4236ea103259SMichael Clark } 4237ea103259SMichael Clark break; 4238ea103259SMichael Clark case rvc_rs1_eq_ra: 4239ea103259SMichael Clark if (!(rs1 == 1)) { 4240ea103259SMichael Clark return false; 4241ea103259SMichael Clark } 4242ea103259SMichael Clark break; 4243ea103259SMichael Clark case rvc_imm_eq_zero: 4244ea103259SMichael Clark if (!(imm == 0)) { 4245ea103259SMichael Clark return false; 4246ea103259SMichael Clark } 4247ea103259SMichael Clark break; 4248ea103259SMichael Clark case rvc_imm_eq_n1: 4249ea103259SMichael Clark if (!(imm == -1)) { 4250ea103259SMichael Clark return false; 4251ea103259SMichael Clark } 4252ea103259SMichael Clark break; 4253ea103259SMichael Clark case rvc_imm_eq_p1: 4254ea103259SMichael Clark if (!(imm == 1)) { 4255ea103259SMichael Clark return false; 4256ea103259SMichael Clark } 4257ea103259SMichael Clark break; 4258ea103259SMichael Clark case rvc_csr_eq_0x001: 4259ea103259SMichael Clark if (!(imm == 0x001)) { 4260ea103259SMichael Clark return false; 4261ea103259SMichael Clark } 4262ea103259SMichael Clark break; 4263ea103259SMichael Clark case rvc_csr_eq_0x002: 4264ea103259SMichael Clark if (!(imm == 0x002)) { 4265ea103259SMichael Clark return false; 4266ea103259SMichael Clark } 4267ea103259SMichael Clark break; 4268ea103259SMichael Clark case rvc_csr_eq_0x003: 4269ea103259SMichael Clark if (!(imm == 0x003)) { 4270ea103259SMichael Clark return false; 4271ea103259SMichael Clark } 4272ea103259SMichael Clark break; 4273ea103259SMichael Clark case rvc_csr_eq_0xc00: 4274ea103259SMichael Clark if (!(imm == 0xc00)) { 4275ea103259SMichael Clark return false; 4276ea103259SMichael Clark } 4277ea103259SMichael Clark break; 4278ea103259SMichael Clark case rvc_csr_eq_0xc01: 4279ea103259SMichael Clark if (!(imm == 0xc01)) { 4280ea103259SMichael Clark return false; 4281ea103259SMichael Clark } 4282ea103259SMichael Clark break; 4283ea103259SMichael Clark case rvc_csr_eq_0xc02: 4284ea103259SMichael Clark if (!(imm == 0xc02)) { 4285ea103259SMichael Clark return false; 4286ea103259SMichael Clark } 4287ea103259SMichael Clark break; 4288ea103259SMichael Clark case rvc_csr_eq_0xc80: 4289ea103259SMichael Clark if (!(imm == 0xc80)) { 4290ea103259SMichael Clark return false; 4291ea103259SMichael Clark } 4292ea103259SMichael Clark break; 4293ea103259SMichael Clark case rvc_csr_eq_0xc81: 4294ea103259SMichael Clark if (!(imm == 0xc81)) { 4295ea103259SMichael Clark return false; 4296ea103259SMichael Clark } 4297ea103259SMichael Clark break; 4298ea103259SMichael Clark case rvc_csr_eq_0xc82: 4299ea103259SMichael Clark if (!(imm == 0xc82)) { 4300ea103259SMichael Clark return false; 4301ea103259SMichael Clark } 4302ea103259SMichael Clark break; 4303ea103259SMichael Clark default: break; 4304ea103259SMichael Clark } 4305ea103259SMichael Clark c++; 4306ea103259SMichael Clark } 4307ea103259SMichael Clark return true; 4308ea103259SMichael Clark } 4309ea103259SMichael Clark 4310ea103259SMichael Clark /* instruction length */ 4311ea103259SMichael Clark 4312ea103259SMichael Clark static size_t inst_length(rv_inst inst) 4313ea103259SMichael Clark { 4314ea103259SMichael Clark /* NOTE: supports maximum instruction size of 64-bits */ 4315ea103259SMichael Clark 4316ea103259SMichael Clark /* instruction length coding 4317ea103259SMichael Clark * 4318ea103259SMichael Clark * aa - 16 bit aa != 11 4319ea103259SMichael Clark * bbb11 - 32 bit bbb != 111 4320ea103259SMichael Clark * 011111 - 48 bit 4321ea103259SMichael Clark * 0111111 - 64 bit 4322ea103259SMichael Clark */ 4323ea103259SMichael Clark 4324ea103259SMichael Clark return (inst & 0b11) != 0b11 ? 2 4325ea103259SMichael Clark : (inst & 0b11100) != 0b11100 ? 4 4326ea103259SMichael Clark : (inst & 0b111111) == 0b011111 ? 6 4327ea103259SMichael Clark : (inst & 0b1111111) == 0b0111111 ? 8 4328ea103259SMichael Clark : 0; 4329ea103259SMichael Clark } 4330ea103259SMichael Clark 4331ea103259SMichael Clark /* format instruction */ 4332ea103259SMichael Clark 4333ea103259SMichael Clark static void append(char *s1, const char *s2, size_t n) 4334ea103259SMichael Clark { 4335ea103259SMichael Clark size_t l1 = strlen(s1); 4336ea103259SMichael Clark if (n - l1 - 1 > 0) { 4337ea103259SMichael Clark strncat(s1, s2, n - l1); 4338ea103259SMichael Clark } 4339ea103259SMichael Clark } 4340ea103259SMichael Clark 4341ea103259SMichael Clark static void format_inst(char *buf, size_t buflen, size_t tab, rv_decode *dec) 4342ea103259SMichael Clark { 4343ea103259SMichael Clark char tmp[64]; 4344ea103259SMichael Clark const char *fmt; 4345ea103259SMichael Clark 4346ea103259SMichael Clark fmt = opcode_data[dec->op].format; 4347ea103259SMichael Clark while (*fmt) { 4348ea103259SMichael Clark switch (*fmt) { 4349ea103259SMichael Clark case 'O': 4350ea103259SMichael Clark append(buf, opcode_data[dec->op].name, buflen); 4351ea103259SMichael Clark break; 4352ea103259SMichael Clark case '(': 4353ea103259SMichael Clark append(buf, "(", buflen); 4354ea103259SMichael Clark break; 4355ea103259SMichael Clark case ',': 4356ea103259SMichael Clark append(buf, ",", buflen); 4357ea103259SMichael Clark break; 4358ea103259SMichael Clark case ')': 4359ea103259SMichael Clark append(buf, ")", buflen); 4360ea103259SMichael Clark break; 43615748c886SWeiwei Li case 'b': 43625748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->bs); 43635748c886SWeiwei Li append(buf, tmp, buflen); 43645748c886SWeiwei Li break; 43655748c886SWeiwei Li case 'n': 43665748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->rnum); 43675748c886SWeiwei Li append(buf, tmp, buflen); 43685748c886SWeiwei Li break; 4369ea103259SMichael Clark case '0': 4370ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rd], buflen); 4371ea103259SMichael Clark break; 4372ea103259SMichael Clark case '1': 4373ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs1], buflen); 4374ea103259SMichael Clark break; 4375ea103259SMichael Clark case '2': 4376ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs2], buflen); 4377ea103259SMichael Clark break; 4378ea103259SMichael Clark case '3': 4379ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rd], buflen); 4380ea103259SMichael Clark break; 4381ea103259SMichael Clark case '4': 4382ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs1], buflen); 4383ea103259SMichael Clark break; 4384ea103259SMichael Clark case '5': 4385ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs2], buflen); 4386ea103259SMichael Clark break; 4387ea103259SMichael Clark case '6': 4388ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs3], buflen); 4389ea103259SMichael Clark break; 4390ea103259SMichael Clark case '7': 4391ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->rs1); 4392ea103259SMichael Clark append(buf, tmp, buflen); 4393ea103259SMichael Clark break; 4394ea103259SMichael Clark case 'i': 4395ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4396ea103259SMichael Clark append(buf, tmp, buflen); 4397ea103259SMichael Clark break; 439807f4964dSYang Liu case 'u': 439907f4964dSYang Liu snprintf(tmp, sizeof(tmp), "%u", ((uint32_t)dec->imm & 0b11111)); 440007f4964dSYang Liu append(buf, tmp, buflen); 440107f4964dSYang Liu break; 4402ea103259SMichael Clark case 'o': 4403ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4404ea103259SMichael Clark append(buf, tmp, buflen); 4405ea103259SMichael Clark while (strlen(buf) < tab * 2) { 4406ea103259SMichael Clark append(buf, " ", buflen); 4407ea103259SMichael Clark } 4408ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "# 0x%" PRIx64, 4409ea103259SMichael Clark dec->pc + dec->imm); 4410ea103259SMichael Clark append(buf, tmp, buflen); 4411ea103259SMichael Clark break; 4412ea103259SMichael Clark case 'c': { 4413ea103259SMichael Clark const char *name = csr_name(dec->imm & 0xfff); 4414ea103259SMichael Clark if (name) { 4415ea103259SMichael Clark append(buf, name, buflen); 4416ea103259SMichael Clark } else { 4417ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "0x%03x", dec->imm & 0xfff); 4418ea103259SMichael Clark append(buf, tmp, buflen); 4419ea103259SMichael Clark } 4420ea103259SMichael Clark break; 4421ea103259SMichael Clark } 4422ea103259SMichael Clark case 'r': 4423ea103259SMichael Clark switch (dec->rm) { 4424ea103259SMichael Clark case rv_rm_rne: 4425ea103259SMichael Clark append(buf, "rne", buflen); 4426ea103259SMichael Clark break; 4427ea103259SMichael Clark case rv_rm_rtz: 4428ea103259SMichael Clark append(buf, "rtz", buflen); 4429ea103259SMichael Clark break; 4430ea103259SMichael Clark case rv_rm_rdn: 4431ea103259SMichael Clark append(buf, "rdn", buflen); 4432ea103259SMichael Clark break; 4433ea103259SMichael Clark case rv_rm_rup: 4434ea103259SMichael Clark append(buf, "rup", buflen); 4435ea103259SMichael Clark break; 4436ea103259SMichael Clark case rv_rm_rmm: 4437ea103259SMichael Clark append(buf, "rmm", buflen); 4438ea103259SMichael Clark break; 4439ea103259SMichael Clark case rv_rm_dyn: 4440ea103259SMichael Clark append(buf, "dyn", buflen); 4441ea103259SMichael Clark break; 4442ea103259SMichael Clark default: 4443ea103259SMichael Clark append(buf, "inv", buflen); 4444ea103259SMichael Clark break; 4445ea103259SMichael Clark } 4446ea103259SMichael Clark break; 4447ea103259SMichael Clark case 'p': 4448ea103259SMichael Clark if (dec->pred & rv_fence_i) { 4449ea103259SMichael Clark append(buf, "i", buflen); 4450ea103259SMichael Clark } 4451ea103259SMichael Clark if (dec->pred & rv_fence_o) { 4452ea103259SMichael Clark append(buf, "o", buflen); 4453ea103259SMichael Clark } 4454ea103259SMichael Clark if (dec->pred & rv_fence_r) { 4455ea103259SMichael Clark append(buf, "r", buflen); 4456ea103259SMichael Clark } 4457ea103259SMichael Clark if (dec->pred & rv_fence_w) { 4458ea103259SMichael Clark append(buf, "w", buflen); 4459ea103259SMichael Clark } 4460ea103259SMichael Clark break; 4461ea103259SMichael Clark case 's': 4462ea103259SMichael Clark if (dec->succ & rv_fence_i) { 4463ea103259SMichael Clark append(buf, "i", buflen); 4464ea103259SMichael Clark } 4465ea103259SMichael Clark if (dec->succ & rv_fence_o) { 4466ea103259SMichael Clark append(buf, "o", buflen); 4467ea103259SMichael Clark } 4468ea103259SMichael Clark if (dec->succ & rv_fence_r) { 4469ea103259SMichael Clark append(buf, "r", buflen); 4470ea103259SMichael Clark } 4471ea103259SMichael Clark if (dec->succ & rv_fence_w) { 4472ea103259SMichael Clark append(buf, "w", buflen); 4473ea103259SMichael Clark } 4474ea103259SMichael Clark break; 4475ea103259SMichael Clark case '\t': 4476ea103259SMichael Clark while (strlen(buf) < tab) { 4477ea103259SMichael Clark append(buf, " ", buflen); 4478ea103259SMichael Clark } 4479ea103259SMichael Clark break; 4480ea103259SMichael Clark case 'A': 4481ea103259SMichael Clark if (dec->aq) { 4482ea103259SMichael Clark append(buf, ".aq", buflen); 4483ea103259SMichael Clark } 4484ea103259SMichael Clark break; 4485ea103259SMichael Clark case 'R': 4486ea103259SMichael Clark if (dec->rl) { 4487ea103259SMichael Clark append(buf, ".rl", buflen); 4488ea103259SMichael Clark } 4489ea103259SMichael Clark break; 449007f4964dSYang Liu case 'l': 449107f4964dSYang Liu append(buf, ",v0", buflen); 449207f4964dSYang Liu break; 449307f4964dSYang Liu case 'm': 449407f4964dSYang Liu if (dec->vm == 0) { 449507f4964dSYang Liu append(buf, ",v0.t", buflen); 449607f4964dSYang Liu } 449707f4964dSYang Liu break; 449807f4964dSYang Liu case 'D': 449907f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rd], buflen); 450007f4964dSYang Liu break; 450107f4964dSYang Liu case 'E': 450207f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs1], buflen); 450307f4964dSYang Liu break; 450407f4964dSYang Liu case 'F': 450507f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs2], buflen); 450607f4964dSYang Liu break; 450707f4964dSYang Liu case 'G': 450807f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs3], buflen); 450907f4964dSYang Liu break; 451007f4964dSYang Liu case 'v': { 451107f4964dSYang Liu char nbuf[32] = {0}; 451207f4964dSYang Liu const int sew = 1 << (((dec->vzimm >> 3) & 0b111) + 3); 451307f4964dSYang Liu sprintf(nbuf, "%d", sew); 451407f4964dSYang Liu const int lmul = dec->vzimm & 0b11; 451507f4964dSYang Liu const int flmul = (dec->vzimm >> 2) & 1; 451607f4964dSYang Liu const char *vta = (dec->vzimm >> 6) & 1 ? "ta" : "tu"; 451707f4964dSYang Liu const char *vma = (dec->vzimm >> 7) & 1 ? "ma" : "mu"; 451807f4964dSYang Liu append(buf, "e", buflen); 451907f4964dSYang Liu append(buf, nbuf, buflen); 452007f4964dSYang Liu append(buf, ",m", buflen); 452107f4964dSYang Liu if (flmul) { 452207f4964dSYang Liu switch (lmul) { 452307f4964dSYang Liu case 3: 452407f4964dSYang Liu sprintf(nbuf, "f2"); 452507f4964dSYang Liu break; 452607f4964dSYang Liu case 2: 452707f4964dSYang Liu sprintf(nbuf, "f4"); 452807f4964dSYang Liu break; 452907f4964dSYang Liu case 1: 453007f4964dSYang Liu sprintf(nbuf, "f8"); 453107f4964dSYang Liu break; 453207f4964dSYang Liu } 453307f4964dSYang Liu append(buf, nbuf, buflen); 453407f4964dSYang Liu } else { 453507f4964dSYang Liu sprintf(nbuf, "%d", 1 << lmul); 453607f4964dSYang Liu append(buf, nbuf, buflen); 453707f4964dSYang Liu } 453807f4964dSYang Liu append(buf, ",", buflen); 453907f4964dSYang Liu append(buf, vta, buflen); 454007f4964dSYang Liu append(buf, ",", buflen); 454107f4964dSYang Liu append(buf, vma, buflen); 454207f4964dSYang Liu break; 454307f4964dSYang Liu } 4544ea103259SMichael Clark default: 4545ea103259SMichael Clark break; 4546ea103259SMichael Clark } 4547ea103259SMichael Clark fmt++; 4548ea103259SMichael Clark } 4549ea103259SMichael Clark } 4550ea103259SMichael Clark 4551ea103259SMichael Clark /* lift instruction to pseudo-instruction */ 4552ea103259SMichael Clark 4553ea103259SMichael Clark static void decode_inst_lift_pseudo(rv_decode *dec) 4554ea103259SMichael Clark { 4555ea103259SMichael Clark const rv_comp_data *comp_data = opcode_data[dec->op].pseudo; 4556ea103259SMichael Clark if (!comp_data) { 4557ea103259SMichael Clark return; 4558ea103259SMichael Clark } 4559ea103259SMichael Clark while (comp_data->constraints) { 4560ea103259SMichael Clark if (check_constraints(dec, comp_data->constraints)) { 4561ea103259SMichael Clark dec->op = comp_data->op; 4562ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 4563ea103259SMichael Clark return; 4564ea103259SMichael Clark } 4565ea103259SMichael Clark comp_data++; 4566ea103259SMichael Clark } 4567ea103259SMichael Clark } 4568ea103259SMichael Clark 4569ea103259SMichael Clark /* decompress instruction */ 4570ea103259SMichael Clark 4571ea103259SMichael Clark static void decode_inst_decompress_rv32(rv_decode *dec) 4572ea103259SMichael Clark { 4573ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv32; 4574ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4575f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4576f88222daSMichael Clark && dec->imm == 0) { 4577f88222daSMichael Clark dec->op = rv_op_illegal; 4578f88222daSMichael Clark } else { 4579ea103259SMichael Clark dec->op = decomp_op; 4580ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4581ea103259SMichael Clark } 4582ea103259SMichael Clark } 4583f88222daSMichael Clark } 4584ea103259SMichael Clark 4585ea103259SMichael Clark static void decode_inst_decompress_rv64(rv_decode *dec) 4586ea103259SMichael Clark { 4587ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv64; 4588ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4589f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4590f88222daSMichael Clark && dec->imm == 0) { 4591f88222daSMichael Clark dec->op = rv_op_illegal; 4592f88222daSMichael Clark } else { 4593ea103259SMichael Clark dec->op = decomp_op; 4594ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4595ea103259SMichael Clark } 4596ea103259SMichael Clark } 4597f88222daSMichael Clark } 4598ea103259SMichael Clark 4599ea103259SMichael Clark static void decode_inst_decompress_rv128(rv_decode *dec) 4600ea103259SMichael Clark { 4601ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv128; 4602ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4603f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4604f88222daSMichael Clark && dec->imm == 0) { 4605f88222daSMichael Clark dec->op = rv_op_illegal; 4606f88222daSMichael Clark } else { 4607ea103259SMichael Clark dec->op = decomp_op; 4608ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4609ea103259SMichael Clark } 4610ea103259SMichael Clark } 4611f88222daSMichael Clark } 4612ea103259SMichael Clark 4613ea103259SMichael Clark static void decode_inst_decompress(rv_decode *dec, rv_isa isa) 4614ea103259SMichael Clark { 4615ea103259SMichael Clark switch (isa) { 4616ea103259SMichael Clark case rv32: 4617ea103259SMichael Clark decode_inst_decompress_rv32(dec); 4618ea103259SMichael Clark break; 4619ea103259SMichael Clark case rv64: 4620ea103259SMichael Clark decode_inst_decompress_rv64(dec); 4621ea103259SMichael Clark break; 4622ea103259SMichael Clark case rv128: 4623ea103259SMichael Clark decode_inst_decompress_rv128(dec); 4624ea103259SMichael Clark break; 4625ea103259SMichael Clark } 4626ea103259SMichael Clark } 4627ea103259SMichael Clark 4628ea103259SMichael Clark /* disassemble instruction */ 4629ea103259SMichael Clark 4630ea103259SMichael Clark static void 4631ea103259SMichael Clark disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst) 4632ea103259SMichael Clark { 4633ea103259SMichael Clark rv_decode dec = { 0 }; 4634ea103259SMichael Clark dec.pc = pc; 4635ea103259SMichael Clark dec.inst = inst; 4636ea103259SMichael Clark decode_inst_opcode(&dec, isa); 463733632775SFrédéric Pétrot decode_inst_operands(&dec, isa); 4638ea103259SMichael Clark decode_inst_decompress(&dec, isa); 4639ea103259SMichael Clark decode_inst_lift_pseudo(&dec); 464007f4964dSYang Liu format_inst(buf, buflen, 24, &dec); 4641ea103259SMichael Clark } 4642ea103259SMichael Clark 46436296a799SMichael Clark #define INST_FMT_2 "%04" PRIx64 " " 46446296a799SMichael Clark #define INST_FMT_4 "%08" PRIx64 " " 46456296a799SMichael Clark #define INST_FMT_6 "%012" PRIx64 " " 46466296a799SMichael Clark #define INST_FMT_8 "%016" PRIx64 " " 46476296a799SMichael Clark 4648ea103259SMichael Clark static int 4649ea103259SMichael Clark print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa) 4650ea103259SMichael Clark { 4651ea103259SMichael Clark char buf[128] = { 0 }; 4652ea103259SMichael Clark bfd_byte packet[2]; 4653ea103259SMichael Clark rv_inst inst = 0; 4654ea103259SMichael Clark size_t len = 2; 4655ea103259SMichael Clark bfd_vma n; 4656ea103259SMichael Clark int status; 4657ea103259SMichael Clark 4658ea103259SMichael Clark /* Instructions are made of 2-byte packets in little-endian order */ 4659ea103259SMichael Clark for (n = 0; n < len; n += 2) { 4660ea103259SMichael Clark status = (*info->read_memory_func)(memaddr + n, packet, 2, info); 4661ea103259SMichael Clark if (status != 0) { 4662ea103259SMichael Clark /* Don't fail just because we fell off the end. */ 4663ea103259SMichael Clark if (n > 0) { 4664ea103259SMichael Clark break; 4665ea103259SMichael Clark } 4666ea103259SMichael Clark (*info->memory_error_func)(status, memaddr, info); 4667ea103259SMichael Clark return status; 4668ea103259SMichael Clark } 4669ea103259SMichael Clark inst |= ((rv_inst) bfd_getl16(packet)) << (8 * n); 4670ea103259SMichael Clark if (n == 0) { 4671ea103259SMichael Clark len = inst_length(inst); 4672ea103259SMichael Clark } 4673ea103259SMichael Clark } 4674ea103259SMichael Clark 46756296a799SMichael Clark switch (len) { 46766296a799SMichael Clark case 2: 46776296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_2, inst); 46786296a799SMichael Clark break; 46796296a799SMichael Clark case 4: 46806296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_4, inst); 46816296a799SMichael Clark break; 46826296a799SMichael Clark case 6: 46836296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_6, inst); 46846296a799SMichael Clark break; 46856296a799SMichael Clark default: 46866296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_8, inst); 46876296a799SMichael Clark break; 46886296a799SMichael Clark } 46896296a799SMichael Clark 4690ea103259SMichael Clark disasm_inst(buf, sizeof(buf), isa, memaddr, inst); 4691ea103259SMichael Clark (*info->fprintf_func)(info->stream, "%s", buf); 4692ea103259SMichael Clark 4693ea103259SMichael Clark return len; 4694ea103259SMichael Clark } 4695ea103259SMichael Clark 4696ea103259SMichael Clark int print_insn_riscv32(bfd_vma memaddr, struct disassemble_info *info) 4697ea103259SMichael Clark { 4698ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv32); 4699ea103259SMichael Clark } 4700ea103259SMichael Clark 4701ea103259SMichael Clark int print_insn_riscv64(bfd_vma memaddr, struct disassemble_info *info) 4702ea103259SMichael Clark { 4703ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv64); 4704ea103259SMichael Clark } 4705332dab68SFrédéric Pétrot 4706332dab68SFrédéric Pétrot int print_insn_riscv128(bfd_vma memaddr, struct disassemble_info *info) 4707332dab68SFrédéric Pétrot { 4708332dab68SFrédéric Pétrot return print_insn_riscv(memaddr, info, rv128); 4709332dab68SFrédéric Pétrot } 4710