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" 22*454c2201SWeiwei Li #include "target/riscv/cpu_cfg.h" 23ea103259SMichael Clark 24ea103259SMichael Clark /* types */ 25ea103259SMichael Clark 26ea103259SMichael Clark typedef uint64_t rv_inst; 27ea103259SMichael Clark typedef uint16_t rv_opcode; 28ea103259SMichael Clark 29ea103259SMichael Clark /* enums */ 30ea103259SMichael Clark 31ea103259SMichael Clark typedef enum { 32ea103259SMichael Clark rv32, 33ea103259SMichael Clark rv64, 34ea103259SMichael Clark rv128 35ea103259SMichael Clark } rv_isa; 36ea103259SMichael Clark 37ea103259SMichael Clark typedef enum { 38ea103259SMichael Clark rv_rm_rne = 0, 39ea103259SMichael Clark rv_rm_rtz = 1, 40ea103259SMichael Clark rv_rm_rdn = 2, 41ea103259SMichael Clark rv_rm_rup = 3, 42ea103259SMichael Clark rv_rm_rmm = 4, 43ea103259SMichael Clark rv_rm_dyn = 7, 44ea103259SMichael Clark } rv_rm; 45ea103259SMichael Clark 46ea103259SMichael Clark typedef enum { 47ea103259SMichael Clark rv_fence_i = 8, 48ea103259SMichael Clark rv_fence_o = 4, 49ea103259SMichael Clark rv_fence_r = 2, 50ea103259SMichael Clark rv_fence_w = 1, 51ea103259SMichael Clark } rv_fence; 52ea103259SMichael Clark 53ea103259SMichael Clark typedef enum { 54ea103259SMichael Clark rv_ireg_zero, 55ea103259SMichael Clark rv_ireg_ra, 56ea103259SMichael Clark rv_ireg_sp, 57ea103259SMichael Clark rv_ireg_gp, 58ea103259SMichael Clark rv_ireg_tp, 59ea103259SMichael Clark rv_ireg_t0, 60ea103259SMichael Clark rv_ireg_t1, 61ea103259SMichael Clark rv_ireg_t2, 62ea103259SMichael Clark rv_ireg_s0, 63ea103259SMichael Clark rv_ireg_s1, 64ea103259SMichael Clark rv_ireg_a0, 65ea103259SMichael Clark rv_ireg_a1, 66ea103259SMichael Clark rv_ireg_a2, 67ea103259SMichael Clark rv_ireg_a3, 68ea103259SMichael Clark rv_ireg_a4, 69ea103259SMichael Clark rv_ireg_a5, 70ea103259SMichael Clark rv_ireg_a6, 71ea103259SMichael Clark rv_ireg_a7, 72ea103259SMichael Clark rv_ireg_s2, 73ea103259SMichael Clark rv_ireg_s3, 74ea103259SMichael Clark rv_ireg_s4, 75ea103259SMichael Clark rv_ireg_s5, 76ea103259SMichael Clark rv_ireg_s6, 77ea103259SMichael Clark rv_ireg_s7, 78ea103259SMichael Clark rv_ireg_s8, 79ea103259SMichael Clark rv_ireg_s9, 80ea103259SMichael Clark rv_ireg_s10, 81ea103259SMichael Clark rv_ireg_s11, 82ea103259SMichael Clark rv_ireg_t3, 83ea103259SMichael Clark rv_ireg_t4, 84ea103259SMichael Clark rv_ireg_t5, 85ea103259SMichael Clark rv_ireg_t6, 86ea103259SMichael Clark } rv_ireg; 87ea103259SMichael Clark 88ea103259SMichael Clark typedef enum { 89ea103259SMichael Clark rvc_end, 90ea103259SMichael Clark rvc_rd_eq_ra, 91ea103259SMichael Clark rvc_rd_eq_x0, 92ea103259SMichael Clark rvc_rs1_eq_x0, 93ea103259SMichael Clark rvc_rs2_eq_x0, 94ea103259SMichael Clark rvc_rs2_eq_rs1, 95ea103259SMichael Clark rvc_rs1_eq_ra, 96ea103259SMichael Clark rvc_imm_eq_zero, 97ea103259SMichael Clark rvc_imm_eq_n1, 98ea103259SMichael Clark rvc_imm_eq_p1, 99ea103259SMichael Clark rvc_csr_eq_0x001, 100ea103259SMichael Clark rvc_csr_eq_0x002, 101ea103259SMichael Clark rvc_csr_eq_0x003, 102ea103259SMichael Clark rvc_csr_eq_0xc00, 103ea103259SMichael Clark rvc_csr_eq_0xc01, 104ea103259SMichael Clark rvc_csr_eq_0xc02, 105ea103259SMichael Clark rvc_csr_eq_0xc80, 106ea103259SMichael Clark rvc_csr_eq_0xc81, 107ea103259SMichael Clark rvc_csr_eq_0xc82, 108ea103259SMichael Clark } rvc_constraint; 109ea103259SMichael Clark 110ea103259SMichael Clark typedef enum { 111ea103259SMichael Clark rv_codec_illegal, 112ea103259SMichael Clark rv_codec_none, 113ea103259SMichael Clark rv_codec_u, 114ea103259SMichael Clark rv_codec_uj, 115ea103259SMichael Clark rv_codec_i, 116ea103259SMichael Clark rv_codec_i_sh5, 117ea103259SMichael Clark rv_codec_i_sh6, 118ea103259SMichael Clark rv_codec_i_sh7, 119ea103259SMichael Clark rv_codec_i_csr, 120ea103259SMichael Clark rv_codec_s, 121ea103259SMichael Clark rv_codec_sb, 122ea103259SMichael Clark rv_codec_r, 123ea103259SMichael Clark rv_codec_r_m, 124ea103259SMichael Clark rv_codec_r4_m, 125ea103259SMichael Clark rv_codec_r_a, 126ea103259SMichael Clark rv_codec_r_l, 127ea103259SMichael Clark rv_codec_r_f, 128ea103259SMichael Clark rv_codec_cb, 129ea103259SMichael Clark rv_codec_cb_imm, 130ea103259SMichael Clark rv_codec_cb_sh5, 131ea103259SMichael Clark rv_codec_cb_sh6, 132ea103259SMichael Clark rv_codec_ci, 133ea103259SMichael Clark rv_codec_ci_sh5, 134ea103259SMichael Clark rv_codec_ci_sh6, 135ea103259SMichael Clark rv_codec_ci_16sp, 136ea103259SMichael Clark rv_codec_ci_lwsp, 137ea103259SMichael Clark rv_codec_ci_ldsp, 138ea103259SMichael Clark rv_codec_ci_lqsp, 139ea103259SMichael Clark rv_codec_ci_li, 140ea103259SMichael Clark rv_codec_ci_lui, 141ea103259SMichael Clark rv_codec_ci_none, 142ea103259SMichael Clark rv_codec_ciw_4spn, 143ea103259SMichael Clark rv_codec_cj, 144ea103259SMichael Clark rv_codec_cj_jal, 145ea103259SMichael Clark rv_codec_cl_lw, 146ea103259SMichael Clark rv_codec_cl_ld, 147ea103259SMichael Clark rv_codec_cl_lq, 148ea103259SMichael Clark rv_codec_cr, 149ea103259SMichael Clark rv_codec_cr_mv, 150ea103259SMichael Clark rv_codec_cr_jalr, 151ea103259SMichael Clark rv_codec_cr_jr, 152ea103259SMichael Clark rv_codec_cs, 153ea103259SMichael Clark rv_codec_cs_sw, 154ea103259SMichael Clark rv_codec_cs_sd, 155ea103259SMichael Clark rv_codec_cs_sq, 156ea103259SMichael Clark rv_codec_css_swsp, 157ea103259SMichael Clark rv_codec_css_sdsp, 158ea103259SMichael Clark rv_codec_css_sqsp, 1595748c886SWeiwei Li rv_codec_k_bs, 1605748c886SWeiwei Li rv_codec_k_rnum, 16107f4964dSYang Liu rv_codec_v_r, 16207f4964dSYang Liu rv_codec_v_ldst, 16307f4964dSYang Liu rv_codec_v_i, 16407f4964dSYang Liu rv_codec_vsetvli, 16507f4964dSYang Liu rv_codec_vsetivli, 1662c71d02eSWeiwei Li rv_codec_zcb_ext, 1672c71d02eSWeiwei Li rv_codec_zcb_mul, 1682c71d02eSWeiwei Li rv_codec_zcb_lb, 1692c71d02eSWeiwei Li rv_codec_zcb_lh, 1702c71d02eSWeiwei Li rv_codec_zcmp_cm_pushpop, 1712c71d02eSWeiwei Li rv_codec_zcmp_cm_mv, 1722c71d02eSWeiwei Li rv_codec_zcmt_jt, 173ea103259SMichael Clark } rv_codec; 174ea103259SMichael Clark 175ea103259SMichael Clark typedef enum { 176ea103259SMichael Clark rv_op_illegal = 0, 177ea103259SMichael Clark rv_op_lui = 1, 178ea103259SMichael Clark rv_op_auipc = 2, 179ea103259SMichael Clark rv_op_jal = 3, 180ea103259SMichael Clark rv_op_jalr = 4, 181ea103259SMichael Clark rv_op_beq = 5, 182ea103259SMichael Clark rv_op_bne = 6, 183ea103259SMichael Clark rv_op_blt = 7, 184ea103259SMichael Clark rv_op_bge = 8, 185ea103259SMichael Clark rv_op_bltu = 9, 186ea103259SMichael Clark rv_op_bgeu = 10, 187ea103259SMichael Clark rv_op_lb = 11, 188ea103259SMichael Clark rv_op_lh = 12, 189ea103259SMichael Clark rv_op_lw = 13, 190ea103259SMichael Clark rv_op_lbu = 14, 191ea103259SMichael Clark rv_op_lhu = 15, 192ea103259SMichael Clark rv_op_sb = 16, 193ea103259SMichael Clark rv_op_sh = 17, 194ea103259SMichael Clark rv_op_sw = 18, 195ea103259SMichael Clark rv_op_addi = 19, 196ea103259SMichael Clark rv_op_slti = 20, 197ea103259SMichael Clark rv_op_sltiu = 21, 198ea103259SMichael Clark rv_op_xori = 22, 199ea103259SMichael Clark rv_op_ori = 23, 200ea103259SMichael Clark rv_op_andi = 24, 201ea103259SMichael Clark rv_op_slli = 25, 202ea103259SMichael Clark rv_op_srli = 26, 203ea103259SMichael Clark rv_op_srai = 27, 204ea103259SMichael Clark rv_op_add = 28, 205ea103259SMichael Clark rv_op_sub = 29, 206ea103259SMichael Clark rv_op_sll = 30, 207ea103259SMichael Clark rv_op_slt = 31, 208ea103259SMichael Clark rv_op_sltu = 32, 209ea103259SMichael Clark rv_op_xor = 33, 210ea103259SMichael Clark rv_op_srl = 34, 211ea103259SMichael Clark rv_op_sra = 35, 212ea103259SMichael Clark rv_op_or = 36, 213ea103259SMichael Clark rv_op_and = 37, 214ea103259SMichael Clark rv_op_fence = 38, 215ea103259SMichael Clark rv_op_fence_i = 39, 216ea103259SMichael Clark rv_op_lwu = 40, 217ea103259SMichael Clark rv_op_ld = 41, 218ea103259SMichael Clark rv_op_sd = 42, 219ea103259SMichael Clark rv_op_addiw = 43, 220ea103259SMichael Clark rv_op_slliw = 44, 221ea103259SMichael Clark rv_op_srliw = 45, 222ea103259SMichael Clark rv_op_sraiw = 46, 223ea103259SMichael Clark rv_op_addw = 47, 224ea103259SMichael Clark rv_op_subw = 48, 225ea103259SMichael Clark rv_op_sllw = 49, 226ea103259SMichael Clark rv_op_srlw = 50, 227ea103259SMichael Clark rv_op_sraw = 51, 228ea103259SMichael Clark rv_op_ldu = 52, 229ea103259SMichael Clark rv_op_lq = 53, 230ea103259SMichael Clark rv_op_sq = 54, 231ea103259SMichael Clark rv_op_addid = 55, 232ea103259SMichael Clark rv_op_sllid = 56, 233ea103259SMichael Clark rv_op_srlid = 57, 234ea103259SMichael Clark rv_op_sraid = 58, 235ea103259SMichael Clark rv_op_addd = 59, 236ea103259SMichael Clark rv_op_subd = 60, 237ea103259SMichael Clark rv_op_slld = 61, 238ea103259SMichael Clark rv_op_srld = 62, 239ea103259SMichael Clark rv_op_srad = 63, 240ea103259SMichael Clark rv_op_mul = 64, 241ea103259SMichael Clark rv_op_mulh = 65, 242ea103259SMichael Clark rv_op_mulhsu = 66, 243ea103259SMichael Clark rv_op_mulhu = 67, 244ea103259SMichael Clark rv_op_div = 68, 245ea103259SMichael Clark rv_op_divu = 69, 246ea103259SMichael Clark rv_op_rem = 70, 247ea103259SMichael Clark rv_op_remu = 71, 248ea103259SMichael Clark rv_op_mulw = 72, 249ea103259SMichael Clark rv_op_divw = 73, 250ea103259SMichael Clark rv_op_divuw = 74, 251ea103259SMichael Clark rv_op_remw = 75, 252ea103259SMichael Clark rv_op_remuw = 76, 253ea103259SMichael Clark rv_op_muld = 77, 254ea103259SMichael Clark rv_op_divd = 78, 255ea103259SMichael Clark rv_op_divud = 79, 256ea103259SMichael Clark rv_op_remd = 80, 257ea103259SMichael Clark rv_op_remud = 81, 258ea103259SMichael Clark rv_op_lr_w = 82, 259ea103259SMichael Clark rv_op_sc_w = 83, 260ea103259SMichael Clark rv_op_amoswap_w = 84, 261ea103259SMichael Clark rv_op_amoadd_w = 85, 262ea103259SMichael Clark rv_op_amoxor_w = 86, 263ea103259SMichael Clark rv_op_amoor_w = 87, 264ea103259SMichael Clark rv_op_amoand_w = 88, 265ea103259SMichael Clark rv_op_amomin_w = 89, 266ea103259SMichael Clark rv_op_amomax_w = 90, 267ea103259SMichael Clark rv_op_amominu_w = 91, 268ea103259SMichael Clark rv_op_amomaxu_w = 92, 269ea103259SMichael Clark rv_op_lr_d = 93, 270ea103259SMichael Clark rv_op_sc_d = 94, 271ea103259SMichael Clark rv_op_amoswap_d = 95, 272ea103259SMichael Clark rv_op_amoadd_d = 96, 273ea103259SMichael Clark rv_op_amoxor_d = 97, 274ea103259SMichael Clark rv_op_amoor_d = 98, 275ea103259SMichael Clark rv_op_amoand_d = 99, 276ea103259SMichael Clark rv_op_amomin_d = 100, 277ea103259SMichael Clark rv_op_amomax_d = 101, 278ea103259SMichael Clark rv_op_amominu_d = 102, 279ea103259SMichael Clark rv_op_amomaxu_d = 103, 280ea103259SMichael Clark rv_op_lr_q = 104, 281ea103259SMichael Clark rv_op_sc_q = 105, 282ea103259SMichael Clark rv_op_amoswap_q = 106, 283ea103259SMichael Clark rv_op_amoadd_q = 107, 284ea103259SMichael Clark rv_op_amoxor_q = 108, 285ea103259SMichael Clark rv_op_amoor_q = 109, 286ea103259SMichael Clark rv_op_amoand_q = 110, 287ea103259SMichael Clark rv_op_amomin_q = 111, 288ea103259SMichael Clark rv_op_amomax_q = 112, 289ea103259SMichael Clark rv_op_amominu_q = 113, 290ea103259SMichael Clark rv_op_amomaxu_q = 114, 291ea103259SMichael Clark rv_op_ecall = 115, 292ea103259SMichael Clark rv_op_ebreak = 116, 293ea103259SMichael Clark rv_op_uret = 117, 294ea103259SMichael Clark rv_op_sret = 118, 295ea103259SMichael Clark rv_op_hret = 119, 296ea103259SMichael Clark rv_op_mret = 120, 297ea103259SMichael Clark rv_op_dret = 121, 298ea103259SMichael Clark rv_op_sfence_vm = 122, 299ea103259SMichael Clark rv_op_sfence_vma = 123, 300ea103259SMichael Clark rv_op_wfi = 124, 301ea103259SMichael Clark rv_op_csrrw = 125, 302ea103259SMichael Clark rv_op_csrrs = 126, 303ea103259SMichael Clark rv_op_csrrc = 127, 304ea103259SMichael Clark rv_op_csrrwi = 128, 305ea103259SMichael Clark rv_op_csrrsi = 129, 306ea103259SMichael Clark rv_op_csrrci = 130, 307ea103259SMichael Clark rv_op_flw = 131, 308ea103259SMichael Clark rv_op_fsw = 132, 309ea103259SMichael Clark rv_op_fmadd_s = 133, 310ea103259SMichael Clark rv_op_fmsub_s = 134, 311ea103259SMichael Clark rv_op_fnmsub_s = 135, 312ea103259SMichael Clark rv_op_fnmadd_s = 136, 313ea103259SMichael Clark rv_op_fadd_s = 137, 314ea103259SMichael Clark rv_op_fsub_s = 138, 315ea103259SMichael Clark rv_op_fmul_s = 139, 316ea103259SMichael Clark rv_op_fdiv_s = 140, 317ea103259SMichael Clark rv_op_fsgnj_s = 141, 318ea103259SMichael Clark rv_op_fsgnjn_s = 142, 319ea103259SMichael Clark rv_op_fsgnjx_s = 143, 320ea103259SMichael Clark rv_op_fmin_s = 144, 321ea103259SMichael Clark rv_op_fmax_s = 145, 322ea103259SMichael Clark rv_op_fsqrt_s = 146, 323ea103259SMichael Clark rv_op_fle_s = 147, 324ea103259SMichael Clark rv_op_flt_s = 148, 325ea103259SMichael Clark rv_op_feq_s = 149, 326ea103259SMichael Clark rv_op_fcvt_w_s = 150, 327ea103259SMichael Clark rv_op_fcvt_wu_s = 151, 328ea103259SMichael Clark rv_op_fcvt_s_w = 152, 329ea103259SMichael Clark rv_op_fcvt_s_wu = 153, 330ea103259SMichael Clark rv_op_fmv_x_s = 154, 331ea103259SMichael Clark rv_op_fclass_s = 155, 332ea103259SMichael Clark rv_op_fmv_s_x = 156, 333ea103259SMichael Clark rv_op_fcvt_l_s = 157, 334ea103259SMichael Clark rv_op_fcvt_lu_s = 158, 335ea103259SMichael Clark rv_op_fcvt_s_l = 159, 336ea103259SMichael Clark rv_op_fcvt_s_lu = 160, 337ea103259SMichael Clark rv_op_fld = 161, 338ea103259SMichael Clark rv_op_fsd = 162, 339ea103259SMichael Clark rv_op_fmadd_d = 163, 340ea103259SMichael Clark rv_op_fmsub_d = 164, 341ea103259SMichael Clark rv_op_fnmsub_d = 165, 342ea103259SMichael Clark rv_op_fnmadd_d = 166, 343ea103259SMichael Clark rv_op_fadd_d = 167, 344ea103259SMichael Clark rv_op_fsub_d = 168, 345ea103259SMichael Clark rv_op_fmul_d = 169, 346ea103259SMichael Clark rv_op_fdiv_d = 170, 347ea103259SMichael Clark rv_op_fsgnj_d = 171, 348ea103259SMichael Clark rv_op_fsgnjn_d = 172, 349ea103259SMichael Clark rv_op_fsgnjx_d = 173, 350ea103259SMichael Clark rv_op_fmin_d = 174, 351ea103259SMichael Clark rv_op_fmax_d = 175, 352ea103259SMichael Clark rv_op_fcvt_s_d = 176, 353ea103259SMichael Clark rv_op_fcvt_d_s = 177, 354ea103259SMichael Clark rv_op_fsqrt_d = 178, 355ea103259SMichael Clark rv_op_fle_d = 179, 356ea103259SMichael Clark rv_op_flt_d = 180, 357ea103259SMichael Clark rv_op_feq_d = 181, 358ea103259SMichael Clark rv_op_fcvt_w_d = 182, 359ea103259SMichael Clark rv_op_fcvt_wu_d = 183, 360ea103259SMichael Clark rv_op_fcvt_d_w = 184, 361ea103259SMichael Clark rv_op_fcvt_d_wu = 185, 362ea103259SMichael Clark rv_op_fclass_d = 186, 363ea103259SMichael Clark rv_op_fcvt_l_d = 187, 364ea103259SMichael Clark rv_op_fcvt_lu_d = 188, 365ea103259SMichael Clark rv_op_fmv_x_d = 189, 366ea103259SMichael Clark rv_op_fcvt_d_l = 190, 367ea103259SMichael Clark rv_op_fcvt_d_lu = 191, 368ea103259SMichael Clark rv_op_fmv_d_x = 192, 369ea103259SMichael Clark rv_op_flq = 193, 370ea103259SMichael Clark rv_op_fsq = 194, 371ea103259SMichael Clark rv_op_fmadd_q = 195, 372ea103259SMichael Clark rv_op_fmsub_q = 196, 373ea103259SMichael Clark rv_op_fnmsub_q = 197, 374ea103259SMichael Clark rv_op_fnmadd_q = 198, 375ea103259SMichael Clark rv_op_fadd_q = 199, 376ea103259SMichael Clark rv_op_fsub_q = 200, 377ea103259SMichael Clark rv_op_fmul_q = 201, 378ea103259SMichael Clark rv_op_fdiv_q = 202, 379ea103259SMichael Clark rv_op_fsgnj_q = 203, 380ea103259SMichael Clark rv_op_fsgnjn_q = 204, 381ea103259SMichael Clark rv_op_fsgnjx_q = 205, 382ea103259SMichael Clark rv_op_fmin_q = 206, 383ea103259SMichael Clark rv_op_fmax_q = 207, 384ea103259SMichael Clark rv_op_fcvt_s_q = 208, 385ea103259SMichael Clark rv_op_fcvt_q_s = 209, 386ea103259SMichael Clark rv_op_fcvt_d_q = 210, 387ea103259SMichael Clark rv_op_fcvt_q_d = 211, 388ea103259SMichael Clark rv_op_fsqrt_q = 212, 389ea103259SMichael Clark rv_op_fle_q = 213, 390ea103259SMichael Clark rv_op_flt_q = 214, 391ea103259SMichael Clark rv_op_feq_q = 215, 392ea103259SMichael Clark rv_op_fcvt_w_q = 216, 393ea103259SMichael Clark rv_op_fcvt_wu_q = 217, 394ea103259SMichael Clark rv_op_fcvt_q_w = 218, 395ea103259SMichael Clark rv_op_fcvt_q_wu = 219, 396ea103259SMichael Clark rv_op_fclass_q = 220, 397ea103259SMichael Clark rv_op_fcvt_l_q = 221, 398ea103259SMichael Clark rv_op_fcvt_lu_q = 222, 399ea103259SMichael Clark rv_op_fcvt_q_l = 223, 400ea103259SMichael Clark rv_op_fcvt_q_lu = 224, 401ea103259SMichael Clark rv_op_fmv_x_q = 225, 402ea103259SMichael Clark rv_op_fmv_q_x = 226, 403ea103259SMichael Clark rv_op_c_addi4spn = 227, 404ea103259SMichael Clark rv_op_c_fld = 228, 405ea103259SMichael Clark rv_op_c_lw = 229, 406ea103259SMichael Clark rv_op_c_flw = 230, 407ea103259SMichael Clark rv_op_c_fsd = 231, 408ea103259SMichael Clark rv_op_c_sw = 232, 409ea103259SMichael Clark rv_op_c_fsw = 233, 410ea103259SMichael Clark rv_op_c_nop = 234, 411ea103259SMichael Clark rv_op_c_addi = 235, 412ea103259SMichael Clark rv_op_c_jal = 236, 413ea103259SMichael Clark rv_op_c_li = 237, 414ea103259SMichael Clark rv_op_c_addi16sp = 238, 415ea103259SMichael Clark rv_op_c_lui = 239, 416ea103259SMichael Clark rv_op_c_srli = 240, 417ea103259SMichael Clark rv_op_c_srai = 241, 418ea103259SMichael Clark rv_op_c_andi = 242, 419ea103259SMichael Clark rv_op_c_sub = 243, 420ea103259SMichael Clark rv_op_c_xor = 244, 421ea103259SMichael Clark rv_op_c_or = 245, 422ea103259SMichael Clark rv_op_c_and = 246, 423ea103259SMichael Clark rv_op_c_subw = 247, 424ea103259SMichael Clark rv_op_c_addw = 248, 425ea103259SMichael Clark rv_op_c_j = 249, 426ea103259SMichael Clark rv_op_c_beqz = 250, 427ea103259SMichael Clark rv_op_c_bnez = 251, 428ea103259SMichael Clark rv_op_c_slli = 252, 429ea103259SMichael Clark rv_op_c_fldsp = 253, 430ea103259SMichael Clark rv_op_c_lwsp = 254, 431ea103259SMichael Clark rv_op_c_flwsp = 255, 432ea103259SMichael Clark rv_op_c_jr = 256, 433ea103259SMichael Clark rv_op_c_mv = 257, 434ea103259SMichael Clark rv_op_c_ebreak = 258, 435ea103259SMichael Clark rv_op_c_jalr = 259, 436ea103259SMichael Clark rv_op_c_add = 260, 437ea103259SMichael Clark rv_op_c_fsdsp = 261, 438ea103259SMichael Clark rv_op_c_swsp = 262, 439ea103259SMichael Clark rv_op_c_fswsp = 263, 440ea103259SMichael Clark rv_op_c_ld = 264, 441ea103259SMichael Clark rv_op_c_sd = 265, 442ea103259SMichael Clark rv_op_c_addiw = 266, 443ea103259SMichael Clark rv_op_c_ldsp = 267, 444ea103259SMichael Clark rv_op_c_sdsp = 268, 445ea103259SMichael Clark rv_op_c_lq = 269, 446ea103259SMichael Clark rv_op_c_sq = 270, 447ea103259SMichael Clark rv_op_c_lqsp = 271, 448ea103259SMichael Clark rv_op_c_sqsp = 272, 449ea103259SMichael Clark rv_op_nop = 273, 450ea103259SMichael Clark rv_op_mv = 274, 451ea103259SMichael Clark rv_op_not = 275, 452ea103259SMichael Clark rv_op_neg = 276, 453ea103259SMichael Clark rv_op_negw = 277, 454ea103259SMichael Clark rv_op_sext_w = 278, 455ea103259SMichael Clark rv_op_seqz = 279, 456ea103259SMichael Clark rv_op_snez = 280, 457ea103259SMichael Clark rv_op_sltz = 281, 458ea103259SMichael Clark rv_op_sgtz = 282, 459ea103259SMichael Clark rv_op_fmv_s = 283, 460ea103259SMichael Clark rv_op_fabs_s = 284, 461ea103259SMichael Clark rv_op_fneg_s = 285, 462ea103259SMichael Clark rv_op_fmv_d = 286, 463ea103259SMichael Clark rv_op_fabs_d = 287, 464ea103259SMichael Clark rv_op_fneg_d = 288, 465ea103259SMichael Clark rv_op_fmv_q = 289, 466ea103259SMichael Clark rv_op_fabs_q = 290, 467ea103259SMichael Clark rv_op_fneg_q = 291, 468ea103259SMichael Clark rv_op_beqz = 292, 469ea103259SMichael Clark rv_op_bnez = 293, 470ea103259SMichael Clark rv_op_blez = 294, 471ea103259SMichael Clark rv_op_bgez = 295, 472ea103259SMichael Clark rv_op_bltz = 296, 473ea103259SMichael Clark rv_op_bgtz = 297, 474ea103259SMichael Clark rv_op_ble = 298, 475ea103259SMichael Clark rv_op_bleu = 299, 476ea103259SMichael Clark rv_op_bgt = 300, 477ea103259SMichael Clark rv_op_bgtu = 301, 478ea103259SMichael Clark rv_op_j = 302, 479ea103259SMichael Clark rv_op_ret = 303, 480ea103259SMichael Clark rv_op_jr = 304, 481ea103259SMichael Clark rv_op_rdcycle = 305, 482ea103259SMichael Clark rv_op_rdtime = 306, 483ea103259SMichael Clark rv_op_rdinstret = 307, 484ea103259SMichael Clark rv_op_rdcycleh = 308, 485ea103259SMichael Clark rv_op_rdtimeh = 309, 486ea103259SMichael Clark rv_op_rdinstreth = 310, 487ea103259SMichael Clark rv_op_frcsr = 311, 488ea103259SMichael Clark rv_op_frrm = 312, 489ea103259SMichael Clark rv_op_frflags = 313, 490ea103259SMichael Clark rv_op_fscsr = 314, 491ea103259SMichael Clark rv_op_fsrm = 315, 492ea103259SMichael Clark rv_op_fsflags = 316, 493ea103259SMichael Clark rv_op_fsrmi = 317, 494ea103259SMichael Clark rv_op_fsflagsi = 318, 49502c1b569SPhilipp Tomsich rv_op_bseti = 319, 49602c1b569SPhilipp Tomsich rv_op_bclri = 320, 49702c1b569SPhilipp Tomsich rv_op_binvi = 321, 49802c1b569SPhilipp Tomsich rv_op_bexti = 322, 49902c1b569SPhilipp Tomsich rv_op_rori = 323, 50002c1b569SPhilipp Tomsich rv_op_clz = 324, 50102c1b569SPhilipp Tomsich rv_op_ctz = 325, 50202c1b569SPhilipp Tomsich rv_op_cpop = 326, 50302c1b569SPhilipp Tomsich rv_op_sext_h = 327, 50402c1b569SPhilipp Tomsich rv_op_sext_b = 328, 50502c1b569SPhilipp Tomsich rv_op_xnor = 329, 50602c1b569SPhilipp Tomsich rv_op_orn = 330, 50702c1b569SPhilipp Tomsich rv_op_andn = 331, 50802c1b569SPhilipp Tomsich rv_op_rol = 332, 50902c1b569SPhilipp Tomsich rv_op_ror = 333, 51002c1b569SPhilipp Tomsich rv_op_sh1add = 334, 51102c1b569SPhilipp Tomsich rv_op_sh2add = 335, 51202c1b569SPhilipp Tomsich rv_op_sh3add = 336, 51302c1b569SPhilipp Tomsich rv_op_sh1add_uw = 337, 51402c1b569SPhilipp Tomsich rv_op_sh2add_uw = 338, 51502c1b569SPhilipp Tomsich rv_op_sh3add_uw = 339, 51602c1b569SPhilipp Tomsich rv_op_clmul = 340, 51702c1b569SPhilipp Tomsich rv_op_clmulr = 341, 51802c1b569SPhilipp Tomsich rv_op_clmulh = 342, 51902c1b569SPhilipp Tomsich rv_op_min = 343, 52002c1b569SPhilipp Tomsich rv_op_minu = 344, 52102c1b569SPhilipp Tomsich rv_op_max = 345, 52202c1b569SPhilipp Tomsich rv_op_maxu = 346, 52302c1b569SPhilipp Tomsich rv_op_clzw = 347, 52402c1b569SPhilipp Tomsich rv_op_ctzw = 348, 52502c1b569SPhilipp Tomsich rv_op_cpopw = 349, 52602c1b569SPhilipp Tomsich rv_op_slli_uw = 350, 52702c1b569SPhilipp Tomsich rv_op_add_uw = 351, 52802c1b569SPhilipp Tomsich rv_op_rolw = 352, 52902c1b569SPhilipp Tomsich rv_op_rorw = 353, 53002c1b569SPhilipp Tomsich rv_op_rev8 = 354, 53102c1b569SPhilipp Tomsich rv_op_zext_h = 355, 53202c1b569SPhilipp Tomsich rv_op_roriw = 356, 53302c1b569SPhilipp Tomsich rv_op_orc_b = 357, 53402c1b569SPhilipp Tomsich rv_op_bset = 358, 53502c1b569SPhilipp Tomsich rv_op_bclr = 359, 53602c1b569SPhilipp Tomsich rv_op_binv = 360, 53702c1b569SPhilipp Tomsich rv_op_bext = 361, 5385748c886SWeiwei Li rv_op_aes32esmi = 362, 5395748c886SWeiwei Li rv_op_aes32esi = 363, 5405748c886SWeiwei Li rv_op_aes32dsmi = 364, 5415748c886SWeiwei Li rv_op_aes32dsi = 365, 5425748c886SWeiwei Li rv_op_aes64ks1i = 366, 5435748c886SWeiwei Li rv_op_aes64ks2 = 367, 5445748c886SWeiwei Li rv_op_aes64im = 368, 5455748c886SWeiwei Li rv_op_aes64esm = 369, 5465748c886SWeiwei Li rv_op_aes64es = 370, 5475748c886SWeiwei Li rv_op_aes64dsm = 371, 5485748c886SWeiwei Li rv_op_aes64ds = 372, 5495748c886SWeiwei Li rv_op_sha256sig0 = 373, 5505748c886SWeiwei Li rv_op_sha256sig1 = 374, 5515748c886SWeiwei Li rv_op_sha256sum0 = 375, 5525748c886SWeiwei Li rv_op_sha256sum1 = 376, 5535748c886SWeiwei Li rv_op_sha512sig0 = 377, 5545748c886SWeiwei Li rv_op_sha512sig1 = 378, 5555748c886SWeiwei Li rv_op_sha512sum0 = 379, 5565748c886SWeiwei Li rv_op_sha512sum1 = 380, 5575748c886SWeiwei Li rv_op_sha512sum0r = 381, 5585748c886SWeiwei Li rv_op_sha512sum1r = 382, 5595748c886SWeiwei Li rv_op_sha512sig0l = 383, 5605748c886SWeiwei Li rv_op_sha512sig0h = 384, 5615748c886SWeiwei Li rv_op_sha512sig1l = 385, 5625748c886SWeiwei Li rv_op_sha512sig1h = 386, 5635748c886SWeiwei Li rv_op_sm3p0 = 387, 5645748c886SWeiwei Li rv_op_sm3p1 = 388, 5655748c886SWeiwei Li rv_op_sm4ed = 389, 5665748c886SWeiwei Li rv_op_sm4ks = 390, 5675748c886SWeiwei Li rv_op_brev8 = 391, 5685748c886SWeiwei Li rv_op_pack = 392, 5695748c886SWeiwei Li rv_op_packh = 393, 5705748c886SWeiwei Li rv_op_packw = 394, 5715748c886SWeiwei Li rv_op_unzip = 395, 5725748c886SWeiwei Li rv_op_zip = 396, 5735748c886SWeiwei Li rv_op_xperm4 = 397, 5745748c886SWeiwei Li rv_op_xperm8 = 398, 57507f4964dSYang Liu rv_op_vle8_v = 399, 57607f4964dSYang Liu rv_op_vle16_v = 400, 57707f4964dSYang Liu rv_op_vle32_v = 401, 57807f4964dSYang Liu rv_op_vle64_v = 402, 57907f4964dSYang Liu rv_op_vse8_v = 403, 58007f4964dSYang Liu rv_op_vse16_v = 404, 58107f4964dSYang Liu rv_op_vse32_v = 405, 58207f4964dSYang Liu rv_op_vse64_v = 406, 58307f4964dSYang Liu rv_op_vlm_v = 407, 58407f4964dSYang Liu rv_op_vsm_v = 408, 58507f4964dSYang Liu rv_op_vlse8_v = 409, 58607f4964dSYang Liu rv_op_vlse16_v = 410, 58707f4964dSYang Liu rv_op_vlse32_v = 411, 58807f4964dSYang Liu rv_op_vlse64_v = 412, 58907f4964dSYang Liu rv_op_vsse8_v = 413, 59007f4964dSYang Liu rv_op_vsse16_v = 414, 59107f4964dSYang Liu rv_op_vsse32_v = 415, 59207f4964dSYang Liu rv_op_vsse64_v = 416, 59307f4964dSYang Liu rv_op_vluxei8_v = 417, 59407f4964dSYang Liu rv_op_vluxei16_v = 418, 59507f4964dSYang Liu rv_op_vluxei32_v = 419, 59607f4964dSYang Liu rv_op_vluxei64_v = 420, 59707f4964dSYang Liu rv_op_vloxei8_v = 421, 59807f4964dSYang Liu rv_op_vloxei16_v = 422, 59907f4964dSYang Liu rv_op_vloxei32_v = 423, 60007f4964dSYang Liu rv_op_vloxei64_v = 424, 60107f4964dSYang Liu rv_op_vsuxei8_v = 425, 60207f4964dSYang Liu rv_op_vsuxei16_v = 426, 60307f4964dSYang Liu rv_op_vsuxei32_v = 427, 60407f4964dSYang Liu rv_op_vsuxei64_v = 428, 60507f4964dSYang Liu rv_op_vsoxei8_v = 429, 60607f4964dSYang Liu rv_op_vsoxei16_v = 430, 60707f4964dSYang Liu rv_op_vsoxei32_v = 431, 60807f4964dSYang Liu rv_op_vsoxei64_v = 432, 60907f4964dSYang Liu rv_op_vle8ff_v = 433, 61007f4964dSYang Liu rv_op_vle16ff_v = 434, 61107f4964dSYang Liu rv_op_vle32ff_v = 435, 61207f4964dSYang Liu rv_op_vle64ff_v = 436, 61307f4964dSYang Liu rv_op_vl1re8_v = 437, 61407f4964dSYang Liu rv_op_vl1re16_v = 438, 61507f4964dSYang Liu rv_op_vl1re32_v = 439, 61607f4964dSYang Liu rv_op_vl1re64_v = 440, 61707f4964dSYang Liu rv_op_vl2re8_v = 441, 61807f4964dSYang Liu rv_op_vl2re16_v = 442, 61907f4964dSYang Liu rv_op_vl2re32_v = 443, 62007f4964dSYang Liu rv_op_vl2re64_v = 444, 62107f4964dSYang Liu rv_op_vl4re8_v = 445, 62207f4964dSYang Liu rv_op_vl4re16_v = 446, 62307f4964dSYang Liu rv_op_vl4re32_v = 447, 62407f4964dSYang Liu rv_op_vl4re64_v = 448, 62507f4964dSYang Liu rv_op_vl8re8_v = 449, 62607f4964dSYang Liu rv_op_vl8re16_v = 450, 62707f4964dSYang Liu rv_op_vl8re32_v = 451, 62807f4964dSYang Liu rv_op_vl8re64_v = 452, 62907f4964dSYang Liu rv_op_vs1r_v = 453, 63007f4964dSYang Liu rv_op_vs2r_v = 454, 63107f4964dSYang Liu rv_op_vs4r_v = 455, 63207f4964dSYang Liu rv_op_vs8r_v = 456, 63307f4964dSYang Liu rv_op_vadd_vv = 457, 63407f4964dSYang Liu rv_op_vadd_vx = 458, 63507f4964dSYang Liu rv_op_vadd_vi = 459, 63607f4964dSYang Liu rv_op_vsub_vv = 460, 63707f4964dSYang Liu rv_op_vsub_vx = 461, 63807f4964dSYang Liu rv_op_vrsub_vx = 462, 63907f4964dSYang Liu rv_op_vrsub_vi = 463, 64007f4964dSYang Liu rv_op_vwaddu_vv = 464, 64107f4964dSYang Liu rv_op_vwaddu_vx = 465, 64207f4964dSYang Liu rv_op_vwadd_vv = 466, 64307f4964dSYang Liu rv_op_vwadd_vx = 467, 64407f4964dSYang Liu rv_op_vwsubu_vv = 468, 64507f4964dSYang Liu rv_op_vwsubu_vx = 469, 64607f4964dSYang Liu rv_op_vwsub_vv = 470, 64707f4964dSYang Liu rv_op_vwsub_vx = 471, 64807f4964dSYang Liu rv_op_vwaddu_wv = 472, 64907f4964dSYang Liu rv_op_vwaddu_wx = 473, 65007f4964dSYang Liu rv_op_vwadd_wv = 474, 65107f4964dSYang Liu rv_op_vwadd_wx = 475, 65207f4964dSYang Liu rv_op_vwsubu_wv = 476, 65307f4964dSYang Liu rv_op_vwsubu_wx = 477, 65407f4964dSYang Liu rv_op_vwsub_wv = 478, 65507f4964dSYang Liu rv_op_vwsub_wx = 479, 65607f4964dSYang Liu rv_op_vadc_vvm = 480, 65707f4964dSYang Liu rv_op_vadc_vxm = 481, 65807f4964dSYang Liu rv_op_vadc_vim = 482, 65907f4964dSYang Liu rv_op_vmadc_vvm = 483, 66007f4964dSYang Liu rv_op_vmadc_vxm = 484, 66107f4964dSYang Liu rv_op_vmadc_vim = 485, 66207f4964dSYang Liu rv_op_vsbc_vvm = 486, 66307f4964dSYang Liu rv_op_vsbc_vxm = 487, 66407f4964dSYang Liu rv_op_vmsbc_vvm = 488, 66507f4964dSYang Liu rv_op_vmsbc_vxm = 489, 66607f4964dSYang Liu rv_op_vand_vv = 490, 66707f4964dSYang Liu rv_op_vand_vx = 491, 66807f4964dSYang Liu rv_op_vand_vi = 492, 66907f4964dSYang Liu rv_op_vor_vv = 493, 67007f4964dSYang Liu rv_op_vor_vx = 494, 67107f4964dSYang Liu rv_op_vor_vi = 495, 67207f4964dSYang Liu rv_op_vxor_vv = 496, 67307f4964dSYang Liu rv_op_vxor_vx = 497, 67407f4964dSYang Liu rv_op_vxor_vi = 498, 67507f4964dSYang Liu rv_op_vsll_vv = 499, 67607f4964dSYang Liu rv_op_vsll_vx = 500, 67707f4964dSYang Liu rv_op_vsll_vi = 501, 67807f4964dSYang Liu rv_op_vsrl_vv = 502, 67907f4964dSYang Liu rv_op_vsrl_vx = 503, 68007f4964dSYang Liu rv_op_vsrl_vi = 504, 68107f4964dSYang Liu rv_op_vsra_vv = 505, 68207f4964dSYang Liu rv_op_vsra_vx = 506, 68307f4964dSYang Liu rv_op_vsra_vi = 507, 68407f4964dSYang Liu rv_op_vnsrl_wv = 508, 68507f4964dSYang Liu rv_op_vnsrl_wx = 509, 68607f4964dSYang Liu rv_op_vnsrl_wi = 510, 68707f4964dSYang Liu rv_op_vnsra_wv = 511, 68807f4964dSYang Liu rv_op_vnsra_wx = 512, 68907f4964dSYang Liu rv_op_vnsra_wi = 513, 69007f4964dSYang Liu rv_op_vmseq_vv = 514, 69107f4964dSYang Liu rv_op_vmseq_vx = 515, 69207f4964dSYang Liu rv_op_vmseq_vi = 516, 69307f4964dSYang Liu rv_op_vmsne_vv = 517, 69407f4964dSYang Liu rv_op_vmsne_vx = 518, 69507f4964dSYang Liu rv_op_vmsne_vi = 519, 69607f4964dSYang Liu rv_op_vmsltu_vv = 520, 69707f4964dSYang Liu rv_op_vmsltu_vx = 521, 69807f4964dSYang Liu rv_op_vmslt_vv = 522, 69907f4964dSYang Liu rv_op_vmslt_vx = 523, 70007f4964dSYang Liu rv_op_vmsleu_vv = 524, 70107f4964dSYang Liu rv_op_vmsleu_vx = 525, 70207f4964dSYang Liu rv_op_vmsleu_vi = 526, 70307f4964dSYang Liu rv_op_vmsle_vv = 527, 70407f4964dSYang Liu rv_op_vmsle_vx = 528, 70507f4964dSYang Liu rv_op_vmsle_vi = 529, 70607f4964dSYang Liu rv_op_vmsgtu_vx = 530, 70707f4964dSYang Liu rv_op_vmsgtu_vi = 531, 70807f4964dSYang Liu rv_op_vmsgt_vx = 532, 70907f4964dSYang Liu rv_op_vmsgt_vi = 533, 71007f4964dSYang Liu rv_op_vminu_vv = 534, 71107f4964dSYang Liu rv_op_vminu_vx = 535, 71207f4964dSYang Liu rv_op_vmin_vv = 536, 71307f4964dSYang Liu rv_op_vmin_vx = 537, 71407f4964dSYang Liu rv_op_vmaxu_vv = 538, 71507f4964dSYang Liu rv_op_vmaxu_vx = 539, 71607f4964dSYang Liu rv_op_vmax_vv = 540, 71707f4964dSYang Liu rv_op_vmax_vx = 541, 71807f4964dSYang Liu rv_op_vmul_vv = 542, 71907f4964dSYang Liu rv_op_vmul_vx = 543, 72007f4964dSYang Liu rv_op_vmulh_vv = 544, 72107f4964dSYang Liu rv_op_vmulh_vx = 545, 72207f4964dSYang Liu rv_op_vmulhu_vv = 546, 72307f4964dSYang Liu rv_op_vmulhu_vx = 547, 72407f4964dSYang Liu rv_op_vmulhsu_vv = 548, 72507f4964dSYang Liu rv_op_vmulhsu_vx = 549, 72607f4964dSYang Liu rv_op_vdivu_vv = 550, 72707f4964dSYang Liu rv_op_vdivu_vx = 551, 72807f4964dSYang Liu rv_op_vdiv_vv = 552, 72907f4964dSYang Liu rv_op_vdiv_vx = 553, 73007f4964dSYang Liu rv_op_vremu_vv = 554, 73107f4964dSYang Liu rv_op_vremu_vx = 555, 73207f4964dSYang Liu rv_op_vrem_vv = 556, 73307f4964dSYang Liu rv_op_vrem_vx = 557, 73407f4964dSYang Liu rv_op_vwmulu_vv = 558, 73507f4964dSYang Liu rv_op_vwmulu_vx = 559, 73607f4964dSYang Liu rv_op_vwmulsu_vv = 560, 73707f4964dSYang Liu rv_op_vwmulsu_vx = 561, 73807f4964dSYang Liu rv_op_vwmul_vv = 562, 73907f4964dSYang Liu rv_op_vwmul_vx = 563, 74007f4964dSYang Liu rv_op_vmacc_vv = 564, 74107f4964dSYang Liu rv_op_vmacc_vx = 565, 74207f4964dSYang Liu rv_op_vnmsac_vv = 566, 74307f4964dSYang Liu rv_op_vnmsac_vx = 567, 74407f4964dSYang Liu rv_op_vmadd_vv = 568, 74507f4964dSYang Liu rv_op_vmadd_vx = 569, 74607f4964dSYang Liu rv_op_vnmsub_vv = 570, 74707f4964dSYang Liu rv_op_vnmsub_vx = 571, 74807f4964dSYang Liu rv_op_vwmaccu_vv = 572, 74907f4964dSYang Liu rv_op_vwmaccu_vx = 573, 75007f4964dSYang Liu rv_op_vwmacc_vv = 574, 75107f4964dSYang Liu rv_op_vwmacc_vx = 575, 75207f4964dSYang Liu rv_op_vwmaccsu_vv = 576, 75307f4964dSYang Liu rv_op_vwmaccsu_vx = 577, 75407f4964dSYang Liu rv_op_vwmaccus_vx = 578, 75507f4964dSYang Liu rv_op_vmv_v_v = 579, 75607f4964dSYang Liu rv_op_vmv_v_x = 580, 75707f4964dSYang Liu rv_op_vmv_v_i = 581, 75807f4964dSYang Liu rv_op_vmerge_vvm = 582, 75907f4964dSYang Liu rv_op_vmerge_vxm = 583, 76007f4964dSYang Liu rv_op_vmerge_vim = 584, 76107f4964dSYang Liu rv_op_vsaddu_vv = 585, 76207f4964dSYang Liu rv_op_vsaddu_vx = 586, 76307f4964dSYang Liu rv_op_vsaddu_vi = 587, 76407f4964dSYang Liu rv_op_vsadd_vv = 588, 76507f4964dSYang Liu rv_op_vsadd_vx = 589, 76607f4964dSYang Liu rv_op_vsadd_vi = 590, 76707f4964dSYang Liu rv_op_vssubu_vv = 591, 76807f4964dSYang Liu rv_op_vssubu_vx = 592, 76907f4964dSYang Liu rv_op_vssub_vv = 593, 77007f4964dSYang Liu rv_op_vssub_vx = 594, 77107f4964dSYang Liu rv_op_vaadd_vv = 595, 77207f4964dSYang Liu rv_op_vaadd_vx = 596, 77307f4964dSYang Liu rv_op_vaaddu_vv = 597, 77407f4964dSYang Liu rv_op_vaaddu_vx = 598, 77507f4964dSYang Liu rv_op_vasub_vv = 599, 77607f4964dSYang Liu rv_op_vasub_vx = 600, 77707f4964dSYang Liu rv_op_vasubu_vv = 601, 77807f4964dSYang Liu rv_op_vasubu_vx = 602, 77907f4964dSYang Liu rv_op_vsmul_vv = 603, 78007f4964dSYang Liu rv_op_vsmul_vx = 604, 78107f4964dSYang Liu rv_op_vssrl_vv = 605, 78207f4964dSYang Liu rv_op_vssrl_vx = 606, 78307f4964dSYang Liu rv_op_vssrl_vi = 607, 78407f4964dSYang Liu rv_op_vssra_vv = 608, 78507f4964dSYang Liu rv_op_vssra_vx = 609, 78607f4964dSYang Liu rv_op_vssra_vi = 610, 78707f4964dSYang Liu rv_op_vnclipu_wv = 611, 78807f4964dSYang Liu rv_op_vnclipu_wx = 612, 78907f4964dSYang Liu rv_op_vnclipu_wi = 613, 79007f4964dSYang Liu rv_op_vnclip_wv = 614, 79107f4964dSYang Liu rv_op_vnclip_wx = 615, 79207f4964dSYang Liu rv_op_vnclip_wi = 616, 79307f4964dSYang Liu rv_op_vfadd_vv = 617, 79407f4964dSYang Liu rv_op_vfadd_vf = 618, 79507f4964dSYang Liu rv_op_vfsub_vv = 619, 79607f4964dSYang Liu rv_op_vfsub_vf = 620, 79707f4964dSYang Liu rv_op_vfrsub_vf = 621, 79807f4964dSYang Liu rv_op_vfwadd_vv = 622, 79907f4964dSYang Liu rv_op_vfwadd_vf = 623, 80007f4964dSYang Liu rv_op_vfwadd_wv = 624, 80107f4964dSYang Liu rv_op_vfwadd_wf = 625, 80207f4964dSYang Liu rv_op_vfwsub_vv = 626, 80307f4964dSYang Liu rv_op_vfwsub_vf = 627, 80407f4964dSYang Liu rv_op_vfwsub_wv = 628, 80507f4964dSYang Liu rv_op_vfwsub_wf = 629, 80607f4964dSYang Liu rv_op_vfmul_vv = 630, 80707f4964dSYang Liu rv_op_vfmul_vf = 631, 80807f4964dSYang Liu rv_op_vfdiv_vv = 632, 80907f4964dSYang Liu rv_op_vfdiv_vf = 633, 81007f4964dSYang Liu rv_op_vfrdiv_vf = 634, 81107f4964dSYang Liu rv_op_vfwmul_vv = 635, 81207f4964dSYang Liu rv_op_vfwmul_vf = 636, 81307f4964dSYang Liu rv_op_vfmacc_vv = 637, 81407f4964dSYang Liu rv_op_vfmacc_vf = 638, 81507f4964dSYang Liu rv_op_vfnmacc_vv = 639, 81607f4964dSYang Liu rv_op_vfnmacc_vf = 640, 81707f4964dSYang Liu rv_op_vfmsac_vv = 641, 81807f4964dSYang Liu rv_op_vfmsac_vf = 642, 81907f4964dSYang Liu rv_op_vfnmsac_vv = 643, 82007f4964dSYang Liu rv_op_vfnmsac_vf = 644, 82107f4964dSYang Liu rv_op_vfmadd_vv = 645, 82207f4964dSYang Liu rv_op_vfmadd_vf = 646, 82307f4964dSYang Liu rv_op_vfnmadd_vv = 647, 82407f4964dSYang Liu rv_op_vfnmadd_vf = 648, 82507f4964dSYang Liu rv_op_vfmsub_vv = 649, 82607f4964dSYang Liu rv_op_vfmsub_vf = 650, 82707f4964dSYang Liu rv_op_vfnmsub_vv = 651, 82807f4964dSYang Liu rv_op_vfnmsub_vf = 652, 82907f4964dSYang Liu rv_op_vfwmacc_vv = 653, 83007f4964dSYang Liu rv_op_vfwmacc_vf = 654, 83107f4964dSYang Liu rv_op_vfwnmacc_vv = 655, 83207f4964dSYang Liu rv_op_vfwnmacc_vf = 656, 83307f4964dSYang Liu rv_op_vfwmsac_vv = 657, 83407f4964dSYang Liu rv_op_vfwmsac_vf = 658, 83507f4964dSYang Liu rv_op_vfwnmsac_vv = 659, 83607f4964dSYang Liu rv_op_vfwnmsac_vf = 660, 83707f4964dSYang Liu rv_op_vfsqrt_v = 661, 83807f4964dSYang Liu rv_op_vfrsqrt7_v = 662, 83907f4964dSYang Liu rv_op_vfrec7_v = 663, 84007f4964dSYang Liu rv_op_vfmin_vv = 664, 84107f4964dSYang Liu rv_op_vfmin_vf = 665, 84207f4964dSYang Liu rv_op_vfmax_vv = 666, 84307f4964dSYang Liu rv_op_vfmax_vf = 667, 84407f4964dSYang Liu rv_op_vfsgnj_vv = 668, 84507f4964dSYang Liu rv_op_vfsgnj_vf = 669, 84607f4964dSYang Liu rv_op_vfsgnjn_vv = 670, 84707f4964dSYang Liu rv_op_vfsgnjn_vf = 671, 84807f4964dSYang Liu rv_op_vfsgnjx_vv = 672, 84907f4964dSYang Liu rv_op_vfsgnjx_vf = 673, 85007f4964dSYang Liu rv_op_vfslide1up_vf = 674, 85107f4964dSYang Liu rv_op_vfslide1down_vf = 675, 85207f4964dSYang Liu rv_op_vmfeq_vv = 676, 85307f4964dSYang Liu rv_op_vmfeq_vf = 677, 85407f4964dSYang Liu rv_op_vmfne_vv = 678, 85507f4964dSYang Liu rv_op_vmfne_vf = 679, 85607f4964dSYang Liu rv_op_vmflt_vv = 680, 85707f4964dSYang Liu rv_op_vmflt_vf = 681, 85807f4964dSYang Liu rv_op_vmfle_vv = 682, 85907f4964dSYang Liu rv_op_vmfle_vf = 683, 86007f4964dSYang Liu rv_op_vmfgt_vf = 684, 86107f4964dSYang Liu rv_op_vmfge_vf = 685, 86207f4964dSYang Liu rv_op_vfclass_v = 686, 86307f4964dSYang Liu rv_op_vfmerge_vfm = 687, 86407f4964dSYang Liu rv_op_vfmv_v_f = 688, 86507f4964dSYang Liu rv_op_vfcvt_xu_f_v = 689, 86607f4964dSYang Liu rv_op_vfcvt_x_f_v = 690, 86707f4964dSYang Liu rv_op_vfcvt_f_xu_v = 691, 86807f4964dSYang Liu rv_op_vfcvt_f_x_v = 692, 86907f4964dSYang Liu rv_op_vfcvt_rtz_xu_f_v = 693, 87007f4964dSYang Liu rv_op_vfcvt_rtz_x_f_v = 694, 87107f4964dSYang Liu rv_op_vfwcvt_xu_f_v = 695, 87207f4964dSYang Liu rv_op_vfwcvt_x_f_v = 696, 87307f4964dSYang Liu rv_op_vfwcvt_f_xu_v = 697, 87407f4964dSYang Liu rv_op_vfwcvt_f_x_v = 698, 87507f4964dSYang Liu rv_op_vfwcvt_f_f_v = 699, 87607f4964dSYang Liu rv_op_vfwcvt_rtz_xu_f_v = 700, 87707f4964dSYang Liu rv_op_vfwcvt_rtz_x_f_v = 701, 87807f4964dSYang Liu rv_op_vfncvt_xu_f_w = 702, 87907f4964dSYang Liu rv_op_vfncvt_x_f_w = 703, 88007f4964dSYang Liu rv_op_vfncvt_f_xu_w = 704, 88107f4964dSYang Liu rv_op_vfncvt_f_x_w = 705, 88207f4964dSYang Liu rv_op_vfncvt_f_f_w = 706, 88307f4964dSYang Liu rv_op_vfncvt_rod_f_f_w = 707, 88407f4964dSYang Liu rv_op_vfncvt_rtz_xu_f_w = 708, 88507f4964dSYang Liu rv_op_vfncvt_rtz_x_f_w = 709, 88607f4964dSYang Liu rv_op_vredsum_vs = 710, 88707f4964dSYang Liu rv_op_vredand_vs = 711, 88807f4964dSYang Liu rv_op_vredor_vs = 712, 88907f4964dSYang Liu rv_op_vredxor_vs = 713, 89007f4964dSYang Liu rv_op_vredminu_vs = 714, 89107f4964dSYang Liu rv_op_vredmin_vs = 715, 89207f4964dSYang Liu rv_op_vredmaxu_vs = 716, 89307f4964dSYang Liu rv_op_vredmax_vs = 717, 89407f4964dSYang Liu rv_op_vwredsumu_vs = 718, 89507f4964dSYang Liu rv_op_vwredsum_vs = 719, 89607f4964dSYang Liu rv_op_vfredusum_vs = 720, 89707f4964dSYang Liu rv_op_vfredosum_vs = 721, 89807f4964dSYang Liu rv_op_vfredmin_vs = 722, 89907f4964dSYang Liu rv_op_vfredmax_vs = 723, 90007f4964dSYang Liu rv_op_vfwredusum_vs = 724, 90107f4964dSYang Liu rv_op_vfwredosum_vs = 725, 90207f4964dSYang Liu rv_op_vmand_mm = 726, 90307f4964dSYang Liu rv_op_vmnand_mm = 727, 90407f4964dSYang Liu rv_op_vmandn_mm = 728, 90507f4964dSYang Liu rv_op_vmxor_mm = 729, 90607f4964dSYang Liu rv_op_vmor_mm = 730, 90707f4964dSYang Liu rv_op_vmnor_mm = 731, 90807f4964dSYang Liu rv_op_vmorn_mm = 732, 90907f4964dSYang Liu rv_op_vmxnor_mm = 733, 91007f4964dSYang Liu rv_op_vcpop_m = 734, 91107f4964dSYang Liu rv_op_vfirst_m = 735, 91207f4964dSYang Liu rv_op_vmsbf_m = 736, 91307f4964dSYang Liu rv_op_vmsif_m = 737, 91407f4964dSYang Liu rv_op_vmsof_m = 738, 91507f4964dSYang Liu rv_op_viota_m = 739, 91607f4964dSYang Liu rv_op_vid_v = 740, 91707f4964dSYang Liu rv_op_vmv_x_s = 741, 91807f4964dSYang Liu rv_op_vmv_s_x = 742, 91907f4964dSYang Liu rv_op_vfmv_f_s = 743, 92007f4964dSYang Liu rv_op_vfmv_s_f = 744, 92107f4964dSYang Liu rv_op_vslideup_vx = 745, 92207f4964dSYang Liu rv_op_vslideup_vi = 746, 92307f4964dSYang Liu rv_op_vslide1up_vx = 747, 92407f4964dSYang Liu rv_op_vslidedown_vx = 748, 92507f4964dSYang Liu rv_op_vslidedown_vi = 749, 92607f4964dSYang Liu rv_op_vslide1down_vx = 750, 92707f4964dSYang Liu rv_op_vrgather_vv = 751, 92807f4964dSYang Liu rv_op_vrgatherei16_vv = 752, 92907f4964dSYang Liu rv_op_vrgather_vx = 753, 93007f4964dSYang Liu rv_op_vrgather_vi = 754, 93107f4964dSYang Liu rv_op_vcompress_vm = 755, 93207f4964dSYang Liu rv_op_vmv1r_v = 756, 93307f4964dSYang Liu rv_op_vmv2r_v = 757, 93407f4964dSYang Liu rv_op_vmv4r_v = 758, 93507f4964dSYang Liu rv_op_vmv8r_v = 759, 93607f4964dSYang Liu rv_op_vzext_vf2 = 760, 93707f4964dSYang Liu rv_op_vzext_vf4 = 761, 93807f4964dSYang Liu rv_op_vzext_vf8 = 762, 93907f4964dSYang Liu rv_op_vsext_vf2 = 763, 94007f4964dSYang Liu rv_op_vsext_vf4 = 764, 94107f4964dSYang Liu rv_op_vsext_vf8 = 765, 94207f4964dSYang Liu rv_op_vsetvli = 766, 94307f4964dSYang Liu rv_op_vsetivli = 767, 94407f4964dSYang Liu rv_op_vsetvl = 768, 9452c71d02eSWeiwei Li rv_op_c_zext_b = 769, 9462c71d02eSWeiwei Li rv_op_c_sext_b = 770, 9472c71d02eSWeiwei Li rv_op_c_zext_h = 771, 9482c71d02eSWeiwei Li rv_op_c_sext_h = 772, 9492c71d02eSWeiwei Li rv_op_c_zext_w = 773, 9502c71d02eSWeiwei Li rv_op_c_not = 774, 9512c71d02eSWeiwei Li rv_op_c_mul = 775, 9522c71d02eSWeiwei Li rv_op_c_lbu = 776, 9532c71d02eSWeiwei Li rv_op_c_lhu = 777, 9542c71d02eSWeiwei Li rv_op_c_lh = 778, 9552c71d02eSWeiwei Li rv_op_c_sb = 779, 9562c71d02eSWeiwei Li rv_op_c_sh = 780, 9572c71d02eSWeiwei Li rv_op_cm_push = 781, 9582c71d02eSWeiwei Li rv_op_cm_pop = 782, 9592c71d02eSWeiwei Li rv_op_cm_popret = 783, 9602c71d02eSWeiwei Li rv_op_cm_popretz = 784, 9612c71d02eSWeiwei Li rv_op_cm_mva01s = 785, 9622c71d02eSWeiwei Li rv_op_cm_mvsa01 = 786, 9632c71d02eSWeiwei Li rv_op_cm_jt = 787, 9642c71d02eSWeiwei Li rv_op_cm_jalt = 788, 965d397be9aSRichard Henderson rv_op_czero_eqz = 789, 966d397be9aSRichard Henderson rv_op_czero_nez = 790, 967ea103259SMichael Clark } rv_op; 968ea103259SMichael Clark 969ea103259SMichael Clark /* structures */ 970ea103259SMichael Clark 971ea103259SMichael Clark typedef struct { 972*454c2201SWeiwei Li RISCVCPUConfig *cfg; 973ea103259SMichael Clark uint64_t pc; 974ea103259SMichael Clark uint64_t inst; 975ea103259SMichael Clark int32_t imm; 976ea103259SMichael Clark uint16_t op; 977ea103259SMichael Clark uint8_t codec; 978ea103259SMichael Clark uint8_t rd; 979ea103259SMichael Clark uint8_t rs1; 980ea103259SMichael Clark uint8_t rs2; 981ea103259SMichael Clark uint8_t rs3; 982ea103259SMichael Clark uint8_t rm; 983ea103259SMichael Clark uint8_t pred; 984ea103259SMichael Clark uint8_t succ; 985ea103259SMichael Clark uint8_t aq; 986ea103259SMichael Clark uint8_t rl; 9875748c886SWeiwei Li uint8_t bs; 9885748c886SWeiwei Li uint8_t rnum; 98907f4964dSYang Liu uint8_t vm; 99007f4964dSYang Liu uint32_t vzimm; 9912c71d02eSWeiwei Li uint8_t rlist; 992ea103259SMichael Clark } rv_decode; 993ea103259SMichael Clark 994ea103259SMichael Clark typedef struct { 995ea103259SMichael Clark const int op; 996ea103259SMichael Clark const rvc_constraint *constraints; 997ea103259SMichael Clark } rv_comp_data; 998ea103259SMichael Clark 999f88222daSMichael Clark enum { 1000f88222daSMichael Clark rvcd_imm_nz = 0x1 1001f88222daSMichael Clark }; 1002f88222daSMichael Clark 1003ea103259SMichael Clark typedef struct { 1004ea103259SMichael Clark const char * const name; 1005ea103259SMichael Clark const rv_codec codec; 1006ea103259SMichael Clark const char * const format; 1007ea103259SMichael Clark const rv_comp_data *pseudo; 1008f88222daSMichael Clark const short decomp_rv32; 1009f88222daSMichael Clark const short decomp_rv64; 1010f88222daSMichael Clark const short decomp_rv128; 1011f88222daSMichael Clark const short decomp_data; 1012ea103259SMichael Clark } rv_opcode_data; 1013ea103259SMichael Clark 1014ea103259SMichael Clark /* register names */ 1015ea103259SMichael Clark 1016ea103259SMichael Clark static const char rv_ireg_name_sym[32][5] = { 1017ea103259SMichael Clark "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", 1018ea103259SMichael Clark "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", 1019ea103259SMichael Clark "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", 1020ea103259SMichael Clark "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6", 1021ea103259SMichael Clark }; 1022ea103259SMichael Clark 1023ea103259SMichael Clark static const char rv_freg_name_sym[32][5] = { 1024ea103259SMichael Clark "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", 1025ea103259SMichael Clark "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", 1026ea103259SMichael Clark "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", 1027ea103259SMichael Clark "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11", 1028ea103259SMichael Clark }; 1029ea103259SMichael Clark 103007f4964dSYang Liu static const char rv_vreg_name_sym[32][4] = { 103107f4964dSYang Liu "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", 103207f4964dSYang Liu "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", 103307f4964dSYang Liu "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", 103407f4964dSYang Liu "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" 103507f4964dSYang Liu }; 103607f4964dSYang Liu 1037ea103259SMichael Clark /* instruction formats */ 1038ea103259SMichael Clark 1039ea103259SMichael Clark #define rv_fmt_none "O\t" 1040ea103259SMichael Clark #define rv_fmt_rs1 "O\t1" 1041ea103259SMichael Clark #define rv_fmt_offset "O\to" 1042ea103259SMichael Clark #define rv_fmt_pred_succ "O\tp,s" 1043ea103259SMichael Clark #define rv_fmt_rs1_rs2 "O\t1,2" 1044ea103259SMichael Clark #define rv_fmt_rd_imm "O\t0,i" 1045ea103259SMichael Clark #define rv_fmt_rd_offset "O\t0,o" 1046ea103259SMichael Clark #define rv_fmt_rd_rs1_rs2 "O\t0,1,2" 1047ea103259SMichael Clark #define rv_fmt_frd_rs1 "O\t3,1" 10480d581506SMikhail Tyutin #define rv_fmt_frd_frs1 "O\t3,4" 1049ea103259SMichael Clark #define rv_fmt_rd_frs1 "O\t0,4" 1050ea103259SMichael Clark #define rv_fmt_rd_frs1_frs2 "O\t0,4,5" 1051ea103259SMichael Clark #define rv_fmt_frd_frs1_frs2 "O\t3,4,5" 1052ea103259SMichael Clark #define rv_fmt_rm_frd_frs1 "O\tr,3,4" 1053ea103259SMichael Clark #define rv_fmt_rm_frd_rs1 "O\tr,3,1" 1054ea103259SMichael Clark #define rv_fmt_rm_rd_frs1 "O\tr,0,4" 1055ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2 "O\tr,3,4,5" 1056ea103259SMichael Clark #define rv_fmt_rm_frd_frs1_frs2_frs3 "O\tr,3,4,5,6" 1057ea103259SMichael Clark #define rv_fmt_rd_rs1_imm "O\t0,1,i" 1058ea103259SMichael Clark #define rv_fmt_rd_rs1_offset "O\t0,1,i" 1059ea103259SMichael Clark #define rv_fmt_rd_offset_rs1 "O\t0,i(1)" 1060ea103259SMichael Clark #define rv_fmt_frd_offset_rs1 "O\t3,i(1)" 1061ea103259SMichael Clark #define rv_fmt_rd_csr_rs1 "O\t0,c,1" 1062ea103259SMichael Clark #define rv_fmt_rd_csr_zimm "O\t0,c,7" 1063ea103259SMichael Clark #define rv_fmt_rs2_offset_rs1 "O\t2,i(1)" 1064ea103259SMichael Clark #define rv_fmt_frs2_offset_rs1 "O\t5,i(1)" 1065ea103259SMichael Clark #define rv_fmt_rs1_rs2_offset "O\t1,2,o" 1066ea103259SMichael Clark #define rv_fmt_rs2_rs1_offset "O\t2,1,o" 1067ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs2_rs1 "OAR\t0,2,(1)" 1068ea103259SMichael Clark #define rv_fmt_aqrl_rd_rs1 "OAR\t0,(1)" 1069ea103259SMichael Clark #define rv_fmt_rd "O\t0" 1070ea103259SMichael Clark #define rv_fmt_rd_zimm "O\t0,7" 1071ea103259SMichael Clark #define rv_fmt_rd_rs1 "O\t0,1" 1072ea103259SMichael Clark #define rv_fmt_rd_rs2 "O\t0,2" 1073ea103259SMichael Clark #define rv_fmt_rs1_offset "O\t1,o" 1074ea103259SMichael Clark #define rv_fmt_rs2_offset "O\t2,o" 10755748c886SWeiwei Li #define rv_fmt_rs1_rs2_bs "O\t1,2,b" 10765748c886SWeiwei Li #define rv_fmt_rd_rs1_rnum "O\t0,1,n" 107707f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vm "O\tD,(1)m" 107807f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_rs2_vm "O\tD,(1),2m" 107907f4964dSYang Liu #define rv_fmt_ldst_vd_rs1_vs2_vm "O\tD,(1),Fm" 108007f4964dSYang Liu #define rv_fmt_vd_vs2_vs1 "O\tD,F,E" 108107f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vl "O\tD,F,El" 108207f4964dSYang Liu #define rv_fmt_vd_vs2_vs1_vm "O\tD,F,Em" 108307f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vl "O\tD,F,1l" 108407f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vl "O\tD,F,4l" 108507f4964dSYang Liu #define rv_fmt_vd_vs2_rs1_vm "O\tD,F,1m" 108607f4964dSYang Liu #define rv_fmt_vd_vs2_fs1_vm "O\tD,F,4m" 108707f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vl "O\tD,F,il" 108807f4964dSYang Liu #define rv_fmt_vd_vs2_imm_vm "O\tD,F,im" 108907f4964dSYang Liu #define rv_fmt_vd_vs2_uimm_vm "O\tD,F,um" 109007f4964dSYang Liu #define rv_fmt_vd_vs1_vs2_vm "O\tD,E,Fm" 109107f4964dSYang Liu #define rv_fmt_vd_rs1_vs2_vm "O\tD,1,Fm" 109207f4964dSYang Liu #define rv_fmt_vd_fs1_vs2_vm "O\tD,4,Fm" 109307f4964dSYang Liu #define rv_fmt_vd_vs1 "O\tD,E" 109407f4964dSYang Liu #define rv_fmt_vd_rs1 "O\tD,1" 109507f4964dSYang Liu #define rv_fmt_vd_fs1 "O\tD,4" 109607f4964dSYang Liu #define rv_fmt_vd_imm "O\tD,i" 109707f4964dSYang Liu #define rv_fmt_vd_vs2 "O\tD,F" 109807f4964dSYang Liu #define rv_fmt_vd_vs2_vm "O\tD,Fm" 109907f4964dSYang Liu #define rv_fmt_rd_vs2_vm "O\t0,Fm" 110007f4964dSYang Liu #define rv_fmt_rd_vs2 "O\t0,F" 110107f4964dSYang Liu #define rv_fmt_fd_vs2 "O\t3,F" 110207f4964dSYang Liu #define rv_fmt_vd_vm "O\tDm" 110307f4964dSYang Liu #define rv_fmt_vsetvli "O\t0,1,v" 110407f4964dSYang Liu #define rv_fmt_vsetivli "O\t0,u,v" 11052c71d02eSWeiwei Li #define rv_fmt_rs1_rs2_zce_ldst "O\t2,i(1)" 11062c71d02eSWeiwei Li #define rv_fmt_push_rlist "O\tx,-i" 11072c71d02eSWeiwei Li #define rv_fmt_pop_rlist "O\tx,i" 11082c71d02eSWeiwei Li #define rv_fmt_zcmt_index "O\ti" 1109ea103259SMichael Clark 1110ea103259SMichael Clark /* pseudo-instruction constraints */ 1111ea103259SMichael Clark 1112ea103259SMichael Clark static const rvc_constraint rvcc_jal[] = { rvc_rd_eq_ra, rvc_end }; 1113ea103259SMichael Clark static const rvc_constraint rvcc_jalr[] = { rvc_rd_eq_ra, rvc_imm_eq_zero, rvc_end }; 1114ea103259SMichael Clark static const rvc_constraint rvcc_nop[] = { rvc_rd_eq_x0, rvc_rs1_eq_x0, rvc_imm_eq_zero, rvc_end }; 1115ea103259SMichael Clark static const rvc_constraint rvcc_mv[] = { rvc_imm_eq_zero, rvc_end }; 1116ea103259SMichael Clark static const rvc_constraint rvcc_not[] = { rvc_imm_eq_n1, rvc_end }; 1117ea103259SMichael Clark static const rvc_constraint rvcc_neg[] = { rvc_rs1_eq_x0, rvc_end }; 1118ea103259SMichael Clark static const rvc_constraint rvcc_negw[] = { rvc_rs1_eq_x0, rvc_end }; 111933b4f859SMichael Clark static const rvc_constraint rvcc_sext_w[] = { rvc_imm_eq_zero, rvc_end }; 1120ea103259SMichael Clark static const rvc_constraint rvcc_seqz[] = { rvc_imm_eq_p1, rvc_end }; 1121ea103259SMichael Clark static const rvc_constraint rvcc_snez[] = { rvc_rs1_eq_x0, rvc_end }; 1122ea103259SMichael Clark static const rvc_constraint rvcc_sltz[] = { rvc_rs2_eq_x0, rvc_end }; 1123ea103259SMichael Clark static const rvc_constraint rvcc_sgtz[] = { rvc_rs1_eq_x0, rvc_end }; 1124ea103259SMichael Clark static const rvc_constraint rvcc_fmv_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1125ea103259SMichael Clark static const rvc_constraint rvcc_fabs_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1126ea103259SMichael Clark static const rvc_constraint rvcc_fneg_s[] = { rvc_rs2_eq_rs1, rvc_end }; 1127ea103259SMichael Clark static const rvc_constraint rvcc_fmv_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1128ea103259SMichael Clark static const rvc_constraint rvcc_fabs_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1129ea103259SMichael Clark static const rvc_constraint rvcc_fneg_d[] = { rvc_rs2_eq_rs1, rvc_end }; 1130ea103259SMichael Clark static const rvc_constraint rvcc_fmv_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1131ea103259SMichael Clark static const rvc_constraint rvcc_fabs_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1132ea103259SMichael Clark static const rvc_constraint rvcc_fneg_q[] = { rvc_rs2_eq_rs1, rvc_end }; 1133ea103259SMichael Clark static const rvc_constraint rvcc_beqz[] = { rvc_rs2_eq_x0, rvc_end }; 1134ea103259SMichael Clark static const rvc_constraint rvcc_bnez[] = { rvc_rs2_eq_x0, rvc_end }; 1135ea103259SMichael Clark static const rvc_constraint rvcc_blez[] = { rvc_rs1_eq_x0, rvc_end }; 1136ea103259SMichael Clark static const rvc_constraint rvcc_bgez[] = { rvc_rs2_eq_x0, rvc_end }; 1137ea103259SMichael Clark static const rvc_constraint rvcc_bltz[] = { rvc_rs2_eq_x0, rvc_end }; 1138ea103259SMichael Clark static const rvc_constraint rvcc_bgtz[] = { rvc_rs1_eq_x0, rvc_end }; 1139ea103259SMichael Clark static const rvc_constraint rvcc_ble[] = { rvc_end }; 1140ea103259SMichael Clark static const rvc_constraint rvcc_bleu[] = { rvc_end }; 1141ea103259SMichael Clark static const rvc_constraint rvcc_bgt[] = { rvc_end }; 1142ea103259SMichael Clark static const rvc_constraint rvcc_bgtu[] = { rvc_end }; 1143ea103259SMichael Clark static const rvc_constraint rvcc_j[] = { rvc_rd_eq_x0, rvc_end }; 1144ea103259SMichael Clark static const rvc_constraint rvcc_ret[] = { rvc_rd_eq_x0, rvc_rs1_eq_ra, rvc_end }; 1145ea103259SMichael Clark static const rvc_constraint rvcc_jr[] = { rvc_rd_eq_x0, rvc_imm_eq_zero, rvc_end }; 1146ea103259SMichael Clark static const rvc_constraint rvcc_rdcycle[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc00, rvc_end }; 1147ea103259SMichael Clark static const rvc_constraint rvcc_rdtime[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc01, rvc_end }; 1148ea103259SMichael Clark static const rvc_constraint rvcc_rdinstret[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc02, rvc_end }; 1149ea103259SMichael Clark static const rvc_constraint rvcc_rdcycleh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc80, rvc_end }; 1150ea103259SMichael Clark static const rvc_constraint rvcc_rdtimeh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc81, rvc_end }; 11512e3df911SWladimir J. van der Laan static const rvc_constraint rvcc_rdinstreth[] = { rvc_rs1_eq_x0, 11522e3df911SWladimir J. van der Laan rvc_csr_eq_0xc82, rvc_end }; 1153ea103259SMichael Clark static const rvc_constraint rvcc_frcsr[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x003, rvc_end }; 1154ea103259SMichael Clark static const rvc_constraint rvcc_frrm[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x002, rvc_end }; 1155ea103259SMichael Clark static const rvc_constraint rvcc_frflags[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x001, rvc_end }; 1156ea103259SMichael Clark static const rvc_constraint rvcc_fscsr[] = { rvc_csr_eq_0x003, rvc_end }; 1157ea103259SMichael Clark static const rvc_constraint rvcc_fsrm[] = { rvc_csr_eq_0x002, rvc_end }; 1158ea103259SMichael Clark static const rvc_constraint rvcc_fsflags[] = { rvc_csr_eq_0x001, rvc_end }; 1159ea103259SMichael Clark static const rvc_constraint rvcc_fsrmi[] = { rvc_csr_eq_0x002, rvc_end }; 1160ea103259SMichael Clark static const rvc_constraint rvcc_fsflagsi[] = { rvc_csr_eq_0x001, rvc_end }; 1161ea103259SMichael Clark 1162ea103259SMichael Clark /* pseudo-instruction metadata */ 1163ea103259SMichael Clark 1164ea103259SMichael Clark static const rv_comp_data rvcp_jal[] = { 1165ea103259SMichael Clark { rv_op_j, rvcc_j }, 1166ea103259SMichael Clark { rv_op_jal, rvcc_jal }, 1167ea103259SMichael Clark { rv_op_illegal, NULL } 1168ea103259SMichael Clark }; 1169ea103259SMichael Clark 1170ea103259SMichael Clark static const rv_comp_data rvcp_jalr[] = { 1171ea103259SMichael Clark { rv_op_ret, rvcc_ret }, 1172ea103259SMichael Clark { rv_op_jr, rvcc_jr }, 1173ea103259SMichael Clark { rv_op_jalr, rvcc_jalr }, 1174ea103259SMichael Clark { rv_op_illegal, NULL } 1175ea103259SMichael Clark }; 1176ea103259SMichael Clark 1177ea103259SMichael Clark static const rv_comp_data rvcp_beq[] = { 1178ea103259SMichael Clark { rv_op_beqz, rvcc_beqz }, 1179ea103259SMichael Clark { rv_op_illegal, NULL } 1180ea103259SMichael Clark }; 1181ea103259SMichael Clark 1182ea103259SMichael Clark static const rv_comp_data rvcp_bne[] = { 1183ea103259SMichael Clark { rv_op_bnez, rvcc_bnez }, 1184ea103259SMichael Clark { rv_op_illegal, NULL } 1185ea103259SMichael Clark }; 1186ea103259SMichael Clark 1187ea103259SMichael Clark static const rv_comp_data rvcp_blt[] = { 1188ea103259SMichael Clark { rv_op_bltz, rvcc_bltz }, 1189ea103259SMichael Clark { rv_op_bgtz, rvcc_bgtz }, 1190ea103259SMichael Clark { rv_op_bgt, rvcc_bgt }, 1191ea103259SMichael Clark { rv_op_illegal, NULL } 1192ea103259SMichael Clark }; 1193ea103259SMichael Clark 1194ea103259SMichael Clark static const rv_comp_data rvcp_bge[] = { 1195ea103259SMichael Clark { rv_op_blez, rvcc_blez }, 1196ea103259SMichael Clark { rv_op_bgez, rvcc_bgez }, 1197ea103259SMichael Clark { rv_op_ble, rvcc_ble }, 1198ea103259SMichael Clark { rv_op_illegal, NULL } 1199ea103259SMichael Clark }; 1200ea103259SMichael Clark 1201ea103259SMichael Clark static const rv_comp_data rvcp_bltu[] = { 1202ea103259SMichael Clark { rv_op_bgtu, rvcc_bgtu }, 1203ea103259SMichael Clark { rv_op_illegal, NULL } 1204ea103259SMichael Clark }; 1205ea103259SMichael Clark 1206ea103259SMichael Clark static const rv_comp_data rvcp_bgeu[] = { 1207ea103259SMichael Clark { rv_op_bleu, rvcc_bleu }, 1208ea103259SMichael Clark { rv_op_illegal, NULL } 1209ea103259SMichael Clark }; 1210ea103259SMichael Clark 1211ea103259SMichael Clark static const rv_comp_data rvcp_addi[] = { 1212ea103259SMichael Clark { rv_op_nop, rvcc_nop }, 1213ea103259SMichael Clark { rv_op_mv, rvcc_mv }, 1214ea103259SMichael Clark { rv_op_illegal, NULL } 1215ea103259SMichael Clark }; 1216ea103259SMichael Clark 1217ea103259SMichael Clark static const rv_comp_data rvcp_sltiu[] = { 1218ea103259SMichael Clark { rv_op_seqz, rvcc_seqz }, 1219ea103259SMichael Clark { rv_op_illegal, NULL } 1220ea103259SMichael Clark }; 1221ea103259SMichael Clark 1222ea103259SMichael Clark static const rv_comp_data rvcp_xori[] = { 1223ea103259SMichael Clark { rv_op_not, rvcc_not }, 1224ea103259SMichael Clark { rv_op_illegal, NULL } 1225ea103259SMichael Clark }; 1226ea103259SMichael Clark 1227ea103259SMichael Clark static const rv_comp_data rvcp_sub[] = { 1228ea103259SMichael Clark { rv_op_neg, rvcc_neg }, 1229ea103259SMichael Clark { rv_op_illegal, NULL } 1230ea103259SMichael Clark }; 1231ea103259SMichael Clark 1232ea103259SMichael Clark static const rv_comp_data rvcp_slt[] = { 1233ea103259SMichael Clark { rv_op_sltz, rvcc_sltz }, 1234ea103259SMichael Clark { rv_op_sgtz, rvcc_sgtz }, 1235ea103259SMichael Clark { rv_op_illegal, NULL } 1236ea103259SMichael Clark }; 1237ea103259SMichael Clark 1238ea103259SMichael Clark static const rv_comp_data rvcp_sltu[] = { 1239ea103259SMichael Clark { rv_op_snez, rvcc_snez }, 1240ea103259SMichael Clark { rv_op_illegal, NULL } 1241ea103259SMichael Clark }; 1242ea103259SMichael Clark 1243ea103259SMichael Clark static const rv_comp_data rvcp_addiw[] = { 1244ea103259SMichael Clark { rv_op_sext_w, rvcc_sext_w }, 1245ea103259SMichael Clark { rv_op_illegal, NULL } 1246ea103259SMichael Clark }; 1247ea103259SMichael Clark 1248ea103259SMichael Clark static const rv_comp_data rvcp_subw[] = { 1249ea103259SMichael Clark { rv_op_negw, rvcc_negw }, 1250ea103259SMichael Clark { rv_op_illegal, NULL } 1251ea103259SMichael Clark }; 1252ea103259SMichael Clark 1253ea103259SMichael Clark static const rv_comp_data rvcp_csrrw[] = { 1254ea103259SMichael Clark { rv_op_fscsr, rvcc_fscsr }, 1255ea103259SMichael Clark { rv_op_fsrm, rvcc_fsrm }, 1256ea103259SMichael Clark { rv_op_fsflags, rvcc_fsflags }, 1257ea103259SMichael Clark { rv_op_illegal, NULL } 1258ea103259SMichael Clark }; 1259ea103259SMichael Clark 12605748c886SWeiwei Li 1261ea103259SMichael Clark static const rv_comp_data rvcp_csrrs[] = { 1262ea103259SMichael Clark { rv_op_rdcycle, rvcc_rdcycle }, 1263ea103259SMichael Clark { rv_op_rdtime, rvcc_rdtime }, 1264ea103259SMichael Clark { rv_op_rdinstret, rvcc_rdinstret }, 1265ea103259SMichael Clark { rv_op_rdcycleh, rvcc_rdcycleh }, 1266ea103259SMichael Clark { rv_op_rdtimeh, rvcc_rdtimeh }, 1267ea103259SMichael Clark { rv_op_rdinstreth, rvcc_rdinstreth }, 1268ea103259SMichael Clark { rv_op_frcsr, rvcc_frcsr }, 1269ea103259SMichael Clark { rv_op_frrm, rvcc_frrm }, 1270ea103259SMichael Clark { rv_op_frflags, rvcc_frflags }, 1271ea103259SMichael Clark { rv_op_illegal, NULL } 1272ea103259SMichael Clark }; 1273ea103259SMichael Clark 1274ea103259SMichael Clark static const rv_comp_data rvcp_csrrwi[] = { 1275ea103259SMichael Clark { rv_op_fsrmi, rvcc_fsrmi }, 1276ea103259SMichael Clark { rv_op_fsflagsi, rvcc_fsflagsi }, 1277ea103259SMichael Clark { rv_op_illegal, NULL } 1278ea103259SMichael Clark }; 1279ea103259SMichael Clark 1280ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_s[] = { 1281ea103259SMichael Clark { rv_op_fmv_s, rvcc_fmv_s }, 1282ea103259SMichael Clark { rv_op_illegal, NULL } 1283ea103259SMichael Clark }; 1284ea103259SMichael Clark 1285ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_s[] = { 1286ea103259SMichael Clark { rv_op_fneg_s, rvcc_fneg_s }, 1287ea103259SMichael Clark { rv_op_illegal, NULL } 1288ea103259SMichael Clark }; 1289ea103259SMichael Clark 1290ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_s[] = { 1291ea103259SMichael Clark { rv_op_fabs_s, rvcc_fabs_s }, 1292ea103259SMichael Clark { rv_op_illegal, NULL } 1293ea103259SMichael Clark }; 1294ea103259SMichael Clark 1295ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_d[] = { 1296ea103259SMichael Clark { rv_op_fmv_d, rvcc_fmv_d }, 1297ea103259SMichael Clark { rv_op_illegal, NULL } 1298ea103259SMichael Clark }; 1299ea103259SMichael Clark 1300ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_d[] = { 1301ea103259SMichael Clark { rv_op_fneg_d, rvcc_fneg_d }, 1302ea103259SMichael Clark { rv_op_illegal, NULL } 1303ea103259SMichael Clark }; 1304ea103259SMichael Clark 1305ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_d[] = { 1306ea103259SMichael Clark { rv_op_fabs_d, rvcc_fabs_d }, 1307ea103259SMichael Clark { rv_op_illegal, NULL } 1308ea103259SMichael Clark }; 1309ea103259SMichael Clark 1310ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_q[] = { 1311ea103259SMichael Clark { rv_op_fmv_q, rvcc_fmv_q }, 1312ea103259SMichael Clark { rv_op_illegal, NULL } 1313ea103259SMichael Clark }; 1314ea103259SMichael Clark 1315ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_q[] = { 1316ea103259SMichael Clark { rv_op_fneg_q, rvcc_fneg_q }, 1317ea103259SMichael Clark { rv_op_illegal, NULL } 1318ea103259SMichael Clark }; 1319ea103259SMichael Clark 1320ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_q[] = { 1321ea103259SMichael Clark { rv_op_fabs_q, rvcc_fabs_q }, 1322ea103259SMichael Clark { rv_op_illegal, NULL } 1323ea103259SMichael Clark }; 1324ea103259SMichael Clark 1325ea103259SMichael Clark /* instruction metadata */ 1326ea103259SMichael Clark 1327ea103259SMichael Clark const rv_opcode_data opcode_data[] = { 1328ea103259SMichael Clark { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, 1329ea103259SMichael Clark { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 }, 1330ea103259SMichael Clark { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 }, 1331ea103259SMichael Clark { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 }, 1332ea103259SMichael Clark { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 }, 1333ea103259SMichael Clark { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 }, 1334ea103259SMichael Clark { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 }, 1335ea103259SMichael Clark { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 }, 1336ea103259SMichael Clark { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 }, 1337ea103259SMichael Clark { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 }, 1338ea103259SMichael Clark { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 }, 1339ea103259SMichael Clark { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1340ea103259SMichael Clark { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1341ea103259SMichael Clark { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1342ea103259SMichael Clark { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1343ea103259SMichael Clark { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1344ea103259SMichael Clark { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1345ea103259SMichael Clark { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1346ea103259SMichael Clark { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1347ea103259SMichael Clark { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 }, 1348ea103259SMichael Clark { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1349ea103259SMichael Clark { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 }, 1350ea103259SMichael Clark { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 }, 1351ea103259SMichael Clark { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1352ea103259SMichael Clark { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1353ea103259SMichael Clark { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1354ea103259SMichael Clark { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1355ea103259SMichael Clark { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1356ea103259SMichael Clark { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1357ea103259SMichael Clark { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 }, 1358ea103259SMichael Clark { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1359ea103259SMichael Clark { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 }, 1360ea103259SMichael Clark { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 }, 1361ea103259SMichael Clark { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1362ea103259SMichael Clark { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1363ea103259SMichael Clark { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1364ea103259SMichael Clark { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1365ea103259SMichael Clark { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1366ea103259SMichael Clark { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 }, 1367ea103259SMichael Clark { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1368ea103259SMichael Clark { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1369ea103259SMichael Clark { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1370ea103259SMichael Clark { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1371ea103259SMichael Clark { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 }, 1372ea103259SMichael Clark { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1373ea103259SMichael Clark { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1374ea103259SMichael Clark { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1375ea103259SMichael Clark { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1376ea103259SMichael Clark { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 }, 1377ea103259SMichael Clark { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1378ea103259SMichael Clark { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1379ea103259SMichael Clark { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1380ea103259SMichael Clark { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1381ea103259SMichael Clark { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1382ea103259SMichael Clark { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1383ea103259SMichael Clark { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1384ea103259SMichael Clark { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1385ea103259SMichael Clark { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1386ea103259SMichael Clark { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1387ea103259SMichael Clark { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1388ea103259SMichael Clark { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1389ea103259SMichael Clark { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1390ea103259SMichael Clark { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1391ea103259SMichael Clark { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1392ea103259SMichael Clark { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1393ea103259SMichael Clark { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1394ea103259SMichael Clark { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1395ea103259SMichael Clark { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1396ea103259SMichael Clark { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1397ea103259SMichael Clark { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1398ea103259SMichael Clark { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1399ea103259SMichael Clark { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1400ea103259SMichael Clark { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1401ea103259SMichael Clark { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1402ea103259SMichael Clark { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1403ea103259SMichael Clark { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1404ea103259SMichael Clark { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1405ea103259SMichael Clark { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1406ea103259SMichael Clark { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1407ea103259SMichael Clark { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1408ea103259SMichael Clark { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1409ea103259SMichael Clark { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1410ea103259SMichael Clark { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1411ea103259SMichael Clark { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1412ea103259SMichael Clark { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1413ea103259SMichael Clark { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1414ea103259SMichael Clark { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1415ea103259SMichael Clark { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1416ea103259SMichael Clark { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1417ea103259SMichael Clark { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1418ea103259SMichael Clark { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1419ea103259SMichael Clark { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1420ea103259SMichael Clark { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1421ea103259SMichael Clark { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1422ea103259SMichael Clark { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1423ea103259SMichael Clark { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1424ea103259SMichael Clark { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1425ea103259SMichael Clark { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1426ea103259SMichael Clark { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1427ea103259SMichael Clark { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1428ea103259SMichael Clark { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1429ea103259SMichael Clark { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1430ea103259SMichael Clark { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1431ea103259SMichael Clark { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1432ea103259SMichael Clark { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1433ea103259SMichael Clark { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1434ea103259SMichael Clark { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1435ea103259SMichael Clark { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1436ea103259SMichael Clark { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1437ea103259SMichael Clark { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1438ea103259SMichael Clark { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1439ea103259SMichael Clark { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1440ea103259SMichael Clark { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1441ea103259SMichael Clark { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1442ea103259SMichael Clark { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1443ea103259SMichael Clark { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1444ea103259SMichael Clark { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1445ea103259SMichael Clark { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1446ea103259SMichael Clark { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1447ea103259SMichael Clark { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1448ea103259SMichael Clark { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1449ea103259SMichael Clark { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1450ea103259SMichael Clark { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, 1451ea103259SMichael Clark { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 }, 1452ea103259SMichael Clark { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1453ea103259SMichael Clark { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 }, 1454ea103259SMichael Clark { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 }, 1455ea103259SMichael Clark { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 }, 1456ea103259SMichael Clark { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 }, 1457ea103259SMichael Clark { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1458ea103259SMichael Clark { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1459ea103259SMichael Clark { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1460ea103259SMichael Clark { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1461ea103259SMichael Clark { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1462ea103259SMichael Clark { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1463ea103259SMichael Clark { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1464ea103259SMichael Clark { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1465ea103259SMichael Clark { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1466ea103259SMichael Clark { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1467ea103259SMichael Clark { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1468ea103259SMichael Clark { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1469ea103259SMichael Clark { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 }, 1470ea103259SMichael Clark { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 }, 1471ea103259SMichael Clark { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 }, 1472ea103259SMichael Clark { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1473ea103259SMichael Clark { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1474ea103259SMichael Clark { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1475ea103259SMichael Clark { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1476ea103259SMichael Clark { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1477ea103259SMichael Clark { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1478ea103259SMichael Clark { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1479ea103259SMichael Clark { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1480ea103259SMichael Clark { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1481ea103259SMichael Clark { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1482ea103259SMichael Clark { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1483ea103259SMichael Clark { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1484ea103259SMichael Clark { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1485ea103259SMichael Clark { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1486ea103259SMichael Clark { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1487ea103259SMichael Clark { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1488ea103259SMichael Clark { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1489ea103259SMichael Clark { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1490ea103259SMichael Clark { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1491ea103259SMichael Clark { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1492ea103259SMichael Clark { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1493ea103259SMichael Clark { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1494ea103259SMichael Clark { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1495ea103259SMichael Clark { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1496ea103259SMichael Clark { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1497ea103259SMichael Clark { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1498ea103259SMichael Clark { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1499ea103259SMichael Clark { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 }, 1500ea103259SMichael Clark { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 }, 1501ea103259SMichael Clark { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 }, 1502ea103259SMichael Clark { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1503ea103259SMichael Clark { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1504ea103259SMichael Clark { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1505ea103259SMichael Clark { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1506ea103259SMichael Clark { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1507ea103259SMichael Clark { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1508ea103259SMichael Clark { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1509ea103259SMichael Clark { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1510ea103259SMichael Clark { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1511ea103259SMichael Clark { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1512ea103259SMichael Clark { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1513ea103259SMichael Clark { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1514ea103259SMichael Clark { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1515ea103259SMichael Clark { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1516ea103259SMichael Clark { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1517ea103259SMichael Clark { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1518ea103259SMichael Clark { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1519ea103259SMichael Clark { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1520ea103259SMichael Clark { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1521ea103259SMichael Clark { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1522ea103259SMichael Clark { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1523ea103259SMichael Clark { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1524ea103259SMichael Clark { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1525ea103259SMichael Clark { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1526ea103259SMichael Clark { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1527ea103259SMichael Clark { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1528ea103259SMichael Clark { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1529ea103259SMichael Clark { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1530ea103259SMichael Clark { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1531ea103259SMichael Clark { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 }, 1532ea103259SMichael Clark { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 }, 1533ea103259SMichael Clark { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 }, 1534ea103259SMichael Clark { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1535ea103259SMichael Clark { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1536ea103259SMichael Clark { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1537ea103259SMichael Clark { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1538ea103259SMichael Clark { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1539ea103259SMichael Clark { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1540ea103259SMichael Clark { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1541ea103259SMichael Clark { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1542ea103259SMichael Clark { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1543ea103259SMichael Clark { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1544ea103259SMichael Clark { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1545ea103259SMichael Clark { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1546ea103259SMichael Clark { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1547ea103259SMichael Clark { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1548ea103259SMichael Clark { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1549ea103259SMichael Clark { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1550ea103259SMichael Clark { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1551ea103259SMichael Clark { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1552ea103259SMichael Clark { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1553ea103259SMichael Clark { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1554ea103259SMichael Clark { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1555f88222daSMichael Clark { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1556f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 1557ea103259SMichael Clark { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, 0 }, 1558ea103259SMichael Clark { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw, rv_op_lw }, 1559ea103259SMichael Clark { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 }, 1560ea103259SMichael Clark { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, rv_op_fsd, 0 }, 1561ea103259SMichael Clark { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw, rv_op_sw }, 1562ea103259SMichael Clark { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 }, 1563ea103259SMichael Clark { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1564f88222daSMichael Clark { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, 1565f88222daSMichael Clark rv_op_addi, rvcd_imm_nz }, 1566ea103259SMichael Clark { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, 1567ea103259SMichael Clark { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1568f88222daSMichael Clark { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1569f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 1570f88222daSMichael Clark { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui, 1571f88222daSMichael Clark rv_op_lui, rvcd_imm_nz }, 1572f88222daSMichael Clark { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, 1573f88222daSMichael Clark rv_op_srli, rv_op_srli, rvcd_imm_nz }, 1574f88222daSMichael Clark { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, 1575f88222daSMichael Clark rv_op_srai, rv_op_srai, rvcd_imm_nz }, 1576f88222daSMichael Clark { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, 15772e3df911SWladimir J. van der Laan rv_op_andi, rv_op_andi }, 1578ea103259SMichael Clark { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub, rv_op_sub }, 1579ea103259SMichael Clark { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor, rv_op_xor }, 1580ea103259SMichael Clark { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or, rv_op_or }, 1581ea103259SMichael Clark { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and, rv_op_and }, 1582ea103259SMichael Clark { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_subw, rv_op_subw }, 1583ea103259SMichael Clark { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_addw, rv_op_addw }, 1584ea103259SMichael Clark { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal, rv_op_jal }, 1585ea103259SMichael Clark { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op_beq, rv_op_beq }, 1586ea103259SMichael Clark { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne, rv_op_bne }, 1587f88222daSMichael Clark { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, 1588f88222daSMichael Clark rv_op_slli, rv_op_slli, rvcd_imm_nz }, 1589ea103259SMichael Clark { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, rv_op_fld, rv_op_fld }, 1590ea103259SMichael Clark { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw, rv_op_lw }, 1591ea103259SMichael Clark { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 }, 1592ea103259SMichael Clark { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, rv_op_jalr, rv_op_jalr }, 1593ea103259SMichael Clark { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_addi, rv_op_addi }, 1594ea103259SMichael Clark { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak, rv_op_ebreak, rv_op_ebreak }, 1595ea103259SMichael Clark { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, rv_op_jalr, rv_op_jalr }, 1596ea103259SMichael Clark { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add, rv_op_add }, 1597ea103259SMichael Clark { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, rv_op_fsd, rv_op_fsd }, 1598ea103259SMichael Clark { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw, rv_op_sw }, 1599ea103259SMichael Clark { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 }, 1600ea103259SMichael Clark { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, rv_op_ld }, 1601ea103259SMichael Clark { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, rv_op_sd }, 1602ea103259SMichael Clark { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw, rv_op_addiw }, 1603ea103259SMichael Clark { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, rv_op_ld }, 1604ea103259SMichael Clark { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, rv_op_sd }, 1605ea103259SMichael Clark { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 1606ea103259SMichael Clark { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, 1607ea103259SMichael Clark { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 1608ea103259SMichael Clark { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, 1609ea103259SMichael Clark { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1610ea103259SMichael Clark { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1611ea103259SMichael Clark { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1612ea103259SMichael Clark { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1613ea103259SMichael Clark { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1614ea103259SMichael Clark { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1615ea103259SMichael Clark { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1616ea103259SMichael Clark { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1617ea103259SMichael Clark { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1618ea103259SMichael Clark { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 16190d581506SMikhail Tyutin { "fmv.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16200d581506SMikhail Tyutin { "fabs.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16210d581506SMikhail Tyutin { "fneg.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16220d581506SMikhail Tyutin { "fmv.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16230d581506SMikhail Tyutin { "fabs.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16240d581506SMikhail Tyutin { "fneg.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16250d581506SMikhail Tyutin { "fmv.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16260d581506SMikhail Tyutin { "fabs.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 16270d581506SMikhail Tyutin { "fneg.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 1628ea103259SMichael Clark { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1629ea103259SMichael Clark { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1630ea103259SMichael Clark { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1631ea103259SMichael Clark { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1632ea103259SMichael Clark { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1633ea103259SMichael Clark { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1634ea103259SMichael Clark { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1635ea103259SMichael Clark { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1636ea103259SMichael Clark { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1637ea103259SMichael Clark { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1638ea103259SMichael Clark { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 }, 1639ea103259SMichael Clark { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1640ea103259SMichael Clark { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 }, 1641ea103259SMichael Clark { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1642ea103259SMichael Clark { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1643ea103259SMichael Clark { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1644ea103259SMichael Clark { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1645ea103259SMichael Clark { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1646ea103259SMichael Clark { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1647ea103259SMichael Clark { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1648ea103259SMichael Clark { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1649ea103259SMichael Clark { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1650ea103259SMichael Clark { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1651ea103259SMichael Clark { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1652ea103259SMichael Clark { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1653ea103259SMichael Clark { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 1654ea103259SMichael Clark { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 165502c1b569SPhilipp Tomsich { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165602c1b569SPhilipp Tomsich { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165702c1b569SPhilipp Tomsich { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165802c1b569SPhilipp Tomsich { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 165902c1b569SPhilipp Tomsich { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 166002c1b569SPhilipp Tomsich { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 166102c1b569SPhilipp Tomsich { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 166202c1b569SPhilipp Tomsich { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 166302c1b569SPhilipp Tomsich { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 166402c1b569SPhilipp Tomsich { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 16653de1fb71SPhilipp Tomsich { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16663de1fb71SPhilipp Tomsich { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16673de1fb71SPhilipp Tomsich { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 166802c1b569SPhilipp Tomsich { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 166902c1b569SPhilipp Tomsich { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167002c1b569SPhilipp Tomsich { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167102c1b569SPhilipp Tomsich { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167202c1b569SPhilipp Tomsich { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167302c1b569SPhilipp Tomsich { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167402c1b569SPhilipp Tomsich { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167502c1b569SPhilipp Tomsich { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167602c1b569SPhilipp Tomsich { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167702c1b569SPhilipp Tomsich { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167802c1b569SPhilipp Tomsich { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 167902c1b569SPhilipp Tomsich { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168002c1b569SPhilipp Tomsich { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168102c1b569SPhilipp Tomsich { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168202c1b569SPhilipp Tomsich { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168302c1b569SPhilipp Tomsich { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 168427062902SIvan Klokov { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 168502c1b569SPhilipp Tomsich { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 168613e269f6SIvan Klokov { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 168702c1b569SPhilipp Tomsich { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168802c1b569SPhilipp Tomsich { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 168902c1b569SPhilipp Tomsich { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 169002c1b569SPhilipp Tomsich { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 169102c1b569SPhilipp Tomsich { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 169202c1b569SPhilipp Tomsich { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 169302c1b569SPhilipp Tomsich { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 169402c1b569SPhilipp Tomsich { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 169502c1b569SPhilipp Tomsich { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 169602c1b569SPhilipp Tomsich { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 169702c1b569SPhilipp Tomsich { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 16985748c886SWeiwei Li { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 16995748c886SWeiwei Li { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 17005748c886SWeiwei Li { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 17015748c886SWeiwei Li { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 17025748c886SWeiwei Li { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 }, 17035748c886SWeiwei Li { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17045748c886SWeiwei Li { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17055748c886SWeiwei Li { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17065748c886SWeiwei Li { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17075748c886SWeiwei Li { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17085748c886SWeiwei Li { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17095748c886SWeiwei Li { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17105748c886SWeiwei Li { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17115748c886SWeiwei Li { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17125748c886SWeiwei Li { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17135748c886SWeiwei Li { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17145748c886SWeiwei Li { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17155748c886SWeiwei Li { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17165748c886SWeiwei Li { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17175748c886SWeiwei Li { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17185748c886SWeiwei Li { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17195748c886SWeiwei Li { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17205748c886SWeiwei Li { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17215748c886SWeiwei Li { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17225748c886SWeiwei Li { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17235748c886SWeiwei Li { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17245748c886SWeiwei Li { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 17255748c886SWeiwei Li { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 17265748c886SWeiwei Li { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 17275748c886SWeiwei Li { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 17285748c886SWeiwei Li { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17295748c886SWeiwei Li { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17305748c886SWeiwei Li { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 17315748c886SWeiwei Li { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 17325748c886SWeiwei Li { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 17335748c886SWeiwei Li { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 173407f4964dSYang Liu { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 173507f4964dSYang Liu { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle8_v, rv_op_vle8_v, 0 }, 173607f4964dSYang Liu { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle16_v, rv_op_vle16_v, 0 }, 173707f4964dSYang Liu { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle32_v, rv_op_vle32_v, 0 }, 173807f4964dSYang Liu { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle64_v, rv_op_vle64_v, 0 }, 173907f4964dSYang Liu { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse8_v, rv_op_vse8_v, 0 }, 174007f4964dSYang Liu { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse16_v, rv_op_vse16_v, 0 }, 174107f4964dSYang Liu { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse32_v, rv_op_vse32_v, 0 }, 174207f4964dSYang Liu { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vse64_v, rv_op_vse64_v, 0 }, 174307f4964dSYang Liu { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vlm_v, rv_op_vlm_v, 0 }, 174407f4964dSYang Liu { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vsm_v, rv_op_vsm_v, 0 }, 174507f4964dSYang Liu { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse8_v, rv_op_vlse8_v, 0 }, 174607f4964dSYang Liu { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse16_v, rv_op_vlse16_v, 0 }, 174707f4964dSYang Liu { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse32_v, rv_op_vlse32_v, 0 }, 174807f4964dSYang Liu { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vlse64_v, rv_op_vlse64_v, 0 }, 174907f4964dSYang Liu { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse8_v, rv_op_vsse8_v, 0 }, 175007f4964dSYang Liu { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse16_v, rv_op_vsse16_v, 0 }, 175107f4964dSYang Liu { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse32_v, rv_op_vsse32_v, 0 }, 175207f4964dSYang Liu { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, rv_op_vsse64_v, rv_op_vsse64_v, 0 }, 175307f4964dSYang Liu { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei8_v, rv_op_vluxei8_v, 0 }, 175407f4964dSYang Liu { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei16_v, rv_op_vluxei16_v, 0 }, 175507f4964dSYang Liu { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei32_v, rv_op_vluxei32_v, 0 }, 175607f4964dSYang Liu { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vluxei64_v, rv_op_vluxei64_v, 0 }, 175707f4964dSYang Liu { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei8_v, rv_op_vloxei8_v, 0 }, 175807f4964dSYang Liu { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei16_v, rv_op_vloxei16_v, 0 }, 175907f4964dSYang Liu { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei32_v, rv_op_vloxei32_v, 0 }, 176007f4964dSYang Liu { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vloxei64_v, rv_op_vloxei64_v, 0 }, 176107f4964dSYang Liu { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei8_v, rv_op_vsuxei8_v, 0 }, 176207f4964dSYang Liu { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei16_v, rv_op_vsuxei16_v, 0 }, 176307f4964dSYang Liu { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei32_v, rv_op_vsuxei32_v, 0 }, 176407f4964dSYang Liu { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsuxei64_v, rv_op_vsuxei64_v, 0 }, 176507f4964dSYang Liu { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei8_v, rv_op_vsoxei8_v, 0 }, 176607f4964dSYang Liu { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei16_v, rv_op_vsoxei16_v, 0 }, 176707f4964dSYang Liu { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei32_v, rv_op_vsoxei32_v, 0 }, 176807f4964dSYang Liu { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, rv_op_vsoxei64_v, rv_op_vsoxei64_v, 0 }, 176907f4964dSYang Liu { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle8ff_v, rv_op_vle8ff_v, 0 }, 177007f4964dSYang Liu { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle16ff_v, rv_op_vle16ff_v, 0 }, 177107f4964dSYang Liu { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle32ff_v, rv_op_vle32ff_v, 0 }, 177207f4964dSYang Liu { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vle64ff_v, rv_op_vle64ff_v, 0 }, 177307f4964dSYang Liu { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re8_v, rv_op_vl1re8_v, 0 }, 177407f4964dSYang Liu { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re16_v, rv_op_vl1re16_v, 0 }, 177507f4964dSYang Liu { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re32_v, rv_op_vl1re32_v, 0 }, 177607f4964dSYang Liu { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl1re64_v, rv_op_vl1re64_v, 0 }, 177707f4964dSYang Liu { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re8_v, rv_op_vl2re8_v, 0 }, 177807f4964dSYang Liu { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re16_v, rv_op_vl2re16_v, 0 }, 177907f4964dSYang Liu { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re32_v, rv_op_vl2re32_v, 0 }, 178007f4964dSYang Liu { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl2re64_v, rv_op_vl2re64_v, 0 }, 178107f4964dSYang Liu { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re8_v, rv_op_vl4re8_v, 0 }, 178207f4964dSYang Liu { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re16_v, rv_op_vl4re16_v, 0 }, 178307f4964dSYang Liu { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re32_v, rv_op_vl4re32_v, 0 }, 178407f4964dSYang Liu { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl4re64_v, rv_op_vl4re64_v, 0 }, 178507f4964dSYang Liu { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re8_v, rv_op_vl8re8_v, 0 }, 178607f4964dSYang Liu { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re16_v, rv_op_vl8re16_v, 0 }, 178707f4964dSYang Liu { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re32_v, rv_op_vl8re32_v, 0 }, 178807f4964dSYang Liu { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vl8re64_v, rv_op_vl8re64_v, 0 }, 178907f4964dSYang Liu { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs1r_v, rv_op_vs1r_v, 0 }, 179007f4964dSYang Liu { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs2r_v, rv_op_vs2r_v, 0 }, 179107f4964dSYang Liu { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs4r_v, rv_op_vs4r_v, 0 }, 179207f4964dSYang Liu { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, rv_op_vs8r_v, rv_op_vs8r_v, 0 }, 179307f4964dSYang Liu { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vadd_vv, rv_op_vadd_vv, 0 }, 179407f4964dSYang Liu { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vadd_vx, rv_op_vadd_vx, 0 }, 179507f4964dSYang Liu { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vadd_vi, rv_op_vadd_vi, 0 }, 179607f4964dSYang Liu { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsub_vv, rv_op_vsub_vv, 0 }, 179707f4964dSYang Liu { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsub_vx, rv_op_vsub_vx, 0 }, 179807f4964dSYang Liu { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrsub_vx, rv_op_vrsub_vx, 0 }, 179907f4964dSYang Liu { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vrsub_vi, rv_op_vrsub_vi, 0 }, 180007f4964dSYang Liu { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwaddu_vv, rv_op_vwaddu_vv, 0 }, 180107f4964dSYang Liu { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwaddu_vx, rv_op_vwaddu_vx, 0 }, 180207f4964dSYang Liu { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwadd_vv, rv_op_vwadd_vv, 0 }, 180307f4964dSYang Liu { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwadd_vx, rv_op_vwadd_vx, 0 }, 180407f4964dSYang Liu { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsubu_vv, rv_op_vwsubu_vv, 0 }, 180507f4964dSYang Liu { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsubu_vx, rv_op_vwsubu_vx, 0 }, 180607f4964dSYang Liu { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsub_vv, rv_op_vwsub_vv, 0 }, 180707f4964dSYang Liu { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsub_vx, rv_op_vwsub_vx, 0 }, 180807f4964dSYang Liu { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwaddu_wv, rv_op_vwaddu_wv, 0 }, 180907f4964dSYang Liu { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwaddu_wx, rv_op_vwaddu_wx, 0 }, 181007f4964dSYang Liu { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwadd_wv, rv_op_vwadd_wv, 0 }, 181107f4964dSYang Liu { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwadd_wx, rv_op_vwadd_wx, 0 }, 181207f4964dSYang Liu { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsubu_wv, rv_op_vwsubu_wv, 0 }, 181307f4964dSYang Liu { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsubu_wx, rv_op_vwsubu_wx, 0 }, 181407f4964dSYang Liu { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwsub_wv, rv_op_vwsub_wv, 0 }, 181507f4964dSYang Liu { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwsub_wx, rv_op_vwsub_wx, 0 }, 181607f4964dSYang Liu { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vadc_vvm, rv_op_vadc_vvm, 0 }, 181707f4964dSYang Liu { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vadc_vxm, rv_op_vadc_vxm, 0 }, 181807f4964dSYang Liu { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vadc_vim, rv_op_vadc_vim, 0 }, 181907f4964dSYang Liu { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmadc_vvm, rv_op_vmadc_vvm, 0 }, 182007f4964dSYang Liu { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmadc_vxm, rv_op_vmadc_vxm, 0 }, 182107f4964dSYang Liu { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vmadc_vim, rv_op_vmadc_vim, 0 }, 182207f4964dSYang Liu { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vsbc_vvm, rv_op_vsbc_vvm, 0 }, 182307f4964dSYang Liu { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vsbc_vxm, rv_op_vsbc_vxm, 0 }, 182407f4964dSYang Liu { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmsbc_vvm, rv_op_vmsbc_vvm, 0 }, 182507f4964dSYang Liu { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmsbc_vxm, rv_op_vmsbc_vxm, 0 }, 182607f4964dSYang Liu { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vand_vv, rv_op_vand_vv, 0 }, 182707f4964dSYang Liu { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vand_vx, rv_op_vand_vx, 0 }, 182807f4964dSYang Liu { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vand_vi, rv_op_vand_vi, 0 }, 182907f4964dSYang Liu { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vor_vv, rv_op_vor_vv, 0 }, 183007f4964dSYang Liu { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vor_vx, rv_op_vor_vx, 0 }, 183107f4964dSYang Liu { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vor_vi, rv_op_vor_vi, 0 }, 183207f4964dSYang Liu { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vxor_vv, rv_op_vxor_vv, 0 }, 183307f4964dSYang Liu { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vxor_vx, rv_op_vxor_vx, 0 }, 183407f4964dSYang Liu { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vxor_vi, rv_op_vxor_vi, 0 }, 183507f4964dSYang Liu { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsll_vv, rv_op_vsll_vv, 0 }, 183607f4964dSYang Liu { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsll_vx, rv_op_vsll_vx, 0 }, 183707f4964dSYang Liu { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsll_vi, rv_op_vsll_vi, 0 }, 183807f4964dSYang Liu { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsrl_vv, rv_op_vsrl_vv, 0 }, 183907f4964dSYang Liu { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsrl_vx, rv_op_vsrl_vx, 0 }, 184007f4964dSYang Liu { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsrl_vi, rv_op_vsrl_vi, 0 }, 184107f4964dSYang Liu { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsra_vv, rv_op_vsra_vv, 0 }, 184207f4964dSYang Liu { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsra_vx, rv_op_vsra_vx, 0 }, 184307f4964dSYang Liu { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vsra_vi, rv_op_vsra_vi, 0 }, 184407f4964dSYang Liu { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnsrl_wv, rv_op_vnsrl_wv, 0 }, 184507f4964dSYang Liu { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnsrl_wx, rv_op_vnsrl_wx, 0 }, 184607f4964dSYang Liu { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnsrl_wi, rv_op_vnsrl_wi, 0 }, 184707f4964dSYang Liu { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnsra_wv, rv_op_vnsra_wv, 0 }, 184807f4964dSYang Liu { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnsra_wx, rv_op_vnsra_wx, 0 }, 184907f4964dSYang Liu { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnsra_wi, rv_op_vnsra_wi, 0 }, 185007f4964dSYang Liu { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmseq_vv, rv_op_vmseq_vv, 0 }, 185107f4964dSYang Liu { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmseq_vx, rv_op_vmseq_vx, 0 }, 185207f4964dSYang Liu { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmseq_vi, rv_op_vmseq_vi, 0 }, 185307f4964dSYang Liu { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsne_vv, rv_op_vmsne_vv, 0 }, 185407f4964dSYang Liu { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsne_vx, rv_op_vmsne_vx, 0 }, 185507f4964dSYang Liu { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsne_vi, rv_op_vmsne_vi, 0 }, 185607f4964dSYang Liu { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsltu_vv, rv_op_vmsltu_vv, 0 }, 185707f4964dSYang Liu { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsltu_vx, rv_op_vmsltu_vx, 0 }, 185807f4964dSYang Liu { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmslt_vv, rv_op_vmslt_vv, 0 }, 185907f4964dSYang Liu { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmslt_vx, rv_op_vmslt_vx, 0 }, 186007f4964dSYang Liu { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsleu_vv, rv_op_vmsleu_vv, 0 }, 186107f4964dSYang Liu { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsleu_vx, rv_op_vmsleu_vx, 0 }, 186207f4964dSYang Liu { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsleu_vi, rv_op_vmsleu_vi, 0 }, 186307f4964dSYang Liu { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmsle_vv, rv_op_vmsle_vv, 0 }, 186407f4964dSYang Liu { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsle_vx, rv_op_vmsle_vx, 0 }, 186507f4964dSYang Liu { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsle_vi, rv_op_vmsle_vi, 0 }, 186607f4964dSYang Liu { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsgtu_vx, rv_op_vmsgtu_vx, 0 }, 186707f4964dSYang Liu { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsgtu_vi, rv_op_vmsgtu_vi, 0 }, 186807f4964dSYang Liu { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmsgt_vx, rv_op_vmsgt_vx, 0 }, 186907f4964dSYang Liu { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vmsgt_vi, rv_op_vmsgt_vi, 0 }, 187007f4964dSYang Liu { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vminu_vv, rv_op_vminu_vv, 0 }, 187107f4964dSYang Liu { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vminu_vx, rv_op_vminu_vx, 0 }, 187207f4964dSYang Liu { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmin_vv, rv_op_vmin_vv, 0 }, 187307f4964dSYang Liu { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmin_vx, rv_op_vmin_vx, 0 }, 187407f4964dSYang Liu { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmaxu_vv, rv_op_vmaxu_vv, 0 }, 187507f4964dSYang Liu { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmaxu_vx, rv_op_vmaxu_vx, 0 }, 187607f4964dSYang Liu { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmax_vv, rv_op_vmax_vv, 0 }, 187707f4964dSYang Liu { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmax_vx, rv_op_vmax_vx, 0 }, 187807f4964dSYang Liu { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmul_vv, rv_op_vmul_vv, 0 }, 187907f4964dSYang Liu { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmul_vx, rv_op_vmul_vx, 0 }, 188007f4964dSYang Liu { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulh_vv, rv_op_vmulh_vv, 0 }, 188107f4964dSYang Liu { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulh_vx, rv_op_vmulh_vx, 0 }, 188207f4964dSYang Liu { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulhu_vv, rv_op_vmulhu_vv, 0 }, 188307f4964dSYang Liu { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulhu_vx, rv_op_vmulhu_vx, 0 }, 188407f4964dSYang Liu { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmulhsu_vv, rv_op_vmulhsu_vv, 0 }, 188507f4964dSYang Liu { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vmulhsu_vx, rv_op_vmulhsu_vx, 0 }, 188607f4964dSYang Liu { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vdivu_vv, rv_op_vdivu_vv, 0 }, 188707f4964dSYang Liu { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vdivu_vx, rv_op_vdivu_vx, 0 }, 188807f4964dSYang Liu { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vdiv_vv, rv_op_vdiv_vv, 0 }, 188907f4964dSYang Liu { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vdiv_vx, rv_op_vdiv_vx, 0 }, 189007f4964dSYang Liu { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vremu_vv, rv_op_vremu_vv, 0 }, 189107f4964dSYang Liu { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vremu_vx, rv_op_vremu_vx, 0 }, 189207f4964dSYang Liu { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrem_vv, rv_op_vrem_vv, 0 }, 189307f4964dSYang Liu { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrem_vx, rv_op_vrem_vx, 0 }, 189407f4964dSYang Liu { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmulu_vv, rv_op_vwmulu_vv, 0 }, 189507f4964dSYang Liu { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmulu_vx, rv_op_vwmulu_vx, 0 }, 189607f4964dSYang Liu { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmulsu_vv, rv_op_vwmulsu_vv, 0 }, 189707f4964dSYang Liu { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmulsu_vx, rv_op_vwmulsu_vx, 0 }, 189807f4964dSYang Liu { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwmul_vv, rv_op_vwmul_vv, 0 }, 189907f4964dSYang Liu { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vwmul_vx, rv_op_vwmul_vx, 0 }, 190007f4964dSYang Liu { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vmacc_vv, rv_op_vmacc_vv, 0 }, 190107f4964dSYang Liu { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vmacc_vx, rv_op_vmacc_vx, 0 }, 190207f4964dSYang Liu { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vnmsac_vv, rv_op_vnmsac_vv, 0 }, 190307f4964dSYang Liu { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vnmsac_vx, rv_op_vnmsac_vx, 0 }, 190407f4964dSYang Liu { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vmadd_vv, rv_op_vmadd_vv, 0 }, 190507f4964dSYang Liu { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vmadd_vx, rv_op_vmadd_vx, 0 }, 190607f4964dSYang Liu { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vnmsub_vv, rv_op_vnmsub_vv, 0 }, 190707f4964dSYang Liu { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vnmsub_vx, rv_op_vnmsub_vx, 0 }, 190807f4964dSYang Liu { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmaccu_vv, rv_op_vwmaccu_vv, 0 }, 190907f4964dSYang Liu { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccu_vx, rv_op_vwmaccu_vx, 0 }, 191007f4964dSYang Liu { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmacc_vv, rv_op_vwmacc_vv, 0 }, 191107f4964dSYang Liu { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmacc_vx, rv_op_vwmacc_vx, 0 }, 191207f4964dSYang Liu { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vwmaccsu_vv, rv_op_vwmaccsu_vv, 0 }, 191307f4964dSYang Liu { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccsu_vx, rv_op_vwmaccsu_vx, 0 }, 191407f4964dSYang Liu { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, rv_op_vwmaccus_vx, rv_op_vwmaccus_vx, 0 }, 191507f4964dSYang Liu { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, rv_op_vmv_v_v, rv_op_vmv_v_v, 0 }, 191607f4964dSYang Liu { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, rv_op_vmv_v_x, rv_op_vmv_v_x, 0 }, 191707f4964dSYang Liu { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, rv_op_vmv_v_i, rv_op_vmv_v_i, 0 }, 191807f4964dSYang Liu { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, rv_op_vmerge_vvm, rv_op_vmerge_vvm, 0 }, 191907f4964dSYang Liu { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, rv_op_vmerge_vxm, rv_op_vmerge_vxm, 0 }, 192007f4964dSYang Liu { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, rv_op_vmerge_vim, rv_op_vmerge_vim, 0 }, 192107f4964dSYang Liu { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsaddu_vv, rv_op_vsaddu_vv, 0 }, 192207f4964dSYang Liu { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsaddu_vx, rv_op_vsaddu_vx, 0 }, 192307f4964dSYang Liu { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vsaddu_vi, rv_op_vsaddu_vi, 0 }, 192407f4964dSYang Liu { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsadd_vv, rv_op_vsadd_vv, 0 }, 192507f4964dSYang Liu { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsadd_vx, rv_op_vsadd_vx, 0 }, 192607f4964dSYang Liu { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, rv_op_vsadd_vi, rv_op_vsadd_vi, 0 }, 192707f4964dSYang Liu { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssubu_vv, rv_op_vssubu_vv, 0 }, 192807f4964dSYang Liu { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssubu_vx, rv_op_vssubu_vx, 0 }, 192907f4964dSYang Liu { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssub_vv, rv_op_vssub_vv, 0 }, 193007f4964dSYang Liu { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssub_vx, rv_op_vssub_vx, 0 }, 193107f4964dSYang Liu { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vaadd_vv, rv_op_vaadd_vv, 0 }, 193207f4964dSYang Liu { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vaadd_vx, rv_op_vaadd_vx, 0 }, 193307f4964dSYang Liu { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vaaddu_vv, rv_op_vaaddu_vv, 0 }, 193407f4964dSYang Liu { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vaaddu_vx, rv_op_vaaddu_vx, 0 }, 193507f4964dSYang Liu { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vasub_vv, rv_op_vasub_vv, 0 }, 193607f4964dSYang Liu { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vasub_vx, rv_op_vasub_vx, 0 }, 193707f4964dSYang Liu { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vasubu_vv, rv_op_vasubu_vv, 0 }, 193807f4964dSYang Liu { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vasubu_vx, rv_op_vasubu_vx, 0 }, 193907f4964dSYang Liu { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vsmul_vv, rv_op_vsmul_vv, 0 }, 194007f4964dSYang Liu { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vsmul_vx, rv_op_vsmul_vx, 0 }, 194107f4964dSYang Liu { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssrl_vv, rv_op_vssrl_vv, 0 }, 194207f4964dSYang Liu { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssrl_vx, rv_op_vssrl_vx, 0 }, 194307f4964dSYang Liu { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vssrl_vi, rv_op_vssrl_vi, 0 }, 194407f4964dSYang Liu { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vssra_vv, rv_op_vssra_vv, 0 }, 194507f4964dSYang Liu { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vssra_vx, rv_op_vssra_vx, 0 }, 194607f4964dSYang Liu { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vssra_vi, rv_op_vssra_vi, 0 }, 194707f4964dSYang Liu { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnclipu_wv, rv_op_vnclipu_wv, 0 }, 194807f4964dSYang Liu { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnclipu_wx, rv_op_vnclipu_wx, 0 }, 194907f4964dSYang Liu { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnclipu_wi, rv_op_vnclipu_wi, 0 }, 195007f4964dSYang Liu { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vnclip_wv, rv_op_vnclip_wv, 0 }, 195107f4964dSYang Liu { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vnclip_wx, rv_op_vnclip_wx, 0 }, 195207f4964dSYang Liu { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vnclip_wi, rv_op_vnclip_wi, 0 }, 195307f4964dSYang Liu { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfadd_vv, rv_op_vfadd_vv, 0 }, 195407f4964dSYang Liu { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfadd_vf, rv_op_vfadd_vf, 0 }, 195507f4964dSYang Liu { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsub_vv, rv_op_vfsub_vv, 0 }, 195607f4964dSYang Liu { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsub_vf, rv_op_vfsub_vf, 0 }, 195707f4964dSYang Liu { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfrsub_vf, rv_op_vfrsub_vf, 0 }, 195807f4964dSYang Liu { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwadd_vv, rv_op_vfwadd_vv, 0 }, 195907f4964dSYang Liu { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwadd_vf, rv_op_vfwadd_vf, 0 }, 196007f4964dSYang Liu { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwadd_wv, rv_op_vfwadd_wv, 0 }, 196107f4964dSYang Liu { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwadd_wf, rv_op_vfwadd_wf, 0 }, 196207f4964dSYang Liu { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwsub_vv, rv_op_vfwsub_vv, 0 }, 196307f4964dSYang Liu { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwsub_vf, rv_op_vfwsub_vf, 0 }, 196407f4964dSYang Liu { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwsub_wv, rv_op_vfwsub_wv, 0 }, 196507f4964dSYang Liu { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwsub_wf, rv_op_vfwsub_wf, 0 }, 196607f4964dSYang Liu { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmul_vv, rv_op_vfmul_vv, 0 }, 196707f4964dSYang Liu { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmul_vf, rv_op_vfmul_vf, 0 }, 196807f4964dSYang Liu { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfdiv_vv, rv_op_vfdiv_vv, 0 }, 196907f4964dSYang Liu { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfdiv_vf, rv_op_vfdiv_vf, 0 }, 197007f4964dSYang Liu { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfrdiv_vf, rv_op_vfrdiv_vf, 0 }, 197107f4964dSYang Liu { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwmul_vv, rv_op_vfwmul_vv, 0 }, 197207f4964dSYang Liu { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfwmul_vf, rv_op_vfwmul_vf, 0 }, 197307f4964dSYang Liu { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmacc_vv, rv_op_vfmacc_vv, 0 }, 197407f4964dSYang Liu { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmacc_vf, rv_op_vfmacc_vf, 0 }, 197507f4964dSYang Liu { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmacc_vv, rv_op_vfnmacc_vv, 0 }, 197607f4964dSYang Liu { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmacc_vf, rv_op_vfnmacc_vf, 0 }, 197707f4964dSYang Liu { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmsac_vv, rv_op_vfmsac_vv, 0 }, 197807f4964dSYang Liu { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmsac_vf, rv_op_vfmsac_vf, 0 }, 197907f4964dSYang Liu { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmsac_vv, rv_op_vfnmsac_vv, 0 }, 198007f4964dSYang Liu { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmsac_vf, rv_op_vfnmsac_vf, 0 }, 198107f4964dSYang Liu { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmadd_vv, rv_op_vfmadd_vv, 0 }, 198207f4964dSYang Liu { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmadd_vf, rv_op_vfmadd_vf, 0 }, 198307f4964dSYang Liu { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmadd_vv, rv_op_vfnmadd_vv, 0 }, 198407f4964dSYang Liu { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmadd_vf, rv_op_vfnmadd_vf, 0 }, 198507f4964dSYang Liu { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfmsub_vv, rv_op_vfmsub_vv, 0 }, 198607f4964dSYang Liu { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfmsub_vf, rv_op_vfmsub_vf, 0 }, 198707f4964dSYang Liu { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfnmsub_vv, rv_op_vfnmsub_vv, 0 }, 198807f4964dSYang Liu { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfnmsub_vf, rv_op_vfnmsub_vf, 0 }, 198907f4964dSYang Liu { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwmacc_vv, rv_op_vfwmacc_vv, 0 }, 199007f4964dSYang Liu { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwmacc_vf, rv_op_vfwmacc_vf, 0 }, 199107f4964dSYang Liu { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwnmacc_vv, rv_op_vfwnmacc_vv, 0 }, 199207f4964dSYang Liu { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwnmacc_vf, rv_op_vfwnmacc_vf, 0 }, 199307f4964dSYang Liu { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwmsac_vv, rv_op_vfwmsac_vv, 0 }, 199407f4964dSYang Liu { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwmsac_vf, rv_op_vfwmsac_vf, 0 }, 199507f4964dSYang Liu { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, rv_op_vfwnmsac_vv, rv_op_vfwnmsac_vv, 0 }, 199607f4964dSYang Liu { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, rv_op_vfwnmsac_vf, rv_op_vfwnmsac_vf, 0 }, 199707f4964dSYang Liu { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfsqrt_v, rv_op_vfsqrt_v, 0 }, 199807f4964dSYang Liu { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfrsqrt7_v, rv_op_vfrsqrt7_v, 0 }, 199907f4964dSYang Liu { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vfrec7_v, rv_op_vfrec7_v, 0 }, 200007f4964dSYang Liu { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmin_vv, rv_op_vfmin_vv, 0 }, 200107f4964dSYang Liu { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmin_vf, rv_op_vfmin_vf, 0 }, 200207f4964dSYang Liu { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfmax_vv, rv_op_vfmax_vv, 0 }, 200307f4964dSYang Liu { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfmax_vf, rv_op_vfmax_vf, 0 }, 200407f4964dSYang Liu { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnj_vv, rv_op_vfsgnj_vv, 0 }, 200507f4964dSYang Liu { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnj_vf, rv_op_vfsgnj_vf, 0 }, 200607f4964dSYang Liu { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnjn_vv, rv_op_vfsgnjn_vv, 0 }, 200707f4964dSYang Liu { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnjn_vf, rv_op_vfsgnjn_vf, 0 }, 200807f4964dSYang Liu { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfsgnjx_vv, rv_op_vfsgnjx_vv, 0 }, 200907f4964dSYang Liu { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfsgnjx_vf, rv_op_vfsgnjx_vf, 0 }, 201007f4964dSYang Liu { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfslide1up_vf, rv_op_vfslide1up_vf, 0 }, 201107f4964dSYang Liu { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vfslide1down_vf, rv_op_vfslide1down_vf, 0 }, 201207f4964dSYang Liu { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfeq_vv, rv_op_vmfeq_vv, 0 }, 201307f4964dSYang Liu { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfeq_vf, rv_op_vmfeq_vf, 0 }, 201407f4964dSYang Liu { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfne_vv, rv_op_vmfne_vv, 0 }, 201507f4964dSYang Liu { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfne_vf, rv_op_vmfne_vf, 0 }, 201607f4964dSYang Liu { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmflt_vv, rv_op_vmflt_vv, 0 }, 201707f4964dSYang Liu { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmflt_vf, rv_op_vmflt_vf, 0 }, 201807f4964dSYang Liu { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmfle_vv, rv_op_vmfle_vv, 0 }, 201907f4964dSYang Liu { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfle_vf, rv_op_vmfle_vf, 0 }, 202007f4964dSYang Liu { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfgt_vf, rv_op_vmfgt_vf, 0 }, 202107f4964dSYang Liu { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, rv_op_vmfge_vf, rv_op_vmfge_vf, 0 }, 202207f4964dSYang Liu { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vfclass_v, rv_op_vfclass_v, 0 }, 202307f4964dSYang Liu { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, rv_op_vfmerge_vfm, rv_op_vfmerge_vfm, 0 }, 202407f4964dSYang Liu { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, rv_op_vfmv_v_f, rv_op_vfmv_v_f, 0 }, 202507f4964dSYang 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 }, 202607f4964dSYang 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 }, 202707f4964dSYang 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 }, 202807f4964dSYang 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 }, 202907f4964dSYang 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 }, 203007f4964dSYang 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 }, 203107f4964dSYang 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 }, 203207f4964dSYang 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 }, 203307f4964dSYang 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 }, 203407f4964dSYang 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 }, 203507f4964dSYang 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 }, 203607f4964dSYang 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 }, 203707f4964dSYang 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 }, 203807f4964dSYang 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 }, 203907f4964dSYang 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 }, 204007f4964dSYang 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 }, 204107f4964dSYang 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 }, 204207f4964dSYang 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 }, 204307f4964dSYang 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 }, 204407f4964dSYang 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 }, 204507f4964dSYang 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 }, 204607f4964dSYang Liu { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredsum_vs, rv_op_vredsum_vs, 0 }, 204707f4964dSYang Liu { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredand_vs, rv_op_vredand_vs, 0 }, 204807f4964dSYang Liu { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredor_vs, rv_op_vredor_vs, 0 }, 204907f4964dSYang Liu { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredxor_vs, rv_op_vredxor_vs, 0 }, 205007f4964dSYang Liu { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredminu_vs, rv_op_vredminu_vs, 0 }, 205107f4964dSYang Liu { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmin_vs, rv_op_vredmin_vs, 0 }, 205207f4964dSYang Liu { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmaxu_vs, rv_op_vredmaxu_vs, 0 }, 205307f4964dSYang Liu { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vredmax_vs, rv_op_vredmax_vs, 0 }, 205407f4964dSYang Liu { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwredsumu_vs, rv_op_vwredsumu_vs, 0 }, 205507f4964dSYang Liu { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vwredsum_vs, rv_op_vwredsum_vs, 0 }, 205607f4964dSYang Liu { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredusum_vs, rv_op_vfredusum_vs, 0 }, 205707f4964dSYang Liu { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredosum_vs, rv_op_vfredosum_vs, 0 }, 205807f4964dSYang Liu { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredmin_vs, rv_op_vfredmin_vs, 0 }, 205907f4964dSYang Liu { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfredmax_vs, rv_op_vfredmax_vs, 0 }, 206007f4964dSYang Liu { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwredusum_vs, rv_op_vfwredusum_vs, 0 }, 206107f4964dSYang Liu { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vfwredosum_vs, rv_op_vfwredosum_vs, 0 }, 206207f4964dSYang Liu { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmand_mm, rv_op_vmand_mm, 0 }, 206307f4964dSYang Liu { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmnand_mm, rv_op_vmnand_mm, 0 }, 206407f4964dSYang Liu { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmandn_mm, rv_op_vmandn_mm, 0 }, 206507f4964dSYang Liu { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmxor_mm, rv_op_vmxor_mm, 0 }, 206607f4964dSYang Liu { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmor_mm, rv_op_vmor_mm, 0 }, 206707f4964dSYang Liu { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmnor_mm, rv_op_vmnor_mm, 0 }, 206807f4964dSYang Liu { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmorn_mm, rv_op_vmorn_mm, 0 }, 206907f4964dSYang Liu { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vmxnor_mm, rv_op_vmxnor_mm, 0 }, 207007f4964dSYang Liu { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, rv_op_vcpop_m, rv_op_vcpop_m, 0 }, 207107f4964dSYang Liu { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, rv_op_vfirst_m, rv_op_vfirst_m, 0 }, 207207f4964dSYang Liu { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsbf_m, rv_op_vmsbf_m, 0 }, 207307f4964dSYang Liu { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsif_m, rv_op_vmsif_m, 0 }, 207407f4964dSYang Liu { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vmsof_m, rv_op_vmsof_m, 0 }, 207507f4964dSYang Liu { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_viota_m, rv_op_viota_m, 0 }, 207607f4964dSYang Liu { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, rv_op_vid_v, rv_op_vid_v, 0 }, 207707f4964dSYang Liu { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, rv_op_vmv_x_s, rv_op_vmv_x_s, 0 }, 207807f4964dSYang Liu { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, rv_op_vmv_s_x, rv_op_vmv_s_x, 0 }, 207907f4964dSYang Liu { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, rv_op_vfmv_f_s, rv_op_vfmv_f_s, 0 }, 208007f4964dSYang Liu { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, rv_op_vfmv_s_f, rv_op_vfmv_s_f, 0 }, 208107f4964dSYang Liu { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslideup_vx, rv_op_vslideup_vx, 0 }, 208207f4964dSYang Liu { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vslideup_vi, rv_op_vslideup_vi, 0 }, 208307f4964dSYang Liu { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslide1up_vx, rv_op_vslide1up_vx, 0 }, 208407f4964dSYang Liu { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslidedown_vx, rv_op_vslidedown_vx, 0 }, 208507f4964dSYang Liu { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vslidedown_vi, rv_op_vslidedown_vi, 0 }, 208607f4964dSYang Liu { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vslide1down_vx, rv_op_vslide1down_vx, 0 }, 208707f4964dSYang Liu { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrgather_vv, rv_op_vrgather_vv, 0 }, 208807f4964dSYang Liu { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, rv_op_vrgatherei16_vv, rv_op_vrgatherei16_vv, 0 }, 208907f4964dSYang Liu { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, rv_op_vrgather_vx, rv_op_vrgather_vx, 0 }, 209007f4964dSYang Liu { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, rv_op_vrgather_vi, rv_op_vrgather_vi, 0 }, 209107f4964dSYang Liu { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, rv_op_vcompress_vm, rv_op_vcompress_vm, 0 }, 209207f4964dSYang Liu { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv1r_v, rv_op_vmv1r_v, 0 }, 209307f4964dSYang Liu { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv2r_v, rv_op_vmv2r_v, 0 }, 209407f4964dSYang Liu { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv4r_v, rv_op_vmv4r_v, 0 }, 209507f4964dSYang Liu { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, rv_op_vmv8r_v, rv_op_vmv8r_v, 0 }, 209607f4964dSYang Liu { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf2, rv_op_vzext_vf2, 0 }, 209707f4964dSYang Liu { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf4, rv_op_vzext_vf4, 0 }, 209807f4964dSYang Liu { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vzext_vf8, rv_op_vzext_vf8, 0 }, 209907f4964dSYang Liu { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf2, rv_op_vsext_vf2, 0 }, 210007f4964dSYang Liu { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf4, rv_op_vsext_vf4, 0 }, 210107f4964dSYang Liu { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf8, rv_op_vsext_vf8, 0 }, 210207f4964dSYang Liu { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, rv_op_vsetvli, rv_op_vsetvli, 0 }, 210307f4964dSYang Liu { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, rv_op_vsetivli, rv_op_vsetivli, 0 }, 21042c71d02eSWeiwei Li { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, rv_op_vsetvl, rv_op_vsetvl, 0 }, 21052c71d02eSWeiwei Li { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21062c71d02eSWeiwei Li { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21072c71d02eSWeiwei Li { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21082c71d02eSWeiwei Li { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21092c71d02eSWeiwei Li { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21102c71d02eSWeiwei Li { "c.not", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 21112c71d02eSWeiwei Li { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2, NULL, 0, 0 }, 21122c71d02eSWeiwei Li { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 21132c71d02eSWeiwei Li { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 21142c71d02eSWeiwei Li { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 21152c71d02eSWeiwei Li { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 21162c71d02eSWeiwei Li { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 21172c71d02eSWeiwei Li { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist, NULL, 0, 0 }, 21182c71d02eSWeiwei Li { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 }, 21192c71d02eSWeiwei Li { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0, 0 }, 21202c71d02eSWeiwei Li { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 }, 21212c71d02eSWeiwei Li { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 21222c71d02eSWeiwei Li { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 21232c71d02eSWeiwei Li { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, 21242c71d02eSWeiwei Li { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, 2125d397be9aSRichard Henderson { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 2126d397be9aSRichard Henderson { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 2127ea103259SMichael Clark }; 2128ea103259SMichael Clark 2129ea103259SMichael Clark /* CSR names */ 2130ea103259SMichael Clark 2131ea103259SMichael Clark static const char *csr_name(int csrno) 2132ea103259SMichael Clark { 2133ea103259SMichael Clark switch (csrno) { 2134ea103259SMichael Clark case 0x0000: return "ustatus"; 2135ea103259SMichael Clark case 0x0001: return "fflags"; 2136ea103259SMichael Clark case 0x0002: return "frm"; 2137ea103259SMichael Clark case 0x0003: return "fcsr"; 2138ea103259SMichael Clark case 0x0004: return "uie"; 2139ea103259SMichael Clark case 0x0005: return "utvec"; 214007f4964dSYang Liu case 0x0008: return "vstart"; 214107f4964dSYang Liu case 0x0009: return "vxsat"; 214207f4964dSYang Liu case 0x000a: return "vxrm"; 214307f4964dSYang Liu case 0x000f: return "vcsr"; 21445748c886SWeiwei Li case 0x0015: return "seed"; 21452c71d02eSWeiwei Li case 0x0017: return "jvt"; 2146ea103259SMichael Clark case 0x0040: return "uscratch"; 2147ea103259SMichael Clark case 0x0041: return "uepc"; 2148ea103259SMichael Clark case 0x0042: return "ucause"; 2149ea103259SMichael Clark case 0x0043: return "utval"; 2150ea103259SMichael Clark case 0x0044: return "uip"; 2151ea103259SMichael Clark case 0x0100: return "sstatus"; 2152ea103259SMichael Clark case 0x0104: return "sie"; 2153ea103259SMichael Clark case 0x0105: return "stvec"; 2154ea103259SMichael Clark case 0x0106: return "scounteren"; 2155ea103259SMichael Clark case 0x0140: return "sscratch"; 2156ea103259SMichael Clark case 0x0141: return "sepc"; 2157ea103259SMichael Clark case 0x0142: return "scause"; 2158ea103259SMichael Clark case 0x0143: return "stval"; 2159ea103259SMichael Clark case 0x0144: return "sip"; 2160ea103259SMichael Clark case 0x0180: return "satp"; 2161ea103259SMichael Clark case 0x0200: return "hstatus"; 2162ea103259SMichael Clark case 0x0202: return "hedeleg"; 2163ea103259SMichael Clark case 0x0203: return "hideleg"; 2164ea103259SMichael Clark case 0x0204: return "hie"; 2165ea103259SMichael Clark case 0x0205: return "htvec"; 2166ea103259SMichael Clark case 0x0240: return "hscratch"; 2167ea103259SMichael Clark case 0x0241: return "hepc"; 2168ea103259SMichael Clark case 0x0242: return "hcause"; 2169ea103259SMichael Clark case 0x0243: return "hbadaddr"; 2170ea103259SMichael Clark case 0x0244: return "hip"; 2171ea103259SMichael Clark case 0x0300: return "mstatus"; 2172ea103259SMichael Clark case 0x0301: return "misa"; 2173ea103259SMichael Clark case 0x0302: return "medeleg"; 2174ea103259SMichael Clark case 0x0303: return "mideleg"; 2175ea103259SMichael Clark case 0x0304: return "mie"; 2176ea103259SMichael Clark case 0x0305: return "mtvec"; 2177ea103259SMichael Clark case 0x0306: return "mcounteren"; 2178ea103259SMichael Clark case 0x0320: return "mucounteren"; 2179ea103259SMichael Clark case 0x0321: return "mscounteren"; 2180ea103259SMichael Clark case 0x0322: return "mhcounteren"; 2181ea103259SMichael Clark case 0x0323: return "mhpmevent3"; 2182ea103259SMichael Clark case 0x0324: return "mhpmevent4"; 2183ea103259SMichael Clark case 0x0325: return "mhpmevent5"; 2184ea103259SMichael Clark case 0x0326: return "mhpmevent6"; 2185ea103259SMichael Clark case 0x0327: return "mhpmevent7"; 2186ea103259SMichael Clark case 0x0328: return "mhpmevent8"; 2187ea103259SMichael Clark case 0x0329: return "mhpmevent9"; 2188ea103259SMichael Clark case 0x032a: return "mhpmevent10"; 2189ea103259SMichael Clark case 0x032b: return "mhpmevent11"; 2190ea103259SMichael Clark case 0x032c: return "mhpmevent12"; 2191ea103259SMichael Clark case 0x032d: return "mhpmevent13"; 2192ea103259SMichael Clark case 0x032e: return "mhpmevent14"; 2193ea103259SMichael Clark case 0x032f: return "mhpmevent15"; 2194ea103259SMichael Clark case 0x0330: return "mhpmevent16"; 2195ea103259SMichael Clark case 0x0331: return "mhpmevent17"; 2196ea103259SMichael Clark case 0x0332: return "mhpmevent18"; 2197ea103259SMichael Clark case 0x0333: return "mhpmevent19"; 2198ea103259SMichael Clark case 0x0334: return "mhpmevent20"; 2199ea103259SMichael Clark case 0x0335: return "mhpmevent21"; 2200ea103259SMichael Clark case 0x0336: return "mhpmevent22"; 2201ea103259SMichael Clark case 0x0337: return "mhpmevent23"; 2202ea103259SMichael Clark case 0x0338: return "mhpmevent24"; 2203ea103259SMichael Clark case 0x0339: return "mhpmevent25"; 2204ea103259SMichael Clark case 0x033a: return "mhpmevent26"; 2205ea103259SMichael Clark case 0x033b: return "mhpmevent27"; 2206ea103259SMichael Clark case 0x033c: return "mhpmevent28"; 2207ea103259SMichael Clark case 0x033d: return "mhpmevent29"; 2208ea103259SMichael Clark case 0x033e: return "mhpmevent30"; 2209ea103259SMichael Clark case 0x033f: return "mhpmevent31"; 2210ea103259SMichael Clark case 0x0340: return "mscratch"; 2211ea103259SMichael Clark case 0x0341: return "mepc"; 2212ea103259SMichael Clark case 0x0342: return "mcause"; 2213ea103259SMichael Clark case 0x0343: return "mtval"; 2214ea103259SMichael Clark case 0x0344: return "mip"; 2215ea103259SMichael Clark case 0x0380: return "mbase"; 2216ea103259SMichael Clark case 0x0381: return "mbound"; 2217ea103259SMichael Clark case 0x0382: return "mibase"; 2218ea103259SMichael Clark case 0x0383: return "mibound"; 2219ea103259SMichael Clark case 0x0384: return "mdbase"; 2220ea103259SMichael Clark case 0x0385: return "mdbound"; 2221ea103259SMichael Clark case 0x03a0: return "pmpcfg3"; 2222ea103259SMichael Clark case 0x03b0: return "pmpaddr0"; 2223ea103259SMichael Clark case 0x03b1: return "pmpaddr1"; 2224ea103259SMichael Clark case 0x03b2: return "pmpaddr2"; 2225ea103259SMichael Clark case 0x03b3: return "pmpaddr3"; 2226ea103259SMichael Clark case 0x03b4: return "pmpaddr4"; 2227ea103259SMichael Clark case 0x03b5: return "pmpaddr5"; 2228ea103259SMichael Clark case 0x03b6: return "pmpaddr6"; 2229ea103259SMichael Clark case 0x03b7: return "pmpaddr7"; 2230ea103259SMichael Clark case 0x03b8: return "pmpaddr8"; 2231ea103259SMichael Clark case 0x03b9: return "pmpaddr9"; 2232ea103259SMichael Clark case 0x03ba: return "pmpaddr10"; 2233ea103259SMichael Clark case 0x03bb: return "pmpaddr11"; 2234ea103259SMichael Clark case 0x03bc: return "pmpaddr12"; 2235ea103259SMichael Clark case 0x03bd: return "pmpaddr14"; 2236ea103259SMichael Clark case 0x03be: return "pmpaddr13"; 2237ea103259SMichael Clark case 0x03bf: return "pmpaddr15"; 2238ea103259SMichael Clark case 0x0780: return "mtohost"; 2239ea103259SMichael Clark case 0x0781: return "mfromhost"; 2240ea103259SMichael Clark case 0x0782: return "mreset"; 2241ea103259SMichael Clark case 0x0783: return "mipi"; 2242ea103259SMichael Clark case 0x0784: return "miobase"; 2243ea103259SMichael Clark case 0x07a0: return "tselect"; 2244ea103259SMichael Clark case 0x07a1: return "tdata1"; 2245ea103259SMichael Clark case 0x07a2: return "tdata2"; 2246ea103259SMichael Clark case 0x07a3: return "tdata3"; 2247ea103259SMichael Clark case 0x07b0: return "dcsr"; 2248ea103259SMichael Clark case 0x07b1: return "dpc"; 2249ea103259SMichael Clark case 0x07b2: return "dscratch"; 2250ea103259SMichael Clark case 0x0b00: return "mcycle"; 2251ea103259SMichael Clark case 0x0b01: return "mtime"; 2252ea103259SMichael Clark case 0x0b02: return "minstret"; 2253ea103259SMichael Clark case 0x0b03: return "mhpmcounter3"; 2254ea103259SMichael Clark case 0x0b04: return "mhpmcounter4"; 2255ea103259SMichael Clark case 0x0b05: return "mhpmcounter5"; 2256ea103259SMichael Clark case 0x0b06: return "mhpmcounter6"; 2257ea103259SMichael Clark case 0x0b07: return "mhpmcounter7"; 2258ea103259SMichael Clark case 0x0b08: return "mhpmcounter8"; 2259ea103259SMichael Clark case 0x0b09: return "mhpmcounter9"; 2260ea103259SMichael Clark case 0x0b0a: return "mhpmcounter10"; 2261ea103259SMichael Clark case 0x0b0b: return "mhpmcounter11"; 2262ea103259SMichael Clark case 0x0b0c: return "mhpmcounter12"; 2263ea103259SMichael Clark case 0x0b0d: return "mhpmcounter13"; 2264ea103259SMichael Clark case 0x0b0e: return "mhpmcounter14"; 2265ea103259SMichael Clark case 0x0b0f: return "mhpmcounter15"; 2266ea103259SMichael Clark case 0x0b10: return "mhpmcounter16"; 2267ea103259SMichael Clark case 0x0b11: return "mhpmcounter17"; 2268ea103259SMichael Clark case 0x0b12: return "mhpmcounter18"; 2269ea103259SMichael Clark case 0x0b13: return "mhpmcounter19"; 2270ea103259SMichael Clark case 0x0b14: return "mhpmcounter20"; 2271ea103259SMichael Clark case 0x0b15: return "mhpmcounter21"; 2272ea103259SMichael Clark case 0x0b16: return "mhpmcounter22"; 2273ea103259SMichael Clark case 0x0b17: return "mhpmcounter23"; 2274ea103259SMichael Clark case 0x0b18: return "mhpmcounter24"; 2275ea103259SMichael Clark case 0x0b19: return "mhpmcounter25"; 2276ea103259SMichael Clark case 0x0b1a: return "mhpmcounter26"; 2277ea103259SMichael Clark case 0x0b1b: return "mhpmcounter27"; 2278ea103259SMichael Clark case 0x0b1c: return "mhpmcounter28"; 2279ea103259SMichael Clark case 0x0b1d: return "mhpmcounter29"; 2280ea103259SMichael Clark case 0x0b1e: return "mhpmcounter30"; 2281ea103259SMichael Clark case 0x0b1f: return "mhpmcounter31"; 2282ea103259SMichael Clark case 0x0b80: return "mcycleh"; 2283ea103259SMichael Clark case 0x0b81: return "mtimeh"; 2284ea103259SMichael Clark case 0x0b82: return "minstreth"; 2285ea103259SMichael Clark case 0x0b83: return "mhpmcounter3h"; 2286ea103259SMichael Clark case 0x0b84: return "mhpmcounter4h"; 2287ea103259SMichael Clark case 0x0b85: return "mhpmcounter5h"; 2288ea103259SMichael Clark case 0x0b86: return "mhpmcounter6h"; 2289ea103259SMichael Clark case 0x0b87: return "mhpmcounter7h"; 2290ea103259SMichael Clark case 0x0b88: return "mhpmcounter8h"; 2291ea103259SMichael Clark case 0x0b89: return "mhpmcounter9h"; 2292ea103259SMichael Clark case 0x0b8a: return "mhpmcounter10h"; 2293ea103259SMichael Clark case 0x0b8b: return "mhpmcounter11h"; 2294ea103259SMichael Clark case 0x0b8c: return "mhpmcounter12h"; 2295ea103259SMichael Clark case 0x0b8d: return "mhpmcounter13h"; 2296ea103259SMichael Clark case 0x0b8e: return "mhpmcounter14h"; 2297ea103259SMichael Clark case 0x0b8f: return "mhpmcounter15h"; 2298ea103259SMichael Clark case 0x0b90: return "mhpmcounter16h"; 2299ea103259SMichael Clark case 0x0b91: return "mhpmcounter17h"; 2300ea103259SMichael Clark case 0x0b92: return "mhpmcounter18h"; 2301ea103259SMichael Clark case 0x0b93: return "mhpmcounter19h"; 2302ea103259SMichael Clark case 0x0b94: return "mhpmcounter20h"; 2303ea103259SMichael Clark case 0x0b95: return "mhpmcounter21h"; 2304ea103259SMichael Clark case 0x0b96: return "mhpmcounter22h"; 2305ea103259SMichael Clark case 0x0b97: return "mhpmcounter23h"; 2306ea103259SMichael Clark case 0x0b98: return "mhpmcounter24h"; 2307ea103259SMichael Clark case 0x0b99: return "mhpmcounter25h"; 2308ea103259SMichael Clark case 0x0b9a: return "mhpmcounter26h"; 2309ea103259SMichael Clark case 0x0b9b: return "mhpmcounter27h"; 2310ea103259SMichael Clark case 0x0b9c: return "mhpmcounter28h"; 2311ea103259SMichael Clark case 0x0b9d: return "mhpmcounter29h"; 2312ea103259SMichael Clark case 0x0b9e: return "mhpmcounter30h"; 2313ea103259SMichael Clark case 0x0b9f: return "mhpmcounter31h"; 2314ea103259SMichael Clark case 0x0c00: return "cycle"; 2315ea103259SMichael Clark case 0x0c01: return "time"; 2316ea103259SMichael Clark case 0x0c02: return "instret"; 231707f4964dSYang Liu case 0x0c20: return "vl"; 231807f4964dSYang Liu case 0x0c21: return "vtype"; 231907f4964dSYang Liu case 0x0c22: return "vlenb"; 2320ea103259SMichael Clark case 0x0c80: return "cycleh"; 2321ea103259SMichael Clark case 0x0c81: return "timeh"; 2322ea103259SMichael Clark case 0x0c82: return "instreth"; 2323ea103259SMichael Clark case 0x0d00: return "scycle"; 2324ea103259SMichael Clark case 0x0d01: return "stime"; 2325ea103259SMichael Clark case 0x0d02: return "sinstret"; 2326ea103259SMichael Clark case 0x0d80: return "scycleh"; 2327ea103259SMichael Clark case 0x0d81: return "stimeh"; 2328ea103259SMichael Clark case 0x0d82: return "sinstreth"; 2329ea103259SMichael Clark case 0x0e00: return "hcycle"; 2330ea103259SMichael Clark case 0x0e01: return "htime"; 2331ea103259SMichael Clark case 0x0e02: return "hinstret"; 2332ea103259SMichael Clark case 0x0e80: return "hcycleh"; 2333ea103259SMichael Clark case 0x0e81: return "htimeh"; 2334ea103259SMichael Clark case 0x0e82: return "hinstreth"; 2335ea103259SMichael Clark case 0x0f11: return "mvendorid"; 2336ea103259SMichael Clark case 0x0f12: return "marchid"; 2337ea103259SMichael Clark case 0x0f13: return "mimpid"; 2338ea103259SMichael Clark case 0x0f14: return "mhartid"; 2339ea103259SMichael Clark default: return NULL; 2340ea103259SMichael Clark } 2341ea103259SMichael Clark } 2342ea103259SMichael Clark 2343ea103259SMichael Clark /* decode opcode */ 2344ea103259SMichael Clark 2345ea103259SMichael Clark static void decode_inst_opcode(rv_decode *dec, rv_isa isa) 2346ea103259SMichael Clark { 2347ea103259SMichael Clark rv_inst inst = dec->inst; 2348ea103259SMichael Clark rv_opcode op = rv_op_illegal; 2349ea103259SMichael Clark switch (((inst >> 0) & 0b11)) { 2350ea103259SMichael Clark case 0: 2351ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2352ea103259SMichael Clark case 0: op = rv_op_c_addi4spn; break; 2353ea103259SMichael Clark case 1: 2354ea103259SMichael Clark if (isa == rv128) { 2355ea103259SMichael Clark op = rv_op_c_lq; 2356ea103259SMichael Clark } else { 2357ea103259SMichael Clark op = rv_op_c_fld; 2358ea103259SMichael Clark } 2359ea103259SMichael Clark break; 2360ea103259SMichael Clark case 2: op = rv_op_c_lw; break; 2361ea103259SMichael Clark case 3: 2362ea103259SMichael Clark if (isa == rv32) { 2363ea103259SMichael Clark op = rv_op_c_flw; 2364ea103259SMichael Clark } else { 2365ea103259SMichael Clark op = rv_op_c_ld; 2366ea103259SMichael Clark } 2367ea103259SMichael Clark break; 23682c71d02eSWeiwei Li case 4: 23692c71d02eSWeiwei Li switch ((inst >> 10) & 0b111) { 23702c71d02eSWeiwei Li case 0: op = rv_op_c_lbu; break; 23712c71d02eSWeiwei Li case 1: 23722c71d02eSWeiwei Li if (((inst >> 6) & 1) == 0) { 23732c71d02eSWeiwei Li op = rv_op_c_lhu; 23742c71d02eSWeiwei Li } else { 23752c71d02eSWeiwei Li op = rv_op_c_lh; 23762c71d02eSWeiwei Li } 23772c71d02eSWeiwei Li break; 23782c71d02eSWeiwei Li case 2: op = rv_op_c_sb; break; 23792c71d02eSWeiwei Li case 3: 23802c71d02eSWeiwei Li if (((inst >> 6) & 1) == 0) { 23812c71d02eSWeiwei Li op = rv_op_c_sh; 23822c71d02eSWeiwei Li } 23832c71d02eSWeiwei Li break; 23842c71d02eSWeiwei Li } 23852c71d02eSWeiwei Li break; 2386ea103259SMichael Clark case 5: 2387ea103259SMichael Clark if (isa == rv128) { 2388ea103259SMichael Clark op = rv_op_c_sq; 2389ea103259SMichael Clark } else { 2390ea103259SMichael Clark op = rv_op_c_fsd; 2391ea103259SMichael Clark } 2392ea103259SMichael Clark break; 2393ea103259SMichael Clark case 6: op = rv_op_c_sw; break; 2394ea103259SMichael Clark case 7: 2395ea103259SMichael Clark if (isa == rv32) { 2396ea103259SMichael Clark op = rv_op_c_fsw; 2397ea103259SMichael Clark } else { 2398ea103259SMichael Clark op = rv_op_c_sd; 2399ea103259SMichael Clark } 2400ea103259SMichael Clark break; 2401ea103259SMichael Clark } 2402ea103259SMichael Clark break; 2403ea103259SMichael Clark case 1: 2404ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2405ea103259SMichael Clark case 0: 2406ea103259SMichael Clark switch (((inst >> 2) & 0b11111111111)) { 2407ea103259SMichael Clark case 0: op = rv_op_c_nop; break; 2408ea103259SMichael Clark default: op = rv_op_c_addi; break; 2409ea103259SMichael Clark } 2410ea103259SMichael Clark break; 2411ea103259SMichael Clark case 1: 2412ea103259SMichael Clark if (isa == rv32) { 2413ea103259SMichael Clark op = rv_op_c_jal; 2414ea103259SMichael Clark } else { 2415ea103259SMichael Clark op = rv_op_c_addiw; 2416ea103259SMichael Clark } 2417ea103259SMichael Clark break; 2418ea103259SMichael Clark case 2: op = rv_op_c_li; break; 2419ea103259SMichael Clark case 3: 2420ea103259SMichael Clark switch (((inst >> 7) & 0b11111)) { 2421ea103259SMichael Clark case 2: op = rv_op_c_addi16sp; break; 2422ea103259SMichael Clark default: op = rv_op_c_lui; break; 2423ea103259SMichael Clark } 2424ea103259SMichael Clark break; 2425ea103259SMichael Clark case 4: 2426ea103259SMichael Clark switch (((inst >> 10) & 0b11)) { 2427ea103259SMichael Clark case 0: 2428ea103259SMichael Clark op = rv_op_c_srli; 2429ea103259SMichael Clark break; 2430ea103259SMichael Clark case 1: 2431ea103259SMichael Clark op = rv_op_c_srai; 2432ea103259SMichael Clark break; 2433ea103259SMichael Clark case 2: op = rv_op_c_andi; break; 2434ea103259SMichael Clark case 3: 2435ea103259SMichael Clark switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) { 2436ea103259SMichael Clark case 0: op = rv_op_c_sub; break; 2437ea103259SMichael Clark case 1: op = rv_op_c_xor; break; 2438ea103259SMichael Clark case 2: op = rv_op_c_or; break; 2439ea103259SMichael Clark case 3: op = rv_op_c_and; break; 2440ea103259SMichael Clark case 4: op = rv_op_c_subw; break; 2441ea103259SMichael Clark case 5: op = rv_op_c_addw; break; 24422c71d02eSWeiwei Li case 6: op = rv_op_c_mul; break; 24432c71d02eSWeiwei Li case 7: 24442c71d02eSWeiwei Li switch ((inst >> 2) & 0b111) { 24452c71d02eSWeiwei Li case 0: op = rv_op_c_zext_b; break; 24462c71d02eSWeiwei Li case 1: op = rv_op_c_sext_b; break; 24472c71d02eSWeiwei Li case 2: op = rv_op_c_zext_h; break; 24482c71d02eSWeiwei Li case 3: op = rv_op_c_sext_h; break; 24492c71d02eSWeiwei Li case 4: op = rv_op_c_zext_w; break; 24502c71d02eSWeiwei Li case 5: op = rv_op_c_not; break; 24512c71d02eSWeiwei Li } 24522c71d02eSWeiwei Li break; 2453ea103259SMichael Clark } 2454ea103259SMichael Clark break; 2455ea103259SMichael Clark } 2456ea103259SMichael Clark break; 2457ea103259SMichael Clark case 5: op = rv_op_c_j; break; 2458ea103259SMichael Clark case 6: op = rv_op_c_beqz; break; 2459ea103259SMichael Clark case 7: op = rv_op_c_bnez; break; 2460ea103259SMichael Clark } 2461ea103259SMichael Clark break; 2462ea103259SMichael Clark case 2: 2463ea103259SMichael Clark switch (((inst >> 13) & 0b111)) { 2464ea103259SMichael Clark case 0: 2465ea103259SMichael Clark op = rv_op_c_slli; 2466ea103259SMichael Clark break; 2467ea103259SMichael Clark case 1: 2468ea103259SMichael Clark if (isa == rv128) { 2469ea103259SMichael Clark op = rv_op_c_lqsp; 2470ea103259SMichael Clark } else { 2471ea103259SMichael Clark op = rv_op_c_fldsp; 2472ea103259SMichael Clark } 2473ea103259SMichael Clark break; 2474ea103259SMichael Clark case 2: op = rv_op_c_lwsp; break; 2475ea103259SMichael Clark case 3: 2476ea103259SMichael Clark if (isa == rv32) { 2477ea103259SMichael Clark op = rv_op_c_flwsp; 2478ea103259SMichael Clark } else { 2479ea103259SMichael Clark op = rv_op_c_ldsp; 2480ea103259SMichael Clark } 2481ea103259SMichael Clark break; 2482ea103259SMichael Clark case 4: 2483ea103259SMichael Clark switch (((inst >> 12) & 0b1)) { 2484ea103259SMichael Clark case 0: 2485ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2486ea103259SMichael Clark case 0: op = rv_op_c_jr; break; 2487ea103259SMichael Clark default: op = rv_op_c_mv; break; 2488ea103259SMichael Clark } 2489ea103259SMichael Clark break; 2490ea103259SMichael Clark case 1: 2491ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2492ea103259SMichael Clark case 0: 2493ea103259SMichael Clark switch (((inst >> 7) & 0b11111)) { 2494ea103259SMichael Clark case 0: op = rv_op_c_ebreak; break; 2495ea103259SMichael Clark default: op = rv_op_c_jalr; break; 2496ea103259SMichael Clark } 2497ea103259SMichael Clark break; 2498ea103259SMichael Clark default: op = rv_op_c_add; break; 2499ea103259SMichael Clark } 2500ea103259SMichael Clark break; 2501ea103259SMichael Clark } 2502ea103259SMichael Clark break; 2503ea103259SMichael Clark case 5: 2504ea103259SMichael Clark if (isa == rv128) { 2505ea103259SMichael Clark op = rv_op_c_sqsp; 2506ea103259SMichael Clark } else { 25071dc34be1SMichael Clark op = rv_op_c_fsdsp; 25082c71d02eSWeiwei Li if (((inst >> 12) & 0b01)) { 25092c71d02eSWeiwei Li switch ((inst >> 8) & 0b01111) { 25102c71d02eSWeiwei Li case 8: 25112c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 25122c71d02eSWeiwei Li op = rv_op_cm_push; 25132c71d02eSWeiwei Li } 25142c71d02eSWeiwei Li break; 25152c71d02eSWeiwei Li case 10: 25162c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 25172c71d02eSWeiwei Li op = rv_op_cm_pop; 25182c71d02eSWeiwei Li } 25192c71d02eSWeiwei Li break; 25202c71d02eSWeiwei Li case 12: 25212c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 25222c71d02eSWeiwei Li op = rv_op_cm_popretz; 25232c71d02eSWeiwei Li } 25242c71d02eSWeiwei Li break; 25252c71d02eSWeiwei Li case 14: 25262c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 25272c71d02eSWeiwei Li op = rv_op_cm_popret; 25282c71d02eSWeiwei Li } 25292c71d02eSWeiwei Li break; 25302c71d02eSWeiwei Li } 25312c71d02eSWeiwei Li } else { 25322c71d02eSWeiwei Li switch ((inst >> 10) & 0b011) { 25332c71d02eSWeiwei Li case 0: 25342c71d02eSWeiwei Li if (((inst >> 2) & 0xFF) >= 32) { 25352c71d02eSWeiwei Li op = rv_op_cm_jalt; 25362c71d02eSWeiwei Li } else { 25372c71d02eSWeiwei Li op = rv_op_cm_jt; 25382c71d02eSWeiwei Li } 25392c71d02eSWeiwei Li break; 25402c71d02eSWeiwei Li case 3: 25412c71d02eSWeiwei Li switch ((inst >> 5) & 0b011) { 25422c71d02eSWeiwei Li case 1: op = rv_op_cm_mvsa01; break; 25432c71d02eSWeiwei Li case 3: op = rv_op_cm_mva01s; break; 25442c71d02eSWeiwei Li } 25452c71d02eSWeiwei Li break; 25462c71d02eSWeiwei Li } 25472c71d02eSWeiwei Li } 2548ea103259SMichael Clark } 25491dc34be1SMichael Clark break; 2550ea103259SMichael Clark case 6: op = rv_op_c_swsp; break; 2551ea103259SMichael Clark case 7: 2552ea103259SMichael Clark if (isa == rv32) { 2553ea103259SMichael Clark op = rv_op_c_fswsp; 2554ea103259SMichael Clark } else { 2555ea103259SMichael Clark op = rv_op_c_sdsp; 2556ea103259SMichael Clark } 2557ea103259SMichael Clark break; 2558ea103259SMichael Clark } 2559ea103259SMichael Clark break; 2560ea103259SMichael Clark case 3: 2561ea103259SMichael Clark switch (((inst >> 2) & 0b11111)) { 2562ea103259SMichael Clark case 0: 2563ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2564ea103259SMichael Clark case 0: op = rv_op_lb; break; 2565ea103259SMichael Clark case 1: op = rv_op_lh; break; 2566ea103259SMichael Clark case 2: op = rv_op_lw; break; 2567ea103259SMichael Clark case 3: op = rv_op_ld; break; 2568ea103259SMichael Clark case 4: op = rv_op_lbu; break; 2569ea103259SMichael Clark case 5: op = rv_op_lhu; break; 2570ea103259SMichael Clark case 6: op = rv_op_lwu; break; 2571ea103259SMichael Clark case 7: op = rv_op_ldu; break; 2572ea103259SMichael Clark } 2573ea103259SMichael Clark break; 2574ea103259SMichael Clark case 1: 2575ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 257607f4964dSYang Liu case 0: 257707f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 257807f4964dSYang Liu case 40: op = rv_op_vl1re8_v; break; 257907f4964dSYang Liu case 552: op = rv_op_vl2re8_v; break; 258007f4964dSYang Liu case 1576: op = rv_op_vl4re8_v; break; 258107f4964dSYang Liu case 3624: op = rv_op_vl8re8_v; break; 258207f4964dSYang Liu } 258307f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 258407f4964dSYang Liu case 0: 258507f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 258607f4964dSYang Liu case 0: op = rv_op_vle8_v; break; 258707f4964dSYang Liu case 11: op = rv_op_vlm_v; break; 258807f4964dSYang Liu case 16: op = rv_op_vle8ff_v; break; 258907f4964dSYang Liu } 259007f4964dSYang Liu break; 259107f4964dSYang Liu case 1: op = rv_op_vluxei8_v; break; 259207f4964dSYang Liu case 2: op = rv_op_vlse8_v; break; 259307f4964dSYang Liu case 3: op = rv_op_vloxei8_v; break; 259407f4964dSYang Liu } 259507f4964dSYang Liu break; 2596ea103259SMichael Clark case 2: op = rv_op_flw; break; 2597ea103259SMichael Clark case 3: op = rv_op_fld; break; 2598ea103259SMichael Clark case 4: op = rv_op_flq; break; 259907f4964dSYang Liu case 5: 260007f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 260107f4964dSYang Liu case 40: op = rv_op_vl1re16_v; break; 260207f4964dSYang Liu case 552: op = rv_op_vl2re16_v; break; 260307f4964dSYang Liu case 1576: op = rv_op_vl4re16_v; break; 260407f4964dSYang Liu case 3624: op = rv_op_vl8re16_v; break; 260507f4964dSYang Liu } 260607f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 260707f4964dSYang Liu case 0: 260807f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 260907f4964dSYang Liu case 0: op = rv_op_vle16_v; break; 261007f4964dSYang Liu case 16: op = rv_op_vle16ff_v; break; 261107f4964dSYang Liu } 261207f4964dSYang Liu break; 261307f4964dSYang Liu case 1: op = rv_op_vluxei16_v; break; 261407f4964dSYang Liu case 2: op = rv_op_vlse16_v; break; 261507f4964dSYang Liu case 3: op = rv_op_vloxei16_v; break; 261607f4964dSYang Liu } 261707f4964dSYang Liu break; 261807f4964dSYang Liu case 6: 261907f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 262007f4964dSYang Liu case 40: op = rv_op_vl1re32_v; break; 262107f4964dSYang Liu case 552: op = rv_op_vl2re32_v; break; 262207f4964dSYang Liu case 1576: op = rv_op_vl4re32_v; break; 262307f4964dSYang Liu case 3624: op = rv_op_vl8re32_v; break; 262407f4964dSYang Liu } 262507f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 262607f4964dSYang Liu case 0: 262707f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 262807f4964dSYang Liu case 0: op = rv_op_vle32_v; break; 262907f4964dSYang Liu case 16: op = rv_op_vle32ff_v; break; 263007f4964dSYang Liu } 263107f4964dSYang Liu break; 263207f4964dSYang Liu case 1: op = rv_op_vluxei32_v; break; 263307f4964dSYang Liu case 2: op = rv_op_vlse32_v; break; 263407f4964dSYang Liu case 3: op = rv_op_vloxei32_v; break; 263507f4964dSYang Liu } 263607f4964dSYang Liu break; 263707f4964dSYang Liu case 7: 263807f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 263907f4964dSYang Liu case 40: op = rv_op_vl1re64_v; break; 264007f4964dSYang Liu case 552: op = rv_op_vl2re64_v; break; 264107f4964dSYang Liu case 1576: op = rv_op_vl4re64_v; break; 264207f4964dSYang Liu case 3624: op = rv_op_vl8re64_v; break; 264307f4964dSYang Liu } 264407f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 264507f4964dSYang Liu case 0: 264607f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 264707f4964dSYang Liu case 0: op = rv_op_vle64_v; break; 264807f4964dSYang Liu case 16: op = rv_op_vle64ff_v; break; 264907f4964dSYang Liu } 265007f4964dSYang Liu break; 265107f4964dSYang Liu case 1: op = rv_op_vluxei64_v; break; 265207f4964dSYang Liu case 2: op = rv_op_vlse64_v; break; 265307f4964dSYang Liu case 3: op = rv_op_vloxei64_v; break; 265407f4964dSYang Liu } 265507f4964dSYang Liu break; 2656ea103259SMichael Clark } 2657ea103259SMichael Clark break; 2658ea103259SMichael Clark case 3: 2659ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2660ea103259SMichael Clark case 0: op = rv_op_fence; break; 2661ea103259SMichael Clark case 1: op = rv_op_fence_i; break; 2662ea103259SMichael Clark case 2: op = rv_op_lq; break; 2663ea103259SMichael Clark } 2664ea103259SMichael Clark break; 2665ea103259SMichael Clark case 4: 2666ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2667ea103259SMichael Clark case 0: op = rv_op_addi; break; 2668ea103259SMichael Clark case 1: 2669ea103259SMichael Clark switch (((inst >> 27) & 0b11111)) { 267002c1b569SPhilipp Tomsich case 0b00000: op = rv_op_slli; break; 26715748c886SWeiwei Li case 0b00001: 26725748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 26735748c886SWeiwei Li case 0b0001111: op = rv_op_zip; break; 26745748c886SWeiwei Li } 26755748c886SWeiwei Li break; 26765748c886SWeiwei Li case 0b00010: 26775748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 26785748c886SWeiwei Li case 0b0000000: op = rv_op_sha256sum0; break; 26795748c886SWeiwei Li case 0b0000001: op = rv_op_sha256sum1; break; 26805748c886SWeiwei Li case 0b0000010: op = rv_op_sha256sig0; break; 26815748c886SWeiwei Li case 0b0000011: op = rv_op_sha256sig1; break; 26825748c886SWeiwei Li case 0b0000100: op = rv_op_sha512sum0; break; 26835748c886SWeiwei Li case 0b0000101: op = rv_op_sha512sum1; break; 26845748c886SWeiwei Li case 0b0000110: op = rv_op_sha512sig0; break; 26855748c886SWeiwei Li case 0b0000111: op = rv_op_sha512sig1; break; 26865748c886SWeiwei Li case 0b0001000: op = rv_op_sm3p0; break; 26875748c886SWeiwei Li case 0b0001001: op = rv_op_sm3p1; break; 26885748c886SWeiwei Li } 26895748c886SWeiwei Li break; 269002c1b569SPhilipp Tomsich case 0b00101: op = rv_op_bseti; break; 26915748c886SWeiwei Li case 0b00110: 26925748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 26935748c886SWeiwei Li case 0b0000000: op = rv_op_aes64im; break; 26945748c886SWeiwei Li default: 26955748c886SWeiwei Li if (((inst >> 24) & 0b0111) == 0b001) { 26965748c886SWeiwei Li op = rv_op_aes64ks1i; 26975748c886SWeiwei Li } 26985748c886SWeiwei Li break; 26995748c886SWeiwei Li } 27005748c886SWeiwei Li break; 270102c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bclri; break; 270202c1b569SPhilipp Tomsich case 0b01101: op = rv_op_binvi; break; 270302c1b569SPhilipp Tomsich case 0b01100: 270402c1b569SPhilipp Tomsich switch (((inst >> 20) & 0b1111111)) { 270502c1b569SPhilipp Tomsich case 0b0000000: op = rv_op_clz; break; 270602c1b569SPhilipp Tomsich case 0b0000001: op = rv_op_ctz; break; 270702c1b569SPhilipp Tomsich case 0b0000010: op = rv_op_cpop; break; 270802c1b569SPhilipp Tomsich /* 0b0000011 */ 270902c1b569SPhilipp Tomsich case 0b0000100: op = rv_op_sext_b; break; 271002c1b569SPhilipp Tomsich case 0b0000101: op = rv_op_sext_h; break; 271102c1b569SPhilipp Tomsich } 271202c1b569SPhilipp Tomsich break; 2713ea103259SMichael Clark } 2714ea103259SMichael Clark break; 2715ea103259SMichael Clark case 2: op = rv_op_slti; break; 2716ea103259SMichael Clark case 3: op = rv_op_sltiu; break; 2717ea103259SMichael Clark case 4: op = rv_op_xori; break; 2718ea103259SMichael Clark case 5: 2719ea103259SMichael Clark switch (((inst >> 27) & 0b11111)) { 272002c1b569SPhilipp Tomsich case 0b00000: op = rv_op_srli; break; 27215748c886SWeiwei Li case 0b00001: 27225748c886SWeiwei Li switch (((inst >> 20) & 0b1111111)) { 27235748c886SWeiwei Li case 0b0001111: op = rv_op_unzip; break; 27245748c886SWeiwei Li } 27255748c886SWeiwei Li break; 272602c1b569SPhilipp Tomsich case 0b00101: op = rv_op_orc_b; break; 272702c1b569SPhilipp Tomsich case 0b01000: op = rv_op_srai; break; 272802c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bexti; break; 272902c1b569SPhilipp Tomsich case 0b01100: op = rv_op_rori; break; 273002c1b569SPhilipp Tomsich case 0b01101: 273102c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b1111111) { 27325748c886SWeiwei Li case 0b0011000: op = rv_op_rev8; break; 273302c1b569SPhilipp Tomsich case 0b0111000: op = rv_op_rev8; break; 27345748c886SWeiwei Li case 0b0000111: op = rv_op_brev8; break; 273502c1b569SPhilipp Tomsich } 273602c1b569SPhilipp Tomsich break; 2737ea103259SMichael Clark } 2738ea103259SMichael Clark break; 2739ea103259SMichael Clark case 6: op = rv_op_ori; break; 2740ea103259SMichael Clark case 7: op = rv_op_andi; break; 2741ea103259SMichael Clark } 2742ea103259SMichael Clark break; 2743ea103259SMichael Clark case 5: op = rv_op_auipc; break; 2744ea103259SMichael Clark case 6: 2745ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2746ea103259SMichael Clark case 0: op = rv_op_addiw; break; 2747ea103259SMichael Clark case 1: 274813e269f6SIvan Klokov switch (((inst >> 26) & 0b111111)) { 2749ea103259SMichael Clark case 0: op = rv_op_slliw; break; 275013e269f6SIvan Klokov case 2: op = rv_op_slli_uw; break; 275113e269f6SIvan Klokov case 24: 275202c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 275302c1b569SPhilipp Tomsich case 0b00000: op = rv_op_clzw; break; 275402c1b569SPhilipp Tomsich case 0b00001: op = rv_op_ctzw; break; 275502c1b569SPhilipp Tomsich case 0b00010: op = rv_op_cpopw; break; 275602c1b569SPhilipp Tomsich } 275702c1b569SPhilipp Tomsich break; 2758ea103259SMichael Clark } 2759ea103259SMichael Clark break; 2760ea103259SMichael Clark case 5: 2761ea103259SMichael Clark switch (((inst >> 25) & 0b1111111)) { 2762ea103259SMichael Clark case 0: op = rv_op_srliw; break; 2763ea103259SMichael Clark case 32: op = rv_op_sraiw; break; 276402c1b569SPhilipp Tomsich case 48: op = rv_op_roriw; break; 2765ea103259SMichael Clark } 2766ea103259SMichael Clark break; 2767ea103259SMichael Clark } 2768ea103259SMichael Clark break; 2769ea103259SMichael Clark case 8: 2770ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 2771ea103259SMichael Clark case 0: op = rv_op_sb; break; 2772ea103259SMichael Clark case 1: op = rv_op_sh; break; 2773ea103259SMichael Clark case 2: op = rv_op_sw; break; 2774ea103259SMichael Clark case 3: op = rv_op_sd; break; 2775ea103259SMichael Clark case 4: op = rv_op_sq; break; 2776ea103259SMichael Clark } 2777ea103259SMichael Clark break; 2778ea103259SMichael Clark case 9: 2779ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 278007f4964dSYang Liu case 0: 278107f4964dSYang Liu switch (((inst >> 20) & 0b111111111111)) { 278207f4964dSYang Liu case 40: op = rv_op_vs1r_v; break; 278307f4964dSYang Liu case 552: op = rv_op_vs2r_v; break; 278407f4964dSYang Liu case 1576: op = rv_op_vs4r_v; break; 278507f4964dSYang Liu case 3624: op = rv_op_vs8r_v; break; 278607f4964dSYang Liu } 278707f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 278807f4964dSYang Liu case 0: 278907f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 279007f4964dSYang Liu case 0: op = rv_op_vse8_v; break; 279107f4964dSYang Liu case 11: op = rv_op_vsm_v; break; 279207f4964dSYang Liu } 279307f4964dSYang Liu break; 279407f4964dSYang Liu case 1: op = rv_op_vsuxei8_v; break; 279507f4964dSYang Liu case 2: op = rv_op_vsse8_v; break; 279607f4964dSYang Liu case 3: op = rv_op_vsoxei8_v; break; 279707f4964dSYang Liu } 279807f4964dSYang Liu break; 2799ea103259SMichael Clark case 2: op = rv_op_fsw; break; 2800ea103259SMichael Clark case 3: op = rv_op_fsd; break; 2801ea103259SMichael Clark case 4: op = rv_op_fsq; break; 280207f4964dSYang Liu case 5: 280307f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 280407f4964dSYang Liu case 0: 280507f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 280607f4964dSYang Liu case 0: op = rv_op_vse16_v; break; 280707f4964dSYang Liu } 280807f4964dSYang Liu break; 280907f4964dSYang Liu case 1: op = rv_op_vsuxei16_v; break; 281007f4964dSYang Liu case 2: op = rv_op_vsse16_v; break; 281107f4964dSYang Liu case 3: op = rv_op_vsoxei16_v; break; 281207f4964dSYang Liu } 281307f4964dSYang Liu break; 281407f4964dSYang Liu case 6: 281507f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 281607f4964dSYang Liu case 0: 281707f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 281807f4964dSYang Liu case 0: op = rv_op_vse32_v; break; 281907f4964dSYang Liu } 282007f4964dSYang Liu break; 282107f4964dSYang Liu case 1: op = rv_op_vsuxei32_v; break; 282207f4964dSYang Liu case 2: op = rv_op_vsse32_v; break; 282307f4964dSYang Liu case 3: op = rv_op_vsoxei32_v; break; 282407f4964dSYang Liu } 282507f4964dSYang Liu break; 282607f4964dSYang Liu case 7: 282707f4964dSYang Liu switch (((inst >> 26) & 0b111)) { 282807f4964dSYang Liu case 0: 282907f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 283007f4964dSYang Liu case 0: op = rv_op_vse64_v; break; 283107f4964dSYang Liu } 283207f4964dSYang Liu break; 283307f4964dSYang Liu case 1: op = rv_op_vsuxei64_v; break; 283407f4964dSYang Liu case 2: op = rv_op_vsse64_v; break; 283507f4964dSYang Liu case 3: op = rv_op_vsoxei64_v; break; 283607f4964dSYang Liu } 283707f4964dSYang Liu break; 2838ea103259SMichael Clark } 2839ea103259SMichael Clark break; 2840ea103259SMichael Clark case 11: 2841ea103259SMichael Clark switch (((inst >> 24) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 2842ea103259SMichael Clark case 2: op = rv_op_amoadd_w; break; 2843ea103259SMichael Clark case 3: op = rv_op_amoadd_d; break; 2844ea103259SMichael Clark case 4: op = rv_op_amoadd_q; break; 2845ea103259SMichael Clark case 10: op = rv_op_amoswap_w; break; 2846ea103259SMichael Clark case 11: op = rv_op_amoswap_d; break; 2847ea103259SMichael Clark case 12: op = rv_op_amoswap_q; break; 2848ea103259SMichael Clark case 18: 2849ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2850ea103259SMichael Clark case 0: op = rv_op_lr_w; break; 2851ea103259SMichael Clark } 2852ea103259SMichael Clark break; 2853ea103259SMichael Clark case 19: 2854ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2855ea103259SMichael Clark case 0: op = rv_op_lr_d; break; 2856ea103259SMichael Clark } 2857ea103259SMichael Clark break; 2858ea103259SMichael Clark case 20: 2859ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 2860ea103259SMichael Clark case 0: op = rv_op_lr_q; break; 2861ea103259SMichael Clark } 2862ea103259SMichael Clark break; 2863ea103259SMichael Clark case 26: op = rv_op_sc_w; break; 2864ea103259SMichael Clark case 27: op = rv_op_sc_d; break; 2865ea103259SMichael Clark case 28: op = rv_op_sc_q; break; 2866ea103259SMichael Clark case 34: op = rv_op_amoxor_w; break; 2867ea103259SMichael Clark case 35: op = rv_op_amoxor_d; break; 2868ea103259SMichael Clark case 36: op = rv_op_amoxor_q; break; 2869ea103259SMichael Clark case 66: op = rv_op_amoor_w; break; 2870ea103259SMichael Clark case 67: op = rv_op_amoor_d; break; 2871ea103259SMichael Clark case 68: op = rv_op_amoor_q; break; 2872ea103259SMichael Clark case 98: op = rv_op_amoand_w; break; 2873ea103259SMichael Clark case 99: op = rv_op_amoand_d; break; 2874ea103259SMichael Clark case 100: op = rv_op_amoand_q; break; 2875ea103259SMichael Clark case 130: op = rv_op_amomin_w; break; 2876ea103259SMichael Clark case 131: op = rv_op_amomin_d; break; 2877ea103259SMichael Clark case 132: op = rv_op_amomin_q; break; 2878ea103259SMichael Clark case 162: op = rv_op_amomax_w; break; 2879ea103259SMichael Clark case 163: op = rv_op_amomax_d; break; 2880ea103259SMichael Clark case 164: op = rv_op_amomax_q; break; 2881ea103259SMichael Clark case 194: op = rv_op_amominu_w; break; 2882ea103259SMichael Clark case 195: op = rv_op_amominu_d; break; 2883ea103259SMichael Clark case 196: op = rv_op_amominu_q; break; 2884ea103259SMichael Clark case 226: op = rv_op_amomaxu_w; break; 2885ea103259SMichael Clark case 227: op = rv_op_amomaxu_d; break; 2886ea103259SMichael Clark case 228: op = rv_op_amomaxu_q; break; 2887ea103259SMichael Clark } 2888ea103259SMichael Clark break; 2889ea103259SMichael Clark case 12: 2890ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 2891ea103259SMichael Clark case 0: op = rv_op_add; break; 2892ea103259SMichael Clark case 1: op = rv_op_sll; break; 2893ea103259SMichael Clark case 2: op = rv_op_slt; break; 2894ea103259SMichael Clark case 3: op = rv_op_sltu; break; 2895ea103259SMichael Clark case 4: op = rv_op_xor; break; 2896ea103259SMichael Clark case 5: op = rv_op_srl; break; 2897ea103259SMichael Clark case 6: op = rv_op_or; break; 2898ea103259SMichael Clark case 7: op = rv_op_and; break; 2899ea103259SMichael Clark case 8: op = rv_op_mul; break; 2900ea103259SMichael Clark case 9: op = rv_op_mulh; break; 2901ea103259SMichael Clark case 10: op = rv_op_mulhsu; break; 2902ea103259SMichael Clark case 11: op = rv_op_mulhu; break; 2903ea103259SMichael Clark case 12: op = rv_op_div; break; 2904ea103259SMichael Clark case 13: op = rv_op_divu; break; 2905ea103259SMichael Clark case 14: op = rv_op_rem; break; 2906ea103259SMichael Clark case 15: op = rv_op_remu; break; 290702c1b569SPhilipp Tomsich case 36: 290802c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 290902c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 29105748c886SWeiwei Li default: op = rv_op_pack; break; 291102c1b569SPhilipp Tomsich } 291202c1b569SPhilipp Tomsich break; 29135748c886SWeiwei Li case 39: op = rv_op_packh; break; 29145748c886SWeiwei Li 291502c1b569SPhilipp Tomsich case 41: op = rv_op_clmul; break; 291602c1b569SPhilipp Tomsich case 42: op = rv_op_clmulr; break; 291702c1b569SPhilipp Tomsich case 43: op = rv_op_clmulh; break; 291802c1b569SPhilipp Tomsich case 44: op = rv_op_min; break; 291902c1b569SPhilipp Tomsich case 45: op = rv_op_minu; break; 292002c1b569SPhilipp Tomsich case 46: op = rv_op_max; break; 292102c1b569SPhilipp Tomsich case 47: op = rv_op_maxu; break; 2922d397be9aSRichard Henderson case 075: op = rv_op_czero_eqz; break; 2923d397be9aSRichard Henderson case 077: op = rv_op_czero_nez; break; 292402c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add; break; 292502c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add; break; 292602c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add; break; 292702c1b569SPhilipp Tomsich case 161: op = rv_op_bset; break; 29285748c886SWeiwei Li case 162: op = rv_op_xperm4; break; 29295748c886SWeiwei Li case 164: op = rv_op_xperm8; break; 29305748c886SWeiwei Li case 200: op = rv_op_aes64es; break; 29315748c886SWeiwei Li case 216: op = rv_op_aes64esm; break; 29325748c886SWeiwei Li case 232: op = rv_op_aes64ds; break; 29335748c886SWeiwei Li case 248: op = rv_op_aes64dsm; break; 2934ea103259SMichael Clark case 256: op = rv_op_sub; break; 293502c1b569SPhilipp Tomsich case 260: op = rv_op_xnor; break; 2936ea103259SMichael Clark case 261: op = rv_op_sra; break; 293702c1b569SPhilipp Tomsich case 262: op = rv_op_orn; break; 293802c1b569SPhilipp Tomsich case 263: op = rv_op_andn; break; 293902c1b569SPhilipp Tomsich case 289: op = rv_op_bclr; break; 294002c1b569SPhilipp Tomsich case 293: op = rv_op_bext; break; 29415748c886SWeiwei Li case 320: op = rv_op_sha512sum0r; break; 29425748c886SWeiwei Li case 328: op = rv_op_sha512sum1r; break; 29435748c886SWeiwei Li case 336: op = rv_op_sha512sig0l; break; 29445748c886SWeiwei Li case 344: op = rv_op_sha512sig1l; break; 29455748c886SWeiwei Li case 368: op = rv_op_sha512sig0h; break; 29465748c886SWeiwei Li case 376: op = rv_op_sha512sig1h; break; 294702c1b569SPhilipp Tomsich case 385: op = rv_op_rol; break; 29485748c886SWeiwei Li case 389: op = rv_op_ror; break; 294902c1b569SPhilipp Tomsich case 417: op = rv_op_binv; break; 29505748c886SWeiwei Li case 504: op = rv_op_aes64ks2; break; 29515748c886SWeiwei Li } 29525748c886SWeiwei Li switch ((inst >> 25) & 0b0011111) { 29535748c886SWeiwei Li case 17: op = rv_op_aes32esi; break; 29545748c886SWeiwei Li case 19: op = rv_op_aes32esmi; break; 29555748c886SWeiwei Li case 21: op = rv_op_aes32dsi; break; 29565748c886SWeiwei Li case 23: op = rv_op_aes32dsmi; break; 29575748c886SWeiwei Li case 24: op = rv_op_sm4ed; break; 29585748c886SWeiwei Li case 26: op = rv_op_sm4ks; break; 2959ea103259SMichael Clark } 2960ea103259SMichael Clark break; 2961ea103259SMichael Clark case 13: op = rv_op_lui; break; 2962ea103259SMichael Clark case 14: 2963ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 2964ea103259SMichael Clark case 0: op = rv_op_addw; break; 2965ea103259SMichael Clark case 1: op = rv_op_sllw; break; 2966ea103259SMichael Clark case 5: op = rv_op_srlw; break; 2967ea103259SMichael Clark case 8: op = rv_op_mulw; break; 2968ea103259SMichael Clark case 12: op = rv_op_divw; break; 2969ea103259SMichael Clark case 13: op = rv_op_divuw; break; 2970ea103259SMichael Clark case 14: op = rv_op_remw; break; 2971ea103259SMichael Clark case 15: op = rv_op_remuw; break; 297202c1b569SPhilipp Tomsich case 32: op = rv_op_add_uw; break; 297302c1b569SPhilipp Tomsich case 36: 297402c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 297502c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 29765748c886SWeiwei Li default: op = rv_op_packw; break; 297702c1b569SPhilipp Tomsich } 297802c1b569SPhilipp Tomsich break; 297902c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add_uw; break; 298002c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add_uw; break; 298102c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add_uw; break; 2982ea103259SMichael Clark case 256: op = rv_op_subw; break; 2983ea103259SMichael Clark case 261: op = rv_op_sraw; break; 298402c1b569SPhilipp Tomsich case 385: op = rv_op_rolw; break; 298502c1b569SPhilipp Tomsich case 389: op = rv_op_rorw; break; 2986ea103259SMichael Clark } 2987ea103259SMichael Clark break; 2988ea103259SMichael Clark case 16: 2989ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2990ea103259SMichael Clark case 0: op = rv_op_fmadd_s; break; 2991ea103259SMichael Clark case 1: op = rv_op_fmadd_d; break; 2992ea103259SMichael Clark case 3: op = rv_op_fmadd_q; break; 2993ea103259SMichael Clark } 2994ea103259SMichael Clark break; 2995ea103259SMichael Clark case 17: 2996ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 2997ea103259SMichael Clark case 0: op = rv_op_fmsub_s; break; 2998ea103259SMichael Clark case 1: op = rv_op_fmsub_d; break; 2999ea103259SMichael Clark case 3: op = rv_op_fmsub_q; break; 3000ea103259SMichael Clark } 3001ea103259SMichael Clark break; 3002ea103259SMichael Clark case 18: 3003ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 3004ea103259SMichael Clark case 0: op = rv_op_fnmsub_s; break; 3005ea103259SMichael Clark case 1: op = rv_op_fnmsub_d; break; 3006ea103259SMichael Clark case 3: op = rv_op_fnmsub_q; break; 3007ea103259SMichael Clark } 3008ea103259SMichael Clark break; 3009ea103259SMichael Clark case 19: 3010ea103259SMichael Clark switch (((inst >> 25) & 0b11)) { 3011ea103259SMichael Clark case 0: op = rv_op_fnmadd_s; break; 3012ea103259SMichael Clark case 1: op = rv_op_fnmadd_d; break; 3013ea103259SMichael Clark case 3: op = rv_op_fnmadd_q; break; 3014ea103259SMichael Clark } 3015ea103259SMichael Clark break; 3016ea103259SMichael Clark case 20: 3017ea103259SMichael Clark switch (((inst >> 25) & 0b1111111)) { 3018ea103259SMichael Clark case 0: op = rv_op_fadd_s; break; 3019ea103259SMichael Clark case 1: op = rv_op_fadd_d; break; 3020ea103259SMichael Clark case 3: op = rv_op_fadd_q; break; 3021ea103259SMichael Clark case 4: op = rv_op_fsub_s; break; 3022ea103259SMichael Clark case 5: op = rv_op_fsub_d; break; 3023ea103259SMichael Clark case 7: op = rv_op_fsub_q; break; 3024ea103259SMichael Clark case 8: op = rv_op_fmul_s; break; 3025ea103259SMichael Clark case 9: op = rv_op_fmul_d; break; 3026ea103259SMichael Clark case 11: op = rv_op_fmul_q; break; 3027ea103259SMichael Clark case 12: op = rv_op_fdiv_s; break; 3028ea103259SMichael Clark case 13: op = rv_op_fdiv_d; break; 3029ea103259SMichael Clark case 15: op = rv_op_fdiv_q; break; 3030ea103259SMichael Clark case 16: 3031ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3032ea103259SMichael Clark case 0: op = rv_op_fsgnj_s; break; 3033ea103259SMichael Clark case 1: op = rv_op_fsgnjn_s; break; 3034ea103259SMichael Clark case 2: op = rv_op_fsgnjx_s; break; 3035ea103259SMichael Clark } 3036ea103259SMichael Clark break; 3037ea103259SMichael Clark case 17: 3038ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3039ea103259SMichael Clark case 0: op = rv_op_fsgnj_d; break; 3040ea103259SMichael Clark case 1: op = rv_op_fsgnjn_d; break; 3041ea103259SMichael Clark case 2: op = rv_op_fsgnjx_d; break; 3042ea103259SMichael Clark } 3043ea103259SMichael Clark break; 3044ea103259SMichael Clark case 19: 3045ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3046ea103259SMichael Clark case 0: op = rv_op_fsgnj_q; break; 3047ea103259SMichael Clark case 1: op = rv_op_fsgnjn_q; break; 3048ea103259SMichael Clark case 2: op = rv_op_fsgnjx_q; break; 3049ea103259SMichael Clark } 3050ea103259SMichael Clark break; 3051ea103259SMichael Clark case 20: 3052ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3053ea103259SMichael Clark case 0: op = rv_op_fmin_s; break; 3054ea103259SMichael Clark case 1: op = rv_op_fmax_s; break; 3055ea103259SMichael Clark } 3056ea103259SMichael Clark break; 3057ea103259SMichael Clark case 21: 3058ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3059ea103259SMichael Clark case 0: op = rv_op_fmin_d; break; 3060ea103259SMichael Clark case 1: op = rv_op_fmax_d; break; 3061ea103259SMichael Clark } 3062ea103259SMichael Clark break; 3063ea103259SMichael Clark case 23: 3064ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3065ea103259SMichael Clark case 0: op = rv_op_fmin_q; break; 3066ea103259SMichael Clark case 1: op = rv_op_fmax_q; break; 3067ea103259SMichael Clark } 3068ea103259SMichael Clark break; 3069ea103259SMichael Clark case 32: 3070ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3071ea103259SMichael Clark case 1: op = rv_op_fcvt_s_d; break; 3072ea103259SMichael Clark case 3: op = rv_op_fcvt_s_q; break; 3073ea103259SMichael Clark } 3074ea103259SMichael Clark break; 3075ea103259SMichael Clark case 33: 3076ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3077ea103259SMichael Clark case 0: op = rv_op_fcvt_d_s; break; 3078ea103259SMichael Clark case 3: op = rv_op_fcvt_d_q; break; 3079ea103259SMichael Clark } 3080ea103259SMichael Clark break; 3081ea103259SMichael Clark case 35: 3082ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3083ea103259SMichael Clark case 0: op = rv_op_fcvt_q_s; break; 3084ea103259SMichael Clark case 1: op = rv_op_fcvt_q_d; break; 3085ea103259SMichael Clark } 3086ea103259SMichael Clark break; 3087ea103259SMichael Clark case 44: 3088ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3089ea103259SMichael Clark case 0: op = rv_op_fsqrt_s; break; 3090ea103259SMichael Clark } 3091ea103259SMichael Clark break; 3092ea103259SMichael Clark case 45: 3093ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3094ea103259SMichael Clark case 0: op = rv_op_fsqrt_d; break; 3095ea103259SMichael Clark } 3096ea103259SMichael Clark break; 3097ea103259SMichael Clark case 47: 3098ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3099ea103259SMichael Clark case 0: op = rv_op_fsqrt_q; break; 3100ea103259SMichael Clark } 3101ea103259SMichael Clark break; 3102ea103259SMichael Clark case 80: 3103ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3104ea103259SMichael Clark case 0: op = rv_op_fle_s; break; 3105ea103259SMichael Clark case 1: op = rv_op_flt_s; break; 3106ea103259SMichael Clark case 2: op = rv_op_feq_s; break; 3107ea103259SMichael Clark } 3108ea103259SMichael Clark break; 3109ea103259SMichael Clark case 81: 3110ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3111ea103259SMichael Clark case 0: op = rv_op_fle_d; break; 3112ea103259SMichael Clark case 1: op = rv_op_flt_d; break; 3113ea103259SMichael Clark case 2: op = rv_op_feq_d; break; 3114ea103259SMichael Clark } 3115ea103259SMichael Clark break; 3116ea103259SMichael Clark case 83: 3117ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3118ea103259SMichael Clark case 0: op = rv_op_fle_q; break; 3119ea103259SMichael Clark case 1: op = rv_op_flt_q; break; 3120ea103259SMichael Clark case 2: op = rv_op_feq_q; break; 3121ea103259SMichael Clark } 3122ea103259SMichael Clark break; 3123ea103259SMichael Clark case 96: 3124ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3125ea103259SMichael Clark case 0: op = rv_op_fcvt_w_s; break; 3126ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_s; break; 3127ea103259SMichael Clark case 2: op = rv_op_fcvt_l_s; break; 3128ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_s; break; 3129ea103259SMichael Clark } 3130ea103259SMichael Clark break; 3131ea103259SMichael Clark case 97: 3132ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3133ea103259SMichael Clark case 0: op = rv_op_fcvt_w_d; break; 3134ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_d; break; 3135ea103259SMichael Clark case 2: op = rv_op_fcvt_l_d; break; 3136ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_d; break; 3137ea103259SMichael Clark } 3138ea103259SMichael Clark break; 3139ea103259SMichael Clark case 99: 3140ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3141ea103259SMichael Clark case 0: op = rv_op_fcvt_w_q; break; 3142ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_q; break; 3143ea103259SMichael Clark case 2: op = rv_op_fcvt_l_q; break; 3144ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_q; break; 3145ea103259SMichael Clark } 3146ea103259SMichael Clark break; 3147ea103259SMichael Clark case 104: 3148ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3149ea103259SMichael Clark case 0: op = rv_op_fcvt_s_w; break; 3150ea103259SMichael Clark case 1: op = rv_op_fcvt_s_wu; break; 3151ea103259SMichael Clark case 2: op = rv_op_fcvt_s_l; break; 3152ea103259SMichael Clark case 3: op = rv_op_fcvt_s_lu; break; 3153ea103259SMichael Clark } 3154ea103259SMichael Clark break; 3155ea103259SMichael Clark case 105: 3156ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3157ea103259SMichael Clark case 0: op = rv_op_fcvt_d_w; break; 3158ea103259SMichael Clark case 1: op = rv_op_fcvt_d_wu; break; 3159ea103259SMichael Clark case 2: op = rv_op_fcvt_d_l; break; 3160ea103259SMichael Clark case 3: op = rv_op_fcvt_d_lu; break; 3161ea103259SMichael Clark } 3162ea103259SMichael Clark break; 3163ea103259SMichael Clark case 107: 3164ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3165ea103259SMichael Clark case 0: op = rv_op_fcvt_q_w; break; 3166ea103259SMichael Clark case 1: op = rv_op_fcvt_q_wu; break; 3167ea103259SMichael Clark case 2: op = rv_op_fcvt_q_l; break; 3168ea103259SMichael Clark case 3: op = rv_op_fcvt_q_lu; break; 3169ea103259SMichael Clark } 3170ea103259SMichael Clark break; 3171ea103259SMichael Clark case 112: 3172ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3173ea103259SMichael Clark case 0: op = rv_op_fmv_x_s; break; 3174ea103259SMichael Clark case 1: op = rv_op_fclass_s; break; 3175ea103259SMichael Clark } 3176ea103259SMichael Clark break; 3177ea103259SMichael Clark case 113: 3178ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3179ea103259SMichael Clark case 0: op = rv_op_fmv_x_d; break; 3180ea103259SMichael Clark case 1: op = rv_op_fclass_d; break; 3181ea103259SMichael Clark } 3182ea103259SMichael Clark break; 3183ea103259SMichael Clark case 115: 3184ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3185ea103259SMichael Clark case 0: op = rv_op_fmv_x_q; break; 3186ea103259SMichael Clark case 1: op = rv_op_fclass_q; break; 3187ea103259SMichael Clark } 3188ea103259SMichael Clark break; 3189ea103259SMichael Clark case 120: 3190ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3191ea103259SMichael Clark case 0: op = rv_op_fmv_s_x; break; 3192ea103259SMichael Clark } 3193ea103259SMichael Clark break; 3194ea103259SMichael Clark case 121: 3195ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3196ea103259SMichael Clark case 0: op = rv_op_fmv_d_x; break; 3197ea103259SMichael Clark } 3198ea103259SMichael Clark break; 3199ea103259SMichael Clark case 123: 3200ea103259SMichael Clark switch (((inst >> 17) & 0b11111000) | ((inst >> 12) & 0b00000111)) { 3201ea103259SMichael Clark case 0: op = rv_op_fmv_q_x; break; 3202ea103259SMichael Clark } 3203ea103259SMichael Clark break; 3204ea103259SMichael Clark } 3205ea103259SMichael Clark break; 320607f4964dSYang Liu case 21: 320707f4964dSYang Liu switch (((inst >> 12) & 0b111)) { 320807f4964dSYang Liu case 0: 320907f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 321007f4964dSYang Liu case 0: op = rv_op_vadd_vv; break; 321107f4964dSYang Liu case 2: op = rv_op_vsub_vv; break; 321207f4964dSYang Liu case 4: op = rv_op_vminu_vv; break; 321307f4964dSYang Liu case 5: op = rv_op_vmin_vv; break; 321407f4964dSYang Liu case 6: op = rv_op_vmaxu_vv; break; 321507f4964dSYang Liu case 7: op = rv_op_vmax_vv; break; 321607f4964dSYang Liu case 9: op = rv_op_vand_vv; break; 321707f4964dSYang Liu case 10: op = rv_op_vor_vv; break; 321807f4964dSYang Liu case 11: op = rv_op_vxor_vv; break; 321907f4964dSYang Liu case 12: op = rv_op_vrgather_vv; break; 322007f4964dSYang Liu case 14: op = rv_op_vrgatherei16_vv; break; 322107f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vvm; break; 322207f4964dSYang Liu case 17: op = rv_op_vmadc_vvm; break; 322307f4964dSYang Liu case 18: if (((inst >> 25) & 1) == 0) op = rv_op_vsbc_vvm; break; 322407f4964dSYang Liu case 19: op = rv_op_vmsbc_vvm; break; 322507f4964dSYang Liu case 23: 322607f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 322707f4964dSYang Liu op = rv_op_vmv_v_v; 322807f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 322907f4964dSYang Liu op = rv_op_vmerge_vvm; 323007f4964dSYang Liu break; 323107f4964dSYang Liu case 24: op = rv_op_vmseq_vv; break; 323207f4964dSYang Liu case 25: op = rv_op_vmsne_vv; break; 323307f4964dSYang Liu case 26: op = rv_op_vmsltu_vv; break; 323407f4964dSYang Liu case 27: op = rv_op_vmslt_vv; break; 323507f4964dSYang Liu case 28: op = rv_op_vmsleu_vv; break; 323607f4964dSYang Liu case 29: op = rv_op_vmsle_vv; break; 323707f4964dSYang Liu case 32: op = rv_op_vsaddu_vv; break; 323807f4964dSYang Liu case 33: op = rv_op_vsadd_vv; break; 323907f4964dSYang Liu case 34: op = rv_op_vssubu_vv; break; 324007f4964dSYang Liu case 35: op = rv_op_vssub_vv; break; 324107f4964dSYang Liu case 37: op = rv_op_vsll_vv; break; 324207f4964dSYang Liu case 39: op = rv_op_vsmul_vv; break; 324307f4964dSYang Liu case 40: op = rv_op_vsrl_vv; break; 324407f4964dSYang Liu case 41: op = rv_op_vsra_vv; break; 324507f4964dSYang Liu case 42: op = rv_op_vssrl_vv; break; 324607f4964dSYang Liu case 43: op = rv_op_vssra_vv; break; 324707f4964dSYang Liu case 44: op = rv_op_vnsrl_wv; break; 324807f4964dSYang Liu case 45: op = rv_op_vnsra_wv; break; 324907f4964dSYang Liu case 46: op = rv_op_vnclipu_wv; break; 325007f4964dSYang Liu case 47: op = rv_op_vnclip_wv; break; 325107f4964dSYang Liu case 48: op = rv_op_vwredsumu_vs; break; 325207f4964dSYang Liu case 49: op = rv_op_vwredsum_vs; break; 325307f4964dSYang Liu } 325407f4964dSYang Liu break; 325507f4964dSYang Liu case 1: 325607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 325707f4964dSYang Liu case 0: op = rv_op_vfadd_vv; break; 325807f4964dSYang Liu case 1: op = rv_op_vfredusum_vs; break; 325907f4964dSYang Liu case 2: op = rv_op_vfsub_vv; break; 326007f4964dSYang Liu case 3: op = rv_op_vfredosum_vs; break; 326107f4964dSYang Liu case 4: op = rv_op_vfmin_vv; break; 326207f4964dSYang Liu case 5: op = rv_op_vfredmin_vs; break; 326307f4964dSYang Liu case 6: op = rv_op_vfmax_vv; break; 326407f4964dSYang Liu case 7: op = rv_op_vfredmax_vs; break; 326507f4964dSYang Liu case 8: op = rv_op_vfsgnj_vv; break; 326607f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vv; break; 326707f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vv; break; 326807f4964dSYang Liu case 16: 326907f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 327007f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break; 327107f4964dSYang Liu } 327207f4964dSYang Liu break; 327307f4964dSYang Liu case 18: 327407f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 327507f4964dSYang Liu case 0: op = rv_op_vfcvt_xu_f_v; break; 327607f4964dSYang Liu case 1: op = rv_op_vfcvt_x_f_v; break; 327707f4964dSYang Liu case 2: op = rv_op_vfcvt_f_xu_v; break; 327807f4964dSYang Liu case 3: op = rv_op_vfcvt_f_x_v; break; 327907f4964dSYang Liu case 6: op = rv_op_vfcvt_rtz_xu_f_v; break; 328007f4964dSYang Liu case 7: op = rv_op_vfcvt_rtz_x_f_v; break; 328107f4964dSYang Liu case 8: op = rv_op_vfwcvt_xu_f_v; break; 328207f4964dSYang Liu case 9: op = rv_op_vfwcvt_x_f_v; break; 328307f4964dSYang Liu case 10: op = rv_op_vfwcvt_f_xu_v; break; 328407f4964dSYang Liu case 11: op = rv_op_vfwcvt_f_x_v; break; 328507f4964dSYang Liu case 12: op = rv_op_vfwcvt_f_f_v; break; 328607f4964dSYang Liu case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break; 328707f4964dSYang Liu case 15: op = rv_op_vfwcvt_rtz_x_f_v; break; 328807f4964dSYang Liu case 16: op = rv_op_vfncvt_xu_f_w; break; 328907f4964dSYang Liu case 17: op = rv_op_vfncvt_x_f_w; break; 329007f4964dSYang Liu case 18: op = rv_op_vfncvt_f_xu_w; break; 329107f4964dSYang Liu case 19: op = rv_op_vfncvt_f_x_w; break; 329207f4964dSYang Liu case 20: op = rv_op_vfncvt_f_f_w; break; 329307f4964dSYang Liu case 21: op = rv_op_vfncvt_rod_f_f_w; break; 329407f4964dSYang Liu case 22: op = rv_op_vfncvt_rtz_xu_f_w; break; 329507f4964dSYang Liu case 23: op = rv_op_vfncvt_rtz_x_f_w; break; 329607f4964dSYang Liu } 329707f4964dSYang Liu break; 329807f4964dSYang Liu case 19: 329907f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 330007f4964dSYang Liu case 0: op = rv_op_vfsqrt_v; break; 330107f4964dSYang Liu case 4: op = rv_op_vfrsqrt7_v; break; 330207f4964dSYang Liu case 5: op = rv_op_vfrec7_v; break; 330307f4964dSYang Liu case 16: op = rv_op_vfclass_v; break; 330407f4964dSYang Liu } 330507f4964dSYang Liu break; 330607f4964dSYang Liu case 24: op = rv_op_vmfeq_vv; break; 330707f4964dSYang Liu case 25: op = rv_op_vmfle_vv; break; 330807f4964dSYang Liu case 27: op = rv_op_vmflt_vv; break; 330907f4964dSYang Liu case 28: op = rv_op_vmfne_vv; break; 331007f4964dSYang Liu case 32: op = rv_op_vfdiv_vv; break; 331107f4964dSYang Liu case 36: op = rv_op_vfmul_vv; break; 331207f4964dSYang Liu case 40: op = rv_op_vfmadd_vv; break; 331307f4964dSYang Liu case 41: op = rv_op_vfnmadd_vv; break; 331407f4964dSYang Liu case 42: op = rv_op_vfmsub_vv; break; 331507f4964dSYang Liu case 43: op = rv_op_vfnmsub_vv; break; 331607f4964dSYang Liu case 44: op = rv_op_vfmacc_vv; break; 331707f4964dSYang Liu case 45: op = rv_op_vfnmacc_vv; break; 331807f4964dSYang Liu case 46: op = rv_op_vfmsac_vv; break; 331907f4964dSYang Liu case 47: op = rv_op_vfnmsac_vv; break; 332007f4964dSYang Liu case 48: op = rv_op_vfwadd_vv; break; 332107f4964dSYang Liu case 49: op = rv_op_vfwredusum_vs; break; 332207f4964dSYang Liu case 50: op = rv_op_vfwsub_vv; break; 332307f4964dSYang Liu case 51: op = rv_op_vfwredosum_vs; break; 332407f4964dSYang Liu case 52: op = rv_op_vfwadd_wv; break; 332507f4964dSYang Liu case 54: op = rv_op_vfwsub_wv; break; 332607f4964dSYang Liu case 56: op = rv_op_vfwmul_vv; break; 332707f4964dSYang Liu case 60: op = rv_op_vfwmacc_vv; break; 332807f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vv; break; 332907f4964dSYang Liu case 62: op = rv_op_vfwmsac_vv; break; 333007f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vv; break; 333107f4964dSYang Liu } 333207f4964dSYang Liu break; 333307f4964dSYang Liu case 2: 333407f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 333507f4964dSYang Liu case 0: op = rv_op_vredsum_vs; break; 333607f4964dSYang Liu case 1: op = rv_op_vredand_vs; break; 333707f4964dSYang Liu case 2: op = rv_op_vredor_vs; break; 333807f4964dSYang Liu case 3: op = rv_op_vredxor_vs; break; 333907f4964dSYang Liu case 4: op = rv_op_vredminu_vs; break; 334007f4964dSYang Liu case 5: op = rv_op_vredmin_vs; break; 334107f4964dSYang Liu case 6: op = rv_op_vredmaxu_vs; break; 334207f4964dSYang Liu case 7: op = rv_op_vredmax_vs; break; 334307f4964dSYang Liu case 8: op = rv_op_vaaddu_vv; break; 334407f4964dSYang Liu case 9: op = rv_op_vaadd_vv; break; 334507f4964dSYang Liu case 10: op = rv_op_vasubu_vv; break; 334607f4964dSYang Liu case 11: op = rv_op_vasub_vv; break; 334707f4964dSYang Liu case 16: 334807f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 334907f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break; 335007f4964dSYang Liu case 16: op = rv_op_vcpop_m; break; 335107f4964dSYang Liu case 17: op = rv_op_vfirst_m; break; 335207f4964dSYang Liu } 335307f4964dSYang Liu break; 335407f4964dSYang Liu case 18: 335507f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 335607f4964dSYang Liu case 2: op = rv_op_vzext_vf8; break; 335707f4964dSYang Liu case 3: op = rv_op_vsext_vf8; break; 335807f4964dSYang Liu case 4: op = rv_op_vzext_vf4; break; 335907f4964dSYang Liu case 5: op = rv_op_vsext_vf4; break; 336007f4964dSYang Liu case 6: op = rv_op_vzext_vf2; break; 336107f4964dSYang Liu case 7: op = rv_op_vsext_vf2; break; 336207f4964dSYang Liu } 336307f4964dSYang Liu break; 336407f4964dSYang Liu case 20: 336507f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 336607f4964dSYang Liu case 1: op = rv_op_vmsbf_m; break; 336707f4964dSYang Liu case 2: op = rv_op_vmsof_m; break; 336807f4964dSYang Liu case 3: op = rv_op_vmsif_m; break; 336907f4964dSYang Liu case 16: op = rv_op_viota_m; break; 337007f4964dSYang Liu case 17: if (((inst >> 20) & 0b11111) == 0) op = rv_op_vid_v; break; 337107f4964dSYang Liu } 337207f4964dSYang Liu break; 337307f4964dSYang Liu case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break; 337407f4964dSYang Liu case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break; 337507f4964dSYang Liu case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break; 337607f4964dSYang Liu case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break; 337707f4964dSYang Liu case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break; 337807f4964dSYang Liu case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break; 337907f4964dSYang Liu case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break; 338007f4964dSYang Liu case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break; 338107f4964dSYang Liu case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break; 338207f4964dSYang Liu case 32: op = rv_op_vdivu_vv; break; 338307f4964dSYang Liu case 33: op = rv_op_vdiv_vv; break; 338407f4964dSYang Liu case 34: op = rv_op_vremu_vv; break; 338507f4964dSYang Liu case 35: op = rv_op_vrem_vv; break; 338607f4964dSYang Liu case 36: op = rv_op_vmulhu_vv; break; 338707f4964dSYang Liu case 37: op = rv_op_vmul_vv; break; 338807f4964dSYang Liu case 38: op = rv_op_vmulhsu_vv; break; 338907f4964dSYang Liu case 39: op = rv_op_vmulh_vv; break; 339007f4964dSYang Liu case 41: op = rv_op_vmadd_vv; break; 339107f4964dSYang Liu case 43: op = rv_op_vnmsub_vv; break; 339207f4964dSYang Liu case 45: op = rv_op_vmacc_vv; break; 339307f4964dSYang Liu case 47: op = rv_op_vnmsac_vv; break; 339407f4964dSYang Liu case 48: op = rv_op_vwaddu_vv; break; 339507f4964dSYang Liu case 49: op = rv_op_vwadd_vv; break; 339607f4964dSYang Liu case 50: op = rv_op_vwsubu_vv; break; 339707f4964dSYang Liu case 51: op = rv_op_vwsub_vv; break; 339807f4964dSYang Liu case 52: op = rv_op_vwaddu_wv; break; 339907f4964dSYang Liu case 53: op = rv_op_vwadd_wv; break; 340007f4964dSYang Liu case 54: op = rv_op_vwsubu_wv; break; 340107f4964dSYang Liu case 55: op = rv_op_vwsub_wv; break; 340207f4964dSYang Liu case 56: op = rv_op_vwmulu_vv; break; 340307f4964dSYang Liu case 58: op = rv_op_vwmulsu_vv; break; 340407f4964dSYang Liu case 59: op = rv_op_vwmul_vv; break; 340507f4964dSYang Liu case 60: op = rv_op_vwmaccu_vv; break; 340607f4964dSYang Liu case 61: op = rv_op_vwmacc_vv; break; 340707f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vv; break; 340807f4964dSYang Liu } 340907f4964dSYang Liu break; 341007f4964dSYang Liu case 3: 341107f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 341207f4964dSYang Liu case 0: op = rv_op_vadd_vi; break; 341307f4964dSYang Liu case 3: op = rv_op_vrsub_vi; break; 341407f4964dSYang Liu case 9: op = rv_op_vand_vi; break; 341507f4964dSYang Liu case 10: op = rv_op_vor_vi; break; 341607f4964dSYang Liu case 11: op = rv_op_vxor_vi; break; 341707f4964dSYang Liu case 12: op = rv_op_vrgather_vi; break; 341807f4964dSYang Liu case 14: op = rv_op_vslideup_vi; break; 341907f4964dSYang Liu case 15: op = rv_op_vslidedown_vi; break; 342007f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vim; break; 342107f4964dSYang Liu case 17: op = rv_op_vmadc_vim; break; 342207f4964dSYang Liu case 23: 342307f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 342407f4964dSYang Liu op = rv_op_vmv_v_i; 342507f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 342607f4964dSYang Liu op = rv_op_vmerge_vim; 342707f4964dSYang Liu break; 342807f4964dSYang Liu case 24: op = rv_op_vmseq_vi; break; 342907f4964dSYang Liu case 25: op = rv_op_vmsne_vi; break; 343007f4964dSYang Liu case 28: op = rv_op_vmsleu_vi; break; 343107f4964dSYang Liu case 29: op = rv_op_vmsle_vi; break; 343207f4964dSYang Liu case 30: op = rv_op_vmsgtu_vi; break; 343307f4964dSYang Liu case 31: op = rv_op_vmsgt_vi; break; 343407f4964dSYang Liu case 32: op = rv_op_vsaddu_vi; break; 343507f4964dSYang Liu case 33: op = rv_op_vsadd_vi; break; 343607f4964dSYang Liu case 37: op = rv_op_vsll_vi; break; 343707f4964dSYang Liu case 39: 343807f4964dSYang Liu switch (((inst >> 15) & 0b11111)) { 343907f4964dSYang Liu case 0: op = rv_op_vmv1r_v; break; 344007f4964dSYang Liu case 1: op = rv_op_vmv2r_v; break; 344107f4964dSYang Liu case 3: op = rv_op_vmv4r_v; break; 344207f4964dSYang Liu case 7: op = rv_op_vmv8r_v; break; 344307f4964dSYang Liu } 344407f4964dSYang Liu break; 344507f4964dSYang Liu case 40: op = rv_op_vsrl_vi; break; 344607f4964dSYang Liu case 41: op = rv_op_vsra_vi; break; 344707f4964dSYang Liu case 42: op = rv_op_vssrl_vi; break; 344807f4964dSYang Liu case 43: op = rv_op_vssra_vi; break; 344907f4964dSYang Liu case 44: op = rv_op_vnsrl_wi; break; 345007f4964dSYang Liu case 45: op = rv_op_vnsra_wi; break; 345107f4964dSYang Liu case 46: op = rv_op_vnclipu_wi; break; 345207f4964dSYang Liu case 47: op = rv_op_vnclip_wi; break; 345307f4964dSYang Liu } 345407f4964dSYang Liu break; 345507f4964dSYang Liu case 4: 345607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 345707f4964dSYang Liu case 0: op = rv_op_vadd_vx; break; 345807f4964dSYang Liu case 2: op = rv_op_vsub_vx; break; 345907f4964dSYang Liu case 3: op = rv_op_vrsub_vx; break; 346007f4964dSYang Liu case 4: op = rv_op_vminu_vx; break; 346107f4964dSYang Liu case 5: op = rv_op_vmin_vx; break; 346207f4964dSYang Liu case 6: op = rv_op_vmaxu_vx; break; 346307f4964dSYang Liu case 7: op = rv_op_vmax_vx; break; 346407f4964dSYang Liu case 9: op = rv_op_vand_vx; break; 346507f4964dSYang Liu case 10: op = rv_op_vor_vx; break; 346607f4964dSYang Liu case 11: op = rv_op_vxor_vx; break; 346707f4964dSYang Liu case 12: op = rv_op_vrgather_vx; break; 346807f4964dSYang Liu case 14: op = rv_op_vslideup_vx; break; 346907f4964dSYang Liu case 15: op = rv_op_vslidedown_vx; break; 347007f4964dSYang Liu case 16: if (((inst >> 25) & 1) == 0) op = rv_op_vadc_vxm; break; 347107f4964dSYang Liu case 17: op = rv_op_vmadc_vxm; break; 347207f4964dSYang Liu case 18: if (((inst >> 25) & 1) == 0) op = rv_op_vsbc_vxm; break; 347307f4964dSYang Liu case 19: op = rv_op_vmsbc_vxm; break; 347407f4964dSYang Liu case 23: 347507f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 347607f4964dSYang Liu op = rv_op_vmv_v_x; 347707f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 347807f4964dSYang Liu op = rv_op_vmerge_vxm; 347907f4964dSYang Liu break; 348007f4964dSYang Liu case 24: op = rv_op_vmseq_vx; break; 348107f4964dSYang Liu case 25: op = rv_op_vmsne_vx; break; 348207f4964dSYang Liu case 26: op = rv_op_vmsltu_vx; break; 348307f4964dSYang Liu case 27: op = rv_op_vmslt_vx; break; 348407f4964dSYang Liu case 28: op = rv_op_vmsleu_vx; break; 348507f4964dSYang Liu case 29: op = rv_op_vmsle_vx; break; 348607f4964dSYang Liu case 30: op = rv_op_vmsgtu_vx; break; 348707f4964dSYang Liu case 31: op = rv_op_vmsgt_vx; break; 348807f4964dSYang Liu case 32: op = rv_op_vsaddu_vx; break; 348907f4964dSYang Liu case 33: op = rv_op_vsadd_vx; break; 349007f4964dSYang Liu case 34: op = rv_op_vssubu_vx; break; 349107f4964dSYang Liu case 35: op = rv_op_vssub_vx; break; 349207f4964dSYang Liu case 37: op = rv_op_vsll_vx; break; 349307f4964dSYang Liu case 39: op = rv_op_vsmul_vx; break; 349407f4964dSYang Liu case 40: op = rv_op_vsrl_vx; break; 349507f4964dSYang Liu case 41: op = rv_op_vsra_vx; break; 349607f4964dSYang Liu case 42: op = rv_op_vssrl_vx; break; 349707f4964dSYang Liu case 43: op = rv_op_vssra_vx; break; 349807f4964dSYang Liu case 44: op = rv_op_vnsrl_wx; break; 349907f4964dSYang Liu case 45: op = rv_op_vnsra_wx; break; 350007f4964dSYang Liu case 46: op = rv_op_vnclipu_wx; break; 350107f4964dSYang Liu case 47: op = rv_op_vnclip_wx; break; 350207f4964dSYang Liu } 350307f4964dSYang Liu break; 350407f4964dSYang Liu case 5: 350507f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 350607f4964dSYang Liu case 0: op = rv_op_vfadd_vf; break; 350707f4964dSYang Liu case 2: op = rv_op_vfsub_vf; break; 350807f4964dSYang Liu case 4: op = rv_op_vfmin_vf; break; 350907f4964dSYang Liu case 6: op = rv_op_vfmax_vf; break; 351007f4964dSYang Liu case 8: op = rv_op_vfsgnj_vf; break; 351107f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vf; break; 351207f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vf; break; 351307f4964dSYang Liu case 14: op = rv_op_vfslide1up_vf; break; 351407f4964dSYang Liu case 15: op = rv_op_vfslide1down_vf; break; 351507f4964dSYang Liu case 16: 351607f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 351707f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break; 351807f4964dSYang Liu } 351907f4964dSYang Liu break; 352007f4964dSYang Liu case 23: 352107f4964dSYang Liu if (((inst >> 25) & 1) == 0) 352207f4964dSYang Liu op = rv_op_vfmerge_vfm; 352307f4964dSYang Liu else if (((inst >> 20) & 0b111111) == 32) 352407f4964dSYang Liu op = rv_op_vfmv_v_f; 352507f4964dSYang Liu break; 352607f4964dSYang Liu case 24: op = rv_op_vmfeq_vf; break; 352707f4964dSYang Liu case 25: op = rv_op_vmfle_vf; break; 352807f4964dSYang Liu case 27: op = rv_op_vmflt_vf; break; 352907f4964dSYang Liu case 28: op = rv_op_vmfne_vf; break; 353007f4964dSYang Liu case 29: op = rv_op_vmfgt_vf; break; 353107f4964dSYang Liu case 31: op = rv_op_vmfge_vf; break; 353207f4964dSYang Liu case 32: op = rv_op_vfdiv_vf; break; 353307f4964dSYang Liu case 33: op = rv_op_vfrdiv_vf; break; 353407f4964dSYang Liu case 36: op = rv_op_vfmul_vf; break; 353507f4964dSYang Liu case 39: op = rv_op_vfrsub_vf; break; 353607f4964dSYang Liu case 40: op = rv_op_vfmadd_vf; break; 353707f4964dSYang Liu case 41: op = rv_op_vfnmadd_vf; break; 353807f4964dSYang Liu case 42: op = rv_op_vfmsub_vf; break; 353907f4964dSYang Liu case 43: op = rv_op_vfnmsub_vf; break; 354007f4964dSYang Liu case 44: op = rv_op_vfmacc_vf; break; 354107f4964dSYang Liu case 45: op = rv_op_vfnmacc_vf; break; 354207f4964dSYang Liu case 46: op = rv_op_vfmsac_vf; break; 354307f4964dSYang Liu case 47: op = rv_op_vfnmsac_vf; break; 354407f4964dSYang Liu case 48: op = rv_op_vfwadd_vf; break; 354507f4964dSYang Liu case 50: op = rv_op_vfwsub_vf; break; 354607f4964dSYang Liu case 52: op = rv_op_vfwadd_wf; break; 354707f4964dSYang Liu case 54: op = rv_op_vfwsub_wf; break; 354807f4964dSYang Liu case 56: op = rv_op_vfwmul_vf; break; 354907f4964dSYang Liu case 60: op = rv_op_vfwmacc_vf; break; 355007f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vf; break; 355107f4964dSYang Liu case 62: op = rv_op_vfwmsac_vf; break; 355207f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vf; break; 355307f4964dSYang Liu } 355407f4964dSYang Liu break; 355507f4964dSYang Liu case 6: 355607f4964dSYang Liu switch (((inst >> 26) & 0b111111)) { 355707f4964dSYang Liu case 8: op = rv_op_vaaddu_vx; break; 355807f4964dSYang Liu case 9: op = rv_op_vaadd_vx; break; 355907f4964dSYang Liu case 10: op = rv_op_vasubu_vx; break; 356007f4964dSYang Liu case 11: op = rv_op_vasub_vx; break; 356107f4964dSYang Liu case 14: op = rv_op_vslide1up_vx; break; 356207f4964dSYang Liu case 15: op = rv_op_vslide1down_vx; break; 356307f4964dSYang Liu case 16: 356407f4964dSYang Liu switch (((inst >> 20) & 0b11111)) { 356507f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break; 356607f4964dSYang Liu } 356707f4964dSYang Liu break; 356807f4964dSYang Liu case 32: op = rv_op_vdivu_vx; break; 356907f4964dSYang Liu case 33: op = rv_op_vdiv_vx; break; 357007f4964dSYang Liu case 34: op = rv_op_vremu_vx; break; 357107f4964dSYang Liu case 35: op = rv_op_vrem_vx; break; 357207f4964dSYang Liu case 36: op = rv_op_vmulhu_vx; break; 357307f4964dSYang Liu case 37: op = rv_op_vmul_vx; break; 357407f4964dSYang Liu case 38: op = rv_op_vmulhsu_vx; break; 357507f4964dSYang Liu case 39: op = rv_op_vmulh_vx; break; 357607f4964dSYang Liu case 41: op = rv_op_vmadd_vx; break; 357707f4964dSYang Liu case 43: op = rv_op_vnmsub_vx; break; 357807f4964dSYang Liu case 45: op = rv_op_vmacc_vx; break; 357907f4964dSYang Liu case 47: op = rv_op_vnmsac_vx; break; 358007f4964dSYang Liu case 48: op = rv_op_vwaddu_vx; break; 358107f4964dSYang Liu case 49: op = rv_op_vwadd_vx; break; 358207f4964dSYang Liu case 50: op = rv_op_vwsubu_vx; break; 358307f4964dSYang Liu case 51: op = rv_op_vwsub_vx; break; 358407f4964dSYang Liu case 52: op = rv_op_vwaddu_wx; break; 358507f4964dSYang Liu case 53: op = rv_op_vwadd_wx; break; 358607f4964dSYang Liu case 54: op = rv_op_vwsubu_wx; break; 358707f4964dSYang Liu case 55: op = rv_op_vwsub_wx; break; 358807f4964dSYang Liu case 56: op = rv_op_vwmulu_vx; break; 358907f4964dSYang Liu case 58: op = rv_op_vwmulsu_vx; break; 359007f4964dSYang Liu case 59: op = rv_op_vwmul_vx; break; 359107f4964dSYang Liu case 60: op = rv_op_vwmaccu_vx; break; 359207f4964dSYang Liu case 61: op = rv_op_vwmacc_vx; break; 359307f4964dSYang Liu case 62: op = rv_op_vwmaccus_vx; break; 359407f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vx; break; 359507f4964dSYang Liu } 359607f4964dSYang Liu break; 359707f4964dSYang Liu case 7: 359807f4964dSYang Liu if (((inst >> 31) & 1) == 0) { 359907f4964dSYang Liu op = rv_op_vsetvli; 360007f4964dSYang Liu } else if ((inst >> 30) & 1) { 360107f4964dSYang Liu op = rv_op_vsetivli; 360207f4964dSYang Liu } else if (((inst >> 25) & 0b11111) == 0) { 360307f4964dSYang Liu op = rv_op_vsetvl; 360407f4964dSYang Liu } 360507f4964dSYang Liu break; 360607f4964dSYang Liu } 360707f4964dSYang Liu break; 3608ea103259SMichael Clark case 22: 3609ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3610ea103259SMichael Clark case 0: op = rv_op_addid; break; 3611ea103259SMichael Clark case 1: 3612ea103259SMichael Clark switch (((inst >> 26) & 0b111111)) { 3613ea103259SMichael Clark case 0: op = rv_op_sllid; break; 3614ea103259SMichael Clark } 3615ea103259SMichael Clark break; 3616ea103259SMichael Clark case 5: 3617ea103259SMichael Clark switch (((inst >> 26) & 0b111111)) { 3618ea103259SMichael Clark case 0: op = rv_op_srlid; break; 3619ea103259SMichael Clark case 16: op = rv_op_sraid; break; 3620ea103259SMichael Clark } 3621ea103259SMichael Clark break; 3622ea103259SMichael Clark } 3623ea103259SMichael Clark break; 3624ea103259SMichael Clark case 24: 3625ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3626ea103259SMichael Clark case 0: op = rv_op_beq; break; 3627ea103259SMichael Clark case 1: op = rv_op_bne; break; 3628ea103259SMichael Clark case 4: op = rv_op_blt; break; 3629ea103259SMichael Clark case 5: op = rv_op_bge; break; 3630ea103259SMichael Clark case 6: op = rv_op_bltu; break; 3631ea103259SMichael Clark case 7: op = rv_op_bgeu; break; 3632ea103259SMichael Clark } 3633ea103259SMichael Clark break; 3634ea103259SMichael Clark case 25: 3635ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3636ea103259SMichael Clark case 0: op = rv_op_jalr; break; 3637ea103259SMichael Clark } 3638ea103259SMichael Clark break; 3639ea103259SMichael Clark case 27: op = rv_op_jal; break; 3640ea103259SMichael Clark case 28: 3641ea103259SMichael Clark switch (((inst >> 12) & 0b111)) { 3642ea103259SMichael Clark case 0: 3643ea103259SMichael Clark switch (((inst >> 20) & 0b111111100000) | ((inst >> 7) & 0b000000011111)) { 3644ea103259SMichael Clark case 0: 3645ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3646ea103259SMichael Clark case 0: op = rv_op_ecall; break; 3647ea103259SMichael Clark case 32: op = rv_op_ebreak; break; 3648ea103259SMichael Clark case 64: op = rv_op_uret; break; 3649ea103259SMichael Clark } 3650ea103259SMichael Clark break; 3651ea103259SMichael Clark case 256: 3652ea103259SMichael Clark switch (((inst >> 20) & 0b11111)) { 3653ea103259SMichael Clark case 2: 3654ea103259SMichael Clark switch (((inst >> 15) & 0b11111)) { 3655ea103259SMichael Clark case 0: op = rv_op_sret; break; 3656ea103259SMichael Clark } 3657ea103259SMichael Clark break; 3658ea103259SMichael Clark case 4: op = rv_op_sfence_vm; break; 3659ea103259SMichael Clark case 5: 3660ea103259SMichael Clark switch (((inst >> 15) & 0b11111)) { 3661ea103259SMichael Clark case 0: op = rv_op_wfi; break; 3662ea103259SMichael Clark } 3663ea103259SMichael Clark break; 3664ea103259SMichael Clark } 3665ea103259SMichael Clark break; 3666ea103259SMichael Clark case 288: op = rv_op_sfence_vma; break; 3667ea103259SMichael Clark case 512: 3668ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3669ea103259SMichael Clark case 64: op = rv_op_hret; break; 3670ea103259SMichael Clark } 3671ea103259SMichael Clark break; 3672ea103259SMichael Clark case 768: 3673ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3674ea103259SMichael Clark case 64: op = rv_op_mret; break; 3675ea103259SMichael Clark } 3676ea103259SMichael Clark break; 3677ea103259SMichael Clark case 1952: 3678ea103259SMichael Clark switch (((inst >> 15) & 0b1111111111)) { 3679ea103259SMichael Clark case 576: op = rv_op_dret; break; 3680ea103259SMichael Clark } 3681ea103259SMichael Clark break; 3682ea103259SMichael Clark } 3683ea103259SMichael Clark break; 3684ea103259SMichael Clark case 1: op = rv_op_csrrw; break; 3685ea103259SMichael Clark case 2: op = rv_op_csrrs; break; 3686ea103259SMichael Clark case 3: op = rv_op_csrrc; break; 3687ea103259SMichael Clark case 5: op = rv_op_csrrwi; break; 3688ea103259SMichael Clark case 6: op = rv_op_csrrsi; break; 3689ea103259SMichael Clark case 7: op = rv_op_csrrci; break; 3690ea103259SMichael Clark } 3691ea103259SMichael Clark break; 3692ea103259SMichael Clark case 30: 3693ea103259SMichael Clark switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) { 3694ea103259SMichael Clark case 0: op = rv_op_addd; break; 3695ea103259SMichael Clark case 1: op = rv_op_slld; break; 3696ea103259SMichael Clark case 5: op = rv_op_srld; break; 3697ea103259SMichael Clark case 8: op = rv_op_muld; break; 3698ea103259SMichael Clark case 12: op = rv_op_divd; break; 3699ea103259SMichael Clark case 13: op = rv_op_divud; break; 3700ea103259SMichael Clark case 14: op = rv_op_remd; break; 3701ea103259SMichael Clark case 15: op = rv_op_remud; break; 3702ea103259SMichael Clark case 256: op = rv_op_subd; break; 3703ea103259SMichael Clark case 261: op = rv_op_srad; break; 3704ea103259SMichael Clark } 3705ea103259SMichael Clark break; 3706ea103259SMichael Clark } 3707ea103259SMichael Clark break; 3708ea103259SMichael Clark } 3709ea103259SMichael Clark dec->op = op; 3710ea103259SMichael Clark } 3711ea103259SMichael Clark 3712ea103259SMichael Clark /* operand extractors */ 3713ea103259SMichael Clark 3714ea103259SMichael Clark static uint32_t operand_rd(rv_inst inst) 3715ea103259SMichael Clark { 3716ea103259SMichael Clark return (inst << 52) >> 59; 3717ea103259SMichael Clark } 3718ea103259SMichael Clark 3719ea103259SMichael Clark static uint32_t operand_rs1(rv_inst inst) 3720ea103259SMichael Clark { 3721ea103259SMichael Clark return (inst << 44) >> 59; 3722ea103259SMichael Clark } 3723ea103259SMichael Clark 3724ea103259SMichael Clark static uint32_t operand_rs2(rv_inst inst) 3725ea103259SMichael Clark { 3726ea103259SMichael Clark return (inst << 39) >> 59; 3727ea103259SMichael Clark } 3728ea103259SMichael Clark 3729ea103259SMichael Clark static uint32_t operand_rs3(rv_inst inst) 3730ea103259SMichael Clark { 3731ea103259SMichael Clark return (inst << 32) >> 59; 3732ea103259SMichael Clark } 3733ea103259SMichael Clark 3734ea103259SMichael Clark static uint32_t operand_aq(rv_inst inst) 3735ea103259SMichael Clark { 3736ea103259SMichael Clark return (inst << 37) >> 63; 3737ea103259SMichael Clark } 3738ea103259SMichael Clark 3739ea103259SMichael Clark static uint32_t operand_rl(rv_inst inst) 3740ea103259SMichael Clark { 3741ea103259SMichael Clark return (inst << 38) >> 63; 3742ea103259SMichael Clark } 3743ea103259SMichael Clark 3744ea103259SMichael Clark static uint32_t operand_pred(rv_inst inst) 3745ea103259SMichael Clark { 3746ea103259SMichael Clark return (inst << 36) >> 60; 3747ea103259SMichael Clark } 3748ea103259SMichael Clark 3749ea103259SMichael Clark static uint32_t operand_succ(rv_inst inst) 3750ea103259SMichael Clark { 3751ea103259SMichael Clark return (inst << 40) >> 60; 3752ea103259SMichael Clark } 3753ea103259SMichael Clark 3754ea103259SMichael Clark static uint32_t operand_rm(rv_inst inst) 3755ea103259SMichael Clark { 3756ea103259SMichael Clark return (inst << 49) >> 61; 3757ea103259SMichael Clark } 3758ea103259SMichael Clark 3759ea103259SMichael Clark static uint32_t operand_shamt5(rv_inst inst) 3760ea103259SMichael Clark { 3761ea103259SMichael Clark return (inst << 39) >> 59; 3762ea103259SMichael Clark } 3763ea103259SMichael Clark 3764ea103259SMichael Clark static uint32_t operand_shamt6(rv_inst inst) 3765ea103259SMichael Clark { 3766ea103259SMichael Clark return (inst << 38) >> 58; 3767ea103259SMichael Clark } 3768ea103259SMichael Clark 3769ea103259SMichael Clark static uint32_t operand_shamt7(rv_inst inst) 3770ea103259SMichael Clark { 3771ea103259SMichael Clark return (inst << 37) >> 57; 3772ea103259SMichael Clark } 3773ea103259SMichael Clark 3774ea103259SMichael Clark static uint32_t operand_crdq(rv_inst inst) 3775ea103259SMichael Clark { 3776ea103259SMichael Clark return (inst << 59) >> 61; 3777ea103259SMichael Clark } 3778ea103259SMichael Clark 3779ea103259SMichael Clark static uint32_t operand_crs1q(rv_inst inst) 3780ea103259SMichael Clark { 3781ea103259SMichael Clark return (inst << 54) >> 61; 3782ea103259SMichael Clark } 3783ea103259SMichael Clark 3784ea103259SMichael Clark static uint32_t operand_crs1rdq(rv_inst inst) 3785ea103259SMichael Clark { 3786ea103259SMichael Clark return (inst << 54) >> 61; 3787ea103259SMichael Clark } 3788ea103259SMichael Clark 3789ea103259SMichael Clark static uint32_t operand_crs2q(rv_inst inst) 3790ea103259SMichael Clark { 3791ea103259SMichael Clark return (inst << 59) >> 61; 3792ea103259SMichael Clark } 3793ea103259SMichael Clark 37942c71d02eSWeiwei Li static uint32_t calculate_xreg(uint32_t sreg) 37952c71d02eSWeiwei Li { 37962c71d02eSWeiwei Li return sreg < 2 ? sreg + 8 : sreg + 16; 37972c71d02eSWeiwei Li } 37982c71d02eSWeiwei Li 37992c71d02eSWeiwei Li static uint32_t operand_sreg1(rv_inst inst) 38002c71d02eSWeiwei Li { 38012c71d02eSWeiwei Li return calculate_xreg((inst << 54) >> 61); 38022c71d02eSWeiwei Li } 38032c71d02eSWeiwei Li 38042c71d02eSWeiwei Li static uint32_t operand_sreg2(rv_inst inst) 38052c71d02eSWeiwei Li { 38062c71d02eSWeiwei Li return calculate_xreg((inst << 59) >> 61); 38072c71d02eSWeiwei Li } 38082c71d02eSWeiwei Li 3809ea103259SMichael Clark static uint32_t operand_crd(rv_inst inst) 3810ea103259SMichael Clark { 3811ea103259SMichael Clark return (inst << 52) >> 59; 3812ea103259SMichael Clark } 3813ea103259SMichael Clark 3814ea103259SMichael Clark static uint32_t operand_crs1(rv_inst inst) 3815ea103259SMichael Clark { 3816ea103259SMichael Clark return (inst << 52) >> 59; 3817ea103259SMichael Clark } 3818ea103259SMichael Clark 3819ea103259SMichael Clark static uint32_t operand_crs1rd(rv_inst inst) 3820ea103259SMichael Clark { 3821ea103259SMichael Clark return (inst << 52) >> 59; 3822ea103259SMichael Clark } 3823ea103259SMichael Clark 3824ea103259SMichael Clark static uint32_t operand_crs2(rv_inst inst) 3825ea103259SMichael Clark { 3826ea103259SMichael Clark return (inst << 57) >> 59; 3827ea103259SMichael Clark } 3828ea103259SMichael Clark 3829ea103259SMichael Clark static uint32_t operand_cimmsh5(rv_inst inst) 3830ea103259SMichael Clark { 3831ea103259SMichael Clark return (inst << 57) >> 59; 3832ea103259SMichael Clark } 3833ea103259SMichael Clark 3834ea103259SMichael Clark static uint32_t operand_csr12(rv_inst inst) 3835ea103259SMichael Clark { 3836ea103259SMichael Clark return (inst << 32) >> 52; 3837ea103259SMichael Clark } 3838ea103259SMichael Clark 3839ea103259SMichael Clark static int32_t operand_imm12(rv_inst inst) 3840ea103259SMichael Clark { 3841ea103259SMichael Clark return ((int64_t)inst << 32) >> 52; 3842ea103259SMichael Clark } 3843ea103259SMichael Clark 3844ea103259SMichael Clark static int32_t operand_imm20(rv_inst inst) 3845ea103259SMichael Clark { 3846ea103259SMichael Clark return (((int64_t)inst << 32) >> 44) << 12; 3847ea103259SMichael Clark } 3848ea103259SMichael Clark 3849ea103259SMichael Clark static int32_t operand_jimm20(rv_inst inst) 3850ea103259SMichael Clark { 3851ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 20 | 3852ea103259SMichael Clark ((inst << 33) >> 54) << 1 | 3853ea103259SMichael Clark ((inst << 43) >> 63) << 11 | 3854ea103259SMichael Clark ((inst << 44) >> 56) << 12; 3855ea103259SMichael Clark } 3856ea103259SMichael Clark 3857ea103259SMichael Clark static int32_t operand_simm12(rv_inst inst) 3858ea103259SMichael Clark { 3859ea103259SMichael Clark return (((int64_t)inst << 32) >> 57) << 5 | 3860ea103259SMichael Clark (inst << 52) >> 59; 3861ea103259SMichael Clark } 3862ea103259SMichael Clark 3863ea103259SMichael Clark static int32_t operand_sbimm12(rv_inst inst) 3864ea103259SMichael Clark { 3865ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 12 | 3866ea103259SMichael Clark ((inst << 33) >> 58) << 5 | 3867ea103259SMichael Clark ((inst << 52) >> 60) << 1 | 3868ea103259SMichael Clark ((inst << 56) >> 63) << 11; 3869ea103259SMichael Clark } 3870ea103259SMichael Clark 387133632775SFrédéric Pétrot static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) 3872ea103259SMichael Clark { 387333632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 3874ea103259SMichael Clark (inst << 57) >> 59; 387533632775SFrédéric Pétrot if (isa == rv128) { 387633632775SFrédéric Pétrot imm = imm ? imm : 64; 387733632775SFrédéric Pétrot } 387833632775SFrédéric Pétrot return imm; 387933632775SFrédéric Pétrot } 388033632775SFrédéric Pétrot 388133632775SFrédéric Pétrot static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) 388233632775SFrédéric Pétrot { 388333632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 388433632775SFrédéric Pétrot (inst << 57) >> 59; 388533632775SFrédéric Pétrot if (isa == rv128) { 388633632775SFrédéric Pétrot imm = imm | (imm & 32) << 1; 388733632775SFrédéric Pétrot imm = imm ? imm : 64; 388833632775SFrédéric Pétrot } 388933632775SFrédéric Pétrot return imm; 3890ea103259SMichael Clark } 3891ea103259SMichael Clark 3892ea103259SMichael Clark static int32_t operand_cimmi(rv_inst inst) 3893ea103259SMichael Clark { 3894ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 5 | 3895ea103259SMichael Clark (inst << 57) >> 59; 3896ea103259SMichael Clark } 3897ea103259SMichael Clark 3898ea103259SMichael Clark static int32_t operand_cimmui(rv_inst inst) 3899ea103259SMichael Clark { 3900ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 17 | 3901ea103259SMichael Clark ((inst << 57) >> 59) << 12; 3902ea103259SMichael Clark } 3903ea103259SMichael Clark 3904ea103259SMichael Clark static uint32_t operand_cimmlwsp(rv_inst inst) 3905ea103259SMichael Clark { 3906ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3907ea103259SMichael Clark ((inst << 57) >> 61) << 2 | 3908ea103259SMichael Clark ((inst << 60) >> 62) << 6; 3909ea103259SMichael Clark } 3910ea103259SMichael Clark 3911ea103259SMichael Clark static uint32_t operand_cimmldsp(rv_inst inst) 3912ea103259SMichael Clark { 3913ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3914ea103259SMichael Clark ((inst << 57) >> 62) << 3 | 3915ea103259SMichael Clark ((inst << 59) >> 61) << 6; 3916ea103259SMichael Clark } 3917ea103259SMichael Clark 3918ea103259SMichael Clark static uint32_t operand_cimmlqsp(rv_inst inst) 3919ea103259SMichael Clark { 3920ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3921ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3922ea103259SMichael Clark ((inst << 58) >> 60) << 6; 3923ea103259SMichael Clark } 3924ea103259SMichael Clark 3925ea103259SMichael Clark static int32_t operand_cimm16sp(rv_inst inst) 3926ea103259SMichael Clark { 3927ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 9 | 3928ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3929ea103259SMichael Clark ((inst << 58) >> 63) << 6 | 3930ea103259SMichael Clark ((inst << 59) >> 62) << 7 | 3931ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3932ea103259SMichael Clark } 3933ea103259SMichael Clark 3934ea103259SMichael Clark static int32_t operand_cimmj(rv_inst inst) 3935ea103259SMichael Clark { 3936ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 11 | 3937ea103259SMichael Clark ((inst << 52) >> 63) << 4 | 3938ea103259SMichael Clark ((inst << 53) >> 62) << 8 | 3939ea103259SMichael Clark ((inst << 55) >> 63) << 10 | 3940ea103259SMichael Clark ((inst << 56) >> 63) << 6 | 3941ea103259SMichael Clark ((inst << 57) >> 63) << 7 | 3942ea103259SMichael Clark ((inst << 58) >> 61) << 1 | 3943ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3944ea103259SMichael Clark } 3945ea103259SMichael Clark 3946ea103259SMichael Clark static int32_t operand_cimmb(rv_inst inst) 3947ea103259SMichael Clark { 3948ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 8 | 3949ea103259SMichael Clark ((inst << 52) >> 62) << 3 | 3950ea103259SMichael Clark ((inst << 57) >> 62) << 6 | 3951ea103259SMichael Clark ((inst << 59) >> 62) << 1 | 3952ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3953ea103259SMichael Clark } 3954ea103259SMichael Clark 3955ea103259SMichael Clark static uint32_t operand_cimmswsp(rv_inst inst) 3956ea103259SMichael Clark { 3957ea103259SMichael Clark return ((inst << 51) >> 60) << 2 | 3958ea103259SMichael Clark ((inst << 55) >> 62) << 6; 3959ea103259SMichael Clark } 3960ea103259SMichael Clark 3961ea103259SMichael Clark static uint32_t operand_cimmsdsp(rv_inst inst) 3962ea103259SMichael Clark { 3963ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3964ea103259SMichael Clark ((inst << 54) >> 61) << 6; 3965ea103259SMichael Clark } 3966ea103259SMichael Clark 3967ea103259SMichael Clark static uint32_t operand_cimmsqsp(rv_inst inst) 3968ea103259SMichael Clark { 3969ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3970ea103259SMichael Clark ((inst << 53) >> 60) << 6; 3971ea103259SMichael Clark } 3972ea103259SMichael Clark 3973ea103259SMichael Clark static uint32_t operand_cimm4spn(rv_inst inst) 3974ea103259SMichael Clark { 3975ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3976ea103259SMichael Clark ((inst << 53) >> 60) << 6 | 3977ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3978ea103259SMichael Clark ((inst << 58) >> 63) << 3; 3979ea103259SMichael Clark } 3980ea103259SMichael Clark 3981ea103259SMichael Clark static uint32_t operand_cimmw(rv_inst inst) 3982ea103259SMichael Clark { 3983ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3984ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3985ea103259SMichael Clark ((inst << 58) >> 63) << 6; 3986ea103259SMichael Clark } 3987ea103259SMichael Clark 3988ea103259SMichael Clark static uint32_t operand_cimmd(rv_inst inst) 3989ea103259SMichael Clark { 3990ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3991ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3992ea103259SMichael Clark } 3993ea103259SMichael Clark 3994ea103259SMichael Clark static uint32_t operand_cimmq(rv_inst inst) 3995ea103259SMichael Clark { 3996ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3997ea103259SMichael Clark ((inst << 53) >> 63) << 8 | 3998ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3999ea103259SMichael Clark } 4000ea103259SMichael Clark 400107f4964dSYang Liu static uint32_t operand_vimm(rv_inst inst) 400207f4964dSYang Liu { 400307f4964dSYang Liu return (int64_t)(inst << 44) >> 59; 400407f4964dSYang Liu } 400507f4964dSYang Liu 400607f4964dSYang Liu static uint32_t operand_vzimm11(rv_inst inst) 400707f4964dSYang Liu { 400807f4964dSYang Liu return (inst << 33) >> 53; 400907f4964dSYang Liu } 401007f4964dSYang Liu 401107f4964dSYang Liu static uint32_t operand_vzimm10(rv_inst inst) 401207f4964dSYang Liu { 401307f4964dSYang Liu return (inst << 34) >> 54; 401407f4964dSYang Liu } 401507f4964dSYang Liu 40165748c886SWeiwei Li static uint32_t operand_bs(rv_inst inst) 40175748c886SWeiwei Li { 40185748c886SWeiwei Li return (inst << 32) >> 62; 40195748c886SWeiwei Li } 40205748c886SWeiwei Li 40215748c886SWeiwei Li static uint32_t operand_rnum(rv_inst inst) 40225748c886SWeiwei Li { 40235748c886SWeiwei Li return (inst << 40) >> 60; 40245748c886SWeiwei Li } 40255748c886SWeiwei Li 402607f4964dSYang Liu static uint32_t operand_vm(rv_inst inst) 402707f4964dSYang Liu { 402807f4964dSYang Liu return (inst << 38) >> 63; 402907f4964dSYang Liu } 403007f4964dSYang Liu 40312c71d02eSWeiwei Li static uint32_t operand_uimm_c_lb(rv_inst inst) 40322c71d02eSWeiwei Li { 40332c71d02eSWeiwei Li return (((inst << 58) >> 63) << 1) | 40342c71d02eSWeiwei Li ((inst << 57) >> 63); 40352c71d02eSWeiwei Li } 40362c71d02eSWeiwei Li 40372c71d02eSWeiwei Li static uint32_t operand_uimm_c_lh(rv_inst inst) 40382c71d02eSWeiwei Li { 40392c71d02eSWeiwei Li return (((inst << 58) >> 63) << 1); 40402c71d02eSWeiwei Li } 40412c71d02eSWeiwei Li 40422c71d02eSWeiwei Li static uint32_t operand_zcmp_spimm(rv_inst inst) 40432c71d02eSWeiwei Li { 40442c71d02eSWeiwei Li return ((inst << 60) >> 62) << 4; 40452c71d02eSWeiwei Li } 40462c71d02eSWeiwei Li 40472c71d02eSWeiwei Li static uint32_t operand_zcmp_rlist(rv_inst inst) 40482c71d02eSWeiwei Li { 40492c71d02eSWeiwei Li return ((inst << 56) >> 60); 40502c71d02eSWeiwei Li } 40512c71d02eSWeiwei Li 40522c71d02eSWeiwei Li static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t spimm) 40532c71d02eSWeiwei Li { 40542c71d02eSWeiwei Li int xlen_bytes_log2 = isa == rv64 ? 3 : 2; 40552c71d02eSWeiwei Li int regs = rlist == 15 ? 13 : rlist - 3; 40562c71d02eSWeiwei Li uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16); 40572c71d02eSWeiwei Li return stack_adj_base + spimm; 40582c71d02eSWeiwei Li } 40592c71d02eSWeiwei Li 40602c71d02eSWeiwei Li static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa) 40612c71d02eSWeiwei Li { 40622c71d02eSWeiwei Li return calculate_stack_adj(isa, operand_zcmp_rlist(inst), 40632c71d02eSWeiwei Li operand_zcmp_spimm(inst)); 40642c71d02eSWeiwei Li } 40652c71d02eSWeiwei Li 40662c71d02eSWeiwei Li static uint32_t operand_tbl_index(rv_inst inst) 40672c71d02eSWeiwei Li { 40682c71d02eSWeiwei Li return ((inst << 54) >> 56); 40692c71d02eSWeiwei Li } 40702c71d02eSWeiwei Li 4071ea103259SMichael Clark /* decode operands */ 4072ea103259SMichael Clark 407333632775SFrédéric Pétrot static void decode_inst_operands(rv_decode *dec, rv_isa isa) 4074ea103259SMichael Clark { 4075ea103259SMichael Clark rv_inst inst = dec->inst; 4076ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 4077ea103259SMichael Clark switch (dec->codec) { 4078ea103259SMichael Clark case rv_codec_none: 4079ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4080ea103259SMichael Clark dec->imm = 0; 4081ea103259SMichael Clark break; 4082ea103259SMichael Clark case rv_codec_u: 4083ea103259SMichael Clark dec->rd = operand_rd(inst); 4084ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4085ea103259SMichael Clark dec->imm = operand_imm20(inst); 4086ea103259SMichael Clark break; 4087ea103259SMichael Clark case rv_codec_uj: 4088ea103259SMichael Clark dec->rd = operand_rd(inst); 4089ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4090ea103259SMichael Clark dec->imm = operand_jimm20(inst); 4091ea103259SMichael Clark break; 4092ea103259SMichael Clark case rv_codec_i: 4093ea103259SMichael Clark dec->rd = operand_rd(inst); 4094ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4095ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4096ea103259SMichael Clark dec->imm = operand_imm12(inst); 4097ea103259SMichael Clark break; 4098ea103259SMichael Clark case rv_codec_i_sh5: 4099ea103259SMichael Clark dec->rd = operand_rd(inst); 4100ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4101ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4102ea103259SMichael Clark dec->imm = operand_shamt5(inst); 4103ea103259SMichael Clark break; 4104ea103259SMichael Clark case rv_codec_i_sh6: 4105ea103259SMichael Clark dec->rd = operand_rd(inst); 4106ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4107ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4108ea103259SMichael Clark dec->imm = operand_shamt6(inst); 4109ea103259SMichael Clark break; 4110ea103259SMichael Clark case rv_codec_i_sh7: 4111ea103259SMichael Clark dec->rd = operand_rd(inst); 4112ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4113ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4114ea103259SMichael Clark dec->imm = operand_shamt7(inst); 4115ea103259SMichael Clark break; 4116ea103259SMichael Clark case rv_codec_i_csr: 4117ea103259SMichael Clark dec->rd = operand_rd(inst); 4118ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4119ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4120ea103259SMichael Clark dec->imm = operand_csr12(inst); 4121ea103259SMichael Clark break; 4122ea103259SMichael Clark case rv_codec_s: 4123ea103259SMichael Clark dec->rd = rv_ireg_zero; 4124ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4125ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4126ea103259SMichael Clark dec->imm = operand_simm12(inst); 4127ea103259SMichael Clark break; 4128ea103259SMichael Clark case rv_codec_sb: 4129ea103259SMichael Clark dec->rd = rv_ireg_zero; 4130ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4131ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4132ea103259SMichael Clark dec->imm = operand_sbimm12(inst); 4133ea103259SMichael Clark break; 4134ea103259SMichael Clark case rv_codec_r: 4135ea103259SMichael Clark dec->rd = operand_rd(inst); 4136ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4137ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4138ea103259SMichael Clark dec->imm = 0; 4139ea103259SMichael Clark break; 4140ea103259SMichael Clark case rv_codec_r_m: 4141ea103259SMichael Clark dec->rd = operand_rd(inst); 4142ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4143ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4144ea103259SMichael Clark dec->imm = 0; 4145ea103259SMichael Clark dec->rm = operand_rm(inst); 4146ea103259SMichael Clark break; 4147ea103259SMichael Clark case rv_codec_r4_m: 4148ea103259SMichael Clark dec->rd = operand_rd(inst); 4149ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4150ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4151ea103259SMichael Clark dec->rs3 = operand_rs3(inst); 4152ea103259SMichael Clark dec->imm = 0; 4153ea103259SMichael Clark dec->rm = operand_rm(inst); 4154ea103259SMichael Clark break; 4155ea103259SMichael Clark case rv_codec_r_a: 4156ea103259SMichael Clark dec->rd = operand_rd(inst); 4157ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4158ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4159ea103259SMichael Clark dec->imm = 0; 4160ea103259SMichael Clark dec->aq = operand_aq(inst); 4161ea103259SMichael Clark dec->rl = operand_rl(inst); 4162ea103259SMichael Clark break; 4163ea103259SMichael Clark case rv_codec_r_l: 4164ea103259SMichael Clark dec->rd = operand_rd(inst); 4165ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4166ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4167ea103259SMichael Clark dec->imm = 0; 4168ea103259SMichael Clark dec->aq = operand_aq(inst); 4169ea103259SMichael Clark dec->rl = operand_rl(inst); 4170ea103259SMichael Clark break; 4171ea103259SMichael Clark case rv_codec_r_f: 4172ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4173ea103259SMichael Clark dec->pred = operand_pred(inst); 4174ea103259SMichael Clark dec->succ = operand_succ(inst); 4175ea103259SMichael Clark dec->imm = 0; 4176ea103259SMichael Clark break; 4177ea103259SMichael Clark case rv_codec_cb: 4178ea103259SMichael Clark dec->rd = rv_ireg_zero; 4179ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4180ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4181ea103259SMichael Clark dec->imm = operand_cimmb(inst); 4182ea103259SMichael Clark break; 4183ea103259SMichael Clark case rv_codec_cb_imm: 4184ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4185ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4186ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4187ea103259SMichael Clark break; 4188ea103259SMichael Clark case rv_codec_cb_sh5: 4189ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4190ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4191ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4192ea103259SMichael Clark break; 4193ea103259SMichael Clark case rv_codec_cb_sh6: 4194ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4195ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 419633632775SFrédéric Pétrot dec->imm = operand_cimmshr6(inst, isa); 4197ea103259SMichael Clark break; 4198ea103259SMichael Clark case rv_codec_ci: 4199ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4200ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4201ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4202ea103259SMichael Clark break; 4203ea103259SMichael Clark case rv_codec_ci_sh5: 4204ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4205ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4206ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4207ea103259SMichael Clark break; 4208ea103259SMichael Clark case rv_codec_ci_sh6: 4209ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4210ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 421133632775SFrédéric Pétrot dec->imm = operand_cimmshl6(inst, isa); 4212ea103259SMichael Clark break; 4213ea103259SMichael Clark case rv_codec_ci_16sp: 4214ea103259SMichael Clark dec->rd = rv_ireg_sp; 4215ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4216ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4217ea103259SMichael Clark dec->imm = operand_cimm16sp(inst); 4218ea103259SMichael Clark break; 4219ea103259SMichael Clark case rv_codec_ci_lwsp: 4220ea103259SMichael Clark dec->rd = operand_crd(inst); 4221ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4222ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4223ea103259SMichael Clark dec->imm = operand_cimmlwsp(inst); 4224ea103259SMichael Clark break; 4225ea103259SMichael Clark case rv_codec_ci_ldsp: 4226ea103259SMichael Clark dec->rd = operand_crd(inst); 4227ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4228ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4229ea103259SMichael Clark dec->imm = operand_cimmldsp(inst); 4230ea103259SMichael Clark break; 4231ea103259SMichael Clark case rv_codec_ci_lqsp: 4232ea103259SMichael Clark dec->rd = operand_crd(inst); 4233ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4234ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4235ea103259SMichael Clark dec->imm = operand_cimmlqsp(inst); 4236ea103259SMichael Clark break; 4237ea103259SMichael Clark case rv_codec_ci_li: 4238ea103259SMichael Clark dec->rd = operand_crd(inst); 4239ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4240ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4241ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4242ea103259SMichael Clark break; 4243ea103259SMichael Clark case rv_codec_ci_lui: 4244ea103259SMichael Clark dec->rd = operand_crd(inst); 4245ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4246ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4247ea103259SMichael Clark dec->imm = operand_cimmui(inst); 4248ea103259SMichael Clark break; 4249ea103259SMichael Clark case rv_codec_ci_none: 4250ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4251ea103259SMichael Clark dec->imm = 0; 4252ea103259SMichael Clark break; 4253ea103259SMichael Clark case rv_codec_ciw_4spn: 4254ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4255ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4256ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4257ea103259SMichael Clark dec->imm = operand_cimm4spn(inst); 4258ea103259SMichael Clark break; 4259ea103259SMichael Clark case rv_codec_cj: 4260ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4261ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4262ea103259SMichael Clark break; 4263ea103259SMichael Clark case rv_codec_cj_jal: 4264ea103259SMichael Clark dec->rd = rv_ireg_ra; 4265ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4266ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4267ea103259SMichael Clark break; 4268ea103259SMichael Clark case rv_codec_cl_lw: 4269ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4270ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4271ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4272ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4273ea103259SMichael Clark break; 4274ea103259SMichael Clark case rv_codec_cl_ld: 4275ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4276ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4277ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4278ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4279ea103259SMichael Clark break; 4280ea103259SMichael Clark case rv_codec_cl_lq: 4281ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4282ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4283ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4284ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4285ea103259SMichael Clark break; 4286ea103259SMichael Clark case rv_codec_cr: 4287ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4288ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4289ea103259SMichael Clark dec->imm = 0; 4290ea103259SMichael Clark break; 4291ea103259SMichael Clark case rv_codec_cr_mv: 4292ea103259SMichael Clark dec->rd = operand_crd(inst); 4293ea103259SMichael Clark dec->rs1 = operand_crs2(inst); 4294ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4295ea103259SMichael Clark dec->imm = 0; 4296ea103259SMichael Clark break; 4297ea103259SMichael Clark case rv_codec_cr_jalr: 4298ea103259SMichael Clark dec->rd = rv_ireg_ra; 4299ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4300ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4301ea103259SMichael Clark dec->imm = 0; 4302ea103259SMichael Clark break; 4303ea103259SMichael Clark case rv_codec_cr_jr: 4304ea103259SMichael Clark dec->rd = rv_ireg_zero; 4305ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4306ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4307ea103259SMichael Clark dec->imm = 0; 4308ea103259SMichael Clark break; 4309ea103259SMichael Clark case rv_codec_cs: 4310ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4311ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4312ea103259SMichael Clark dec->imm = 0; 4313ea103259SMichael Clark break; 4314ea103259SMichael Clark case rv_codec_cs_sw: 4315ea103259SMichael Clark dec->rd = rv_ireg_zero; 4316ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4317ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4318ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4319ea103259SMichael Clark break; 4320ea103259SMichael Clark case rv_codec_cs_sd: 4321ea103259SMichael Clark dec->rd = rv_ireg_zero; 4322ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4323ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4324ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4325ea103259SMichael Clark break; 4326ea103259SMichael Clark case rv_codec_cs_sq: 4327ea103259SMichael Clark dec->rd = rv_ireg_zero; 4328ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4329ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4330ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4331ea103259SMichael Clark break; 4332ea103259SMichael Clark case rv_codec_css_swsp: 4333ea103259SMichael Clark dec->rd = rv_ireg_zero; 4334ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4335ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4336ea103259SMichael Clark dec->imm = operand_cimmswsp(inst); 4337ea103259SMichael Clark break; 4338ea103259SMichael Clark case rv_codec_css_sdsp: 4339ea103259SMichael Clark dec->rd = rv_ireg_zero; 4340ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4341ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4342ea103259SMichael Clark dec->imm = operand_cimmsdsp(inst); 4343ea103259SMichael Clark break; 4344ea103259SMichael Clark case rv_codec_css_sqsp: 4345ea103259SMichael Clark dec->rd = rv_ireg_zero; 4346ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4347ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4348ea103259SMichael Clark dec->imm = operand_cimmsqsp(inst); 4349ea103259SMichael Clark break; 43505748c886SWeiwei Li case rv_codec_k_bs: 43515748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 43525748c886SWeiwei Li dec->rs2 = operand_rs2(inst); 43535748c886SWeiwei Li dec->bs = operand_bs(inst); 43545748c886SWeiwei Li break; 43555748c886SWeiwei Li case rv_codec_k_rnum: 43565748c886SWeiwei Li dec->rd = operand_rd(inst); 43575748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 43585748c886SWeiwei Li dec->rnum = operand_rnum(inst); 43595748c886SWeiwei Li break; 436007f4964dSYang Liu case rv_codec_v_r: 436107f4964dSYang Liu dec->rd = operand_rd(inst); 436207f4964dSYang Liu dec->rs1 = operand_rs1(inst); 436307f4964dSYang Liu dec->rs2 = operand_rs2(inst); 436407f4964dSYang Liu dec->vm = operand_vm(inst); 436507f4964dSYang Liu break; 436607f4964dSYang Liu case rv_codec_v_ldst: 436707f4964dSYang Liu dec->rd = operand_rd(inst); 436807f4964dSYang Liu dec->rs1 = operand_rs1(inst); 436907f4964dSYang Liu dec->vm = operand_vm(inst); 437007f4964dSYang Liu break; 437107f4964dSYang Liu case rv_codec_v_i: 437207f4964dSYang Liu dec->rd = operand_rd(inst); 437307f4964dSYang Liu dec->rs2 = operand_rs2(inst); 437407f4964dSYang Liu dec->imm = operand_vimm(inst); 437507f4964dSYang Liu dec->vm = operand_vm(inst); 437607f4964dSYang Liu break; 437707f4964dSYang Liu case rv_codec_vsetvli: 437807f4964dSYang Liu dec->rd = operand_rd(inst); 437907f4964dSYang Liu dec->rs1 = operand_rs1(inst); 438007f4964dSYang Liu dec->vzimm = operand_vzimm11(inst); 438107f4964dSYang Liu break; 438207f4964dSYang Liu case rv_codec_vsetivli: 438307f4964dSYang Liu dec->rd = operand_rd(inst); 438407f4964dSYang Liu dec->imm = operand_vimm(inst); 438507f4964dSYang Liu dec->vzimm = operand_vzimm10(inst); 438607f4964dSYang Liu break; 43872c71d02eSWeiwei Li case rv_codec_zcb_lb: 43882c71d02eSWeiwei Li dec->rs1 = operand_crs1q(inst) + 8; 43892c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 43902c71d02eSWeiwei Li dec->imm = operand_uimm_c_lb(inst); 43912c71d02eSWeiwei Li break; 43922c71d02eSWeiwei Li case rv_codec_zcb_lh: 43932c71d02eSWeiwei Li dec->rs1 = operand_crs1q(inst) + 8; 43942c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 43952c71d02eSWeiwei Li dec->imm = operand_uimm_c_lh(inst); 43962c71d02eSWeiwei Li break; 43972c71d02eSWeiwei Li case rv_codec_zcb_ext: 43982c71d02eSWeiwei Li dec->rd = operand_crs1q(inst) + 8; 43992c71d02eSWeiwei Li break; 44002c71d02eSWeiwei Li case rv_codec_zcb_mul: 44012c71d02eSWeiwei Li dec->rd = operand_crs1rdq(inst) + 8; 44022c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 44032c71d02eSWeiwei Li break; 44042c71d02eSWeiwei Li case rv_codec_zcmp_cm_pushpop: 44052c71d02eSWeiwei Li dec->imm = operand_zcmp_stack_adj(inst, isa); 44062c71d02eSWeiwei Li dec->rlist = operand_zcmp_rlist(inst); 44072c71d02eSWeiwei Li break; 44082c71d02eSWeiwei Li case rv_codec_zcmp_cm_mv: 44092c71d02eSWeiwei Li dec->rd = operand_sreg1(inst); 44102c71d02eSWeiwei Li dec->rs2 = operand_sreg2(inst); 44112c71d02eSWeiwei Li break; 44122c71d02eSWeiwei Li case rv_codec_zcmt_jt: 44132c71d02eSWeiwei Li dec->imm = operand_tbl_index(inst); 44142c71d02eSWeiwei Li break; 4415ea103259SMichael Clark }; 4416ea103259SMichael Clark } 4417ea103259SMichael Clark 4418ea103259SMichael Clark /* check constraint */ 4419ea103259SMichael Clark 4420ea103259SMichael Clark static bool check_constraints(rv_decode *dec, const rvc_constraint *c) 4421ea103259SMichael Clark { 4422ea103259SMichael Clark int32_t imm = dec->imm; 4423ea103259SMichael Clark uint8_t rd = dec->rd, rs1 = dec->rs1, rs2 = dec->rs2; 4424ea103259SMichael Clark while (*c != rvc_end) { 4425ea103259SMichael Clark switch (*c) { 4426ea103259SMichael Clark case rvc_rd_eq_ra: 4427ea103259SMichael Clark if (!(rd == 1)) { 4428ea103259SMichael Clark return false; 4429ea103259SMichael Clark } 4430ea103259SMichael Clark break; 4431ea103259SMichael Clark case rvc_rd_eq_x0: 4432ea103259SMichael Clark if (!(rd == 0)) { 4433ea103259SMichael Clark return false; 4434ea103259SMichael Clark } 4435ea103259SMichael Clark break; 4436ea103259SMichael Clark case rvc_rs1_eq_x0: 4437ea103259SMichael Clark if (!(rs1 == 0)) { 4438ea103259SMichael Clark return false; 4439ea103259SMichael Clark } 4440ea103259SMichael Clark break; 4441ea103259SMichael Clark case rvc_rs2_eq_x0: 4442ea103259SMichael Clark if (!(rs2 == 0)) { 4443ea103259SMichael Clark return false; 4444ea103259SMichael Clark } 4445ea103259SMichael Clark break; 4446ea103259SMichael Clark case rvc_rs2_eq_rs1: 4447ea103259SMichael Clark if (!(rs2 == rs1)) { 4448ea103259SMichael Clark return false; 4449ea103259SMichael Clark } 4450ea103259SMichael Clark break; 4451ea103259SMichael Clark case rvc_rs1_eq_ra: 4452ea103259SMichael Clark if (!(rs1 == 1)) { 4453ea103259SMichael Clark return false; 4454ea103259SMichael Clark } 4455ea103259SMichael Clark break; 4456ea103259SMichael Clark case rvc_imm_eq_zero: 4457ea103259SMichael Clark if (!(imm == 0)) { 4458ea103259SMichael Clark return false; 4459ea103259SMichael Clark } 4460ea103259SMichael Clark break; 4461ea103259SMichael Clark case rvc_imm_eq_n1: 4462ea103259SMichael Clark if (!(imm == -1)) { 4463ea103259SMichael Clark return false; 4464ea103259SMichael Clark } 4465ea103259SMichael Clark break; 4466ea103259SMichael Clark case rvc_imm_eq_p1: 4467ea103259SMichael Clark if (!(imm == 1)) { 4468ea103259SMichael Clark return false; 4469ea103259SMichael Clark } 4470ea103259SMichael Clark break; 4471ea103259SMichael Clark case rvc_csr_eq_0x001: 4472ea103259SMichael Clark if (!(imm == 0x001)) { 4473ea103259SMichael Clark return false; 4474ea103259SMichael Clark } 4475ea103259SMichael Clark break; 4476ea103259SMichael Clark case rvc_csr_eq_0x002: 4477ea103259SMichael Clark if (!(imm == 0x002)) { 4478ea103259SMichael Clark return false; 4479ea103259SMichael Clark } 4480ea103259SMichael Clark break; 4481ea103259SMichael Clark case rvc_csr_eq_0x003: 4482ea103259SMichael Clark if (!(imm == 0x003)) { 4483ea103259SMichael Clark return false; 4484ea103259SMichael Clark } 4485ea103259SMichael Clark break; 4486ea103259SMichael Clark case rvc_csr_eq_0xc00: 4487ea103259SMichael Clark if (!(imm == 0xc00)) { 4488ea103259SMichael Clark return false; 4489ea103259SMichael Clark } 4490ea103259SMichael Clark break; 4491ea103259SMichael Clark case rvc_csr_eq_0xc01: 4492ea103259SMichael Clark if (!(imm == 0xc01)) { 4493ea103259SMichael Clark return false; 4494ea103259SMichael Clark } 4495ea103259SMichael Clark break; 4496ea103259SMichael Clark case rvc_csr_eq_0xc02: 4497ea103259SMichael Clark if (!(imm == 0xc02)) { 4498ea103259SMichael Clark return false; 4499ea103259SMichael Clark } 4500ea103259SMichael Clark break; 4501ea103259SMichael Clark case rvc_csr_eq_0xc80: 4502ea103259SMichael Clark if (!(imm == 0xc80)) { 4503ea103259SMichael Clark return false; 4504ea103259SMichael Clark } 4505ea103259SMichael Clark break; 4506ea103259SMichael Clark case rvc_csr_eq_0xc81: 4507ea103259SMichael Clark if (!(imm == 0xc81)) { 4508ea103259SMichael Clark return false; 4509ea103259SMichael Clark } 4510ea103259SMichael Clark break; 4511ea103259SMichael Clark case rvc_csr_eq_0xc82: 4512ea103259SMichael Clark if (!(imm == 0xc82)) { 4513ea103259SMichael Clark return false; 4514ea103259SMichael Clark } 4515ea103259SMichael Clark break; 4516ea103259SMichael Clark default: break; 4517ea103259SMichael Clark } 4518ea103259SMichael Clark c++; 4519ea103259SMichael Clark } 4520ea103259SMichael Clark return true; 4521ea103259SMichael Clark } 4522ea103259SMichael Clark 4523ea103259SMichael Clark /* instruction length */ 4524ea103259SMichael Clark 4525ea103259SMichael Clark static size_t inst_length(rv_inst inst) 4526ea103259SMichael Clark { 4527ea103259SMichael Clark /* NOTE: supports maximum instruction size of 64-bits */ 4528ea103259SMichael Clark 4529ea103259SMichael Clark /* instruction length coding 4530ea103259SMichael Clark * 4531ea103259SMichael Clark * aa - 16 bit aa != 11 4532ea103259SMichael Clark * bbb11 - 32 bit bbb != 111 4533ea103259SMichael Clark * 011111 - 48 bit 4534ea103259SMichael Clark * 0111111 - 64 bit 4535ea103259SMichael Clark */ 4536ea103259SMichael Clark 4537ea103259SMichael Clark return (inst & 0b11) != 0b11 ? 2 4538ea103259SMichael Clark : (inst & 0b11100) != 0b11100 ? 4 4539ea103259SMichael Clark : (inst & 0b111111) == 0b011111 ? 6 4540ea103259SMichael Clark : (inst & 0b1111111) == 0b0111111 ? 8 4541ea103259SMichael Clark : 0; 4542ea103259SMichael Clark } 4543ea103259SMichael Clark 4544ea103259SMichael Clark /* format instruction */ 4545ea103259SMichael Clark 4546ea103259SMichael Clark static void append(char *s1, const char *s2, size_t n) 4547ea103259SMichael Clark { 4548ea103259SMichael Clark size_t l1 = strlen(s1); 4549ea103259SMichael Clark if (n - l1 - 1 > 0) { 4550ea103259SMichael Clark strncat(s1, s2, n - l1); 4551ea103259SMichael Clark } 4552ea103259SMichael Clark } 4553ea103259SMichael Clark 4554ea103259SMichael Clark static void format_inst(char *buf, size_t buflen, size_t tab, rv_decode *dec) 4555ea103259SMichael Clark { 4556ea103259SMichael Clark char tmp[64]; 4557ea103259SMichael Clark const char *fmt; 4558ea103259SMichael Clark 4559ea103259SMichael Clark fmt = opcode_data[dec->op].format; 4560ea103259SMichael Clark while (*fmt) { 4561ea103259SMichael Clark switch (*fmt) { 4562ea103259SMichael Clark case 'O': 4563ea103259SMichael Clark append(buf, opcode_data[dec->op].name, buflen); 4564ea103259SMichael Clark break; 4565ea103259SMichael Clark case '(': 4566ea103259SMichael Clark append(buf, "(", buflen); 4567ea103259SMichael Clark break; 4568ea103259SMichael Clark case ',': 4569ea103259SMichael Clark append(buf, ",", buflen); 4570ea103259SMichael Clark break; 4571ea103259SMichael Clark case ')': 4572ea103259SMichael Clark append(buf, ")", buflen); 4573ea103259SMichael Clark break; 45742c71d02eSWeiwei Li case '-': 45752c71d02eSWeiwei Li append(buf, "-", buflen); 45762c71d02eSWeiwei Li break; 45775748c886SWeiwei Li case 'b': 45785748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->bs); 45795748c886SWeiwei Li append(buf, tmp, buflen); 45805748c886SWeiwei Li break; 45815748c886SWeiwei Li case 'n': 45825748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->rnum); 45835748c886SWeiwei Li append(buf, tmp, buflen); 45845748c886SWeiwei Li break; 4585ea103259SMichael Clark case '0': 4586ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rd], buflen); 4587ea103259SMichael Clark break; 4588ea103259SMichael Clark case '1': 4589ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs1], buflen); 4590ea103259SMichael Clark break; 4591ea103259SMichael Clark case '2': 4592ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs2], buflen); 4593ea103259SMichael Clark break; 4594ea103259SMichael Clark case '3': 4595ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rd], buflen); 4596ea103259SMichael Clark break; 4597ea103259SMichael Clark case '4': 4598ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs1], buflen); 4599ea103259SMichael Clark break; 4600ea103259SMichael Clark case '5': 4601ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs2], buflen); 4602ea103259SMichael Clark break; 4603ea103259SMichael Clark case '6': 4604ea103259SMichael Clark append(buf, rv_freg_name_sym[dec->rs3], buflen); 4605ea103259SMichael Clark break; 4606ea103259SMichael Clark case '7': 4607ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->rs1); 4608ea103259SMichael Clark append(buf, tmp, buflen); 4609ea103259SMichael Clark break; 4610ea103259SMichael Clark case 'i': 4611ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4612ea103259SMichael Clark append(buf, tmp, buflen); 4613ea103259SMichael Clark break; 461407f4964dSYang Liu case 'u': 461507f4964dSYang Liu snprintf(tmp, sizeof(tmp), "%u", ((uint32_t)dec->imm & 0b11111)); 461607f4964dSYang Liu append(buf, tmp, buflen); 461707f4964dSYang Liu break; 4618ea103259SMichael Clark case 'o': 4619ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4620ea103259SMichael Clark append(buf, tmp, buflen); 4621ea103259SMichael Clark while (strlen(buf) < tab * 2) { 4622ea103259SMichael Clark append(buf, " ", buflen); 4623ea103259SMichael Clark } 4624ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "# 0x%" PRIx64, 4625ea103259SMichael Clark dec->pc + dec->imm); 4626ea103259SMichael Clark append(buf, tmp, buflen); 4627ea103259SMichael Clark break; 4628ea103259SMichael Clark case 'c': { 4629ea103259SMichael Clark const char *name = csr_name(dec->imm & 0xfff); 4630ea103259SMichael Clark if (name) { 4631ea103259SMichael Clark append(buf, name, buflen); 4632ea103259SMichael Clark } else { 4633ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "0x%03x", dec->imm & 0xfff); 4634ea103259SMichael Clark append(buf, tmp, buflen); 4635ea103259SMichael Clark } 4636ea103259SMichael Clark break; 4637ea103259SMichael Clark } 4638ea103259SMichael Clark case 'r': 4639ea103259SMichael Clark switch (dec->rm) { 4640ea103259SMichael Clark case rv_rm_rne: 4641ea103259SMichael Clark append(buf, "rne", buflen); 4642ea103259SMichael Clark break; 4643ea103259SMichael Clark case rv_rm_rtz: 4644ea103259SMichael Clark append(buf, "rtz", buflen); 4645ea103259SMichael Clark break; 4646ea103259SMichael Clark case rv_rm_rdn: 4647ea103259SMichael Clark append(buf, "rdn", buflen); 4648ea103259SMichael Clark break; 4649ea103259SMichael Clark case rv_rm_rup: 4650ea103259SMichael Clark append(buf, "rup", buflen); 4651ea103259SMichael Clark break; 4652ea103259SMichael Clark case rv_rm_rmm: 4653ea103259SMichael Clark append(buf, "rmm", buflen); 4654ea103259SMichael Clark break; 4655ea103259SMichael Clark case rv_rm_dyn: 4656ea103259SMichael Clark append(buf, "dyn", buflen); 4657ea103259SMichael Clark break; 4658ea103259SMichael Clark default: 4659ea103259SMichael Clark append(buf, "inv", buflen); 4660ea103259SMichael Clark break; 4661ea103259SMichael Clark } 4662ea103259SMichael Clark break; 4663ea103259SMichael Clark case 'p': 4664ea103259SMichael Clark if (dec->pred & rv_fence_i) { 4665ea103259SMichael Clark append(buf, "i", buflen); 4666ea103259SMichael Clark } 4667ea103259SMichael Clark if (dec->pred & rv_fence_o) { 4668ea103259SMichael Clark append(buf, "o", buflen); 4669ea103259SMichael Clark } 4670ea103259SMichael Clark if (dec->pred & rv_fence_r) { 4671ea103259SMichael Clark append(buf, "r", buflen); 4672ea103259SMichael Clark } 4673ea103259SMichael Clark if (dec->pred & rv_fence_w) { 4674ea103259SMichael Clark append(buf, "w", buflen); 4675ea103259SMichael Clark } 4676ea103259SMichael Clark break; 4677ea103259SMichael Clark case 's': 4678ea103259SMichael Clark if (dec->succ & rv_fence_i) { 4679ea103259SMichael Clark append(buf, "i", buflen); 4680ea103259SMichael Clark } 4681ea103259SMichael Clark if (dec->succ & rv_fence_o) { 4682ea103259SMichael Clark append(buf, "o", buflen); 4683ea103259SMichael Clark } 4684ea103259SMichael Clark if (dec->succ & rv_fence_r) { 4685ea103259SMichael Clark append(buf, "r", buflen); 4686ea103259SMichael Clark } 4687ea103259SMichael Clark if (dec->succ & rv_fence_w) { 4688ea103259SMichael Clark append(buf, "w", buflen); 4689ea103259SMichael Clark } 4690ea103259SMichael Clark break; 4691ea103259SMichael Clark case '\t': 4692ea103259SMichael Clark while (strlen(buf) < tab) { 4693ea103259SMichael Clark append(buf, " ", buflen); 4694ea103259SMichael Clark } 4695ea103259SMichael Clark break; 4696ea103259SMichael Clark case 'A': 4697ea103259SMichael Clark if (dec->aq) { 4698ea103259SMichael Clark append(buf, ".aq", buflen); 4699ea103259SMichael Clark } 4700ea103259SMichael Clark break; 4701ea103259SMichael Clark case 'R': 4702ea103259SMichael Clark if (dec->rl) { 4703ea103259SMichael Clark append(buf, ".rl", buflen); 4704ea103259SMichael Clark } 4705ea103259SMichael Clark break; 470607f4964dSYang Liu case 'l': 470707f4964dSYang Liu append(buf, ",v0", buflen); 470807f4964dSYang Liu break; 470907f4964dSYang Liu case 'm': 471007f4964dSYang Liu if (dec->vm == 0) { 471107f4964dSYang Liu append(buf, ",v0.t", buflen); 471207f4964dSYang Liu } 471307f4964dSYang Liu break; 471407f4964dSYang Liu case 'D': 471507f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rd], buflen); 471607f4964dSYang Liu break; 471707f4964dSYang Liu case 'E': 471807f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs1], buflen); 471907f4964dSYang Liu break; 472007f4964dSYang Liu case 'F': 472107f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs2], buflen); 472207f4964dSYang Liu break; 472307f4964dSYang Liu case 'G': 472407f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs3], buflen); 472507f4964dSYang Liu break; 472607f4964dSYang Liu case 'v': { 472707f4964dSYang Liu char nbuf[32] = {0}; 472807f4964dSYang Liu const int sew = 1 << (((dec->vzimm >> 3) & 0b111) + 3); 472907f4964dSYang Liu sprintf(nbuf, "%d", sew); 473007f4964dSYang Liu const int lmul = dec->vzimm & 0b11; 473107f4964dSYang Liu const int flmul = (dec->vzimm >> 2) & 1; 473207f4964dSYang Liu const char *vta = (dec->vzimm >> 6) & 1 ? "ta" : "tu"; 473307f4964dSYang Liu const char *vma = (dec->vzimm >> 7) & 1 ? "ma" : "mu"; 473407f4964dSYang Liu append(buf, "e", buflen); 473507f4964dSYang Liu append(buf, nbuf, buflen); 473607f4964dSYang Liu append(buf, ",m", buflen); 473707f4964dSYang Liu if (flmul) { 473807f4964dSYang Liu switch (lmul) { 473907f4964dSYang Liu case 3: 474007f4964dSYang Liu sprintf(nbuf, "f2"); 474107f4964dSYang Liu break; 474207f4964dSYang Liu case 2: 474307f4964dSYang Liu sprintf(nbuf, "f4"); 474407f4964dSYang Liu break; 474507f4964dSYang Liu case 1: 474607f4964dSYang Liu sprintf(nbuf, "f8"); 474707f4964dSYang Liu break; 474807f4964dSYang Liu } 474907f4964dSYang Liu append(buf, nbuf, buflen); 475007f4964dSYang Liu } else { 475107f4964dSYang Liu sprintf(nbuf, "%d", 1 << lmul); 475207f4964dSYang Liu append(buf, nbuf, buflen); 475307f4964dSYang Liu } 475407f4964dSYang Liu append(buf, ",", buflen); 475507f4964dSYang Liu append(buf, vta, buflen); 475607f4964dSYang Liu append(buf, ",", buflen); 475707f4964dSYang Liu append(buf, vma, buflen); 475807f4964dSYang Liu break; 475907f4964dSYang Liu } 47602c71d02eSWeiwei Li case 'x': { 47612c71d02eSWeiwei Li switch (dec->rlist) { 47622c71d02eSWeiwei Li case 4: 47632c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra}"); 47642c71d02eSWeiwei Li break; 47652c71d02eSWeiwei Li case 5: 47662c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0}"); 47672c71d02eSWeiwei Li break; 47682c71d02eSWeiwei Li case 15: 47692c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0-s11}"); 47702c71d02eSWeiwei Li break; 47712c71d02eSWeiwei Li default: 47722c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0-s%d}", dec->rlist - 5); 47732c71d02eSWeiwei Li break; 47742c71d02eSWeiwei Li } 47752c71d02eSWeiwei Li append(buf, tmp, buflen); 47762c71d02eSWeiwei Li break; 47772c71d02eSWeiwei Li } 4778ea103259SMichael Clark default: 4779ea103259SMichael Clark break; 4780ea103259SMichael Clark } 4781ea103259SMichael Clark fmt++; 4782ea103259SMichael Clark } 4783ea103259SMichael Clark } 4784ea103259SMichael Clark 4785ea103259SMichael Clark /* lift instruction to pseudo-instruction */ 4786ea103259SMichael Clark 4787ea103259SMichael Clark static void decode_inst_lift_pseudo(rv_decode *dec) 4788ea103259SMichael Clark { 4789ea103259SMichael Clark const rv_comp_data *comp_data = opcode_data[dec->op].pseudo; 4790ea103259SMichael Clark if (!comp_data) { 4791ea103259SMichael Clark return; 4792ea103259SMichael Clark } 4793ea103259SMichael Clark while (comp_data->constraints) { 4794ea103259SMichael Clark if (check_constraints(dec, comp_data->constraints)) { 4795ea103259SMichael Clark dec->op = comp_data->op; 4796ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 4797ea103259SMichael Clark return; 4798ea103259SMichael Clark } 4799ea103259SMichael Clark comp_data++; 4800ea103259SMichael Clark } 4801ea103259SMichael Clark } 4802ea103259SMichael Clark 4803ea103259SMichael Clark /* decompress instruction */ 4804ea103259SMichael Clark 4805ea103259SMichael Clark static void decode_inst_decompress_rv32(rv_decode *dec) 4806ea103259SMichael Clark { 4807ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv32; 4808ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4809f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4810f88222daSMichael Clark && dec->imm == 0) { 4811f88222daSMichael Clark dec->op = rv_op_illegal; 4812f88222daSMichael Clark } else { 4813ea103259SMichael Clark dec->op = decomp_op; 4814ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4815ea103259SMichael Clark } 4816ea103259SMichael Clark } 4817f88222daSMichael Clark } 4818ea103259SMichael Clark 4819ea103259SMichael Clark static void decode_inst_decompress_rv64(rv_decode *dec) 4820ea103259SMichael Clark { 4821ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv64; 4822ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4823f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4824f88222daSMichael Clark && dec->imm == 0) { 4825f88222daSMichael Clark dec->op = rv_op_illegal; 4826f88222daSMichael Clark } else { 4827ea103259SMichael Clark dec->op = decomp_op; 4828ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4829ea103259SMichael Clark } 4830ea103259SMichael Clark } 4831f88222daSMichael Clark } 4832ea103259SMichael Clark 4833ea103259SMichael Clark static void decode_inst_decompress_rv128(rv_decode *dec) 4834ea103259SMichael Clark { 4835ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv128; 4836ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4837f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4838f88222daSMichael Clark && dec->imm == 0) { 4839f88222daSMichael Clark dec->op = rv_op_illegal; 4840f88222daSMichael Clark } else { 4841ea103259SMichael Clark dec->op = decomp_op; 4842ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4843ea103259SMichael Clark } 4844ea103259SMichael Clark } 4845f88222daSMichael Clark } 4846ea103259SMichael Clark 4847ea103259SMichael Clark static void decode_inst_decompress(rv_decode *dec, rv_isa isa) 4848ea103259SMichael Clark { 4849ea103259SMichael Clark switch (isa) { 4850ea103259SMichael Clark case rv32: 4851ea103259SMichael Clark decode_inst_decompress_rv32(dec); 4852ea103259SMichael Clark break; 4853ea103259SMichael Clark case rv64: 4854ea103259SMichael Clark decode_inst_decompress_rv64(dec); 4855ea103259SMichael Clark break; 4856ea103259SMichael Clark case rv128: 4857ea103259SMichael Clark decode_inst_decompress_rv128(dec); 4858ea103259SMichael Clark break; 4859ea103259SMichael Clark } 4860ea103259SMichael Clark } 4861ea103259SMichael Clark 4862ea103259SMichael Clark /* disassemble instruction */ 4863ea103259SMichael Clark 4864ea103259SMichael Clark static void 4865*454c2201SWeiwei Li disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst, 4866*454c2201SWeiwei Li RISCVCPUConfig *cfg) 4867ea103259SMichael Clark { 4868ea103259SMichael Clark rv_decode dec = { 0 }; 4869ea103259SMichael Clark dec.pc = pc; 4870ea103259SMichael Clark dec.inst = inst; 4871*454c2201SWeiwei Li dec.cfg = cfg; 4872ea103259SMichael Clark decode_inst_opcode(&dec, isa); 487333632775SFrédéric Pétrot decode_inst_operands(&dec, isa); 4874ea103259SMichael Clark decode_inst_decompress(&dec, isa); 4875ea103259SMichael Clark decode_inst_lift_pseudo(&dec); 487607f4964dSYang Liu format_inst(buf, buflen, 24, &dec); 4877ea103259SMichael Clark } 4878ea103259SMichael Clark 48796296a799SMichael Clark #define INST_FMT_2 "%04" PRIx64 " " 48806296a799SMichael Clark #define INST_FMT_4 "%08" PRIx64 " " 48816296a799SMichael Clark #define INST_FMT_6 "%012" PRIx64 " " 48826296a799SMichael Clark #define INST_FMT_8 "%016" PRIx64 " " 48836296a799SMichael Clark 4884ea103259SMichael Clark static int 4885ea103259SMichael Clark print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa) 4886ea103259SMichael Clark { 4887ea103259SMichael Clark char buf[128] = { 0 }; 4888ea103259SMichael Clark bfd_byte packet[2]; 4889ea103259SMichael Clark rv_inst inst = 0; 4890ea103259SMichael Clark size_t len = 2; 4891ea103259SMichael Clark bfd_vma n; 4892ea103259SMichael Clark int status; 4893ea103259SMichael Clark 4894ea103259SMichael Clark /* Instructions are made of 2-byte packets in little-endian order */ 4895ea103259SMichael Clark for (n = 0; n < len; n += 2) { 4896ea103259SMichael Clark status = (*info->read_memory_func)(memaddr + n, packet, 2, info); 4897ea103259SMichael Clark if (status != 0) { 4898ea103259SMichael Clark /* Don't fail just because we fell off the end. */ 4899ea103259SMichael Clark if (n > 0) { 4900ea103259SMichael Clark break; 4901ea103259SMichael Clark } 4902ea103259SMichael Clark (*info->memory_error_func)(status, memaddr, info); 4903ea103259SMichael Clark return status; 4904ea103259SMichael Clark } 4905ea103259SMichael Clark inst |= ((rv_inst) bfd_getl16(packet)) << (8 * n); 4906ea103259SMichael Clark if (n == 0) { 4907ea103259SMichael Clark len = inst_length(inst); 4908ea103259SMichael Clark } 4909ea103259SMichael Clark } 4910ea103259SMichael Clark 49116296a799SMichael Clark switch (len) { 49126296a799SMichael Clark case 2: 49136296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_2, inst); 49146296a799SMichael Clark break; 49156296a799SMichael Clark case 4: 49166296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_4, inst); 49176296a799SMichael Clark break; 49186296a799SMichael Clark case 6: 49196296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_6, inst); 49206296a799SMichael Clark break; 49216296a799SMichael Clark default: 49226296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_8, inst); 49236296a799SMichael Clark break; 49246296a799SMichael Clark } 49256296a799SMichael Clark 4926*454c2201SWeiwei Li disasm_inst(buf, sizeof(buf), isa, memaddr, inst, 4927*454c2201SWeiwei Li (RISCVCPUConfig *)info->target_info); 4928ea103259SMichael Clark (*info->fprintf_func)(info->stream, "%s", buf); 4929ea103259SMichael Clark 4930ea103259SMichael Clark return len; 4931ea103259SMichael Clark } 4932ea103259SMichael Clark 4933ea103259SMichael Clark int print_insn_riscv32(bfd_vma memaddr, struct disassemble_info *info) 4934ea103259SMichael Clark { 4935ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv32); 4936ea103259SMichael Clark } 4937ea103259SMichael Clark 4938ea103259SMichael Clark int print_insn_riscv64(bfd_vma memaddr, struct disassemble_info *info) 4939ea103259SMichael Clark { 4940ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv64); 4941ea103259SMichael Clark } 4942332dab68SFrédéric Pétrot 4943332dab68SFrédéric Pétrot int print_insn_riscv128(bfd_vma memaddr, struct disassemble_info *info) 4944332dab68SFrédéric Pétrot { 4945332dab68SFrédéric Pétrot return print_insn_riscv(memaddr, info, rv128); 4946332dab68SFrédéric Pétrot } 4947