1ea103259SMichael Clark /* 2ea103259SMichael Clark * QEMU RISC-V Disassembler 3ea103259SMichael Clark * 4ea103259SMichael Clark * Copyright (c) 2016-2017 Michael Clark <michaeljclark@mac.com> 5ea103259SMichael Clark * Copyright (c) 2017-2018 SiFive, Inc. 6ea103259SMichael Clark * 7ea103259SMichael Clark * This program is free software; you can redistribute it and/or modify it 8ea103259SMichael Clark * under the terms and conditions of the GNU General Public License, 9ea103259SMichael Clark * version 2 or later, as published by the Free Software Foundation. 10ea103259SMichael Clark * 11ea103259SMichael Clark * This program is distributed in the hope it will be useful, but WITHOUT 12ea103259SMichael Clark * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13ea103259SMichael Clark * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 14ea103259SMichael Clark * more details. 15ea103259SMichael Clark * 16ea103259SMichael Clark * You should have received a copy of the GNU General Public License along with 17ea103259SMichael Clark * this program. If not, see <http://www.gnu.org/licenses/>. 18ea103259SMichael Clark */ 19ea103259SMichael Clark 20ea103259SMichael Clark #include "qemu/osdep.h" 21318df723SChristoph Müllner #include "qemu/bitops.h" 223979fca4SMarkus Armbruster #include "disas/dis-asm.h" 23454c2201SWeiwei Li #include "target/riscv/cpu_cfg.h" 245d326db2SChristoph Müllner #include "disas/riscv.h" 25ea103259SMichael Clark 26f6f72338SChristoph Müllner /* Vendor extensions */ 27318df723SChristoph Müllner #include "disas/riscv-xthead.h" 28f6f72338SChristoph Müllner #include "disas/riscv-xventana.h" 29f6f72338SChristoph Müllner 30ea103259SMichael Clark typedef enum { 3101b1361fSChristoph Müllner /* 0 is reserved for rv_op_illegal. */ 32ea103259SMichael Clark rv_op_lui = 1, 33ea103259SMichael Clark rv_op_auipc = 2, 34ea103259SMichael Clark rv_op_jal = 3, 35ea103259SMichael Clark rv_op_jalr = 4, 36ea103259SMichael Clark rv_op_beq = 5, 37ea103259SMichael Clark rv_op_bne = 6, 38ea103259SMichael Clark rv_op_blt = 7, 39ea103259SMichael Clark rv_op_bge = 8, 40ea103259SMichael Clark rv_op_bltu = 9, 41ea103259SMichael Clark rv_op_bgeu = 10, 42ea103259SMichael Clark rv_op_lb = 11, 43ea103259SMichael Clark rv_op_lh = 12, 44ea103259SMichael Clark rv_op_lw = 13, 45ea103259SMichael Clark rv_op_lbu = 14, 46ea103259SMichael Clark rv_op_lhu = 15, 47ea103259SMichael Clark rv_op_sb = 16, 48ea103259SMichael Clark rv_op_sh = 17, 49ea103259SMichael Clark rv_op_sw = 18, 50ea103259SMichael Clark rv_op_addi = 19, 51ea103259SMichael Clark rv_op_slti = 20, 52ea103259SMichael Clark rv_op_sltiu = 21, 53ea103259SMichael Clark rv_op_xori = 22, 54ea103259SMichael Clark rv_op_ori = 23, 55ea103259SMichael Clark rv_op_andi = 24, 56ea103259SMichael Clark rv_op_slli = 25, 57ea103259SMichael Clark rv_op_srli = 26, 58ea103259SMichael Clark rv_op_srai = 27, 59ea103259SMichael Clark rv_op_add = 28, 60ea103259SMichael Clark rv_op_sub = 29, 61ea103259SMichael Clark rv_op_sll = 30, 62ea103259SMichael Clark rv_op_slt = 31, 63ea103259SMichael Clark rv_op_sltu = 32, 64ea103259SMichael Clark rv_op_xor = 33, 65ea103259SMichael Clark rv_op_srl = 34, 66ea103259SMichael Clark rv_op_sra = 35, 67ea103259SMichael Clark rv_op_or = 36, 68ea103259SMichael Clark rv_op_and = 37, 69ea103259SMichael Clark rv_op_fence = 38, 70ea103259SMichael Clark rv_op_fence_i = 39, 71ea103259SMichael Clark rv_op_lwu = 40, 72ea103259SMichael Clark rv_op_ld = 41, 73ea103259SMichael Clark rv_op_sd = 42, 74ea103259SMichael Clark rv_op_addiw = 43, 75ea103259SMichael Clark rv_op_slliw = 44, 76ea103259SMichael Clark rv_op_srliw = 45, 77ea103259SMichael Clark rv_op_sraiw = 46, 78ea103259SMichael Clark rv_op_addw = 47, 79ea103259SMichael Clark rv_op_subw = 48, 80ea103259SMichael Clark rv_op_sllw = 49, 81ea103259SMichael Clark rv_op_srlw = 50, 82ea103259SMichael Clark rv_op_sraw = 51, 83ea103259SMichael Clark rv_op_ldu = 52, 84ea103259SMichael Clark rv_op_lq = 53, 85ea103259SMichael Clark rv_op_sq = 54, 86ea103259SMichael Clark rv_op_addid = 55, 87ea103259SMichael Clark rv_op_sllid = 56, 88ea103259SMichael Clark rv_op_srlid = 57, 89ea103259SMichael Clark rv_op_sraid = 58, 90ea103259SMichael Clark rv_op_addd = 59, 91ea103259SMichael Clark rv_op_subd = 60, 92ea103259SMichael Clark rv_op_slld = 61, 93ea103259SMichael Clark rv_op_srld = 62, 94ea103259SMichael Clark rv_op_srad = 63, 95ea103259SMichael Clark rv_op_mul = 64, 96ea103259SMichael Clark rv_op_mulh = 65, 97ea103259SMichael Clark rv_op_mulhsu = 66, 98ea103259SMichael Clark rv_op_mulhu = 67, 99ea103259SMichael Clark rv_op_div = 68, 100ea103259SMichael Clark rv_op_divu = 69, 101ea103259SMichael Clark rv_op_rem = 70, 102ea103259SMichael Clark rv_op_remu = 71, 103ea103259SMichael Clark rv_op_mulw = 72, 104ea103259SMichael Clark rv_op_divw = 73, 105ea103259SMichael Clark rv_op_divuw = 74, 106ea103259SMichael Clark rv_op_remw = 75, 107ea103259SMichael Clark rv_op_remuw = 76, 108ea103259SMichael Clark rv_op_muld = 77, 109ea103259SMichael Clark rv_op_divd = 78, 110ea103259SMichael Clark rv_op_divud = 79, 111ea103259SMichael Clark rv_op_remd = 80, 112ea103259SMichael Clark rv_op_remud = 81, 113ea103259SMichael Clark rv_op_lr_w = 82, 114ea103259SMichael Clark rv_op_sc_w = 83, 115ea103259SMichael Clark rv_op_amoswap_w = 84, 116ea103259SMichael Clark rv_op_amoadd_w = 85, 117ea103259SMichael Clark rv_op_amoxor_w = 86, 118ea103259SMichael Clark rv_op_amoor_w = 87, 119ea103259SMichael Clark rv_op_amoand_w = 88, 120ea103259SMichael Clark rv_op_amomin_w = 89, 121ea103259SMichael Clark rv_op_amomax_w = 90, 122ea103259SMichael Clark rv_op_amominu_w = 91, 123ea103259SMichael Clark rv_op_amomaxu_w = 92, 124ea103259SMichael Clark rv_op_lr_d = 93, 125ea103259SMichael Clark rv_op_sc_d = 94, 126ea103259SMichael Clark rv_op_amoswap_d = 95, 127ea103259SMichael Clark rv_op_amoadd_d = 96, 128ea103259SMichael Clark rv_op_amoxor_d = 97, 129ea103259SMichael Clark rv_op_amoor_d = 98, 130ea103259SMichael Clark rv_op_amoand_d = 99, 131ea103259SMichael Clark rv_op_amomin_d = 100, 132ea103259SMichael Clark rv_op_amomax_d = 101, 133ea103259SMichael Clark rv_op_amominu_d = 102, 134ea103259SMichael Clark rv_op_amomaxu_d = 103, 135ea103259SMichael Clark rv_op_lr_q = 104, 136ea103259SMichael Clark rv_op_sc_q = 105, 137ea103259SMichael Clark rv_op_amoswap_q = 106, 138ea103259SMichael Clark rv_op_amoadd_q = 107, 139ea103259SMichael Clark rv_op_amoxor_q = 108, 140ea103259SMichael Clark rv_op_amoor_q = 109, 141ea103259SMichael Clark rv_op_amoand_q = 110, 142ea103259SMichael Clark rv_op_amomin_q = 111, 143ea103259SMichael Clark rv_op_amomax_q = 112, 144ea103259SMichael Clark rv_op_amominu_q = 113, 145ea103259SMichael Clark rv_op_amomaxu_q = 114, 146ea103259SMichael Clark rv_op_ecall = 115, 147ea103259SMichael Clark rv_op_ebreak = 116, 148ea103259SMichael Clark rv_op_uret = 117, 149ea103259SMichael Clark rv_op_sret = 118, 150ea103259SMichael Clark rv_op_hret = 119, 151ea103259SMichael Clark rv_op_mret = 120, 152ea103259SMichael Clark rv_op_dret = 121, 153ea103259SMichael Clark rv_op_sfence_vm = 122, 154ea103259SMichael Clark rv_op_sfence_vma = 123, 155ea103259SMichael Clark rv_op_wfi = 124, 156ea103259SMichael Clark rv_op_csrrw = 125, 157ea103259SMichael Clark rv_op_csrrs = 126, 158ea103259SMichael Clark rv_op_csrrc = 127, 159ea103259SMichael Clark rv_op_csrrwi = 128, 160ea103259SMichael Clark rv_op_csrrsi = 129, 161ea103259SMichael Clark rv_op_csrrci = 130, 162ea103259SMichael Clark rv_op_flw = 131, 163ea103259SMichael Clark rv_op_fsw = 132, 164ea103259SMichael Clark rv_op_fmadd_s = 133, 165ea103259SMichael Clark rv_op_fmsub_s = 134, 166ea103259SMichael Clark rv_op_fnmsub_s = 135, 167ea103259SMichael Clark rv_op_fnmadd_s = 136, 168ea103259SMichael Clark rv_op_fadd_s = 137, 169ea103259SMichael Clark rv_op_fsub_s = 138, 170ea103259SMichael Clark rv_op_fmul_s = 139, 171ea103259SMichael Clark rv_op_fdiv_s = 140, 172ea103259SMichael Clark rv_op_fsgnj_s = 141, 173ea103259SMichael Clark rv_op_fsgnjn_s = 142, 174ea103259SMichael Clark rv_op_fsgnjx_s = 143, 175ea103259SMichael Clark rv_op_fmin_s = 144, 176ea103259SMichael Clark rv_op_fmax_s = 145, 177ea103259SMichael Clark rv_op_fsqrt_s = 146, 178ea103259SMichael Clark rv_op_fle_s = 147, 179ea103259SMichael Clark rv_op_flt_s = 148, 180ea103259SMichael Clark rv_op_feq_s = 149, 181ea103259SMichael Clark rv_op_fcvt_w_s = 150, 182ea103259SMichael Clark rv_op_fcvt_wu_s = 151, 183ea103259SMichael Clark rv_op_fcvt_s_w = 152, 184ea103259SMichael Clark rv_op_fcvt_s_wu = 153, 185ea103259SMichael Clark rv_op_fmv_x_s = 154, 186ea103259SMichael Clark rv_op_fclass_s = 155, 187ea103259SMichael Clark rv_op_fmv_s_x = 156, 188ea103259SMichael Clark rv_op_fcvt_l_s = 157, 189ea103259SMichael Clark rv_op_fcvt_lu_s = 158, 190ea103259SMichael Clark rv_op_fcvt_s_l = 159, 191ea103259SMichael Clark rv_op_fcvt_s_lu = 160, 192ea103259SMichael Clark rv_op_fld = 161, 193ea103259SMichael Clark rv_op_fsd = 162, 194ea103259SMichael Clark rv_op_fmadd_d = 163, 195ea103259SMichael Clark rv_op_fmsub_d = 164, 196ea103259SMichael Clark rv_op_fnmsub_d = 165, 197ea103259SMichael Clark rv_op_fnmadd_d = 166, 198ea103259SMichael Clark rv_op_fadd_d = 167, 199ea103259SMichael Clark rv_op_fsub_d = 168, 200ea103259SMichael Clark rv_op_fmul_d = 169, 201ea103259SMichael Clark rv_op_fdiv_d = 170, 202ea103259SMichael Clark rv_op_fsgnj_d = 171, 203ea103259SMichael Clark rv_op_fsgnjn_d = 172, 204ea103259SMichael Clark rv_op_fsgnjx_d = 173, 205ea103259SMichael Clark rv_op_fmin_d = 174, 206ea103259SMichael Clark rv_op_fmax_d = 175, 207ea103259SMichael Clark rv_op_fcvt_s_d = 176, 208ea103259SMichael Clark rv_op_fcvt_d_s = 177, 209ea103259SMichael Clark rv_op_fsqrt_d = 178, 210ea103259SMichael Clark rv_op_fle_d = 179, 211ea103259SMichael Clark rv_op_flt_d = 180, 212ea103259SMichael Clark rv_op_feq_d = 181, 213ea103259SMichael Clark rv_op_fcvt_w_d = 182, 214ea103259SMichael Clark rv_op_fcvt_wu_d = 183, 215ea103259SMichael Clark rv_op_fcvt_d_w = 184, 216ea103259SMichael Clark rv_op_fcvt_d_wu = 185, 217ea103259SMichael Clark rv_op_fclass_d = 186, 218ea103259SMichael Clark rv_op_fcvt_l_d = 187, 219ea103259SMichael Clark rv_op_fcvt_lu_d = 188, 220ea103259SMichael Clark rv_op_fmv_x_d = 189, 221ea103259SMichael Clark rv_op_fcvt_d_l = 190, 222ea103259SMichael Clark rv_op_fcvt_d_lu = 191, 223ea103259SMichael Clark rv_op_fmv_d_x = 192, 224ea103259SMichael Clark rv_op_flq = 193, 225ea103259SMichael Clark rv_op_fsq = 194, 226ea103259SMichael Clark rv_op_fmadd_q = 195, 227ea103259SMichael Clark rv_op_fmsub_q = 196, 228ea103259SMichael Clark rv_op_fnmsub_q = 197, 229ea103259SMichael Clark rv_op_fnmadd_q = 198, 230ea103259SMichael Clark rv_op_fadd_q = 199, 231ea103259SMichael Clark rv_op_fsub_q = 200, 232ea103259SMichael Clark rv_op_fmul_q = 201, 233ea103259SMichael Clark rv_op_fdiv_q = 202, 234ea103259SMichael Clark rv_op_fsgnj_q = 203, 235ea103259SMichael Clark rv_op_fsgnjn_q = 204, 236ea103259SMichael Clark rv_op_fsgnjx_q = 205, 237ea103259SMichael Clark rv_op_fmin_q = 206, 238ea103259SMichael Clark rv_op_fmax_q = 207, 239ea103259SMichael Clark rv_op_fcvt_s_q = 208, 240ea103259SMichael Clark rv_op_fcvt_q_s = 209, 241ea103259SMichael Clark rv_op_fcvt_d_q = 210, 242ea103259SMichael Clark rv_op_fcvt_q_d = 211, 243ea103259SMichael Clark rv_op_fsqrt_q = 212, 244ea103259SMichael Clark rv_op_fle_q = 213, 245ea103259SMichael Clark rv_op_flt_q = 214, 246ea103259SMichael Clark rv_op_feq_q = 215, 247ea103259SMichael Clark rv_op_fcvt_w_q = 216, 248ea103259SMichael Clark rv_op_fcvt_wu_q = 217, 249ea103259SMichael Clark rv_op_fcvt_q_w = 218, 250ea103259SMichael Clark rv_op_fcvt_q_wu = 219, 251ea103259SMichael Clark rv_op_fclass_q = 220, 252ea103259SMichael Clark rv_op_fcvt_l_q = 221, 253ea103259SMichael Clark rv_op_fcvt_lu_q = 222, 254ea103259SMichael Clark rv_op_fcvt_q_l = 223, 255ea103259SMichael Clark rv_op_fcvt_q_lu = 224, 256ea103259SMichael Clark rv_op_fmv_x_q = 225, 257ea103259SMichael Clark rv_op_fmv_q_x = 226, 258ea103259SMichael Clark rv_op_c_addi4spn = 227, 259ea103259SMichael Clark rv_op_c_fld = 228, 260ea103259SMichael Clark rv_op_c_lw = 229, 261ea103259SMichael Clark rv_op_c_flw = 230, 262ea103259SMichael Clark rv_op_c_fsd = 231, 263ea103259SMichael Clark rv_op_c_sw = 232, 264ea103259SMichael Clark rv_op_c_fsw = 233, 265ea103259SMichael Clark rv_op_c_nop = 234, 266ea103259SMichael Clark rv_op_c_addi = 235, 267ea103259SMichael Clark rv_op_c_jal = 236, 268ea103259SMichael Clark rv_op_c_li = 237, 269ea103259SMichael Clark rv_op_c_addi16sp = 238, 270ea103259SMichael Clark rv_op_c_lui = 239, 271ea103259SMichael Clark rv_op_c_srli = 240, 272ea103259SMichael Clark rv_op_c_srai = 241, 273ea103259SMichael Clark rv_op_c_andi = 242, 274ea103259SMichael Clark rv_op_c_sub = 243, 275ea103259SMichael Clark rv_op_c_xor = 244, 276ea103259SMichael Clark rv_op_c_or = 245, 277ea103259SMichael Clark rv_op_c_and = 246, 278ea103259SMichael Clark rv_op_c_subw = 247, 279ea103259SMichael Clark rv_op_c_addw = 248, 280ea103259SMichael Clark rv_op_c_j = 249, 281ea103259SMichael Clark rv_op_c_beqz = 250, 282ea103259SMichael Clark rv_op_c_bnez = 251, 283ea103259SMichael Clark rv_op_c_slli = 252, 284ea103259SMichael Clark rv_op_c_fldsp = 253, 285ea103259SMichael Clark rv_op_c_lwsp = 254, 286ea103259SMichael Clark rv_op_c_flwsp = 255, 287ea103259SMichael Clark rv_op_c_jr = 256, 288ea103259SMichael Clark rv_op_c_mv = 257, 289ea103259SMichael Clark rv_op_c_ebreak = 258, 290ea103259SMichael Clark rv_op_c_jalr = 259, 291ea103259SMichael Clark rv_op_c_add = 260, 292ea103259SMichael Clark rv_op_c_fsdsp = 261, 293ea103259SMichael Clark rv_op_c_swsp = 262, 294ea103259SMichael Clark rv_op_c_fswsp = 263, 295ea103259SMichael Clark rv_op_c_ld = 264, 296ea103259SMichael Clark rv_op_c_sd = 265, 297ea103259SMichael Clark rv_op_c_addiw = 266, 298ea103259SMichael Clark rv_op_c_ldsp = 267, 299ea103259SMichael Clark rv_op_c_sdsp = 268, 300ea103259SMichael Clark rv_op_c_lq = 269, 301ea103259SMichael Clark rv_op_c_sq = 270, 302ea103259SMichael Clark rv_op_c_lqsp = 271, 303ea103259SMichael Clark rv_op_c_sqsp = 272, 304ea103259SMichael Clark rv_op_nop = 273, 305ea103259SMichael Clark rv_op_mv = 274, 306ea103259SMichael Clark rv_op_not = 275, 307ea103259SMichael Clark rv_op_neg = 276, 308ea103259SMichael Clark rv_op_negw = 277, 309ea103259SMichael Clark rv_op_sext_w = 278, 310ea103259SMichael Clark rv_op_seqz = 279, 311ea103259SMichael Clark rv_op_snez = 280, 312ea103259SMichael Clark rv_op_sltz = 281, 313ea103259SMichael Clark rv_op_sgtz = 282, 314ea103259SMichael Clark rv_op_fmv_s = 283, 315ea103259SMichael Clark rv_op_fabs_s = 284, 316ea103259SMichael Clark rv_op_fneg_s = 285, 317ea103259SMichael Clark rv_op_fmv_d = 286, 318ea103259SMichael Clark rv_op_fabs_d = 287, 319ea103259SMichael Clark rv_op_fneg_d = 288, 320ea103259SMichael Clark rv_op_fmv_q = 289, 321ea103259SMichael Clark rv_op_fabs_q = 290, 322ea103259SMichael Clark rv_op_fneg_q = 291, 323ea103259SMichael Clark rv_op_beqz = 292, 324ea103259SMichael Clark rv_op_bnez = 293, 325ea103259SMichael Clark rv_op_blez = 294, 326ea103259SMichael Clark rv_op_bgez = 295, 327ea103259SMichael Clark rv_op_bltz = 296, 328ea103259SMichael Clark rv_op_bgtz = 297, 329ea103259SMichael Clark rv_op_ble = 298, 330ea103259SMichael Clark rv_op_bleu = 299, 331ea103259SMichael Clark rv_op_bgt = 300, 332ea103259SMichael Clark rv_op_bgtu = 301, 333ea103259SMichael Clark rv_op_j = 302, 334ea103259SMichael Clark rv_op_ret = 303, 335ea103259SMichael Clark rv_op_jr = 304, 336ea103259SMichael Clark rv_op_rdcycle = 305, 337ea103259SMichael Clark rv_op_rdtime = 306, 338ea103259SMichael Clark rv_op_rdinstret = 307, 339ea103259SMichael Clark rv_op_rdcycleh = 308, 340ea103259SMichael Clark rv_op_rdtimeh = 309, 341ea103259SMichael Clark rv_op_rdinstreth = 310, 342ea103259SMichael Clark rv_op_frcsr = 311, 343ea103259SMichael Clark rv_op_frrm = 312, 344ea103259SMichael Clark rv_op_frflags = 313, 345ea103259SMichael Clark rv_op_fscsr = 314, 346ea103259SMichael Clark rv_op_fsrm = 315, 347ea103259SMichael Clark rv_op_fsflags = 316, 348ea103259SMichael Clark rv_op_fsrmi = 317, 349ea103259SMichael Clark rv_op_fsflagsi = 318, 35002c1b569SPhilipp Tomsich rv_op_bseti = 319, 35102c1b569SPhilipp Tomsich rv_op_bclri = 320, 35202c1b569SPhilipp Tomsich rv_op_binvi = 321, 35302c1b569SPhilipp Tomsich rv_op_bexti = 322, 35402c1b569SPhilipp Tomsich rv_op_rori = 323, 35502c1b569SPhilipp Tomsich rv_op_clz = 324, 35602c1b569SPhilipp Tomsich rv_op_ctz = 325, 35702c1b569SPhilipp Tomsich rv_op_cpop = 326, 35802c1b569SPhilipp Tomsich rv_op_sext_h = 327, 35902c1b569SPhilipp Tomsich rv_op_sext_b = 328, 36002c1b569SPhilipp Tomsich rv_op_xnor = 329, 36102c1b569SPhilipp Tomsich rv_op_orn = 330, 36202c1b569SPhilipp Tomsich rv_op_andn = 331, 36302c1b569SPhilipp Tomsich rv_op_rol = 332, 36402c1b569SPhilipp Tomsich rv_op_ror = 333, 36502c1b569SPhilipp Tomsich rv_op_sh1add = 334, 36602c1b569SPhilipp Tomsich rv_op_sh2add = 335, 36702c1b569SPhilipp Tomsich rv_op_sh3add = 336, 36802c1b569SPhilipp Tomsich rv_op_sh1add_uw = 337, 36902c1b569SPhilipp Tomsich rv_op_sh2add_uw = 338, 37002c1b569SPhilipp Tomsich rv_op_sh3add_uw = 339, 37102c1b569SPhilipp Tomsich rv_op_clmul = 340, 37202c1b569SPhilipp Tomsich rv_op_clmulr = 341, 37302c1b569SPhilipp Tomsich rv_op_clmulh = 342, 37402c1b569SPhilipp Tomsich rv_op_min = 343, 37502c1b569SPhilipp Tomsich rv_op_minu = 344, 37602c1b569SPhilipp Tomsich rv_op_max = 345, 37702c1b569SPhilipp Tomsich rv_op_maxu = 346, 37802c1b569SPhilipp Tomsich rv_op_clzw = 347, 37902c1b569SPhilipp Tomsich rv_op_ctzw = 348, 38002c1b569SPhilipp Tomsich rv_op_cpopw = 349, 38102c1b569SPhilipp Tomsich rv_op_slli_uw = 350, 38202c1b569SPhilipp Tomsich rv_op_add_uw = 351, 38302c1b569SPhilipp Tomsich rv_op_rolw = 352, 38402c1b569SPhilipp Tomsich rv_op_rorw = 353, 38502c1b569SPhilipp Tomsich rv_op_rev8 = 354, 38602c1b569SPhilipp Tomsich rv_op_zext_h = 355, 38702c1b569SPhilipp Tomsich rv_op_roriw = 356, 38802c1b569SPhilipp Tomsich rv_op_orc_b = 357, 38902c1b569SPhilipp Tomsich rv_op_bset = 358, 39002c1b569SPhilipp Tomsich rv_op_bclr = 359, 39102c1b569SPhilipp Tomsich rv_op_binv = 360, 39202c1b569SPhilipp Tomsich rv_op_bext = 361, 3935748c886SWeiwei Li rv_op_aes32esmi = 362, 3945748c886SWeiwei Li rv_op_aes32esi = 363, 3955748c886SWeiwei Li rv_op_aes32dsmi = 364, 3965748c886SWeiwei Li rv_op_aes32dsi = 365, 3975748c886SWeiwei Li rv_op_aes64ks1i = 366, 3985748c886SWeiwei Li rv_op_aes64ks2 = 367, 3995748c886SWeiwei Li rv_op_aes64im = 368, 4005748c886SWeiwei Li rv_op_aes64esm = 369, 4015748c886SWeiwei Li rv_op_aes64es = 370, 4025748c886SWeiwei Li rv_op_aes64dsm = 371, 4035748c886SWeiwei Li rv_op_aes64ds = 372, 4045748c886SWeiwei Li rv_op_sha256sig0 = 373, 4055748c886SWeiwei Li rv_op_sha256sig1 = 374, 4065748c886SWeiwei Li rv_op_sha256sum0 = 375, 4075748c886SWeiwei Li rv_op_sha256sum1 = 376, 4085748c886SWeiwei Li rv_op_sha512sig0 = 377, 4095748c886SWeiwei Li rv_op_sha512sig1 = 378, 4105748c886SWeiwei Li rv_op_sha512sum0 = 379, 4115748c886SWeiwei Li rv_op_sha512sum1 = 380, 4125748c886SWeiwei Li rv_op_sha512sum0r = 381, 4135748c886SWeiwei Li rv_op_sha512sum1r = 382, 4145748c886SWeiwei Li rv_op_sha512sig0l = 383, 4155748c886SWeiwei Li rv_op_sha512sig0h = 384, 4165748c886SWeiwei Li rv_op_sha512sig1l = 385, 4175748c886SWeiwei Li rv_op_sha512sig1h = 386, 4185748c886SWeiwei Li rv_op_sm3p0 = 387, 4195748c886SWeiwei Li rv_op_sm3p1 = 388, 4205748c886SWeiwei Li rv_op_sm4ed = 389, 4215748c886SWeiwei Li rv_op_sm4ks = 390, 4225748c886SWeiwei Li rv_op_brev8 = 391, 4235748c886SWeiwei Li rv_op_pack = 392, 4245748c886SWeiwei Li rv_op_packh = 393, 4255748c886SWeiwei Li rv_op_packw = 394, 4265748c886SWeiwei Li rv_op_unzip = 395, 4275748c886SWeiwei Li rv_op_zip = 396, 4285748c886SWeiwei Li rv_op_xperm4 = 397, 4295748c886SWeiwei Li rv_op_xperm8 = 398, 43007f4964dSYang Liu rv_op_vle8_v = 399, 43107f4964dSYang Liu rv_op_vle16_v = 400, 43207f4964dSYang Liu rv_op_vle32_v = 401, 43307f4964dSYang Liu rv_op_vle64_v = 402, 43407f4964dSYang Liu rv_op_vse8_v = 403, 43507f4964dSYang Liu rv_op_vse16_v = 404, 43607f4964dSYang Liu rv_op_vse32_v = 405, 43707f4964dSYang Liu rv_op_vse64_v = 406, 43807f4964dSYang Liu rv_op_vlm_v = 407, 43907f4964dSYang Liu rv_op_vsm_v = 408, 44007f4964dSYang Liu rv_op_vlse8_v = 409, 44107f4964dSYang Liu rv_op_vlse16_v = 410, 44207f4964dSYang Liu rv_op_vlse32_v = 411, 44307f4964dSYang Liu rv_op_vlse64_v = 412, 44407f4964dSYang Liu rv_op_vsse8_v = 413, 44507f4964dSYang Liu rv_op_vsse16_v = 414, 44607f4964dSYang Liu rv_op_vsse32_v = 415, 44707f4964dSYang Liu rv_op_vsse64_v = 416, 44807f4964dSYang Liu rv_op_vluxei8_v = 417, 44907f4964dSYang Liu rv_op_vluxei16_v = 418, 45007f4964dSYang Liu rv_op_vluxei32_v = 419, 45107f4964dSYang Liu rv_op_vluxei64_v = 420, 45207f4964dSYang Liu rv_op_vloxei8_v = 421, 45307f4964dSYang Liu rv_op_vloxei16_v = 422, 45407f4964dSYang Liu rv_op_vloxei32_v = 423, 45507f4964dSYang Liu rv_op_vloxei64_v = 424, 45607f4964dSYang Liu rv_op_vsuxei8_v = 425, 45707f4964dSYang Liu rv_op_vsuxei16_v = 426, 45807f4964dSYang Liu rv_op_vsuxei32_v = 427, 45907f4964dSYang Liu rv_op_vsuxei64_v = 428, 46007f4964dSYang Liu rv_op_vsoxei8_v = 429, 46107f4964dSYang Liu rv_op_vsoxei16_v = 430, 46207f4964dSYang Liu rv_op_vsoxei32_v = 431, 46307f4964dSYang Liu rv_op_vsoxei64_v = 432, 46407f4964dSYang Liu rv_op_vle8ff_v = 433, 46507f4964dSYang Liu rv_op_vle16ff_v = 434, 46607f4964dSYang Liu rv_op_vle32ff_v = 435, 46707f4964dSYang Liu rv_op_vle64ff_v = 436, 46807f4964dSYang Liu rv_op_vl1re8_v = 437, 46907f4964dSYang Liu rv_op_vl1re16_v = 438, 47007f4964dSYang Liu rv_op_vl1re32_v = 439, 47107f4964dSYang Liu rv_op_vl1re64_v = 440, 47207f4964dSYang Liu rv_op_vl2re8_v = 441, 47307f4964dSYang Liu rv_op_vl2re16_v = 442, 47407f4964dSYang Liu rv_op_vl2re32_v = 443, 47507f4964dSYang Liu rv_op_vl2re64_v = 444, 47607f4964dSYang Liu rv_op_vl4re8_v = 445, 47707f4964dSYang Liu rv_op_vl4re16_v = 446, 47807f4964dSYang Liu rv_op_vl4re32_v = 447, 47907f4964dSYang Liu rv_op_vl4re64_v = 448, 48007f4964dSYang Liu rv_op_vl8re8_v = 449, 48107f4964dSYang Liu rv_op_vl8re16_v = 450, 48207f4964dSYang Liu rv_op_vl8re32_v = 451, 48307f4964dSYang Liu rv_op_vl8re64_v = 452, 48407f4964dSYang Liu rv_op_vs1r_v = 453, 48507f4964dSYang Liu rv_op_vs2r_v = 454, 48607f4964dSYang Liu rv_op_vs4r_v = 455, 48707f4964dSYang Liu rv_op_vs8r_v = 456, 48807f4964dSYang Liu rv_op_vadd_vv = 457, 48907f4964dSYang Liu rv_op_vadd_vx = 458, 49007f4964dSYang Liu rv_op_vadd_vi = 459, 49107f4964dSYang Liu rv_op_vsub_vv = 460, 49207f4964dSYang Liu rv_op_vsub_vx = 461, 49307f4964dSYang Liu rv_op_vrsub_vx = 462, 49407f4964dSYang Liu rv_op_vrsub_vi = 463, 49507f4964dSYang Liu rv_op_vwaddu_vv = 464, 49607f4964dSYang Liu rv_op_vwaddu_vx = 465, 49707f4964dSYang Liu rv_op_vwadd_vv = 466, 49807f4964dSYang Liu rv_op_vwadd_vx = 467, 49907f4964dSYang Liu rv_op_vwsubu_vv = 468, 50007f4964dSYang Liu rv_op_vwsubu_vx = 469, 50107f4964dSYang Liu rv_op_vwsub_vv = 470, 50207f4964dSYang Liu rv_op_vwsub_vx = 471, 50307f4964dSYang Liu rv_op_vwaddu_wv = 472, 50407f4964dSYang Liu rv_op_vwaddu_wx = 473, 50507f4964dSYang Liu rv_op_vwadd_wv = 474, 50607f4964dSYang Liu rv_op_vwadd_wx = 475, 50707f4964dSYang Liu rv_op_vwsubu_wv = 476, 50807f4964dSYang Liu rv_op_vwsubu_wx = 477, 50907f4964dSYang Liu rv_op_vwsub_wv = 478, 51007f4964dSYang Liu rv_op_vwsub_wx = 479, 51107f4964dSYang Liu rv_op_vadc_vvm = 480, 51207f4964dSYang Liu rv_op_vadc_vxm = 481, 51307f4964dSYang Liu rv_op_vadc_vim = 482, 51407f4964dSYang Liu rv_op_vmadc_vvm = 483, 51507f4964dSYang Liu rv_op_vmadc_vxm = 484, 51607f4964dSYang Liu rv_op_vmadc_vim = 485, 51707f4964dSYang Liu rv_op_vsbc_vvm = 486, 51807f4964dSYang Liu rv_op_vsbc_vxm = 487, 51907f4964dSYang Liu rv_op_vmsbc_vvm = 488, 52007f4964dSYang Liu rv_op_vmsbc_vxm = 489, 52107f4964dSYang Liu rv_op_vand_vv = 490, 52207f4964dSYang Liu rv_op_vand_vx = 491, 52307f4964dSYang Liu rv_op_vand_vi = 492, 52407f4964dSYang Liu rv_op_vor_vv = 493, 52507f4964dSYang Liu rv_op_vor_vx = 494, 52607f4964dSYang Liu rv_op_vor_vi = 495, 52707f4964dSYang Liu rv_op_vxor_vv = 496, 52807f4964dSYang Liu rv_op_vxor_vx = 497, 52907f4964dSYang Liu rv_op_vxor_vi = 498, 53007f4964dSYang Liu rv_op_vsll_vv = 499, 53107f4964dSYang Liu rv_op_vsll_vx = 500, 53207f4964dSYang Liu rv_op_vsll_vi = 501, 53307f4964dSYang Liu rv_op_vsrl_vv = 502, 53407f4964dSYang Liu rv_op_vsrl_vx = 503, 53507f4964dSYang Liu rv_op_vsrl_vi = 504, 53607f4964dSYang Liu rv_op_vsra_vv = 505, 53707f4964dSYang Liu rv_op_vsra_vx = 506, 53807f4964dSYang Liu rv_op_vsra_vi = 507, 53907f4964dSYang Liu rv_op_vnsrl_wv = 508, 54007f4964dSYang Liu rv_op_vnsrl_wx = 509, 54107f4964dSYang Liu rv_op_vnsrl_wi = 510, 54207f4964dSYang Liu rv_op_vnsra_wv = 511, 54307f4964dSYang Liu rv_op_vnsra_wx = 512, 54407f4964dSYang Liu rv_op_vnsra_wi = 513, 54507f4964dSYang Liu rv_op_vmseq_vv = 514, 54607f4964dSYang Liu rv_op_vmseq_vx = 515, 54707f4964dSYang Liu rv_op_vmseq_vi = 516, 54807f4964dSYang Liu rv_op_vmsne_vv = 517, 54907f4964dSYang Liu rv_op_vmsne_vx = 518, 55007f4964dSYang Liu rv_op_vmsne_vi = 519, 55107f4964dSYang Liu rv_op_vmsltu_vv = 520, 55207f4964dSYang Liu rv_op_vmsltu_vx = 521, 55307f4964dSYang Liu rv_op_vmslt_vv = 522, 55407f4964dSYang Liu rv_op_vmslt_vx = 523, 55507f4964dSYang Liu rv_op_vmsleu_vv = 524, 55607f4964dSYang Liu rv_op_vmsleu_vx = 525, 55707f4964dSYang Liu rv_op_vmsleu_vi = 526, 55807f4964dSYang Liu rv_op_vmsle_vv = 527, 55907f4964dSYang Liu rv_op_vmsle_vx = 528, 56007f4964dSYang Liu rv_op_vmsle_vi = 529, 56107f4964dSYang Liu rv_op_vmsgtu_vx = 530, 56207f4964dSYang Liu rv_op_vmsgtu_vi = 531, 56307f4964dSYang Liu rv_op_vmsgt_vx = 532, 56407f4964dSYang Liu rv_op_vmsgt_vi = 533, 56507f4964dSYang Liu rv_op_vminu_vv = 534, 56607f4964dSYang Liu rv_op_vminu_vx = 535, 56707f4964dSYang Liu rv_op_vmin_vv = 536, 56807f4964dSYang Liu rv_op_vmin_vx = 537, 56907f4964dSYang Liu rv_op_vmaxu_vv = 538, 57007f4964dSYang Liu rv_op_vmaxu_vx = 539, 57107f4964dSYang Liu rv_op_vmax_vv = 540, 57207f4964dSYang Liu rv_op_vmax_vx = 541, 57307f4964dSYang Liu rv_op_vmul_vv = 542, 57407f4964dSYang Liu rv_op_vmul_vx = 543, 57507f4964dSYang Liu rv_op_vmulh_vv = 544, 57607f4964dSYang Liu rv_op_vmulh_vx = 545, 57707f4964dSYang Liu rv_op_vmulhu_vv = 546, 57807f4964dSYang Liu rv_op_vmulhu_vx = 547, 57907f4964dSYang Liu rv_op_vmulhsu_vv = 548, 58007f4964dSYang Liu rv_op_vmulhsu_vx = 549, 58107f4964dSYang Liu rv_op_vdivu_vv = 550, 58207f4964dSYang Liu rv_op_vdivu_vx = 551, 58307f4964dSYang Liu rv_op_vdiv_vv = 552, 58407f4964dSYang Liu rv_op_vdiv_vx = 553, 58507f4964dSYang Liu rv_op_vremu_vv = 554, 58607f4964dSYang Liu rv_op_vremu_vx = 555, 58707f4964dSYang Liu rv_op_vrem_vv = 556, 58807f4964dSYang Liu rv_op_vrem_vx = 557, 58907f4964dSYang Liu rv_op_vwmulu_vv = 558, 59007f4964dSYang Liu rv_op_vwmulu_vx = 559, 59107f4964dSYang Liu rv_op_vwmulsu_vv = 560, 59207f4964dSYang Liu rv_op_vwmulsu_vx = 561, 59307f4964dSYang Liu rv_op_vwmul_vv = 562, 59407f4964dSYang Liu rv_op_vwmul_vx = 563, 59507f4964dSYang Liu rv_op_vmacc_vv = 564, 59607f4964dSYang Liu rv_op_vmacc_vx = 565, 59707f4964dSYang Liu rv_op_vnmsac_vv = 566, 59807f4964dSYang Liu rv_op_vnmsac_vx = 567, 59907f4964dSYang Liu rv_op_vmadd_vv = 568, 60007f4964dSYang Liu rv_op_vmadd_vx = 569, 60107f4964dSYang Liu rv_op_vnmsub_vv = 570, 60207f4964dSYang Liu rv_op_vnmsub_vx = 571, 60307f4964dSYang Liu rv_op_vwmaccu_vv = 572, 60407f4964dSYang Liu rv_op_vwmaccu_vx = 573, 60507f4964dSYang Liu rv_op_vwmacc_vv = 574, 60607f4964dSYang Liu rv_op_vwmacc_vx = 575, 60707f4964dSYang Liu rv_op_vwmaccsu_vv = 576, 60807f4964dSYang Liu rv_op_vwmaccsu_vx = 577, 60907f4964dSYang Liu rv_op_vwmaccus_vx = 578, 61007f4964dSYang Liu rv_op_vmv_v_v = 579, 61107f4964dSYang Liu rv_op_vmv_v_x = 580, 61207f4964dSYang Liu rv_op_vmv_v_i = 581, 61307f4964dSYang Liu rv_op_vmerge_vvm = 582, 61407f4964dSYang Liu rv_op_vmerge_vxm = 583, 61507f4964dSYang Liu rv_op_vmerge_vim = 584, 61607f4964dSYang Liu rv_op_vsaddu_vv = 585, 61707f4964dSYang Liu rv_op_vsaddu_vx = 586, 61807f4964dSYang Liu rv_op_vsaddu_vi = 587, 61907f4964dSYang Liu rv_op_vsadd_vv = 588, 62007f4964dSYang Liu rv_op_vsadd_vx = 589, 62107f4964dSYang Liu rv_op_vsadd_vi = 590, 62207f4964dSYang Liu rv_op_vssubu_vv = 591, 62307f4964dSYang Liu rv_op_vssubu_vx = 592, 62407f4964dSYang Liu rv_op_vssub_vv = 593, 62507f4964dSYang Liu rv_op_vssub_vx = 594, 62607f4964dSYang Liu rv_op_vaadd_vv = 595, 62707f4964dSYang Liu rv_op_vaadd_vx = 596, 62807f4964dSYang Liu rv_op_vaaddu_vv = 597, 62907f4964dSYang Liu rv_op_vaaddu_vx = 598, 63007f4964dSYang Liu rv_op_vasub_vv = 599, 63107f4964dSYang Liu rv_op_vasub_vx = 600, 63207f4964dSYang Liu rv_op_vasubu_vv = 601, 63307f4964dSYang Liu rv_op_vasubu_vx = 602, 63407f4964dSYang Liu rv_op_vsmul_vv = 603, 63507f4964dSYang Liu rv_op_vsmul_vx = 604, 63607f4964dSYang Liu rv_op_vssrl_vv = 605, 63707f4964dSYang Liu rv_op_vssrl_vx = 606, 63807f4964dSYang Liu rv_op_vssrl_vi = 607, 63907f4964dSYang Liu rv_op_vssra_vv = 608, 64007f4964dSYang Liu rv_op_vssra_vx = 609, 64107f4964dSYang Liu rv_op_vssra_vi = 610, 64207f4964dSYang Liu rv_op_vnclipu_wv = 611, 64307f4964dSYang Liu rv_op_vnclipu_wx = 612, 64407f4964dSYang Liu rv_op_vnclipu_wi = 613, 64507f4964dSYang Liu rv_op_vnclip_wv = 614, 64607f4964dSYang Liu rv_op_vnclip_wx = 615, 64707f4964dSYang Liu rv_op_vnclip_wi = 616, 64807f4964dSYang Liu rv_op_vfadd_vv = 617, 64907f4964dSYang Liu rv_op_vfadd_vf = 618, 65007f4964dSYang Liu rv_op_vfsub_vv = 619, 65107f4964dSYang Liu rv_op_vfsub_vf = 620, 65207f4964dSYang Liu rv_op_vfrsub_vf = 621, 65307f4964dSYang Liu rv_op_vfwadd_vv = 622, 65407f4964dSYang Liu rv_op_vfwadd_vf = 623, 65507f4964dSYang Liu rv_op_vfwadd_wv = 624, 65607f4964dSYang Liu rv_op_vfwadd_wf = 625, 65707f4964dSYang Liu rv_op_vfwsub_vv = 626, 65807f4964dSYang Liu rv_op_vfwsub_vf = 627, 65907f4964dSYang Liu rv_op_vfwsub_wv = 628, 66007f4964dSYang Liu rv_op_vfwsub_wf = 629, 66107f4964dSYang Liu rv_op_vfmul_vv = 630, 66207f4964dSYang Liu rv_op_vfmul_vf = 631, 66307f4964dSYang Liu rv_op_vfdiv_vv = 632, 66407f4964dSYang Liu rv_op_vfdiv_vf = 633, 66507f4964dSYang Liu rv_op_vfrdiv_vf = 634, 66607f4964dSYang Liu rv_op_vfwmul_vv = 635, 66707f4964dSYang Liu rv_op_vfwmul_vf = 636, 66807f4964dSYang Liu rv_op_vfmacc_vv = 637, 66907f4964dSYang Liu rv_op_vfmacc_vf = 638, 67007f4964dSYang Liu rv_op_vfnmacc_vv = 639, 67107f4964dSYang Liu rv_op_vfnmacc_vf = 640, 67207f4964dSYang Liu rv_op_vfmsac_vv = 641, 67307f4964dSYang Liu rv_op_vfmsac_vf = 642, 67407f4964dSYang Liu rv_op_vfnmsac_vv = 643, 67507f4964dSYang Liu rv_op_vfnmsac_vf = 644, 67607f4964dSYang Liu rv_op_vfmadd_vv = 645, 67707f4964dSYang Liu rv_op_vfmadd_vf = 646, 67807f4964dSYang Liu rv_op_vfnmadd_vv = 647, 67907f4964dSYang Liu rv_op_vfnmadd_vf = 648, 68007f4964dSYang Liu rv_op_vfmsub_vv = 649, 68107f4964dSYang Liu rv_op_vfmsub_vf = 650, 68207f4964dSYang Liu rv_op_vfnmsub_vv = 651, 68307f4964dSYang Liu rv_op_vfnmsub_vf = 652, 68407f4964dSYang Liu rv_op_vfwmacc_vv = 653, 68507f4964dSYang Liu rv_op_vfwmacc_vf = 654, 68607f4964dSYang Liu rv_op_vfwnmacc_vv = 655, 68707f4964dSYang Liu rv_op_vfwnmacc_vf = 656, 68807f4964dSYang Liu rv_op_vfwmsac_vv = 657, 68907f4964dSYang Liu rv_op_vfwmsac_vf = 658, 69007f4964dSYang Liu rv_op_vfwnmsac_vv = 659, 69107f4964dSYang Liu rv_op_vfwnmsac_vf = 660, 69207f4964dSYang Liu rv_op_vfsqrt_v = 661, 69307f4964dSYang Liu rv_op_vfrsqrt7_v = 662, 69407f4964dSYang Liu rv_op_vfrec7_v = 663, 69507f4964dSYang Liu rv_op_vfmin_vv = 664, 69607f4964dSYang Liu rv_op_vfmin_vf = 665, 69707f4964dSYang Liu rv_op_vfmax_vv = 666, 69807f4964dSYang Liu rv_op_vfmax_vf = 667, 69907f4964dSYang Liu rv_op_vfsgnj_vv = 668, 70007f4964dSYang Liu rv_op_vfsgnj_vf = 669, 70107f4964dSYang Liu rv_op_vfsgnjn_vv = 670, 70207f4964dSYang Liu rv_op_vfsgnjn_vf = 671, 70307f4964dSYang Liu rv_op_vfsgnjx_vv = 672, 70407f4964dSYang Liu rv_op_vfsgnjx_vf = 673, 70507f4964dSYang Liu rv_op_vfslide1up_vf = 674, 70607f4964dSYang Liu rv_op_vfslide1down_vf = 675, 70707f4964dSYang Liu rv_op_vmfeq_vv = 676, 70807f4964dSYang Liu rv_op_vmfeq_vf = 677, 70907f4964dSYang Liu rv_op_vmfne_vv = 678, 71007f4964dSYang Liu rv_op_vmfne_vf = 679, 71107f4964dSYang Liu rv_op_vmflt_vv = 680, 71207f4964dSYang Liu rv_op_vmflt_vf = 681, 71307f4964dSYang Liu rv_op_vmfle_vv = 682, 71407f4964dSYang Liu rv_op_vmfle_vf = 683, 71507f4964dSYang Liu rv_op_vmfgt_vf = 684, 71607f4964dSYang Liu rv_op_vmfge_vf = 685, 71707f4964dSYang Liu rv_op_vfclass_v = 686, 71807f4964dSYang Liu rv_op_vfmerge_vfm = 687, 71907f4964dSYang Liu rv_op_vfmv_v_f = 688, 72007f4964dSYang Liu rv_op_vfcvt_xu_f_v = 689, 72107f4964dSYang Liu rv_op_vfcvt_x_f_v = 690, 72207f4964dSYang Liu rv_op_vfcvt_f_xu_v = 691, 72307f4964dSYang Liu rv_op_vfcvt_f_x_v = 692, 72407f4964dSYang Liu rv_op_vfcvt_rtz_xu_f_v = 693, 72507f4964dSYang Liu rv_op_vfcvt_rtz_x_f_v = 694, 72607f4964dSYang Liu rv_op_vfwcvt_xu_f_v = 695, 72707f4964dSYang Liu rv_op_vfwcvt_x_f_v = 696, 72807f4964dSYang Liu rv_op_vfwcvt_f_xu_v = 697, 72907f4964dSYang Liu rv_op_vfwcvt_f_x_v = 698, 73007f4964dSYang Liu rv_op_vfwcvt_f_f_v = 699, 73107f4964dSYang Liu rv_op_vfwcvt_rtz_xu_f_v = 700, 73207f4964dSYang Liu rv_op_vfwcvt_rtz_x_f_v = 701, 73307f4964dSYang Liu rv_op_vfncvt_xu_f_w = 702, 73407f4964dSYang Liu rv_op_vfncvt_x_f_w = 703, 73507f4964dSYang Liu rv_op_vfncvt_f_xu_w = 704, 73607f4964dSYang Liu rv_op_vfncvt_f_x_w = 705, 73707f4964dSYang Liu rv_op_vfncvt_f_f_w = 706, 73807f4964dSYang Liu rv_op_vfncvt_rod_f_f_w = 707, 73907f4964dSYang Liu rv_op_vfncvt_rtz_xu_f_w = 708, 74007f4964dSYang Liu rv_op_vfncvt_rtz_x_f_w = 709, 74107f4964dSYang Liu rv_op_vredsum_vs = 710, 74207f4964dSYang Liu rv_op_vredand_vs = 711, 74307f4964dSYang Liu rv_op_vredor_vs = 712, 74407f4964dSYang Liu rv_op_vredxor_vs = 713, 74507f4964dSYang Liu rv_op_vredminu_vs = 714, 74607f4964dSYang Liu rv_op_vredmin_vs = 715, 74707f4964dSYang Liu rv_op_vredmaxu_vs = 716, 74807f4964dSYang Liu rv_op_vredmax_vs = 717, 74907f4964dSYang Liu rv_op_vwredsumu_vs = 718, 75007f4964dSYang Liu rv_op_vwredsum_vs = 719, 75107f4964dSYang Liu rv_op_vfredusum_vs = 720, 75207f4964dSYang Liu rv_op_vfredosum_vs = 721, 75307f4964dSYang Liu rv_op_vfredmin_vs = 722, 75407f4964dSYang Liu rv_op_vfredmax_vs = 723, 75507f4964dSYang Liu rv_op_vfwredusum_vs = 724, 75607f4964dSYang Liu rv_op_vfwredosum_vs = 725, 75707f4964dSYang Liu rv_op_vmand_mm = 726, 75807f4964dSYang Liu rv_op_vmnand_mm = 727, 75907f4964dSYang Liu rv_op_vmandn_mm = 728, 76007f4964dSYang Liu rv_op_vmxor_mm = 729, 76107f4964dSYang Liu rv_op_vmor_mm = 730, 76207f4964dSYang Liu rv_op_vmnor_mm = 731, 76307f4964dSYang Liu rv_op_vmorn_mm = 732, 76407f4964dSYang Liu rv_op_vmxnor_mm = 733, 76507f4964dSYang Liu rv_op_vcpop_m = 734, 76607f4964dSYang Liu rv_op_vfirst_m = 735, 76707f4964dSYang Liu rv_op_vmsbf_m = 736, 76807f4964dSYang Liu rv_op_vmsif_m = 737, 76907f4964dSYang Liu rv_op_vmsof_m = 738, 77007f4964dSYang Liu rv_op_viota_m = 739, 77107f4964dSYang Liu rv_op_vid_v = 740, 77207f4964dSYang Liu rv_op_vmv_x_s = 741, 77307f4964dSYang Liu rv_op_vmv_s_x = 742, 77407f4964dSYang Liu rv_op_vfmv_f_s = 743, 77507f4964dSYang Liu rv_op_vfmv_s_f = 744, 77607f4964dSYang Liu rv_op_vslideup_vx = 745, 77707f4964dSYang Liu rv_op_vslideup_vi = 746, 77807f4964dSYang Liu rv_op_vslide1up_vx = 747, 77907f4964dSYang Liu rv_op_vslidedown_vx = 748, 78007f4964dSYang Liu rv_op_vslidedown_vi = 749, 78107f4964dSYang Liu rv_op_vslide1down_vx = 750, 78207f4964dSYang Liu rv_op_vrgather_vv = 751, 78307f4964dSYang Liu rv_op_vrgatherei16_vv = 752, 78407f4964dSYang Liu rv_op_vrgather_vx = 753, 78507f4964dSYang Liu rv_op_vrgather_vi = 754, 78607f4964dSYang Liu rv_op_vcompress_vm = 755, 78707f4964dSYang Liu rv_op_vmv1r_v = 756, 78807f4964dSYang Liu rv_op_vmv2r_v = 757, 78907f4964dSYang Liu rv_op_vmv4r_v = 758, 79007f4964dSYang Liu rv_op_vmv8r_v = 759, 79107f4964dSYang Liu rv_op_vzext_vf2 = 760, 79207f4964dSYang Liu rv_op_vzext_vf4 = 761, 79307f4964dSYang Liu rv_op_vzext_vf8 = 762, 79407f4964dSYang Liu rv_op_vsext_vf2 = 763, 79507f4964dSYang Liu rv_op_vsext_vf4 = 764, 79607f4964dSYang Liu rv_op_vsext_vf8 = 765, 79707f4964dSYang Liu rv_op_vsetvli = 766, 79807f4964dSYang Liu rv_op_vsetivli = 767, 79907f4964dSYang Liu rv_op_vsetvl = 768, 8002c71d02eSWeiwei Li rv_op_c_zext_b = 769, 8012c71d02eSWeiwei Li rv_op_c_sext_b = 770, 8022c71d02eSWeiwei Li rv_op_c_zext_h = 771, 8032c71d02eSWeiwei Li rv_op_c_sext_h = 772, 8042c71d02eSWeiwei Li rv_op_c_zext_w = 773, 8052c71d02eSWeiwei Li rv_op_c_not = 774, 8062c71d02eSWeiwei Li rv_op_c_mul = 775, 8072c71d02eSWeiwei Li rv_op_c_lbu = 776, 8082c71d02eSWeiwei Li rv_op_c_lhu = 777, 8092c71d02eSWeiwei Li rv_op_c_lh = 778, 8102c71d02eSWeiwei Li rv_op_c_sb = 779, 8112c71d02eSWeiwei Li rv_op_c_sh = 780, 8122c71d02eSWeiwei Li rv_op_cm_push = 781, 8132c71d02eSWeiwei Li rv_op_cm_pop = 782, 8142c71d02eSWeiwei Li rv_op_cm_popret = 783, 8152c71d02eSWeiwei Li rv_op_cm_popretz = 784, 8162c71d02eSWeiwei Li rv_op_cm_mva01s = 785, 8172c71d02eSWeiwei Li rv_op_cm_mvsa01 = 786, 8182c71d02eSWeiwei Li rv_op_cm_jt = 787, 8192c71d02eSWeiwei Li rv_op_cm_jalt = 788, 820d397be9aSRichard Henderson rv_op_czero_eqz = 789, 821d397be9aSRichard Henderson rv_op_czero_nez = 790, 82232b2d75bSWeiwei Li rv_op_fcvt_bf16_s = 791, 82332b2d75bSWeiwei Li rv_op_fcvt_s_bf16 = 792, 82432b2d75bSWeiwei Li rv_op_vfncvtbf16_f_f_w = 793, 82532b2d75bSWeiwei Li rv_op_vfwcvtbf16_f_f_v = 794, 82632b2d75bSWeiwei Li rv_op_vfwmaccbf16_vv = 795, 82732b2d75bSWeiwei Li rv_op_vfwmaccbf16_vf = 796, 82832b2d75bSWeiwei Li rv_op_flh = 797, 82932b2d75bSWeiwei Li rv_op_fsh = 798, 83032b2d75bSWeiwei Li rv_op_fmv_h_x = 799, 83132b2d75bSWeiwei Li rv_op_fmv_x_h = 800, 832*a47842d1SChristoph Müllner rv_op_fli_s = 801, 833*a47842d1SChristoph Müllner rv_op_fli_d = 802, 834*a47842d1SChristoph Müllner rv_op_fli_q = 803, 835*a47842d1SChristoph Müllner rv_op_fli_h = 804, 836*a47842d1SChristoph Müllner rv_op_fminm_s = 805, 837*a47842d1SChristoph Müllner rv_op_fmaxm_s = 806, 838*a47842d1SChristoph Müllner rv_op_fminm_d = 807, 839*a47842d1SChristoph Müllner rv_op_fmaxm_d = 808, 840*a47842d1SChristoph Müllner rv_op_fminm_q = 809, 841*a47842d1SChristoph Müllner rv_op_fmaxm_q = 810, 842*a47842d1SChristoph Müllner rv_op_fminm_h = 811, 843*a47842d1SChristoph Müllner rv_op_fmaxm_h = 812, 844*a47842d1SChristoph Müllner rv_op_fround_s = 813, 845*a47842d1SChristoph Müllner rv_op_froundnx_s = 814, 846*a47842d1SChristoph Müllner rv_op_fround_d = 815, 847*a47842d1SChristoph Müllner rv_op_froundnx_d = 816, 848*a47842d1SChristoph Müllner rv_op_fround_q = 817, 849*a47842d1SChristoph Müllner rv_op_froundnx_q = 818, 850*a47842d1SChristoph Müllner rv_op_fround_h = 819, 851*a47842d1SChristoph Müllner rv_op_froundnx_h = 820, 852*a47842d1SChristoph Müllner rv_op_fcvtmod_w_d = 821, 853*a47842d1SChristoph Müllner rv_op_fmvh_x_d = 822, 854*a47842d1SChristoph Müllner rv_op_fmvp_d_x = 823, 855*a47842d1SChristoph Müllner rv_op_fmvh_x_q = 824, 856*a47842d1SChristoph Müllner rv_op_fmvp_q_x = 825, 857*a47842d1SChristoph Müllner rv_op_fleq_s = 826, 858*a47842d1SChristoph Müllner rv_op_fltq_s = 827, 859*a47842d1SChristoph Müllner rv_op_fleq_d = 828, 860*a47842d1SChristoph Müllner rv_op_fltq_d = 829, 861*a47842d1SChristoph Müllner rv_op_fleq_q = 830, 862*a47842d1SChristoph Müllner rv_op_fltq_q = 831, 863*a47842d1SChristoph Müllner rv_op_fleq_h = 832, 864*a47842d1SChristoph Müllner rv_op_fltq_h = 833, 865ea103259SMichael Clark } rv_op; 866ea103259SMichael Clark 867ea103259SMichael Clark /* register names */ 868ea103259SMichael Clark 869ea103259SMichael Clark static const char rv_ireg_name_sym[32][5] = { 870ea103259SMichael Clark "zero", "ra", "sp", "gp", "tp", "t0", "t1", "t2", 871ea103259SMichael Clark "s0", "s1", "a0", "a1", "a2", "a3", "a4", "a5", 872ea103259SMichael Clark "a6", "a7", "s2", "s3", "s4", "s5", "s6", "s7", 873ea103259SMichael Clark "s8", "s9", "s10", "s11", "t3", "t4", "t5", "t6", 874ea103259SMichael Clark }; 875ea103259SMichael Clark 876ea103259SMichael Clark static const char rv_freg_name_sym[32][5] = { 877ea103259SMichael Clark "ft0", "ft1", "ft2", "ft3", "ft4", "ft5", "ft6", "ft7", 878ea103259SMichael Clark "fs0", "fs1", "fa0", "fa1", "fa2", "fa3", "fa4", "fa5", 879ea103259SMichael Clark "fa6", "fa7", "fs2", "fs3", "fs4", "fs5", "fs6", "fs7", 880ea103259SMichael Clark "fs8", "fs9", "fs10", "fs11", "ft8", "ft9", "ft10", "ft11", 881ea103259SMichael Clark }; 882ea103259SMichael Clark 88307f4964dSYang Liu static const char rv_vreg_name_sym[32][4] = { 88407f4964dSYang Liu "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", 88507f4964dSYang Liu "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", 88607f4964dSYang Liu "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", 88707f4964dSYang Liu "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31" 88807f4964dSYang Liu }; 88907f4964dSYang Liu 890*a47842d1SChristoph Müllner /* The FLI.[HSDQ] numeric constants (0.0 for symbolic constants). 891*a47842d1SChristoph Müllner * The constants use the hex floating-point literal representation 892*a47842d1SChristoph Müllner * that is printed when using the printf %a format specifier, 893*a47842d1SChristoph Müllner * which matches the output that is generated by the disassembler. 894*a47842d1SChristoph Müllner */ 895*a47842d1SChristoph Müllner static const char rv_fli_name_const[32][9] = 896*a47842d1SChristoph Müllner { 897*a47842d1SChristoph Müllner "0x1p+0", "min", "0x1p-16", "0x1p-15", 898*a47842d1SChristoph Müllner "0x1p-8", "0x1p-7", "0x1p-4", "0x1p-3", 899*a47842d1SChristoph Müllner "0x1p-2", "0x1.4p-2", "0x1.8p-2", "0x1.cp-2", 900*a47842d1SChristoph Müllner "0x1p-1", "0x1.4p-1", "0x1.8p-1", "0x1.cp-1", 901*a47842d1SChristoph Müllner "0x1p+0", "0x1.4p+0", "0x1.8p+0", "0x1.cp+0", 902*a47842d1SChristoph Müllner "0x1p+1", "0x1.4p+1", "0x1.8p+1", "0x1p+2", 903*a47842d1SChristoph Müllner "0x1p+3", "0x1p+4", "0x1p+7", "0x1p+8", 904*a47842d1SChristoph Müllner "0x1p+15", "0x1p+16", "inf", "nan" 905*a47842d1SChristoph Müllner }; 906*a47842d1SChristoph Müllner 907ea103259SMichael Clark /* pseudo-instruction constraints */ 908ea103259SMichael Clark 909ea103259SMichael Clark static const rvc_constraint rvcc_jal[] = { rvc_rd_eq_ra, rvc_end }; 91098624d13SWeiwei Li static const rvc_constraint rvcc_jalr[] = { rvc_rd_eq_ra, rvc_imm_eq_zero, 91198624d13SWeiwei Li rvc_end }; 91298624d13SWeiwei Li static const rvc_constraint rvcc_nop[] = { rvc_rd_eq_x0, rvc_rs1_eq_x0, 91398624d13SWeiwei Li rvc_imm_eq_zero, rvc_end }; 914ea103259SMichael Clark static const rvc_constraint rvcc_mv[] = { rvc_imm_eq_zero, rvc_end }; 915ea103259SMichael Clark static const rvc_constraint rvcc_not[] = { rvc_imm_eq_n1, rvc_end }; 916ea103259SMichael Clark static const rvc_constraint rvcc_neg[] = { rvc_rs1_eq_x0, rvc_end }; 917ea103259SMichael Clark static const rvc_constraint rvcc_negw[] = { rvc_rs1_eq_x0, rvc_end }; 91833b4f859SMichael Clark static const rvc_constraint rvcc_sext_w[] = { rvc_imm_eq_zero, rvc_end }; 919ea103259SMichael Clark static const rvc_constraint rvcc_seqz[] = { rvc_imm_eq_p1, rvc_end }; 920ea103259SMichael Clark static const rvc_constraint rvcc_snez[] = { rvc_rs1_eq_x0, rvc_end }; 921ea103259SMichael Clark static const rvc_constraint rvcc_sltz[] = { rvc_rs2_eq_x0, rvc_end }; 922ea103259SMichael Clark static const rvc_constraint rvcc_sgtz[] = { rvc_rs1_eq_x0, rvc_end }; 923ea103259SMichael Clark static const rvc_constraint rvcc_fmv_s[] = { rvc_rs2_eq_rs1, rvc_end }; 924ea103259SMichael Clark static const rvc_constraint rvcc_fabs_s[] = { rvc_rs2_eq_rs1, rvc_end }; 925ea103259SMichael Clark static const rvc_constraint rvcc_fneg_s[] = { rvc_rs2_eq_rs1, rvc_end }; 926ea103259SMichael Clark static const rvc_constraint rvcc_fmv_d[] = { rvc_rs2_eq_rs1, rvc_end }; 927ea103259SMichael Clark static const rvc_constraint rvcc_fabs_d[] = { rvc_rs2_eq_rs1, rvc_end }; 928ea103259SMichael Clark static const rvc_constraint rvcc_fneg_d[] = { rvc_rs2_eq_rs1, rvc_end }; 929ea103259SMichael Clark static const rvc_constraint rvcc_fmv_q[] = { rvc_rs2_eq_rs1, rvc_end }; 930ea103259SMichael Clark static const rvc_constraint rvcc_fabs_q[] = { rvc_rs2_eq_rs1, rvc_end }; 931ea103259SMichael Clark static const rvc_constraint rvcc_fneg_q[] = { rvc_rs2_eq_rs1, rvc_end }; 932ea103259SMichael Clark static const rvc_constraint rvcc_beqz[] = { rvc_rs2_eq_x0, rvc_end }; 933ea103259SMichael Clark static const rvc_constraint rvcc_bnez[] = { rvc_rs2_eq_x0, rvc_end }; 934ea103259SMichael Clark static const rvc_constraint rvcc_blez[] = { rvc_rs1_eq_x0, rvc_end }; 935ea103259SMichael Clark static const rvc_constraint rvcc_bgez[] = { rvc_rs2_eq_x0, rvc_end }; 936ea103259SMichael Clark static const rvc_constraint rvcc_bltz[] = { rvc_rs2_eq_x0, rvc_end }; 937ea103259SMichael Clark static const rvc_constraint rvcc_bgtz[] = { rvc_rs1_eq_x0, rvc_end }; 938ea103259SMichael Clark static const rvc_constraint rvcc_ble[] = { rvc_end }; 939ea103259SMichael Clark static const rvc_constraint rvcc_bleu[] = { rvc_end }; 940ea103259SMichael Clark static const rvc_constraint rvcc_bgt[] = { rvc_end }; 941ea103259SMichael Clark static const rvc_constraint rvcc_bgtu[] = { rvc_end }; 942ea103259SMichael Clark static const rvc_constraint rvcc_j[] = { rvc_rd_eq_x0, rvc_end }; 94398624d13SWeiwei Li static const rvc_constraint rvcc_ret[] = { rvc_rd_eq_x0, rvc_rs1_eq_ra, 94498624d13SWeiwei Li rvc_end }; 94598624d13SWeiwei Li static const rvc_constraint rvcc_jr[] = { rvc_rd_eq_x0, rvc_imm_eq_zero, 94698624d13SWeiwei Li rvc_end }; 94798624d13SWeiwei Li static const rvc_constraint rvcc_rdcycle[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc00, 94898624d13SWeiwei Li rvc_end }; 94998624d13SWeiwei Li static const rvc_constraint rvcc_rdtime[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc01, 95098624d13SWeiwei Li rvc_end }; 95198624d13SWeiwei Li static const rvc_constraint rvcc_rdinstret[] = { rvc_rs1_eq_x0, 95298624d13SWeiwei Li rvc_csr_eq_0xc02, rvc_end }; 95398624d13SWeiwei Li static const rvc_constraint rvcc_rdcycleh[] = { rvc_rs1_eq_x0, 95498624d13SWeiwei Li rvc_csr_eq_0xc80, rvc_end }; 95598624d13SWeiwei Li static const rvc_constraint rvcc_rdtimeh[] = { rvc_rs1_eq_x0, rvc_csr_eq_0xc81, 95698624d13SWeiwei Li rvc_end }; 9572e3df911SWladimir J. van der Laan static const rvc_constraint rvcc_rdinstreth[] = { rvc_rs1_eq_x0, 9582e3df911SWladimir J. van der Laan rvc_csr_eq_0xc82, rvc_end }; 95998624d13SWeiwei Li static const rvc_constraint rvcc_frcsr[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x003, 96098624d13SWeiwei Li rvc_end }; 96198624d13SWeiwei Li static const rvc_constraint rvcc_frrm[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x002, 96298624d13SWeiwei Li rvc_end }; 96398624d13SWeiwei Li static const rvc_constraint rvcc_frflags[] = { rvc_rs1_eq_x0, rvc_csr_eq_0x001, 96498624d13SWeiwei Li rvc_end }; 965ea103259SMichael Clark static const rvc_constraint rvcc_fscsr[] = { rvc_csr_eq_0x003, rvc_end }; 966ea103259SMichael Clark static const rvc_constraint rvcc_fsrm[] = { rvc_csr_eq_0x002, rvc_end }; 967ea103259SMichael Clark static const rvc_constraint rvcc_fsflags[] = { rvc_csr_eq_0x001, rvc_end }; 968ea103259SMichael Clark static const rvc_constraint rvcc_fsrmi[] = { rvc_csr_eq_0x002, rvc_end }; 969ea103259SMichael Clark static const rvc_constraint rvcc_fsflagsi[] = { rvc_csr_eq_0x001, rvc_end }; 970ea103259SMichael Clark 971ea103259SMichael Clark /* pseudo-instruction metadata */ 972ea103259SMichael Clark 973ea103259SMichael Clark static const rv_comp_data rvcp_jal[] = { 974ea103259SMichael Clark { rv_op_j, rvcc_j }, 975ea103259SMichael Clark { rv_op_jal, rvcc_jal }, 976ea103259SMichael Clark { rv_op_illegal, NULL } 977ea103259SMichael Clark }; 978ea103259SMichael Clark 979ea103259SMichael Clark static const rv_comp_data rvcp_jalr[] = { 980ea103259SMichael Clark { rv_op_ret, rvcc_ret }, 981ea103259SMichael Clark { rv_op_jr, rvcc_jr }, 982ea103259SMichael Clark { rv_op_jalr, rvcc_jalr }, 983ea103259SMichael Clark { rv_op_illegal, NULL } 984ea103259SMichael Clark }; 985ea103259SMichael Clark 986ea103259SMichael Clark static const rv_comp_data rvcp_beq[] = { 987ea103259SMichael Clark { rv_op_beqz, rvcc_beqz }, 988ea103259SMichael Clark { rv_op_illegal, NULL } 989ea103259SMichael Clark }; 990ea103259SMichael Clark 991ea103259SMichael Clark static const rv_comp_data rvcp_bne[] = { 992ea103259SMichael Clark { rv_op_bnez, rvcc_bnez }, 993ea103259SMichael Clark { rv_op_illegal, NULL } 994ea103259SMichael Clark }; 995ea103259SMichael Clark 996ea103259SMichael Clark static const rv_comp_data rvcp_blt[] = { 997ea103259SMichael Clark { rv_op_bltz, rvcc_bltz }, 998ea103259SMichael Clark { rv_op_bgtz, rvcc_bgtz }, 999ea103259SMichael Clark { rv_op_bgt, rvcc_bgt }, 1000ea103259SMichael Clark { rv_op_illegal, NULL } 1001ea103259SMichael Clark }; 1002ea103259SMichael Clark 1003ea103259SMichael Clark static const rv_comp_data rvcp_bge[] = { 1004ea103259SMichael Clark { rv_op_blez, rvcc_blez }, 1005ea103259SMichael Clark { rv_op_bgez, rvcc_bgez }, 1006ea103259SMichael Clark { rv_op_ble, rvcc_ble }, 1007ea103259SMichael Clark { rv_op_illegal, NULL } 1008ea103259SMichael Clark }; 1009ea103259SMichael Clark 1010ea103259SMichael Clark static const rv_comp_data rvcp_bltu[] = { 1011ea103259SMichael Clark { rv_op_bgtu, rvcc_bgtu }, 1012ea103259SMichael Clark { rv_op_illegal, NULL } 1013ea103259SMichael Clark }; 1014ea103259SMichael Clark 1015ea103259SMichael Clark static const rv_comp_data rvcp_bgeu[] = { 1016ea103259SMichael Clark { rv_op_bleu, rvcc_bleu }, 1017ea103259SMichael Clark { rv_op_illegal, NULL } 1018ea103259SMichael Clark }; 1019ea103259SMichael Clark 1020ea103259SMichael Clark static const rv_comp_data rvcp_addi[] = { 1021ea103259SMichael Clark { rv_op_nop, rvcc_nop }, 1022ea103259SMichael Clark { rv_op_mv, rvcc_mv }, 1023ea103259SMichael Clark { rv_op_illegal, NULL } 1024ea103259SMichael Clark }; 1025ea103259SMichael Clark 1026ea103259SMichael Clark static const rv_comp_data rvcp_sltiu[] = { 1027ea103259SMichael Clark { rv_op_seqz, rvcc_seqz }, 1028ea103259SMichael Clark { rv_op_illegal, NULL } 1029ea103259SMichael Clark }; 1030ea103259SMichael Clark 1031ea103259SMichael Clark static const rv_comp_data rvcp_xori[] = { 1032ea103259SMichael Clark { rv_op_not, rvcc_not }, 1033ea103259SMichael Clark { rv_op_illegal, NULL } 1034ea103259SMichael Clark }; 1035ea103259SMichael Clark 1036ea103259SMichael Clark static const rv_comp_data rvcp_sub[] = { 1037ea103259SMichael Clark { rv_op_neg, rvcc_neg }, 1038ea103259SMichael Clark { rv_op_illegal, NULL } 1039ea103259SMichael Clark }; 1040ea103259SMichael Clark 1041ea103259SMichael Clark static const rv_comp_data rvcp_slt[] = { 1042ea103259SMichael Clark { rv_op_sltz, rvcc_sltz }, 1043ea103259SMichael Clark { rv_op_sgtz, rvcc_sgtz }, 1044ea103259SMichael Clark { rv_op_illegal, NULL } 1045ea103259SMichael Clark }; 1046ea103259SMichael Clark 1047ea103259SMichael Clark static const rv_comp_data rvcp_sltu[] = { 1048ea103259SMichael Clark { rv_op_snez, rvcc_snez }, 1049ea103259SMichael Clark { rv_op_illegal, NULL } 1050ea103259SMichael Clark }; 1051ea103259SMichael Clark 1052ea103259SMichael Clark static const rv_comp_data rvcp_addiw[] = { 1053ea103259SMichael Clark { rv_op_sext_w, rvcc_sext_w }, 1054ea103259SMichael Clark { rv_op_illegal, NULL } 1055ea103259SMichael Clark }; 1056ea103259SMichael Clark 1057ea103259SMichael Clark static const rv_comp_data rvcp_subw[] = { 1058ea103259SMichael Clark { rv_op_negw, rvcc_negw }, 1059ea103259SMichael Clark { rv_op_illegal, NULL } 1060ea103259SMichael Clark }; 1061ea103259SMichael Clark 1062ea103259SMichael Clark static const rv_comp_data rvcp_csrrw[] = { 1063ea103259SMichael Clark { rv_op_fscsr, rvcc_fscsr }, 1064ea103259SMichael Clark { rv_op_fsrm, rvcc_fsrm }, 1065ea103259SMichael Clark { rv_op_fsflags, rvcc_fsflags }, 1066ea103259SMichael Clark { rv_op_illegal, NULL } 1067ea103259SMichael Clark }; 1068ea103259SMichael Clark 10695748c886SWeiwei Li 1070ea103259SMichael Clark static const rv_comp_data rvcp_csrrs[] = { 1071ea103259SMichael Clark { rv_op_rdcycle, rvcc_rdcycle }, 1072ea103259SMichael Clark { rv_op_rdtime, rvcc_rdtime }, 1073ea103259SMichael Clark { rv_op_rdinstret, rvcc_rdinstret }, 1074ea103259SMichael Clark { rv_op_rdcycleh, rvcc_rdcycleh }, 1075ea103259SMichael Clark { rv_op_rdtimeh, rvcc_rdtimeh }, 1076ea103259SMichael Clark { rv_op_rdinstreth, rvcc_rdinstreth }, 1077ea103259SMichael Clark { rv_op_frcsr, rvcc_frcsr }, 1078ea103259SMichael Clark { rv_op_frrm, rvcc_frrm }, 1079ea103259SMichael Clark { rv_op_frflags, rvcc_frflags }, 1080ea103259SMichael Clark { rv_op_illegal, NULL } 1081ea103259SMichael Clark }; 1082ea103259SMichael Clark 1083ea103259SMichael Clark static const rv_comp_data rvcp_csrrwi[] = { 1084ea103259SMichael Clark { rv_op_fsrmi, rvcc_fsrmi }, 1085ea103259SMichael Clark { rv_op_fsflagsi, rvcc_fsflagsi }, 1086ea103259SMichael Clark { rv_op_illegal, NULL } 1087ea103259SMichael Clark }; 1088ea103259SMichael Clark 1089ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_s[] = { 1090ea103259SMichael Clark { rv_op_fmv_s, rvcc_fmv_s }, 1091ea103259SMichael Clark { rv_op_illegal, NULL } 1092ea103259SMichael Clark }; 1093ea103259SMichael Clark 1094ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_s[] = { 1095ea103259SMichael Clark { rv_op_fneg_s, rvcc_fneg_s }, 1096ea103259SMichael Clark { rv_op_illegal, NULL } 1097ea103259SMichael Clark }; 1098ea103259SMichael Clark 1099ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_s[] = { 1100ea103259SMichael Clark { rv_op_fabs_s, rvcc_fabs_s }, 1101ea103259SMichael Clark { rv_op_illegal, NULL } 1102ea103259SMichael Clark }; 1103ea103259SMichael Clark 1104ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_d[] = { 1105ea103259SMichael Clark { rv_op_fmv_d, rvcc_fmv_d }, 1106ea103259SMichael Clark { rv_op_illegal, NULL } 1107ea103259SMichael Clark }; 1108ea103259SMichael Clark 1109ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_d[] = { 1110ea103259SMichael Clark { rv_op_fneg_d, rvcc_fneg_d }, 1111ea103259SMichael Clark { rv_op_illegal, NULL } 1112ea103259SMichael Clark }; 1113ea103259SMichael Clark 1114ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_d[] = { 1115ea103259SMichael Clark { rv_op_fabs_d, rvcc_fabs_d }, 1116ea103259SMichael Clark { rv_op_illegal, NULL } 1117ea103259SMichael Clark }; 1118ea103259SMichael Clark 1119ea103259SMichael Clark static const rv_comp_data rvcp_fsgnj_q[] = { 1120ea103259SMichael Clark { rv_op_fmv_q, rvcc_fmv_q }, 1121ea103259SMichael Clark { rv_op_illegal, NULL } 1122ea103259SMichael Clark }; 1123ea103259SMichael Clark 1124ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjn_q[] = { 1125ea103259SMichael Clark { rv_op_fneg_q, rvcc_fneg_q }, 1126ea103259SMichael Clark { rv_op_illegal, NULL } 1127ea103259SMichael Clark }; 1128ea103259SMichael Clark 1129ea103259SMichael Clark static const rv_comp_data rvcp_fsgnjx_q[] = { 1130ea103259SMichael Clark { rv_op_fabs_q, rvcc_fabs_q }, 1131ea103259SMichael Clark { rv_op_illegal, NULL } 1132ea103259SMichael Clark }; 1133ea103259SMichael Clark 1134ea103259SMichael Clark /* instruction metadata */ 1135ea103259SMichael Clark 1136fd7c64f6SChristoph Müllner const rv_opcode_data rvi_opcode_data[] = { 1137ea103259SMichael Clark { "illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 }, 1138ea103259SMichael Clark { "lui", rv_codec_u, rv_fmt_rd_imm, NULL, 0, 0, 0 }, 1139ea103259SMichael Clark { "auipc", rv_codec_u, rv_fmt_rd_offset, NULL, 0, 0, 0 }, 1140ea103259SMichael Clark { "jal", rv_codec_uj, rv_fmt_rd_offset, rvcp_jal, 0, 0, 0 }, 1141ea103259SMichael Clark { "jalr", rv_codec_i, rv_fmt_rd_rs1_offset, rvcp_jalr, 0, 0, 0 }, 1142ea103259SMichael Clark { "beq", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_beq, 0, 0, 0 }, 1143ea103259SMichael Clark { "bne", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bne, 0, 0, 0 }, 1144ea103259SMichael Clark { "blt", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_blt, 0, 0, 0 }, 1145ea103259SMichael Clark { "bge", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bge, 0, 0, 0 }, 1146ea103259SMichael Clark { "bltu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bltu, 0, 0, 0 }, 1147ea103259SMichael Clark { "bgeu", rv_codec_sb, rv_fmt_rs1_rs2_offset, rvcp_bgeu, 0, 0, 0 }, 1148ea103259SMichael Clark { "lb", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1149ea103259SMichael Clark { "lh", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1150ea103259SMichael Clark { "lw", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1151ea103259SMichael Clark { "lbu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1152ea103259SMichael Clark { "lhu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1153ea103259SMichael Clark { "sb", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1154ea103259SMichael Clark { "sh", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1155ea103259SMichael Clark { "sw", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1156ea103259SMichael Clark { "addi", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addi, 0, 0, 0 }, 1157ea103259SMichael Clark { "slti", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1158ea103259SMichael Clark { "sltiu", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_sltiu, 0, 0, 0 }, 1159ea103259SMichael Clark { "xori", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_xori, 0, 0, 0 }, 1160ea103259SMichael Clark { "ori", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1161ea103259SMichael Clark { "andi", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1162ea103259SMichael Clark { "slli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1163ea103259SMichael Clark { "srli", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1164ea103259SMichael Clark { "srai", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1165ea103259SMichael Clark { "add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1166ea103259SMichael Clark { "sub", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sub, 0, 0, 0 }, 1167ea103259SMichael Clark { "sll", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1168ea103259SMichael Clark { "slt", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_slt, 0, 0, 0 }, 1169ea103259SMichael Clark { "sltu", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_sltu, 0, 0, 0 }, 1170ea103259SMichael Clark { "xor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1171ea103259SMichael Clark { "srl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1172ea103259SMichael Clark { "sra", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1173ea103259SMichael Clark { "or", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1174ea103259SMichael Clark { "and", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1175ea103259SMichael Clark { "fence", rv_codec_r_f, rv_fmt_pred_succ, NULL, 0, 0, 0 }, 1176ea103259SMichael Clark { "fence.i", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1177ea103259SMichael Clark { "lwu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1178ea103259SMichael Clark { "ld", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1179ea103259SMichael Clark { "sd", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1180ea103259SMichael Clark { "addiw", rv_codec_i, rv_fmt_rd_rs1_imm, rvcp_addiw, 0, 0, 0 }, 1181ea103259SMichael Clark { "slliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1182ea103259SMichael Clark { "srliw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1183ea103259SMichael Clark { "sraiw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1184ea103259SMichael Clark { "addw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1185ea103259SMichael Clark { "subw", rv_codec_r, rv_fmt_rd_rs1_rs2, rvcp_subw, 0, 0, 0 }, 1186ea103259SMichael Clark { "sllw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1187ea103259SMichael Clark { "srlw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1188ea103259SMichael Clark { "sraw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1189ea103259SMichael Clark { "ldu", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1190ea103259SMichael Clark { "lq", rv_codec_i, rv_fmt_rd_offset_rs1, NULL, 0, 0, 0 }, 1191ea103259SMichael Clark { "sq", rv_codec_s, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 0 }, 1192ea103259SMichael Clark { "addid", rv_codec_i, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1193ea103259SMichael Clark { "sllid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1194ea103259SMichael Clark { "srlid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1195ea103259SMichael Clark { "sraid", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 1196ea103259SMichael Clark { "addd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1197ea103259SMichael Clark { "subd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1198ea103259SMichael Clark { "slld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1199ea103259SMichael Clark { "srld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1200ea103259SMichael Clark { "srad", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1201ea103259SMichael Clark { "mul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1202ea103259SMichael Clark { "mulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1203ea103259SMichael Clark { "mulhsu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1204ea103259SMichael Clark { "mulhu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1205ea103259SMichael Clark { "div", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1206ea103259SMichael Clark { "divu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1207ea103259SMichael Clark { "rem", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1208ea103259SMichael Clark { "remu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1209ea103259SMichael Clark { "mulw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1210ea103259SMichael Clark { "divw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1211ea103259SMichael Clark { "divuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1212ea103259SMichael Clark { "remw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1213ea103259SMichael Clark { "remuw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1214ea103259SMichael Clark { "muld", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1215ea103259SMichael Clark { "divd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1216ea103259SMichael Clark { "divud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1217ea103259SMichael Clark { "remd", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1218ea103259SMichael Clark { "remud", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1219ea103259SMichael Clark { "lr.w", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1220ea103259SMichael Clark { "sc.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1221ea103259SMichael Clark { "amoswap.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1222ea103259SMichael Clark { "amoadd.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1223ea103259SMichael Clark { "amoxor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1224ea103259SMichael Clark { "amoor.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1225ea103259SMichael Clark { "amoand.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1226ea103259SMichael Clark { "amomin.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1227ea103259SMichael Clark { "amomax.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1228ea103259SMichael Clark { "amominu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1229ea103259SMichael Clark { "amomaxu.w", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1230ea103259SMichael Clark { "lr.d", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1231ea103259SMichael Clark { "sc.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1232ea103259SMichael Clark { "amoswap.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1233ea103259SMichael Clark { "amoadd.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1234ea103259SMichael Clark { "amoxor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1235ea103259SMichael Clark { "amoor.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1236ea103259SMichael Clark { "amoand.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1237ea103259SMichael Clark { "amomin.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1238ea103259SMichael Clark { "amomax.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1239ea103259SMichael Clark { "amominu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1240ea103259SMichael Clark { "amomaxu.d", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1241ea103259SMichael Clark { "lr.q", rv_codec_r_l, rv_fmt_aqrl_rd_rs1, NULL, 0, 0, 0 }, 1242ea103259SMichael Clark { "sc.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1243ea103259SMichael Clark { "amoswap.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1244ea103259SMichael Clark { "amoadd.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1245ea103259SMichael Clark { "amoxor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1246ea103259SMichael Clark { "amoor.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1247ea103259SMichael Clark { "amoand.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1248ea103259SMichael Clark { "amomin.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1249ea103259SMichael Clark { "amomax.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1250ea103259SMichael Clark { "amominu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1251ea103259SMichael Clark { "amomaxu.q", rv_codec_r_a, rv_fmt_aqrl_rd_rs2_rs1, NULL, 0, 0, 0 }, 1252ea103259SMichael Clark { "ecall", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1253ea103259SMichael Clark { "ebreak", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1254ea103259SMichael Clark { "uret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1255ea103259SMichael Clark { "sret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1256ea103259SMichael Clark { "hret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1257ea103259SMichael Clark { "mret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1258ea103259SMichael Clark { "dret", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1259ea103259SMichael Clark { "sfence.vm", rv_codec_r, rv_fmt_rs1, NULL, 0, 0, 0 }, 1260ea103259SMichael Clark { "sfence.vma", rv_codec_r, rv_fmt_rs1_rs2, NULL, 0, 0, 0 }, 1261ea103259SMichael Clark { "wfi", rv_codec_none, rv_fmt_none, NULL, 0, 0, 0 }, 1262ea103259SMichael Clark { "csrrw", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrw, 0, 0, 0 }, 1263ea103259SMichael Clark { "csrrs", rv_codec_i_csr, rv_fmt_rd_csr_rs1, rvcp_csrrs, 0, 0, 0 }, 1264ea103259SMichael Clark { "csrrc", rv_codec_i_csr, rv_fmt_rd_csr_rs1, NULL, 0, 0, 0 }, 1265ea103259SMichael Clark { "csrrwi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, rvcp_csrrwi, 0, 0, 0 }, 1266ea103259SMichael Clark { "csrrsi", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1267ea103259SMichael Clark { "csrrci", rv_codec_i_csr, rv_fmt_rd_csr_zimm, NULL, 0, 0, 0 }, 1268ea103259SMichael Clark { "flw", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1269ea103259SMichael Clark { "fsw", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1270ea103259SMichael Clark { "fmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1271ea103259SMichael Clark { "fmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1272ea103259SMichael Clark { "fnmsub.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1273ea103259SMichael Clark { "fnmadd.s", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1274ea103259SMichael Clark { "fadd.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1275ea103259SMichael Clark { "fsub.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1276ea103259SMichael Clark { "fmul.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1277ea103259SMichael Clark { "fdiv.s", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1278ea103259SMichael Clark { "fsgnj.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_s, 0, 0, 0 }, 1279ea103259SMichael Clark { "fsgnjn.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_s, 0, 0, 0 }, 1280ea103259SMichael Clark { "fsgnjx.s", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_s, 0, 0, 0 }, 1281ea103259SMichael Clark { "fmin.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1282ea103259SMichael Clark { "fmax.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1283ea103259SMichael Clark { "fsqrt.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1284ea103259SMichael Clark { "fle.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1285ea103259SMichael Clark { "flt.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1286ea103259SMichael Clark { "feq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1287ea103259SMichael Clark { "fcvt.w.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1288ea103259SMichael Clark { "fcvt.wu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1289ea103259SMichael Clark { "fcvt.s.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1290ea103259SMichael Clark { "fcvt.s.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1291ea103259SMichael Clark { "fmv.x.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1292ea103259SMichael Clark { "fclass.s", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1293ea103259SMichael Clark { "fmv.s.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1294ea103259SMichael Clark { "fcvt.l.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1295ea103259SMichael Clark { "fcvt.lu.s", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1296ea103259SMichael Clark { "fcvt.s.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1297ea103259SMichael Clark { "fcvt.s.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1298ea103259SMichael Clark { "fld", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1299ea103259SMichael Clark { "fsd", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1300ea103259SMichael Clark { "fmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1301ea103259SMichael Clark { "fmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1302ea103259SMichael Clark { "fnmsub.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1303ea103259SMichael Clark { "fnmadd.d", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1304ea103259SMichael Clark { "fadd.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1305ea103259SMichael Clark { "fsub.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1306ea103259SMichael Clark { "fmul.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1307ea103259SMichael Clark { "fdiv.d", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1308ea103259SMichael Clark { "fsgnj.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_d, 0, 0, 0 }, 1309ea103259SMichael Clark { "fsgnjn.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_d, 0, 0, 0 }, 1310ea103259SMichael Clark { "fsgnjx.d", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_d, 0, 0, 0 }, 1311ea103259SMichael Clark { "fmin.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1312ea103259SMichael Clark { "fmax.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1313ea103259SMichael Clark { "fcvt.s.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1314ea103259SMichael Clark { "fcvt.d.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1315ea103259SMichael Clark { "fsqrt.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1316ea103259SMichael Clark { "fle.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1317ea103259SMichael Clark { "flt.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1318ea103259SMichael Clark { "feq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1319ea103259SMichael Clark { "fcvt.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1320ea103259SMichael Clark { "fcvt.wu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1321ea103259SMichael Clark { "fcvt.d.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1322ea103259SMichael Clark { "fcvt.d.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1323ea103259SMichael Clark { "fclass.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1324ea103259SMichael Clark { "fcvt.l.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1325ea103259SMichael Clark { "fcvt.lu.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1326ea103259SMichael Clark { "fmv.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1327ea103259SMichael Clark { "fcvt.d.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1328ea103259SMichael Clark { "fcvt.d.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1329ea103259SMichael Clark { "fmv.d.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1330ea103259SMichael Clark { "flq", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 1331ea103259SMichael Clark { "fsq", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 1332ea103259SMichael Clark { "fmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1333ea103259SMichael Clark { "fmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1334ea103259SMichael Clark { "fnmsub.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1335ea103259SMichael Clark { "fnmadd.q", rv_codec_r4_m, rv_fmt_rm_frd_frs1_frs2_frs3, NULL, 0, 0, 0 }, 1336ea103259SMichael Clark { "fadd.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1337ea103259SMichael Clark { "fsub.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1338ea103259SMichael Clark { "fmul.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1339ea103259SMichael Clark { "fdiv.q", rv_codec_r_m, rv_fmt_rm_frd_frs1_frs2, NULL, 0, 0, 0 }, 1340ea103259SMichael Clark { "fsgnj.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnj_q, 0, 0, 0 }, 1341ea103259SMichael Clark { "fsgnjn.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjn_q, 0, 0, 0 }, 1342ea103259SMichael Clark { "fsgnjx.q", rv_codec_r, rv_fmt_frd_frs1_frs2, rvcp_fsgnjx_q, 0, 0, 0 }, 1343ea103259SMichael Clark { "fmin.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1344ea103259SMichael Clark { "fmax.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1345ea103259SMichael Clark { "fcvt.s.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1346ea103259SMichael Clark { "fcvt.q.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1347ea103259SMichael Clark { "fcvt.d.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1348ea103259SMichael Clark { "fcvt.q.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1349ea103259SMichael Clark { "fsqrt.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1350ea103259SMichael Clark { "fle.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1351ea103259SMichael Clark { "flt.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1352ea103259SMichael Clark { "feq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 1353ea103259SMichael Clark { "fcvt.w.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1354ea103259SMichael Clark { "fcvt.wu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1355ea103259SMichael Clark { "fcvt.q.w", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1356ea103259SMichael Clark { "fcvt.q.wu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1357ea103259SMichael Clark { "fclass.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1358ea103259SMichael Clark { "fcvt.l.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1359ea103259SMichael Clark { "fcvt.lu.q", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1360ea103259SMichael Clark { "fcvt.q.l", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1361ea103259SMichael Clark { "fcvt.q.lu", rv_codec_r_m, rv_fmt_rm_frd_rs1, NULL, 0, 0, 0 }, 1362ea103259SMichael Clark { "fmv.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1363ea103259SMichael Clark { "fmv.q.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 1364f88222daSMichael Clark { "c.addi4spn", rv_codec_ciw_4spn, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1365f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 136698624d13SWeiwei Li { "c.fld", rv_codec_cl_ld, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, 136798624d13SWeiwei Li rv_op_fld, 0 }, 136898624d13SWeiwei Li { "c.lw", rv_codec_cl_lw, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, rv_op_lw, 136998624d13SWeiwei Li rv_op_lw }, 1370ea103259SMichael Clark { "c.flw", rv_codec_cl_lw, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 0 }, 137198624d13SWeiwei Li { "c.fsd", rv_codec_cs_sd, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, 137298624d13SWeiwei Li rv_op_fsd, 0 }, 137398624d13SWeiwei Li { "c.sw", rv_codec_cs_sw, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, rv_op_sw, 137498624d13SWeiwei Li rv_op_sw }, 1375ea103259SMichael Clark { "c.fsw", rv_codec_cs_sw, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 0 }, 137698624d13SWeiwei Li { "c.nop", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_addi, rv_op_addi, 137798624d13SWeiwei Li rv_op_addi }, 1378f88222daSMichael Clark { "c.addi", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, 1379f88222daSMichael Clark rv_op_addi, rvcd_imm_nz }, 1380ea103259SMichael Clark { "c.jal", rv_codec_cj_jal, rv_fmt_rd_offset, NULL, rv_op_jal, 0, 0 }, 138198624d13SWeiwei Li { "c.li", rv_codec_ci_li, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, rv_op_addi, 138298624d13SWeiwei Li rv_op_addi }, 1383f88222daSMichael Clark { "c.addi16sp", rv_codec_ci_16sp, rv_fmt_rd_rs1_imm, NULL, rv_op_addi, 1384f88222daSMichael Clark rv_op_addi, rv_op_addi, rvcd_imm_nz }, 1385f88222daSMichael Clark { "c.lui", rv_codec_ci_lui, rv_fmt_rd_imm, NULL, rv_op_lui, rv_op_lui, 1386f88222daSMichael Clark rv_op_lui, rvcd_imm_nz }, 1387f88222daSMichael Clark { "c.srli", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srli, 1388f88222daSMichael Clark rv_op_srli, rv_op_srli, rvcd_imm_nz }, 1389f88222daSMichael Clark { "c.srai", rv_codec_cb_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_srai, 1390f88222daSMichael Clark rv_op_srai, rv_op_srai, rvcd_imm_nz }, 1391f88222daSMichael Clark { "c.andi", rv_codec_cb_imm, rv_fmt_rd_rs1_imm, NULL, rv_op_andi, 13922e3df911SWladimir J. van der Laan rv_op_andi, rv_op_andi }, 139398624d13SWeiwei Li { "c.sub", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_sub, rv_op_sub, 139498624d13SWeiwei Li rv_op_sub }, 139598624d13SWeiwei Li { "c.xor", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_xor, rv_op_xor, 139698624d13SWeiwei Li rv_op_xor }, 139798624d13SWeiwei Li { "c.or", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_or, rv_op_or, 139898624d13SWeiwei Li rv_op_or }, 139998624d13SWeiwei Li { "c.and", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_and, rv_op_and, 140098624d13SWeiwei Li rv_op_and }, 140198624d13SWeiwei Li { "c.subw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_subw, rv_op_subw, 140298624d13SWeiwei Li rv_op_subw }, 140398624d13SWeiwei Li { "c.addw", rv_codec_cs, rv_fmt_rd_rs1_rs2, NULL, rv_op_addw, rv_op_addw, 140498624d13SWeiwei Li rv_op_addw }, 140598624d13SWeiwei Li { "c.j", rv_codec_cj, rv_fmt_rd_offset, NULL, rv_op_jal, rv_op_jal, 140698624d13SWeiwei Li rv_op_jal }, 140798624d13SWeiwei Li { "c.beqz", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_beq, rv_op_beq, 140898624d13SWeiwei Li rv_op_beq }, 140998624d13SWeiwei Li { "c.bnez", rv_codec_cb, rv_fmt_rs1_rs2_offset, NULL, rv_op_bne, rv_op_bne, 141098624d13SWeiwei Li rv_op_bne }, 1411f88222daSMichael Clark { "c.slli", rv_codec_ci_sh6, rv_fmt_rd_rs1_imm, NULL, rv_op_slli, 1412f88222daSMichael Clark rv_op_slli, rv_op_slli, rvcd_imm_nz }, 141398624d13SWeiwei Li { "c.fldsp", rv_codec_ci_ldsp, rv_fmt_frd_offset_rs1, NULL, rv_op_fld, 141498624d13SWeiwei Li rv_op_fld, rv_op_fld }, 141598624d13SWeiwei Li { "c.lwsp", rv_codec_ci_lwsp, rv_fmt_rd_offset_rs1, NULL, rv_op_lw, 141698624d13SWeiwei Li rv_op_lw, rv_op_lw }, 141798624d13SWeiwei Li { "c.flwsp", rv_codec_ci_lwsp, rv_fmt_frd_offset_rs1, NULL, rv_op_flw, 0, 141898624d13SWeiwei Li 0 }, 141998624d13SWeiwei Li { "c.jr", rv_codec_cr_jr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, 142098624d13SWeiwei Li rv_op_jalr, rv_op_jalr }, 142198624d13SWeiwei Li { "c.mv", rv_codec_cr_mv, rv_fmt_rd_rs1_rs2, NULL, rv_op_addi, rv_op_addi, 142298624d13SWeiwei Li rv_op_addi }, 142398624d13SWeiwei Li { "c.ebreak", rv_codec_ci_none, rv_fmt_none, NULL, rv_op_ebreak, 142498624d13SWeiwei Li rv_op_ebreak, rv_op_ebreak }, 142598624d13SWeiwei Li { "c.jalr", rv_codec_cr_jalr, rv_fmt_rd_rs1_offset, NULL, rv_op_jalr, 142698624d13SWeiwei Li rv_op_jalr, rv_op_jalr }, 142798624d13SWeiwei Li { "c.add", rv_codec_cr, rv_fmt_rd_rs1_rs2, NULL, rv_op_add, rv_op_add, 142898624d13SWeiwei Li rv_op_add }, 142998624d13SWeiwei Li { "c.fsdsp", rv_codec_css_sdsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsd, 143098624d13SWeiwei Li rv_op_fsd, rv_op_fsd }, 143198624d13SWeiwei Li { "c.swsp", rv_codec_css_swsp, rv_fmt_rs2_offset_rs1, NULL, rv_op_sw, 143298624d13SWeiwei Li rv_op_sw, rv_op_sw }, 143398624d13SWeiwei Li { "c.fswsp", rv_codec_css_swsp, rv_fmt_frs2_offset_rs1, NULL, rv_op_fsw, 0, 143498624d13SWeiwei Li 0 }, 143598624d13SWeiwei Li { "c.ld", rv_codec_cl_ld, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, 143698624d13SWeiwei Li rv_op_ld }, 143798624d13SWeiwei Li { "c.sd", rv_codec_cs_sd, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, 143898624d13SWeiwei Li rv_op_sd }, 143998624d13SWeiwei Li { "c.addiw", rv_codec_ci, rv_fmt_rd_rs1_imm, NULL, 0, rv_op_addiw, 144098624d13SWeiwei Li rv_op_addiw }, 144198624d13SWeiwei Li { "c.ldsp", rv_codec_ci_ldsp, rv_fmt_rd_offset_rs1, NULL, 0, rv_op_ld, 144298624d13SWeiwei Li rv_op_ld }, 144398624d13SWeiwei Li { "c.sdsp", rv_codec_css_sdsp, rv_fmt_rs2_offset_rs1, NULL, 0, rv_op_sd, 144498624d13SWeiwei Li rv_op_sd }, 1445ea103259SMichael Clark { "c.lq", rv_codec_cl_lq, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 1446ea103259SMichael Clark { "c.sq", rv_codec_cs_sq, rv_fmt_rs2_offset_rs1, NULL, 0, 0, rv_op_sq }, 1447ea103259SMichael Clark { "c.lqsp", rv_codec_ci_lqsp, rv_fmt_rd_offset_rs1, NULL, 0, 0, rv_op_lq }, 144898624d13SWeiwei Li { "c.sqsp", rv_codec_css_sqsp, rv_fmt_rs2_offset_rs1, NULL, 0, 0, 144998624d13SWeiwei Li rv_op_sq }, 1450ea103259SMichael Clark { "nop", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1451ea103259SMichael Clark { "mv", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1452ea103259SMichael Clark { "not", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1453ea103259SMichael Clark { "neg", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1454ea103259SMichael Clark { "negw", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1455ea103259SMichael Clark { "sext.w", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1456ea103259SMichael Clark { "seqz", rv_codec_i, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1457ea103259SMichael Clark { "snez", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 1458ea103259SMichael Clark { "sltz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1459ea103259SMichael Clark { "sgtz", rv_codec_r, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 14600d581506SMikhail Tyutin { "fmv.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14610d581506SMikhail Tyutin { "fabs.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14620d581506SMikhail Tyutin { "fneg.s", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14630d581506SMikhail Tyutin { "fmv.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14640d581506SMikhail Tyutin { "fabs.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14650d581506SMikhail Tyutin { "fneg.d", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14660d581506SMikhail Tyutin { "fmv.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14670d581506SMikhail Tyutin { "fabs.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 14680d581506SMikhail Tyutin { "fneg.q", rv_codec_r, rv_fmt_frd_frs1, NULL, 0, 0, 0 }, 1469ea103259SMichael Clark { "beqz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1470ea103259SMichael Clark { "bnez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1471ea103259SMichael Clark { "blez", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1472ea103259SMichael Clark { "bgez", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1473ea103259SMichael Clark { "bltz", rv_codec_sb, rv_fmt_rs1_offset, NULL, 0, 0, 0 }, 1474ea103259SMichael Clark { "bgtz", rv_codec_sb, rv_fmt_rs2_offset, NULL, 0, 0, 0 }, 1475ea103259SMichael Clark { "ble", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1476ea103259SMichael Clark { "bleu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1477ea103259SMichael Clark { "bgt", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1478ea103259SMichael Clark { "bgtu", rv_codec_sb, rv_fmt_rs2_rs1_offset, NULL, 0, 0, 0 }, 1479ea103259SMichael Clark { "j", rv_codec_uj, rv_fmt_offset, NULL, 0, 0, 0 }, 1480ea103259SMichael Clark { "ret", rv_codec_i, rv_fmt_none, NULL, 0, 0, 0 }, 1481ea103259SMichael Clark { "jr", rv_codec_i, rv_fmt_rs1, NULL, 0, 0, 0 }, 1482ea103259SMichael Clark { "rdcycle", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1483ea103259SMichael Clark { "rdtime", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1484ea103259SMichael Clark { "rdinstret", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1485ea103259SMichael Clark { "rdcycleh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1486ea103259SMichael Clark { "rdtimeh", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1487ea103259SMichael Clark { "rdinstreth", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1488ea103259SMichael Clark { "frcsr", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1489ea103259SMichael Clark { "frrm", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1490ea103259SMichael Clark { "frflags", rv_codec_i_csr, rv_fmt_rd, NULL, 0, 0, 0 }, 1491ea103259SMichael Clark { "fscsr", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1492ea103259SMichael Clark { "fsrm", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1493ea103259SMichael Clark { "fsflags", rv_codec_i_csr, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 1494ea103259SMichael Clark { "fsrmi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 1495ea103259SMichael Clark { "fsflagsi", rv_codec_i_csr, rv_fmt_rd_zimm, NULL, 0, 0, 0 }, 149602c1b569SPhilipp Tomsich { "bseti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 149702c1b569SPhilipp Tomsich { "bclri", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 149802c1b569SPhilipp Tomsich { "binvi", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 149902c1b569SPhilipp Tomsich { "bexti", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 150002c1b569SPhilipp Tomsich { "rori", rv_codec_i_sh7, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 150102c1b569SPhilipp Tomsich { "clz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 150202c1b569SPhilipp Tomsich { "ctz", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 150302c1b569SPhilipp Tomsich { "cpop", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 150402c1b569SPhilipp Tomsich { "sext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 150502c1b569SPhilipp Tomsich { "sext.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 15063de1fb71SPhilipp Tomsich { "xnor", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15073de1fb71SPhilipp Tomsich { "orn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15083de1fb71SPhilipp Tomsich { "andn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 150902c1b569SPhilipp Tomsich { "rol", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151002c1b569SPhilipp Tomsich { "ror", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151102c1b569SPhilipp Tomsich { "sh1add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151202c1b569SPhilipp Tomsich { "sh2add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151302c1b569SPhilipp Tomsich { "sh3add", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151402c1b569SPhilipp Tomsich { "sh1add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151502c1b569SPhilipp Tomsich { "sh2add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151602c1b569SPhilipp Tomsich { "sh3add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151702c1b569SPhilipp Tomsich { "clmul", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151802c1b569SPhilipp Tomsich { "clmulr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 151902c1b569SPhilipp Tomsich { "clmulh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152002c1b569SPhilipp Tomsich { "min", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152102c1b569SPhilipp Tomsich { "minu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152202c1b569SPhilipp Tomsich { "max", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152302c1b569SPhilipp Tomsich { "maxu", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152402c1b569SPhilipp Tomsich { "clzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 152527062902SIvan Klokov { "ctzw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 152602c1b569SPhilipp Tomsich { "cpopw", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 152713e269f6SIvan Klokov { "slli.uw", rv_codec_i_sh6, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 152802c1b569SPhilipp Tomsich { "add.uw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 152902c1b569SPhilipp Tomsich { "rolw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 153002c1b569SPhilipp Tomsich { "rorw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 153102c1b569SPhilipp Tomsich { "rev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 153202c1b569SPhilipp Tomsich { "zext.h", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 153302c1b569SPhilipp Tomsich { "roriw", rv_codec_i_sh5, rv_fmt_rd_rs1_imm, NULL, 0, 0, 0 }, 153402c1b569SPhilipp Tomsich { "orc.b", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 153502c1b569SPhilipp Tomsich { "bset", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 153602c1b569SPhilipp Tomsich { "bclr", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 153702c1b569SPhilipp Tomsich { "binv", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 153802c1b569SPhilipp Tomsich { "bext", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15395748c886SWeiwei Li { "aes32esmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15405748c886SWeiwei Li { "aes32esi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15415748c886SWeiwei Li { "aes32dsmi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15425748c886SWeiwei Li { "aes32dsi", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15435748c886SWeiwei Li { "aes64ks1i", rv_codec_k_rnum, rv_fmt_rd_rs1_rnum, NULL, 0, 0, 0 }, 15445748c886SWeiwei Li { "aes64ks2", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15455748c886SWeiwei Li { "aes64im", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15465748c886SWeiwei Li { "aes64esm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15475748c886SWeiwei Li { "aes64es", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15485748c886SWeiwei Li { "aes64dsm", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15495748c886SWeiwei Li { "aes64ds", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15505748c886SWeiwei Li { "sha256sig0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15515748c886SWeiwei Li { "sha256sig1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15525748c886SWeiwei Li { "sha256sum0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15535748c886SWeiwei Li { "sha256sum1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15545748c886SWeiwei Li { "sha512sig0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15555748c886SWeiwei Li { "sha512sig1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15565748c886SWeiwei Li { "sha512sum0", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15575748c886SWeiwei Li { "sha512sum1", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15585748c886SWeiwei Li { "sha512sum0r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15595748c886SWeiwei Li { "sha512sum1r", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15605748c886SWeiwei Li { "sha512sig0l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15615748c886SWeiwei Li { "sha512sig0h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15625748c886SWeiwei Li { "sha512sig1l", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15635748c886SWeiwei Li { "sha512sig1h", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15645748c886SWeiwei Li { "sm3p0", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15655748c886SWeiwei Li { "sm3p1", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0 }, 15665748c886SWeiwei Li { "sm4ed", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15675748c886SWeiwei Li { "sm4ks", rv_codec_k_bs, rv_fmt_rs1_rs2_bs, NULL, 0, 0, 0 }, 15685748c886SWeiwei Li { "brev8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 15695748c886SWeiwei Li { "pack", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15705748c886SWeiwei Li { "packh", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15715748c886SWeiwei Li { "packw", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 15725748c886SWeiwei Li { "unzip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 15735748c886SWeiwei Li { "zip", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 15745748c886SWeiwei Li { "xperm4", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 157507f4964dSYang Liu { "xperm8", rv_codec_r, rv_fmt_rd_rs1, NULL, 0, 0, 0 }, 15768deb4756SWeiwei Li { "vle8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15778deb4756SWeiwei Li { "vle16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15788deb4756SWeiwei Li { "vle32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15798deb4756SWeiwei Li { "vle64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15808deb4756SWeiwei Li { "vse8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15818deb4756SWeiwei Li { "vse16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15828deb4756SWeiwei Li { "vse32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15838deb4756SWeiwei Li { "vse64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15848deb4756SWeiwei Li { "vlm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15858deb4756SWeiwei Li { "vsm.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 15868deb4756SWeiwei Li { "vlse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15878deb4756SWeiwei Li { "vlse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15888deb4756SWeiwei Li { "vlse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15898deb4756SWeiwei Li { "vlse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15908deb4756SWeiwei Li { "vsse8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15918deb4756SWeiwei Li { "vsse16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15928deb4756SWeiwei Li { "vsse32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15938deb4756SWeiwei Li { "vsse64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_rs2_vm, NULL, 0, 0, 0 }, 15948deb4756SWeiwei Li { "vluxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 15958deb4756SWeiwei Li { "vluxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 15968deb4756SWeiwei Li { "vluxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 15978deb4756SWeiwei Li { "vluxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 15988deb4756SWeiwei Li { "vloxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 15998deb4756SWeiwei Li { "vloxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16008deb4756SWeiwei Li { "vloxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16018deb4756SWeiwei Li { "vloxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16028deb4756SWeiwei Li { "vsuxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16038deb4756SWeiwei Li { "vsuxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16048deb4756SWeiwei Li { "vsuxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16058deb4756SWeiwei Li { "vsuxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16068deb4756SWeiwei Li { "vsoxei8.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16078deb4756SWeiwei Li { "vsoxei16.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16088deb4756SWeiwei Li { "vsoxei32.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16098deb4756SWeiwei Li { "vsoxei64.v", rv_codec_v_r, rv_fmt_ldst_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 16108deb4756SWeiwei Li { "vle8ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16118deb4756SWeiwei Li { "vle16ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16128deb4756SWeiwei Li { "vle32ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16138deb4756SWeiwei Li { "vle64ff.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16148deb4756SWeiwei Li { "vl1re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16158deb4756SWeiwei Li { "vl1re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16168deb4756SWeiwei Li { "vl1re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16178deb4756SWeiwei Li { "vl1re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16188deb4756SWeiwei Li { "vl2re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16198deb4756SWeiwei Li { "vl2re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16208deb4756SWeiwei Li { "vl2re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16218deb4756SWeiwei Li { "vl2re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16228deb4756SWeiwei Li { "vl4re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16238deb4756SWeiwei Li { "vl4re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16248deb4756SWeiwei Li { "vl4re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16258deb4756SWeiwei Li { "vl4re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16268deb4756SWeiwei Li { "vl8re8.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16278deb4756SWeiwei Li { "vl8re16.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16288deb4756SWeiwei Li { "vl8re32.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16298deb4756SWeiwei Li { "vl8re64.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16308deb4756SWeiwei Li { "vs1r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16318deb4756SWeiwei Li { "vs2r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16328deb4756SWeiwei Li { "vs4r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16338deb4756SWeiwei Li { "vs8r.v", rv_codec_v_ldst, rv_fmt_ldst_vd_rs1_vm, NULL, 0, 0, 0 }, 16348deb4756SWeiwei Li { "vadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16358deb4756SWeiwei Li { "vadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16368deb4756SWeiwei Li { "vadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16378deb4756SWeiwei Li { "vsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16388deb4756SWeiwei Li { "vsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16398deb4756SWeiwei Li { "vrsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16408deb4756SWeiwei Li { "vrsub.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16418deb4756SWeiwei Li { "vwaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16428deb4756SWeiwei Li { "vwaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16438deb4756SWeiwei Li { "vwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16448deb4756SWeiwei Li { "vwadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16458deb4756SWeiwei Li { "vwsubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16468deb4756SWeiwei Li { "vwsubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16478deb4756SWeiwei Li { "vwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16488deb4756SWeiwei Li { "vwsub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16498deb4756SWeiwei Li { "vwaddu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16508deb4756SWeiwei Li { "vwaddu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16518deb4756SWeiwei Li { "vwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16528deb4756SWeiwei Li { "vwadd.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16538deb4756SWeiwei Li { "vwsubu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16548deb4756SWeiwei Li { "vwsubu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16558deb4756SWeiwei Li { "vwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16568deb4756SWeiwei Li { "vwsub.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16578deb4756SWeiwei Li { "vadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, 16588deb4756SWeiwei Li { "vadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, 16598deb4756SWeiwei Li { "vadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, 16608deb4756SWeiwei Li { "vmadc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, 16618deb4756SWeiwei Li { "vmadc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, 16628deb4756SWeiwei Li { "vmadc.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, 16638deb4756SWeiwei Li { "vsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, 16648deb4756SWeiwei Li { "vsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, 16658deb4756SWeiwei Li { "vmsbc.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, 16668deb4756SWeiwei Li { "vmsbc.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, 16678deb4756SWeiwei Li { "vand.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16688deb4756SWeiwei Li { "vand.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16698deb4756SWeiwei Li { "vand.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16708deb4756SWeiwei Li { "vor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16718deb4756SWeiwei Li { "vor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16728deb4756SWeiwei Li { "vor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16738deb4756SWeiwei Li { "vxor.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16748deb4756SWeiwei Li { "vxor.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16758deb4756SWeiwei Li { "vxor.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16768deb4756SWeiwei Li { "vsll.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16778deb4756SWeiwei Li { "vsll.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16788deb4756SWeiwei Li { "vsll.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 16798deb4756SWeiwei Li { "vsrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16808deb4756SWeiwei Li { "vsrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16818deb4756SWeiwei Li { "vsrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 16828deb4756SWeiwei Li { "vsra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16838deb4756SWeiwei Li { "vsra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16848deb4756SWeiwei Li { "vsra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 16858deb4756SWeiwei Li { "vnsrl.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16868deb4756SWeiwei Li { "vnsrl.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16878deb4756SWeiwei Li { "vnsrl.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 16888deb4756SWeiwei Li { "vnsra.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16898deb4756SWeiwei Li { "vnsra.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16908deb4756SWeiwei Li { "vnsra.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 16918deb4756SWeiwei Li { "vmseq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16928deb4756SWeiwei Li { "vmseq.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16938deb4756SWeiwei Li { "vmseq.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16948deb4756SWeiwei Li { "vmsne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16958deb4756SWeiwei Li { "vmsne.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16968deb4756SWeiwei Li { "vmsne.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 16978deb4756SWeiwei Li { "vmsltu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 16988deb4756SWeiwei Li { "vmsltu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 16998deb4756SWeiwei Li { "vmslt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17008deb4756SWeiwei Li { "vmslt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17018deb4756SWeiwei Li { "vmsleu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17028deb4756SWeiwei Li { "vmsleu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17038deb4756SWeiwei Li { "vmsleu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17048deb4756SWeiwei Li { "vmsle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17058deb4756SWeiwei Li { "vmsle.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17068deb4756SWeiwei Li { "vmsle.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17078deb4756SWeiwei Li { "vmsgtu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17088deb4756SWeiwei Li { "vmsgtu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17098deb4756SWeiwei Li { "vmsgt.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17108deb4756SWeiwei Li { "vmsgt.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17118deb4756SWeiwei Li { "vminu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17128deb4756SWeiwei Li { "vminu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17138deb4756SWeiwei Li { "vmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17148deb4756SWeiwei Li { "vmin.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17158deb4756SWeiwei Li { "vmaxu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17168deb4756SWeiwei Li { "vmaxu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17178deb4756SWeiwei Li { "vmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17188deb4756SWeiwei Li { "vmax.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17198deb4756SWeiwei Li { "vmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17208deb4756SWeiwei Li { "vmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17218deb4756SWeiwei Li { "vmulh.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17228deb4756SWeiwei Li { "vmulh.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17238deb4756SWeiwei Li { "vmulhu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17248deb4756SWeiwei Li { "vmulhu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17258deb4756SWeiwei Li { "vmulhsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17268deb4756SWeiwei Li { "vmulhsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17278deb4756SWeiwei Li { "vdivu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17288deb4756SWeiwei Li { "vdivu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17298deb4756SWeiwei Li { "vdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17308deb4756SWeiwei Li { "vdiv.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17318deb4756SWeiwei Li { "vremu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17328deb4756SWeiwei Li { "vremu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17338deb4756SWeiwei Li { "vrem.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17348deb4756SWeiwei Li { "vrem.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17358deb4756SWeiwei Li { "vwmulu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17368deb4756SWeiwei Li { "vwmulu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17378deb4756SWeiwei Li { "vwmulsu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17388deb4756SWeiwei Li { "vwmulsu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17398deb4756SWeiwei Li { "vwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17408deb4756SWeiwei Li { "vwmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17418deb4756SWeiwei Li { "vmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17428deb4756SWeiwei Li { "vmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17438deb4756SWeiwei Li { "vnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17448deb4756SWeiwei Li { "vnmsac.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17458deb4756SWeiwei Li { "vmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17468deb4756SWeiwei Li { "vmadd.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17478deb4756SWeiwei Li { "vnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17488deb4756SWeiwei Li { "vnmsub.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17498deb4756SWeiwei Li { "vwmaccu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17508deb4756SWeiwei Li { "vwmaccu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17518deb4756SWeiwei Li { "vwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17528deb4756SWeiwei Li { "vwmacc.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17538deb4756SWeiwei Li { "vwmaccsu.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 17548deb4756SWeiwei Li { "vwmaccsu.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17558deb4756SWeiwei Li { "vwmaccus.vx", rv_codec_v_r, rv_fmt_vd_rs1_vs2_vm, NULL, 0, 0, 0 }, 17568deb4756SWeiwei Li { "vmv.v.v", rv_codec_v_r, rv_fmt_vd_vs1, NULL, 0, 0, 0 }, 17578deb4756SWeiwei Li { "vmv.v.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 }, 17588deb4756SWeiwei Li { "vmv.v.i", rv_codec_v_i, rv_fmt_vd_imm, NULL, 0, 0, 0 }, 17598deb4756SWeiwei Li { "vmerge.vvm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vl, NULL, 0, 0, 0 }, 17608deb4756SWeiwei Li { "vmerge.vxm", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vl, NULL, 0, 0, 0 }, 17618deb4756SWeiwei Li { "vmerge.vim", rv_codec_v_i, rv_fmt_vd_vs2_imm_vl, NULL, 0, 0, 0 }, 17628deb4756SWeiwei Li { "vsaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17638deb4756SWeiwei Li { "vsaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17648deb4756SWeiwei Li { "vsaddu.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17658deb4756SWeiwei Li { "vsadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17668deb4756SWeiwei Li { "vsadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17678deb4756SWeiwei Li { "vsadd.vi", rv_codec_v_i, rv_fmt_vd_vs2_imm_vm, NULL, 0, 0, 0 }, 17688deb4756SWeiwei Li { "vssubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17698deb4756SWeiwei Li { "vssubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17708deb4756SWeiwei Li { "vssub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17718deb4756SWeiwei Li { "vssub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17728deb4756SWeiwei Li { "vaadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17738deb4756SWeiwei Li { "vaadd.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17748deb4756SWeiwei Li { "vaaddu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17758deb4756SWeiwei Li { "vaaddu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17768deb4756SWeiwei Li { "vasub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17778deb4756SWeiwei Li { "vasub.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17788deb4756SWeiwei Li { "vasubu.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17798deb4756SWeiwei Li { "vasubu.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17808deb4756SWeiwei Li { "vsmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17818deb4756SWeiwei Li { "vsmul.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17828deb4756SWeiwei Li { "vssrl.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17838deb4756SWeiwei Li { "vssrl.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17848deb4756SWeiwei Li { "vssrl.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 17858deb4756SWeiwei Li { "vssra.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17868deb4756SWeiwei Li { "vssra.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17878deb4756SWeiwei Li { "vssra.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 17888deb4756SWeiwei Li { "vnclipu.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17898deb4756SWeiwei Li { "vnclipu.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17908deb4756SWeiwei Li { "vnclipu.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 17918deb4756SWeiwei Li { "vnclip.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17928deb4756SWeiwei Li { "vnclip.wx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 17938deb4756SWeiwei Li { "vnclip.wi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 17948deb4756SWeiwei Li { "vfadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17958deb4756SWeiwei Li { "vfadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 17968deb4756SWeiwei Li { "vfsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 17978deb4756SWeiwei Li { "vfsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 17988deb4756SWeiwei Li { "vfrsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 17998deb4756SWeiwei Li { "vfwadd.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18008deb4756SWeiwei Li { "vfwadd.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18018deb4756SWeiwei Li { "vfwadd.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18028deb4756SWeiwei Li { "vfwadd.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18038deb4756SWeiwei Li { "vfwsub.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18048deb4756SWeiwei Li { "vfwsub.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18058deb4756SWeiwei Li { "vfwsub.wv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18068deb4756SWeiwei Li { "vfwsub.wf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18078deb4756SWeiwei Li { "vfmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18088deb4756SWeiwei Li { "vfmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18098deb4756SWeiwei Li { "vfdiv.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18108deb4756SWeiwei Li { "vfdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18118deb4756SWeiwei Li { "vfrdiv.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18128deb4756SWeiwei Li { "vfwmul.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18138deb4756SWeiwei Li { "vfwmul.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18148deb4756SWeiwei Li { "vfmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18158deb4756SWeiwei Li { "vfmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18168deb4756SWeiwei Li { "vfnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18178deb4756SWeiwei Li { "vfnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18188deb4756SWeiwei Li { "vfmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18198deb4756SWeiwei Li { "vfmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18208deb4756SWeiwei Li { "vfnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18218deb4756SWeiwei Li { "vfnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18228deb4756SWeiwei Li { "vfmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18238deb4756SWeiwei Li { "vfmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18248deb4756SWeiwei Li { "vfnmadd.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18258deb4756SWeiwei Li { "vfnmadd.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18268deb4756SWeiwei Li { "vfmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18278deb4756SWeiwei Li { "vfmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18288deb4756SWeiwei Li { "vfnmsub.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18298deb4756SWeiwei Li { "vfnmsub.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18308deb4756SWeiwei Li { "vfwmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18318deb4756SWeiwei Li { "vfwmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18328deb4756SWeiwei Li { "vfwnmacc.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18338deb4756SWeiwei Li { "vfwnmacc.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18348deb4756SWeiwei Li { "vfwmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18358deb4756SWeiwei Li { "vfwmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18368deb4756SWeiwei Li { "vfwnmsac.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 18378deb4756SWeiwei Li { "vfwnmsac.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 18388deb4756SWeiwei Li { "vfsqrt.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 18398deb4756SWeiwei Li { "vfrsqrt7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 18408deb4756SWeiwei Li { "vfrec7.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 18418deb4756SWeiwei Li { "vfmin.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18428deb4756SWeiwei Li { "vfmin.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18438deb4756SWeiwei Li { "vfmax.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18448deb4756SWeiwei Li { "vfmax.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18458deb4756SWeiwei Li { "vfsgnj.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18468deb4756SWeiwei Li { "vfsgnj.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18478deb4756SWeiwei Li { "vfsgnjn.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18488deb4756SWeiwei Li { "vfsgnjn.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18498deb4756SWeiwei Li { "vfsgnjx.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18508deb4756SWeiwei Li { "vfsgnjx.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18518deb4756SWeiwei Li { "vfslide1up.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18528deb4756SWeiwei Li { "vfslide1down.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18538deb4756SWeiwei Li { "vmfeq.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18548deb4756SWeiwei Li { "vmfeq.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18558deb4756SWeiwei Li { "vmfne.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18568deb4756SWeiwei Li { "vmfne.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18578deb4756SWeiwei Li { "vmflt.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18588deb4756SWeiwei Li { "vmflt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18598deb4756SWeiwei Li { "vmfle.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18608deb4756SWeiwei Li { "vmfle.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18618deb4756SWeiwei Li { "vmfgt.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18628deb4756SWeiwei Li { "vmfge.vf", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vm, NULL, 0, 0, 0 }, 18638deb4756SWeiwei Li { "vfclass.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18648deb4756SWeiwei Li { "vfmerge.vfm", rv_codec_v_r, rv_fmt_vd_vs2_fs1_vl, NULL, 0, 0, 0 }, 18658deb4756SWeiwei Li { "vfmv.v.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 }, 18668deb4756SWeiwei Li { "vfcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18678deb4756SWeiwei Li { "vfcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18688deb4756SWeiwei Li { "vfcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18698deb4756SWeiwei Li { "vfcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18708deb4756SWeiwei Li { "vfcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18718deb4756SWeiwei Li { "vfcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18728deb4756SWeiwei Li { "vfwcvt.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18738deb4756SWeiwei Li { "vfwcvt.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18748deb4756SWeiwei Li { "vfwcvt.f.xu.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18758deb4756SWeiwei Li { "vfwcvt.f.x.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18768deb4756SWeiwei Li { "vfwcvt.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18778deb4756SWeiwei Li { "vfwcvt.rtz.xu.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18788deb4756SWeiwei Li { "vfwcvt.rtz.x.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18798deb4756SWeiwei Li { "vfncvt.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18808deb4756SWeiwei Li { "vfncvt.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18818deb4756SWeiwei Li { "vfncvt.f.xu.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18828deb4756SWeiwei Li { "vfncvt.f.x.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18838deb4756SWeiwei Li { "vfncvt.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18848deb4756SWeiwei Li { "vfncvt.rod.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18858deb4756SWeiwei Li { "vfncvt.rtz.xu.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18868deb4756SWeiwei Li { "vfncvt.rtz.x.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 18878deb4756SWeiwei Li { "vredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18888deb4756SWeiwei Li { "vredand.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18898deb4756SWeiwei Li { "vredor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18908deb4756SWeiwei Li { "vredxor.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18918deb4756SWeiwei Li { "vredminu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18928deb4756SWeiwei Li { "vredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18938deb4756SWeiwei Li { "vredmaxu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18948deb4756SWeiwei Li { "vredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18958deb4756SWeiwei Li { "vwredsumu.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18968deb4756SWeiwei Li { "vwredsum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18978deb4756SWeiwei Li { "vfredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18988deb4756SWeiwei Li { "vfredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 18998deb4756SWeiwei Li { "vfredmin.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19008deb4756SWeiwei Li { "vfredmax.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19018deb4756SWeiwei Li { "vfwredusum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19028deb4756SWeiwei Li { "vfwredosum.vs", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19038deb4756SWeiwei Li { "vmand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19048deb4756SWeiwei Li { "vmnand.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19058deb4756SWeiwei Li { "vmandn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19068deb4756SWeiwei Li { "vmxor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19078deb4756SWeiwei Li { "vmor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19088deb4756SWeiwei Li { "vmnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19098deb4756SWeiwei Li { "vmorn.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19108deb4756SWeiwei Li { "vmxnor.mm", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19118deb4756SWeiwei Li { "vcpop.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 }, 19128deb4756SWeiwei Li { "vfirst.m", rv_codec_v_r, rv_fmt_rd_vs2_vm, NULL, 0, 0, 0 }, 19138deb4756SWeiwei Li { "vmsbf.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19148deb4756SWeiwei Li { "vmsif.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19158deb4756SWeiwei Li { "vmsof.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19168deb4756SWeiwei Li { "viota.m", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19178deb4756SWeiwei Li { "vid.v", rv_codec_v_r, rv_fmt_vd_vm, NULL, 0, 0, 0 }, 19188deb4756SWeiwei Li { "vmv.x.s", rv_codec_v_r, rv_fmt_rd_vs2, NULL, 0, 0, 0 }, 19198deb4756SWeiwei Li { "vmv.s.x", rv_codec_v_r, rv_fmt_vd_rs1, NULL, 0, 0, 0 }, 19208deb4756SWeiwei Li { "vfmv.f.s", rv_codec_v_r, rv_fmt_fd_vs2, NULL, 0, 0, 0 }, 19218deb4756SWeiwei Li { "vfmv.s.f", rv_codec_v_r, rv_fmt_vd_fs1, NULL, 0, 0, 0 }, 19228deb4756SWeiwei Li { "vslideup.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 19238deb4756SWeiwei Li { "vslideup.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 19248deb4756SWeiwei Li { "vslide1up.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 19258deb4756SWeiwei Li { "vslidedown.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 19268deb4756SWeiwei Li { "vslidedown.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 19278deb4756SWeiwei Li { "vslide1down.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 19288deb4756SWeiwei Li { "vrgather.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19298deb4756SWeiwei Li { "vrgatherei16.vv", rv_codec_v_r, rv_fmt_vd_vs2_vs1_vm, NULL, 0, 0, 0 }, 19308deb4756SWeiwei Li { "vrgather.vx", rv_codec_v_r, rv_fmt_vd_vs2_rs1_vm, NULL, 0, 0, 0 }, 19318deb4756SWeiwei Li { "vrgather.vi", rv_codec_v_i, rv_fmt_vd_vs2_uimm_vm, NULL, 0, 0, 0 }, 19328deb4756SWeiwei Li { "vcompress.vm", rv_codec_v_r, rv_fmt_vd_vs2_vs1, NULL, 0, 0, 0 }, 19338deb4756SWeiwei Li { "vmv1r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 19348deb4756SWeiwei Li { "vmv2r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 19358deb4756SWeiwei Li { "vmv4r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 19368deb4756SWeiwei Li { "vmv8r.v", rv_codec_v_r, rv_fmt_vd_vs2, NULL, 0, 0, 0 }, 19378deb4756SWeiwei Li { "vzext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19388deb4756SWeiwei Li { "vzext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19398deb4756SWeiwei Li { "vzext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19408deb4756SWeiwei Li { "vsext.vf2", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19418deb4756SWeiwei Li { "vsext.vf4", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19428deb4756SWeiwei Li { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 19438deb4756SWeiwei Li { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, 0, 0, 0 }, 19448deb4756SWeiwei Li { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, 0, 0, 0 }, 19458deb4756SWeiwei Li { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 19462c71d02eSWeiwei Li { "c.zext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19472c71d02eSWeiwei Li { "c.sext.b", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19482c71d02eSWeiwei Li { "c.zext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19492c71d02eSWeiwei Li { "c.sext.h", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19502c71d02eSWeiwei Li { "c.zext.w", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19512c71d02eSWeiwei Li { "c.not", rv_codec_zcb_ext, rv_fmt_rd, NULL, 0 }, 19522c71d02eSWeiwei Li { "c.mul", rv_codec_zcb_mul, rv_fmt_rd_rs2, NULL, 0, 0 }, 19532c71d02eSWeiwei Li { "c.lbu", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 19542c71d02eSWeiwei Li { "c.lhu", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 19552c71d02eSWeiwei Li { "c.lh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 19562c71d02eSWeiwei Li { "c.sb", rv_codec_zcb_lb, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 19572c71d02eSWeiwei Li { "c.sh", rv_codec_zcb_lh, rv_fmt_rs1_rs2_zce_ldst, NULL, 0, 0, 0 }, 19582c71d02eSWeiwei Li { "cm.push", rv_codec_zcmp_cm_pushpop, rv_fmt_push_rlist, NULL, 0, 0 }, 19592c71d02eSWeiwei Li { "cm.pop", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 }, 19602c71d02eSWeiwei Li { "cm.popret", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0, 0 }, 19612c71d02eSWeiwei Li { "cm.popretz", rv_codec_zcmp_cm_pushpop, rv_fmt_pop_rlist, NULL, 0, 0 }, 19622c71d02eSWeiwei Li { "cm.mva01s", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 19632c71d02eSWeiwei Li { "cm.mvsa01", rv_codec_zcmp_cm_mv, rv_fmt_rd_rs2, NULL, 0, 0, 0 }, 19642c71d02eSWeiwei Li { "cm.jt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, 19652c71d02eSWeiwei Li { "cm.jalt", rv_codec_zcmt_jt, rv_fmt_zcmt_index, NULL, 0 }, 1966d397be9aSRichard Henderson { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 1967d397be9aSRichard Henderson { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, 196832b2d75bSWeiwei Li { "fcvt.bf16.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 196932b2d75bSWeiwei Li { "fcvt.s.bf16", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 197032b2d75bSWeiwei Li { "vfncvtbf16.f.f.w", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 197132b2d75bSWeiwei Li { "vfwcvtbf16.f.f.v", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, 0, 0, 0 }, 197232b2d75bSWeiwei Li { "vfwmaccbf16.vv", rv_codec_v_r, rv_fmt_vd_vs1_vs2_vm, NULL, 0, 0, 0 }, 197332b2d75bSWeiwei Li { "vfwmaccbf16.vf", rv_codec_v_r, rv_fmt_vd_fs1_vs2_vm, NULL, 0, 0, 0 }, 197432b2d75bSWeiwei Li { "flh", rv_codec_i, rv_fmt_frd_offset_rs1, NULL, 0, 0, 0 }, 197532b2d75bSWeiwei Li { "fsh", rv_codec_s, rv_fmt_frs2_offset_rs1, NULL, 0, 0, 0 }, 197632b2d75bSWeiwei Li { "fmv.h.x", rv_codec_r, rv_fmt_frd_rs1, NULL, 0, 0, 0 }, 197732b2d75bSWeiwei Li { "fmv.x.h", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 1978*a47842d1SChristoph Müllner { "fli.s", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, 1979*a47842d1SChristoph Müllner { "fli.d", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, 1980*a47842d1SChristoph Müllner { "fli.q", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, 1981*a47842d1SChristoph Müllner { "fli.h", rv_codec_fli, rv_fmt_fli, NULL, 0, 0, 0 }, 1982*a47842d1SChristoph Müllner { "fminm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1983*a47842d1SChristoph Müllner { "fmaxm.s", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1984*a47842d1SChristoph Müllner { "fminm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1985*a47842d1SChristoph Müllner { "fmaxm.d", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1986*a47842d1SChristoph Müllner { "fminm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1987*a47842d1SChristoph Müllner { "fmaxm.q", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1988*a47842d1SChristoph Müllner { "fminm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1989*a47842d1SChristoph Müllner { "fmaxm.h", rv_codec_r, rv_fmt_frd_frs1_frs2, NULL, 0, 0, 0 }, 1990*a47842d1SChristoph Müllner { "fround.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1991*a47842d1SChristoph Müllner { "froundnx.s", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1992*a47842d1SChristoph Müllner { "fround.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1993*a47842d1SChristoph Müllner { "froundnx.d", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1994*a47842d1SChristoph Müllner { "fround.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1995*a47842d1SChristoph Müllner { "froundnx.q", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1996*a47842d1SChristoph Müllner { "fround.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1997*a47842d1SChristoph Müllner { "froundnx.h", rv_codec_r_m, rv_fmt_rm_frd_frs1, NULL, 0, 0, 0 }, 1998*a47842d1SChristoph Müllner { "fcvtmod.w.d", rv_codec_r_m, rv_fmt_rm_rd_frs1, NULL, 0, 0, 0 }, 1999*a47842d1SChristoph Müllner { "fmvh.x.d", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 2000*a47842d1SChristoph Müllner { "fmvp.d.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 }, 2001*a47842d1SChristoph Müllner { "fmvh.x.q", rv_codec_r, rv_fmt_rd_frs1, NULL, 0, 0, 0 }, 2002*a47842d1SChristoph Müllner { "fmvp.q.x", rv_codec_r, rv_fmt_frd_rs1_rs2, NULL, 0, 0, 0 }, 2003*a47842d1SChristoph Müllner { "fleq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2004*a47842d1SChristoph Müllner { "fltq.s", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2005*a47842d1SChristoph Müllner { "fleq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2006*a47842d1SChristoph Müllner { "fltq.d", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2007*a47842d1SChristoph Müllner { "fleq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2008*a47842d1SChristoph Müllner { "fltq.q", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2009*a47842d1SChristoph Müllner { "fleq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2010*a47842d1SChristoph Müllner { "fltq.h", rv_codec_r, rv_fmt_rd_frs1_frs2, NULL, 0, 0, 0 }, 2011ea103259SMichael Clark }; 2012ea103259SMichael Clark 2013ea103259SMichael Clark /* CSR names */ 2014ea103259SMichael Clark 2015ea103259SMichael Clark static const char *csr_name(int csrno) 2016ea103259SMichael Clark { 2017ea103259SMichael Clark switch (csrno) { 2018ea103259SMichael Clark case 0x0000: return "ustatus"; 2019ea103259SMichael Clark case 0x0001: return "fflags"; 2020ea103259SMichael Clark case 0x0002: return "frm"; 2021ea103259SMichael Clark case 0x0003: return "fcsr"; 2022ea103259SMichael Clark case 0x0004: return "uie"; 2023ea103259SMichael Clark case 0x0005: return "utvec"; 202407f4964dSYang Liu case 0x0008: return "vstart"; 202507f4964dSYang Liu case 0x0009: return "vxsat"; 202607f4964dSYang Liu case 0x000a: return "vxrm"; 202707f4964dSYang Liu case 0x000f: return "vcsr"; 20285748c886SWeiwei Li case 0x0015: return "seed"; 20292c71d02eSWeiwei Li case 0x0017: return "jvt"; 2030ea103259SMichael Clark case 0x0040: return "uscratch"; 2031ea103259SMichael Clark case 0x0041: return "uepc"; 2032ea103259SMichael Clark case 0x0042: return "ucause"; 2033ea103259SMichael Clark case 0x0043: return "utval"; 2034ea103259SMichael Clark case 0x0044: return "uip"; 2035ea103259SMichael Clark case 0x0100: return "sstatus"; 2036ea103259SMichael Clark case 0x0104: return "sie"; 2037ea103259SMichael Clark case 0x0105: return "stvec"; 2038ea103259SMichael Clark case 0x0106: return "scounteren"; 2039ea103259SMichael Clark case 0x0140: return "sscratch"; 2040ea103259SMichael Clark case 0x0141: return "sepc"; 2041ea103259SMichael Clark case 0x0142: return "scause"; 2042ea103259SMichael Clark case 0x0143: return "stval"; 2043ea103259SMichael Clark case 0x0144: return "sip"; 2044ea103259SMichael Clark case 0x0180: return "satp"; 2045ea103259SMichael Clark case 0x0200: return "hstatus"; 2046ea103259SMichael Clark case 0x0202: return "hedeleg"; 2047ea103259SMichael Clark case 0x0203: return "hideleg"; 2048ea103259SMichael Clark case 0x0204: return "hie"; 2049ea103259SMichael Clark case 0x0205: return "htvec"; 2050ea103259SMichael Clark case 0x0240: return "hscratch"; 2051ea103259SMichael Clark case 0x0241: return "hepc"; 2052ea103259SMichael Clark case 0x0242: return "hcause"; 2053ea103259SMichael Clark case 0x0243: return "hbadaddr"; 2054ea103259SMichael Clark case 0x0244: return "hip"; 2055ea103259SMichael Clark case 0x0300: return "mstatus"; 2056ea103259SMichael Clark case 0x0301: return "misa"; 2057ea103259SMichael Clark case 0x0302: return "medeleg"; 2058ea103259SMichael Clark case 0x0303: return "mideleg"; 2059ea103259SMichael Clark case 0x0304: return "mie"; 2060ea103259SMichael Clark case 0x0305: return "mtvec"; 2061ea103259SMichael Clark case 0x0306: return "mcounteren"; 2062ea103259SMichael Clark case 0x0320: return "mucounteren"; 2063ea103259SMichael Clark case 0x0321: return "mscounteren"; 2064ea103259SMichael Clark case 0x0322: return "mhcounteren"; 2065ea103259SMichael Clark case 0x0323: return "mhpmevent3"; 2066ea103259SMichael Clark case 0x0324: return "mhpmevent4"; 2067ea103259SMichael Clark case 0x0325: return "mhpmevent5"; 2068ea103259SMichael Clark case 0x0326: return "mhpmevent6"; 2069ea103259SMichael Clark case 0x0327: return "mhpmevent7"; 2070ea103259SMichael Clark case 0x0328: return "mhpmevent8"; 2071ea103259SMichael Clark case 0x0329: return "mhpmevent9"; 2072ea103259SMichael Clark case 0x032a: return "mhpmevent10"; 2073ea103259SMichael Clark case 0x032b: return "mhpmevent11"; 2074ea103259SMichael Clark case 0x032c: return "mhpmevent12"; 2075ea103259SMichael Clark case 0x032d: return "mhpmevent13"; 2076ea103259SMichael Clark case 0x032e: return "mhpmevent14"; 2077ea103259SMichael Clark case 0x032f: return "mhpmevent15"; 2078ea103259SMichael Clark case 0x0330: return "mhpmevent16"; 2079ea103259SMichael Clark case 0x0331: return "mhpmevent17"; 2080ea103259SMichael Clark case 0x0332: return "mhpmevent18"; 2081ea103259SMichael Clark case 0x0333: return "mhpmevent19"; 2082ea103259SMichael Clark case 0x0334: return "mhpmevent20"; 2083ea103259SMichael Clark case 0x0335: return "mhpmevent21"; 2084ea103259SMichael Clark case 0x0336: return "mhpmevent22"; 2085ea103259SMichael Clark case 0x0337: return "mhpmevent23"; 2086ea103259SMichael Clark case 0x0338: return "mhpmevent24"; 2087ea103259SMichael Clark case 0x0339: return "mhpmevent25"; 2088ea103259SMichael Clark case 0x033a: return "mhpmevent26"; 2089ea103259SMichael Clark case 0x033b: return "mhpmevent27"; 2090ea103259SMichael Clark case 0x033c: return "mhpmevent28"; 2091ea103259SMichael Clark case 0x033d: return "mhpmevent29"; 2092ea103259SMichael Clark case 0x033e: return "mhpmevent30"; 2093ea103259SMichael Clark case 0x033f: return "mhpmevent31"; 2094ea103259SMichael Clark case 0x0340: return "mscratch"; 2095ea103259SMichael Clark case 0x0341: return "mepc"; 2096ea103259SMichael Clark case 0x0342: return "mcause"; 2097ea103259SMichael Clark case 0x0343: return "mtval"; 2098ea103259SMichael Clark case 0x0344: return "mip"; 2099ea103259SMichael Clark case 0x0380: return "mbase"; 2100ea103259SMichael Clark case 0x0381: return "mbound"; 2101ea103259SMichael Clark case 0x0382: return "mibase"; 2102ea103259SMichael Clark case 0x0383: return "mibound"; 2103ea103259SMichael Clark case 0x0384: return "mdbase"; 2104ea103259SMichael Clark case 0x0385: return "mdbound"; 2105ea103259SMichael Clark case 0x03a0: return "pmpcfg3"; 2106ea103259SMichael Clark case 0x03b0: return "pmpaddr0"; 2107ea103259SMichael Clark case 0x03b1: return "pmpaddr1"; 2108ea103259SMichael Clark case 0x03b2: return "pmpaddr2"; 2109ea103259SMichael Clark case 0x03b3: return "pmpaddr3"; 2110ea103259SMichael Clark case 0x03b4: return "pmpaddr4"; 2111ea103259SMichael Clark case 0x03b5: return "pmpaddr5"; 2112ea103259SMichael Clark case 0x03b6: return "pmpaddr6"; 2113ea103259SMichael Clark case 0x03b7: return "pmpaddr7"; 2114ea103259SMichael Clark case 0x03b8: return "pmpaddr8"; 2115ea103259SMichael Clark case 0x03b9: return "pmpaddr9"; 2116ea103259SMichael Clark case 0x03ba: return "pmpaddr10"; 2117ea103259SMichael Clark case 0x03bb: return "pmpaddr11"; 2118ea103259SMichael Clark case 0x03bc: return "pmpaddr12"; 2119ea103259SMichael Clark case 0x03bd: return "pmpaddr14"; 2120ea103259SMichael Clark case 0x03be: return "pmpaddr13"; 2121ea103259SMichael Clark case 0x03bf: return "pmpaddr15"; 2122ea103259SMichael Clark case 0x0780: return "mtohost"; 2123ea103259SMichael Clark case 0x0781: return "mfromhost"; 2124ea103259SMichael Clark case 0x0782: return "mreset"; 2125ea103259SMichael Clark case 0x0783: return "mipi"; 2126ea103259SMichael Clark case 0x0784: return "miobase"; 2127ea103259SMichael Clark case 0x07a0: return "tselect"; 2128ea103259SMichael Clark case 0x07a1: return "tdata1"; 2129ea103259SMichael Clark case 0x07a2: return "tdata2"; 2130ea103259SMichael Clark case 0x07a3: return "tdata3"; 2131ea103259SMichael Clark case 0x07b0: return "dcsr"; 2132ea103259SMichael Clark case 0x07b1: return "dpc"; 2133ea103259SMichael Clark case 0x07b2: return "dscratch"; 2134ea103259SMichael Clark case 0x0b00: return "mcycle"; 2135ea103259SMichael Clark case 0x0b01: return "mtime"; 2136ea103259SMichael Clark case 0x0b02: return "minstret"; 2137ea103259SMichael Clark case 0x0b03: return "mhpmcounter3"; 2138ea103259SMichael Clark case 0x0b04: return "mhpmcounter4"; 2139ea103259SMichael Clark case 0x0b05: return "mhpmcounter5"; 2140ea103259SMichael Clark case 0x0b06: return "mhpmcounter6"; 2141ea103259SMichael Clark case 0x0b07: return "mhpmcounter7"; 2142ea103259SMichael Clark case 0x0b08: return "mhpmcounter8"; 2143ea103259SMichael Clark case 0x0b09: return "mhpmcounter9"; 2144ea103259SMichael Clark case 0x0b0a: return "mhpmcounter10"; 2145ea103259SMichael Clark case 0x0b0b: return "mhpmcounter11"; 2146ea103259SMichael Clark case 0x0b0c: return "mhpmcounter12"; 2147ea103259SMichael Clark case 0x0b0d: return "mhpmcounter13"; 2148ea103259SMichael Clark case 0x0b0e: return "mhpmcounter14"; 2149ea103259SMichael Clark case 0x0b0f: return "mhpmcounter15"; 2150ea103259SMichael Clark case 0x0b10: return "mhpmcounter16"; 2151ea103259SMichael Clark case 0x0b11: return "mhpmcounter17"; 2152ea103259SMichael Clark case 0x0b12: return "mhpmcounter18"; 2153ea103259SMichael Clark case 0x0b13: return "mhpmcounter19"; 2154ea103259SMichael Clark case 0x0b14: return "mhpmcounter20"; 2155ea103259SMichael Clark case 0x0b15: return "mhpmcounter21"; 2156ea103259SMichael Clark case 0x0b16: return "mhpmcounter22"; 2157ea103259SMichael Clark case 0x0b17: return "mhpmcounter23"; 2158ea103259SMichael Clark case 0x0b18: return "mhpmcounter24"; 2159ea103259SMichael Clark case 0x0b19: return "mhpmcounter25"; 2160ea103259SMichael Clark case 0x0b1a: return "mhpmcounter26"; 2161ea103259SMichael Clark case 0x0b1b: return "mhpmcounter27"; 2162ea103259SMichael Clark case 0x0b1c: return "mhpmcounter28"; 2163ea103259SMichael Clark case 0x0b1d: return "mhpmcounter29"; 2164ea103259SMichael Clark case 0x0b1e: return "mhpmcounter30"; 2165ea103259SMichael Clark case 0x0b1f: return "mhpmcounter31"; 2166ea103259SMichael Clark case 0x0b80: return "mcycleh"; 2167ea103259SMichael Clark case 0x0b81: return "mtimeh"; 2168ea103259SMichael Clark case 0x0b82: return "minstreth"; 2169ea103259SMichael Clark case 0x0b83: return "mhpmcounter3h"; 2170ea103259SMichael Clark case 0x0b84: return "mhpmcounter4h"; 2171ea103259SMichael Clark case 0x0b85: return "mhpmcounter5h"; 2172ea103259SMichael Clark case 0x0b86: return "mhpmcounter6h"; 2173ea103259SMichael Clark case 0x0b87: return "mhpmcounter7h"; 2174ea103259SMichael Clark case 0x0b88: return "mhpmcounter8h"; 2175ea103259SMichael Clark case 0x0b89: return "mhpmcounter9h"; 2176ea103259SMichael Clark case 0x0b8a: return "mhpmcounter10h"; 2177ea103259SMichael Clark case 0x0b8b: return "mhpmcounter11h"; 2178ea103259SMichael Clark case 0x0b8c: return "mhpmcounter12h"; 2179ea103259SMichael Clark case 0x0b8d: return "mhpmcounter13h"; 2180ea103259SMichael Clark case 0x0b8e: return "mhpmcounter14h"; 2181ea103259SMichael Clark case 0x0b8f: return "mhpmcounter15h"; 2182ea103259SMichael Clark case 0x0b90: return "mhpmcounter16h"; 2183ea103259SMichael Clark case 0x0b91: return "mhpmcounter17h"; 2184ea103259SMichael Clark case 0x0b92: return "mhpmcounter18h"; 2185ea103259SMichael Clark case 0x0b93: return "mhpmcounter19h"; 2186ea103259SMichael Clark case 0x0b94: return "mhpmcounter20h"; 2187ea103259SMichael Clark case 0x0b95: return "mhpmcounter21h"; 2188ea103259SMichael Clark case 0x0b96: return "mhpmcounter22h"; 2189ea103259SMichael Clark case 0x0b97: return "mhpmcounter23h"; 2190ea103259SMichael Clark case 0x0b98: return "mhpmcounter24h"; 2191ea103259SMichael Clark case 0x0b99: return "mhpmcounter25h"; 2192ea103259SMichael Clark case 0x0b9a: return "mhpmcounter26h"; 2193ea103259SMichael Clark case 0x0b9b: return "mhpmcounter27h"; 2194ea103259SMichael Clark case 0x0b9c: return "mhpmcounter28h"; 2195ea103259SMichael Clark case 0x0b9d: return "mhpmcounter29h"; 2196ea103259SMichael Clark case 0x0b9e: return "mhpmcounter30h"; 2197ea103259SMichael Clark case 0x0b9f: return "mhpmcounter31h"; 2198ea103259SMichael Clark case 0x0c00: return "cycle"; 2199ea103259SMichael Clark case 0x0c01: return "time"; 2200ea103259SMichael Clark case 0x0c02: return "instret"; 220107f4964dSYang Liu case 0x0c20: return "vl"; 220207f4964dSYang Liu case 0x0c21: return "vtype"; 220307f4964dSYang Liu case 0x0c22: return "vlenb"; 2204ea103259SMichael Clark case 0x0c80: return "cycleh"; 2205ea103259SMichael Clark case 0x0c81: return "timeh"; 2206ea103259SMichael Clark case 0x0c82: return "instreth"; 2207ea103259SMichael Clark case 0x0d00: return "scycle"; 2208ea103259SMichael Clark case 0x0d01: return "stime"; 2209ea103259SMichael Clark case 0x0d02: return "sinstret"; 2210ea103259SMichael Clark case 0x0d80: return "scycleh"; 2211ea103259SMichael Clark case 0x0d81: return "stimeh"; 2212ea103259SMichael Clark case 0x0d82: return "sinstreth"; 2213ea103259SMichael Clark case 0x0e00: return "hcycle"; 2214ea103259SMichael Clark case 0x0e01: return "htime"; 2215ea103259SMichael Clark case 0x0e02: return "hinstret"; 2216ea103259SMichael Clark case 0x0e80: return "hcycleh"; 2217ea103259SMichael Clark case 0x0e81: return "htimeh"; 2218ea103259SMichael Clark case 0x0e82: return "hinstreth"; 2219ea103259SMichael Clark case 0x0f11: return "mvendorid"; 2220ea103259SMichael Clark case 0x0f12: return "marchid"; 2221ea103259SMichael Clark case 0x0f13: return "mimpid"; 2222ea103259SMichael Clark case 0x0f14: return "mhartid"; 2223ea103259SMichael Clark default: return NULL; 2224ea103259SMichael Clark } 2225ea103259SMichael Clark } 2226ea103259SMichael Clark 2227ea103259SMichael Clark /* decode opcode */ 2228ea103259SMichael Clark 2229ea103259SMichael Clark static void decode_inst_opcode(rv_decode *dec, rv_isa isa) 2230ea103259SMichael Clark { 2231ea103259SMichael Clark rv_inst inst = dec->inst; 2232ea103259SMichael Clark rv_opcode op = rv_op_illegal; 22333bd87176SWeiwei Li switch ((inst >> 0) & 0b11) { 2234ea103259SMichael Clark case 0: 22353bd87176SWeiwei Li switch ((inst >> 13) & 0b111) { 2236ea103259SMichael Clark case 0: op = rv_op_c_addi4spn; break; 2237ea103259SMichael Clark case 1: 2238ea103259SMichael Clark if (isa == rv128) { 2239ea103259SMichael Clark op = rv_op_c_lq; 2240ea103259SMichael Clark } else { 2241ea103259SMichael Clark op = rv_op_c_fld; 2242ea103259SMichael Clark } 2243ea103259SMichael Clark break; 2244ea103259SMichael Clark case 2: op = rv_op_c_lw; break; 2245ea103259SMichael Clark case 3: 2246ea103259SMichael Clark if (isa == rv32) { 2247ea103259SMichael Clark op = rv_op_c_flw; 2248ea103259SMichael Clark } else { 2249ea103259SMichael Clark op = rv_op_c_ld; 2250ea103259SMichael Clark } 2251ea103259SMichael Clark break; 22522c71d02eSWeiwei Li case 4: 22532c71d02eSWeiwei Li switch ((inst >> 10) & 0b111) { 22542c71d02eSWeiwei Li case 0: op = rv_op_c_lbu; break; 22552c71d02eSWeiwei Li case 1: 22562c71d02eSWeiwei Li if (((inst >> 6) & 1) == 0) { 22572c71d02eSWeiwei Li op = rv_op_c_lhu; 22582c71d02eSWeiwei Li } else { 22592c71d02eSWeiwei Li op = rv_op_c_lh; 22602c71d02eSWeiwei Li } 22612c71d02eSWeiwei Li break; 22622c71d02eSWeiwei Li case 2: op = rv_op_c_sb; break; 22632c71d02eSWeiwei Li case 3: 22642c71d02eSWeiwei Li if (((inst >> 6) & 1) == 0) { 22652c71d02eSWeiwei Li op = rv_op_c_sh; 22662c71d02eSWeiwei Li } 22672c71d02eSWeiwei Li break; 22682c71d02eSWeiwei Li } 22692c71d02eSWeiwei Li break; 2270ea103259SMichael Clark case 5: 2271ea103259SMichael Clark if (isa == rv128) { 2272ea103259SMichael Clark op = rv_op_c_sq; 2273ea103259SMichael Clark } else { 2274ea103259SMichael Clark op = rv_op_c_fsd; 2275ea103259SMichael Clark } 2276ea103259SMichael Clark break; 2277ea103259SMichael Clark case 6: op = rv_op_c_sw; break; 2278ea103259SMichael Clark case 7: 2279ea103259SMichael Clark if (isa == rv32) { 2280ea103259SMichael Clark op = rv_op_c_fsw; 2281ea103259SMichael Clark } else { 2282ea103259SMichael Clark op = rv_op_c_sd; 2283ea103259SMichael Clark } 2284ea103259SMichael Clark break; 2285ea103259SMichael Clark } 2286ea103259SMichael Clark break; 2287ea103259SMichael Clark case 1: 22883bd87176SWeiwei Li switch ((inst >> 13) & 0b111) { 2289ea103259SMichael Clark case 0: 22903bd87176SWeiwei Li switch ((inst >> 2) & 0b11111111111) { 2291ea103259SMichael Clark case 0: op = rv_op_c_nop; break; 2292ea103259SMichael Clark default: op = rv_op_c_addi; break; 2293ea103259SMichael Clark } 2294ea103259SMichael Clark break; 2295ea103259SMichael Clark case 1: 2296ea103259SMichael Clark if (isa == rv32) { 2297ea103259SMichael Clark op = rv_op_c_jal; 2298ea103259SMichael Clark } else { 2299ea103259SMichael Clark op = rv_op_c_addiw; 2300ea103259SMichael Clark } 2301ea103259SMichael Clark break; 2302ea103259SMichael Clark case 2: op = rv_op_c_li; break; 2303ea103259SMichael Clark case 3: 23043bd87176SWeiwei Li switch ((inst >> 7) & 0b11111) { 2305ea103259SMichael Clark case 2: op = rv_op_c_addi16sp; break; 2306ea103259SMichael Clark default: op = rv_op_c_lui; break; 2307ea103259SMichael Clark } 2308ea103259SMichael Clark break; 2309ea103259SMichael Clark case 4: 23103bd87176SWeiwei Li switch ((inst >> 10) & 0b11) { 2311ea103259SMichael Clark case 0: 2312ea103259SMichael Clark op = rv_op_c_srli; 2313ea103259SMichael Clark break; 2314ea103259SMichael Clark case 1: 2315ea103259SMichael Clark op = rv_op_c_srai; 2316ea103259SMichael Clark break; 2317ea103259SMichael Clark case 2: op = rv_op_c_andi; break; 2318ea103259SMichael Clark case 3: 2319ea103259SMichael Clark switch (((inst >> 10) & 0b100) | ((inst >> 5) & 0b011)) { 2320ea103259SMichael Clark case 0: op = rv_op_c_sub; break; 2321ea103259SMichael Clark case 1: op = rv_op_c_xor; break; 2322ea103259SMichael Clark case 2: op = rv_op_c_or; break; 2323ea103259SMichael Clark case 3: op = rv_op_c_and; break; 2324ea103259SMichael Clark case 4: op = rv_op_c_subw; break; 2325ea103259SMichael Clark case 5: op = rv_op_c_addw; break; 23262c71d02eSWeiwei Li case 6: op = rv_op_c_mul; break; 23272c71d02eSWeiwei Li case 7: 23282c71d02eSWeiwei Li switch ((inst >> 2) & 0b111) { 23292c71d02eSWeiwei Li case 0: op = rv_op_c_zext_b; break; 23302c71d02eSWeiwei Li case 1: op = rv_op_c_sext_b; break; 23312c71d02eSWeiwei Li case 2: op = rv_op_c_zext_h; break; 23322c71d02eSWeiwei Li case 3: op = rv_op_c_sext_h; break; 23332c71d02eSWeiwei Li case 4: op = rv_op_c_zext_w; break; 23342c71d02eSWeiwei Li case 5: op = rv_op_c_not; break; 23352c71d02eSWeiwei Li } 23362c71d02eSWeiwei Li break; 2337ea103259SMichael Clark } 2338ea103259SMichael Clark break; 2339ea103259SMichael Clark } 2340ea103259SMichael Clark break; 2341ea103259SMichael Clark case 5: op = rv_op_c_j; break; 2342ea103259SMichael Clark case 6: op = rv_op_c_beqz; break; 2343ea103259SMichael Clark case 7: op = rv_op_c_bnez; break; 2344ea103259SMichael Clark } 2345ea103259SMichael Clark break; 2346ea103259SMichael Clark case 2: 23473bd87176SWeiwei Li switch ((inst >> 13) & 0b111) { 2348ea103259SMichael Clark case 0: 2349ea103259SMichael Clark op = rv_op_c_slli; 2350ea103259SMichael Clark break; 2351ea103259SMichael Clark case 1: 2352ea103259SMichael Clark if (isa == rv128) { 2353ea103259SMichael Clark op = rv_op_c_lqsp; 2354ea103259SMichael Clark } else { 2355ea103259SMichael Clark op = rv_op_c_fldsp; 2356ea103259SMichael Clark } 2357ea103259SMichael Clark break; 2358ea103259SMichael Clark case 2: op = rv_op_c_lwsp; break; 2359ea103259SMichael Clark case 3: 2360ea103259SMichael Clark if (isa == rv32) { 2361ea103259SMichael Clark op = rv_op_c_flwsp; 2362ea103259SMichael Clark } else { 2363ea103259SMichael Clark op = rv_op_c_ldsp; 2364ea103259SMichael Clark } 2365ea103259SMichael Clark break; 2366ea103259SMichael Clark case 4: 23673bd87176SWeiwei Li switch ((inst >> 12) & 0b1) { 2368ea103259SMichael Clark case 0: 23693bd87176SWeiwei Li switch ((inst >> 2) & 0b11111) { 2370ea103259SMichael Clark case 0: op = rv_op_c_jr; break; 2371ea103259SMichael Clark default: op = rv_op_c_mv; break; 2372ea103259SMichael Clark } 2373ea103259SMichael Clark break; 2374ea103259SMichael Clark case 1: 23753bd87176SWeiwei Li switch ((inst >> 2) & 0b11111) { 2376ea103259SMichael Clark case 0: 23773bd87176SWeiwei Li switch ((inst >> 7) & 0b11111) { 2378ea103259SMichael Clark case 0: op = rv_op_c_ebreak; break; 2379ea103259SMichael Clark default: op = rv_op_c_jalr; break; 2380ea103259SMichael Clark } 2381ea103259SMichael Clark break; 2382ea103259SMichael Clark default: op = rv_op_c_add; break; 2383ea103259SMichael Clark } 2384ea103259SMichael Clark break; 2385ea103259SMichael Clark } 2386ea103259SMichael Clark break; 2387ea103259SMichael Clark case 5: 2388ea103259SMichael Clark if (isa == rv128) { 2389ea103259SMichael Clark op = rv_op_c_sqsp; 2390ea103259SMichael Clark } else { 23911dc34be1SMichael Clark op = rv_op_c_fsdsp; 23922a2b221bSWeiwei Li if (dec->cfg->ext_zcmp && ((inst >> 12) & 0b01)) { 23932c71d02eSWeiwei Li switch ((inst >> 8) & 0b01111) { 23942c71d02eSWeiwei Li case 8: 23952c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 23962c71d02eSWeiwei Li op = rv_op_cm_push; 23972c71d02eSWeiwei Li } 23982c71d02eSWeiwei Li break; 23992c71d02eSWeiwei Li case 10: 24002c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 24012c71d02eSWeiwei Li op = rv_op_cm_pop; 24022c71d02eSWeiwei Li } 24032c71d02eSWeiwei Li break; 24042c71d02eSWeiwei Li case 12: 24052c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 24062c71d02eSWeiwei Li op = rv_op_cm_popretz; 24072c71d02eSWeiwei Li } 24082c71d02eSWeiwei Li break; 24092c71d02eSWeiwei Li case 14: 24102c71d02eSWeiwei Li if (((inst >> 4) & 0b01111) >= 4) { 24112c71d02eSWeiwei Li op = rv_op_cm_popret; 24122c71d02eSWeiwei Li } 24132c71d02eSWeiwei Li break; 24142c71d02eSWeiwei Li } 24152c71d02eSWeiwei Li } else { 24162c71d02eSWeiwei Li switch ((inst >> 10) & 0b011) { 24172c71d02eSWeiwei Li case 0: 24182a2b221bSWeiwei Li if (!dec->cfg->ext_zcmt) { 24192a2b221bSWeiwei Li break; 24202a2b221bSWeiwei Li } 24212c71d02eSWeiwei Li if (((inst >> 2) & 0xFF) >= 32) { 24222c71d02eSWeiwei Li op = rv_op_cm_jalt; 24232c71d02eSWeiwei Li } else { 24242c71d02eSWeiwei Li op = rv_op_cm_jt; 24252c71d02eSWeiwei Li } 24262c71d02eSWeiwei Li break; 24272c71d02eSWeiwei Li case 3: 24282a2b221bSWeiwei Li if (!dec->cfg->ext_zcmp) { 24292a2b221bSWeiwei Li break; 24302a2b221bSWeiwei Li } 24312c71d02eSWeiwei Li switch ((inst >> 5) & 0b011) { 24322c71d02eSWeiwei Li case 1: op = rv_op_cm_mvsa01; break; 24332c71d02eSWeiwei Li case 3: op = rv_op_cm_mva01s; break; 24342c71d02eSWeiwei Li } 24352c71d02eSWeiwei Li break; 24362c71d02eSWeiwei Li } 24372c71d02eSWeiwei Li } 2438ea103259SMichael Clark } 24391dc34be1SMichael Clark break; 2440ea103259SMichael Clark case 6: op = rv_op_c_swsp; break; 2441ea103259SMichael Clark case 7: 2442ea103259SMichael Clark if (isa == rv32) { 2443ea103259SMichael Clark op = rv_op_c_fswsp; 2444ea103259SMichael Clark } else { 2445ea103259SMichael Clark op = rv_op_c_sdsp; 2446ea103259SMichael Clark } 2447ea103259SMichael Clark break; 2448ea103259SMichael Clark } 2449ea103259SMichael Clark break; 2450ea103259SMichael Clark case 3: 24513bd87176SWeiwei Li switch ((inst >> 2) & 0b11111) { 2452ea103259SMichael Clark case 0: 24533bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2454ea103259SMichael Clark case 0: op = rv_op_lb; break; 2455ea103259SMichael Clark case 1: op = rv_op_lh; break; 2456ea103259SMichael Clark case 2: op = rv_op_lw; break; 2457ea103259SMichael Clark case 3: op = rv_op_ld; break; 2458ea103259SMichael Clark case 4: op = rv_op_lbu; break; 2459ea103259SMichael Clark case 5: op = rv_op_lhu; break; 2460ea103259SMichael Clark case 6: op = rv_op_lwu; break; 2461ea103259SMichael Clark case 7: op = rv_op_ldu; break; 2462ea103259SMichael Clark } 2463ea103259SMichael Clark break; 2464ea103259SMichael Clark case 1: 24653bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 246607f4964dSYang Liu case 0: 24673bd87176SWeiwei Li switch ((inst >> 20) & 0b111111111111) { 246807f4964dSYang Liu case 40: op = rv_op_vl1re8_v; break; 246907f4964dSYang Liu case 552: op = rv_op_vl2re8_v; break; 247007f4964dSYang Liu case 1576: op = rv_op_vl4re8_v; break; 247107f4964dSYang Liu case 3624: op = rv_op_vl8re8_v; break; 247207f4964dSYang Liu } 24733bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 247407f4964dSYang Liu case 0: 24753bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 247607f4964dSYang Liu case 0: op = rv_op_vle8_v; break; 247707f4964dSYang Liu case 11: op = rv_op_vlm_v; break; 247807f4964dSYang Liu case 16: op = rv_op_vle8ff_v; break; 247907f4964dSYang Liu } 248007f4964dSYang Liu break; 248107f4964dSYang Liu case 1: op = rv_op_vluxei8_v; break; 248207f4964dSYang Liu case 2: op = rv_op_vlse8_v; break; 248307f4964dSYang Liu case 3: op = rv_op_vloxei8_v; break; 248407f4964dSYang Liu } 248507f4964dSYang Liu break; 248632b2d75bSWeiwei Li case 1: op = rv_op_flh; break; 2487ea103259SMichael Clark case 2: op = rv_op_flw; break; 2488ea103259SMichael Clark case 3: op = rv_op_fld; break; 2489ea103259SMichael Clark case 4: op = rv_op_flq; break; 249007f4964dSYang Liu case 5: 24913bd87176SWeiwei Li switch ((inst >> 20) & 0b111111111111) { 249207f4964dSYang Liu case 40: op = rv_op_vl1re16_v; break; 249307f4964dSYang Liu case 552: op = rv_op_vl2re16_v; break; 249407f4964dSYang Liu case 1576: op = rv_op_vl4re16_v; break; 249507f4964dSYang Liu case 3624: op = rv_op_vl8re16_v; break; 249607f4964dSYang Liu } 24973bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 249807f4964dSYang Liu case 0: 24993bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 250007f4964dSYang Liu case 0: op = rv_op_vle16_v; break; 250107f4964dSYang Liu case 16: op = rv_op_vle16ff_v; break; 250207f4964dSYang Liu } 250307f4964dSYang Liu break; 250407f4964dSYang Liu case 1: op = rv_op_vluxei16_v; break; 250507f4964dSYang Liu case 2: op = rv_op_vlse16_v; break; 250607f4964dSYang Liu case 3: op = rv_op_vloxei16_v; break; 250707f4964dSYang Liu } 250807f4964dSYang Liu break; 250907f4964dSYang Liu case 6: 25103bd87176SWeiwei Li switch ((inst >> 20) & 0b111111111111) { 251107f4964dSYang Liu case 40: op = rv_op_vl1re32_v; break; 251207f4964dSYang Liu case 552: op = rv_op_vl2re32_v; break; 251307f4964dSYang Liu case 1576: op = rv_op_vl4re32_v; break; 251407f4964dSYang Liu case 3624: op = rv_op_vl8re32_v; break; 251507f4964dSYang Liu } 25163bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 251707f4964dSYang Liu case 0: 25183bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 251907f4964dSYang Liu case 0: op = rv_op_vle32_v; break; 252007f4964dSYang Liu case 16: op = rv_op_vle32ff_v; break; 252107f4964dSYang Liu } 252207f4964dSYang Liu break; 252307f4964dSYang Liu case 1: op = rv_op_vluxei32_v; break; 252407f4964dSYang Liu case 2: op = rv_op_vlse32_v; break; 252507f4964dSYang Liu case 3: op = rv_op_vloxei32_v; break; 252607f4964dSYang Liu } 252707f4964dSYang Liu break; 252807f4964dSYang Liu case 7: 25293bd87176SWeiwei Li switch ((inst >> 20) & 0b111111111111) { 253007f4964dSYang Liu case 40: op = rv_op_vl1re64_v; break; 253107f4964dSYang Liu case 552: op = rv_op_vl2re64_v; break; 253207f4964dSYang Liu case 1576: op = rv_op_vl4re64_v; break; 253307f4964dSYang Liu case 3624: op = rv_op_vl8re64_v; break; 253407f4964dSYang Liu } 25353bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 253607f4964dSYang Liu case 0: 25373bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 253807f4964dSYang Liu case 0: op = rv_op_vle64_v; break; 253907f4964dSYang Liu case 16: op = rv_op_vle64ff_v; break; 254007f4964dSYang Liu } 254107f4964dSYang Liu break; 254207f4964dSYang Liu case 1: op = rv_op_vluxei64_v; break; 254307f4964dSYang Liu case 2: op = rv_op_vlse64_v; break; 254407f4964dSYang Liu case 3: op = rv_op_vloxei64_v; break; 254507f4964dSYang Liu } 254607f4964dSYang Liu break; 2547ea103259SMichael Clark } 2548ea103259SMichael Clark break; 2549ea103259SMichael Clark case 3: 25503bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2551ea103259SMichael Clark case 0: op = rv_op_fence; break; 2552ea103259SMichael Clark case 1: op = rv_op_fence_i; break; 2553ea103259SMichael Clark case 2: op = rv_op_lq; break; 2554ea103259SMichael Clark } 2555ea103259SMichael Clark break; 2556ea103259SMichael Clark case 4: 25573bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2558ea103259SMichael Clark case 0: op = rv_op_addi; break; 2559ea103259SMichael Clark case 1: 25603bd87176SWeiwei Li switch ((inst >> 27) & 0b11111) { 256102c1b569SPhilipp Tomsich case 0b00000: op = rv_op_slli; break; 25625748c886SWeiwei Li case 0b00001: 25633bd87176SWeiwei Li switch ((inst >> 20) & 0b1111111) { 25645748c886SWeiwei Li case 0b0001111: op = rv_op_zip; break; 25655748c886SWeiwei Li } 25665748c886SWeiwei Li break; 25675748c886SWeiwei Li case 0b00010: 25683bd87176SWeiwei Li switch ((inst >> 20) & 0b1111111) { 25695748c886SWeiwei Li case 0b0000000: op = rv_op_sha256sum0; break; 25705748c886SWeiwei Li case 0b0000001: op = rv_op_sha256sum1; break; 25715748c886SWeiwei Li case 0b0000010: op = rv_op_sha256sig0; break; 25725748c886SWeiwei Li case 0b0000011: op = rv_op_sha256sig1; break; 25735748c886SWeiwei Li case 0b0000100: op = rv_op_sha512sum0; break; 25745748c886SWeiwei Li case 0b0000101: op = rv_op_sha512sum1; break; 25755748c886SWeiwei Li case 0b0000110: op = rv_op_sha512sig0; break; 25765748c886SWeiwei Li case 0b0000111: op = rv_op_sha512sig1; break; 25775748c886SWeiwei Li case 0b0001000: op = rv_op_sm3p0; break; 25785748c886SWeiwei Li case 0b0001001: op = rv_op_sm3p1; break; 25795748c886SWeiwei Li } 25805748c886SWeiwei Li break; 258102c1b569SPhilipp Tomsich case 0b00101: op = rv_op_bseti; break; 25825748c886SWeiwei Li case 0b00110: 25833bd87176SWeiwei Li switch ((inst >> 20) & 0b1111111) { 25845748c886SWeiwei Li case 0b0000000: op = rv_op_aes64im; break; 25855748c886SWeiwei Li default: 25865748c886SWeiwei Li if (((inst >> 24) & 0b0111) == 0b001) { 25875748c886SWeiwei Li op = rv_op_aes64ks1i; 25885748c886SWeiwei Li } 25895748c886SWeiwei Li break; 25905748c886SWeiwei Li } 25915748c886SWeiwei Li break; 259202c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bclri; break; 259302c1b569SPhilipp Tomsich case 0b01101: op = rv_op_binvi; break; 259402c1b569SPhilipp Tomsich case 0b01100: 25953bd87176SWeiwei Li switch ((inst >> 20) & 0b1111111) { 259602c1b569SPhilipp Tomsich case 0b0000000: op = rv_op_clz; break; 259702c1b569SPhilipp Tomsich case 0b0000001: op = rv_op_ctz; break; 259802c1b569SPhilipp Tomsich case 0b0000010: op = rv_op_cpop; break; 259902c1b569SPhilipp Tomsich /* 0b0000011 */ 260002c1b569SPhilipp Tomsich case 0b0000100: op = rv_op_sext_b; break; 260102c1b569SPhilipp Tomsich case 0b0000101: op = rv_op_sext_h; break; 260202c1b569SPhilipp Tomsich } 260302c1b569SPhilipp Tomsich break; 2604ea103259SMichael Clark } 2605ea103259SMichael Clark break; 2606ea103259SMichael Clark case 2: op = rv_op_slti; break; 2607ea103259SMichael Clark case 3: op = rv_op_sltiu; break; 2608ea103259SMichael Clark case 4: op = rv_op_xori; break; 2609ea103259SMichael Clark case 5: 26103bd87176SWeiwei Li switch ((inst >> 27) & 0b11111) { 261102c1b569SPhilipp Tomsich case 0b00000: op = rv_op_srli; break; 26125748c886SWeiwei Li case 0b00001: 26133bd87176SWeiwei Li switch ((inst >> 20) & 0b1111111) { 26145748c886SWeiwei Li case 0b0001111: op = rv_op_unzip; break; 26155748c886SWeiwei Li } 26165748c886SWeiwei Li break; 261702c1b569SPhilipp Tomsich case 0b00101: op = rv_op_orc_b; break; 261802c1b569SPhilipp Tomsich case 0b01000: op = rv_op_srai; break; 261902c1b569SPhilipp Tomsich case 0b01001: op = rv_op_bexti; break; 262002c1b569SPhilipp Tomsich case 0b01100: op = rv_op_rori; break; 262102c1b569SPhilipp Tomsich case 0b01101: 262202c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b1111111) { 26235748c886SWeiwei Li case 0b0011000: op = rv_op_rev8; break; 262402c1b569SPhilipp Tomsich case 0b0111000: op = rv_op_rev8; break; 26255748c886SWeiwei Li case 0b0000111: op = rv_op_brev8; break; 262602c1b569SPhilipp Tomsich } 262702c1b569SPhilipp Tomsich break; 2628ea103259SMichael Clark } 2629ea103259SMichael Clark break; 2630ea103259SMichael Clark case 6: op = rv_op_ori; break; 2631ea103259SMichael Clark case 7: op = rv_op_andi; break; 2632ea103259SMichael Clark } 2633ea103259SMichael Clark break; 2634ea103259SMichael Clark case 5: op = rv_op_auipc; break; 2635ea103259SMichael Clark case 6: 26363bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2637ea103259SMichael Clark case 0: op = rv_op_addiw; break; 2638ea103259SMichael Clark case 1: 26393bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 2640ea103259SMichael Clark case 0: op = rv_op_slliw; break; 264113e269f6SIvan Klokov case 2: op = rv_op_slli_uw; break; 264213e269f6SIvan Klokov case 24: 264302c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 264402c1b569SPhilipp Tomsich case 0b00000: op = rv_op_clzw; break; 264502c1b569SPhilipp Tomsich case 0b00001: op = rv_op_ctzw; break; 264602c1b569SPhilipp Tomsich case 0b00010: op = rv_op_cpopw; break; 264702c1b569SPhilipp Tomsich } 264802c1b569SPhilipp Tomsich break; 2649ea103259SMichael Clark } 2650ea103259SMichael Clark break; 2651ea103259SMichael Clark case 5: 26523bd87176SWeiwei Li switch ((inst >> 25) & 0b1111111) { 2653ea103259SMichael Clark case 0: op = rv_op_srliw; break; 2654ea103259SMichael Clark case 32: op = rv_op_sraiw; break; 265502c1b569SPhilipp Tomsich case 48: op = rv_op_roriw; break; 2656ea103259SMichael Clark } 2657ea103259SMichael Clark break; 2658ea103259SMichael Clark } 2659ea103259SMichael Clark break; 2660ea103259SMichael Clark case 8: 26613bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2662ea103259SMichael Clark case 0: op = rv_op_sb; break; 2663ea103259SMichael Clark case 1: op = rv_op_sh; break; 2664ea103259SMichael Clark case 2: op = rv_op_sw; break; 2665ea103259SMichael Clark case 3: op = rv_op_sd; break; 2666ea103259SMichael Clark case 4: op = rv_op_sq; break; 2667ea103259SMichael Clark } 2668ea103259SMichael Clark break; 2669ea103259SMichael Clark case 9: 26703bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 267107f4964dSYang Liu case 0: 26723bd87176SWeiwei Li switch ((inst >> 20) & 0b111111111111) { 267307f4964dSYang Liu case 40: op = rv_op_vs1r_v; break; 267407f4964dSYang Liu case 552: op = rv_op_vs2r_v; break; 267507f4964dSYang Liu case 1576: op = rv_op_vs4r_v; break; 267607f4964dSYang Liu case 3624: op = rv_op_vs8r_v; break; 267707f4964dSYang Liu } 26783bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 267907f4964dSYang Liu case 0: 26803bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 268107f4964dSYang Liu case 0: op = rv_op_vse8_v; break; 268207f4964dSYang Liu case 11: op = rv_op_vsm_v; break; 268307f4964dSYang Liu } 268407f4964dSYang Liu break; 268507f4964dSYang Liu case 1: op = rv_op_vsuxei8_v; break; 268607f4964dSYang Liu case 2: op = rv_op_vsse8_v; break; 268707f4964dSYang Liu case 3: op = rv_op_vsoxei8_v; break; 268807f4964dSYang Liu } 268907f4964dSYang Liu break; 269032b2d75bSWeiwei Li case 1: op = rv_op_fsh; break; 2691ea103259SMichael Clark case 2: op = rv_op_fsw; break; 2692ea103259SMichael Clark case 3: op = rv_op_fsd; break; 2693ea103259SMichael Clark case 4: op = rv_op_fsq; break; 269407f4964dSYang Liu case 5: 26953bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 269607f4964dSYang Liu case 0: 26973bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 269807f4964dSYang Liu case 0: op = rv_op_vse16_v; break; 269907f4964dSYang Liu } 270007f4964dSYang Liu break; 270107f4964dSYang Liu case 1: op = rv_op_vsuxei16_v; break; 270207f4964dSYang Liu case 2: op = rv_op_vsse16_v; break; 270307f4964dSYang Liu case 3: op = rv_op_vsoxei16_v; break; 270407f4964dSYang Liu } 270507f4964dSYang Liu break; 270607f4964dSYang Liu case 6: 27073bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 270807f4964dSYang Liu case 0: 27093bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 271007f4964dSYang Liu case 0: op = rv_op_vse32_v; break; 271107f4964dSYang Liu } 271207f4964dSYang Liu break; 271307f4964dSYang Liu case 1: op = rv_op_vsuxei32_v; break; 271407f4964dSYang Liu case 2: op = rv_op_vsse32_v; break; 271507f4964dSYang Liu case 3: op = rv_op_vsoxei32_v; break; 271607f4964dSYang Liu } 271707f4964dSYang Liu break; 271807f4964dSYang Liu case 7: 27193bd87176SWeiwei Li switch ((inst >> 26) & 0b111) { 272007f4964dSYang Liu case 0: 27213bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 272207f4964dSYang Liu case 0: op = rv_op_vse64_v; break; 272307f4964dSYang Liu } 272407f4964dSYang Liu break; 272507f4964dSYang Liu case 1: op = rv_op_vsuxei64_v; break; 272607f4964dSYang Liu case 2: op = rv_op_vsse64_v; break; 272707f4964dSYang Liu case 3: op = rv_op_vsoxei64_v; break; 272807f4964dSYang Liu } 272907f4964dSYang Liu break; 2730ea103259SMichael Clark } 2731ea103259SMichael Clark break; 2732ea103259SMichael Clark case 11: 273398624d13SWeiwei Li switch (((inst >> 24) & 0b11111000) | 273498624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 2735ea103259SMichael Clark case 2: op = rv_op_amoadd_w; break; 2736ea103259SMichael Clark case 3: op = rv_op_amoadd_d; break; 2737ea103259SMichael Clark case 4: op = rv_op_amoadd_q; break; 2738ea103259SMichael Clark case 10: op = rv_op_amoswap_w; break; 2739ea103259SMichael Clark case 11: op = rv_op_amoswap_d; break; 2740ea103259SMichael Clark case 12: op = rv_op_amoswap_q; break; 2741ea103259SMichael Clark case 18: 27423bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 2743ea103259SMichael Clark case 0: op = rv_op_lr_w; break; 2744ea103259SMichael Clark } 2745ea103259SMichael Clark break; 2746ea103259SMichael Clark case 19: 27473bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 2748ea103259SMichael Clark case 0: op = rv_op_lr_d; break; 2749ea103259SMichael Clark } 2750ea103259SMichael Clark break; 2751ea103259SMichael Clark case 20: 27523bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 2753ea103259SMichael Clark case 0: op = rv_op_lr_q; break; 2754ea103259SMichael Clark } 2755ea103259SMichael Clark break; 2756ea103259SMichael Clark case 26: op = rv_op_sc_w; break; 2757ea103259SMichael Clark case 27: op = rv_op_sc_d; break; 2758ea103259SMichael Clark case 28: op = rv_op_sc_q; break; 2759ea103259SMichael Clark case 34: op = rv_op_amoxor_w; break; 2760ea103259SMichael Clark case 35: op = rv_op_amoxor_d; break; 2761ea103259SMichael Clark case 36: op = rv_op_amoxor_q; break; 2762ea103259SMichael Clark case 66: op = rv_op_amoor_w; break; 2763ea103259SMichael Clark case 67: op = rv_op_amoor_d; break; 2764ea103259SMichael Clark case 68: op = rv_op_amoor_q; break; 2765ea103259SMichael Clark case 98: op = rv_op_amoand_w; break; 2766ea103259SMichael Clark case 99: op = rv_op_amoand_d; break; 2767ea103259SMichael Clark case 100: op = rv_op_amoand_q; break; 2768ea103259SMichael Clark case 130: op = rv_op_amomin_w; break; 2769ea103259SMichael Clark case 131: op = rv_op_amomin_d; break; 2770ea103259SMichael Clark case 132: op = rv_op_amomin_q; break; 2771ea103259SMichael Clark case 162: op = rv_op_amomax_w; break; 2772ea103259SMichael Clark case 163: op = rv_op_amomax_d; break; 2773ea103259SMichael Clark case 164: op = rv_op_amomax_q; break; 2774ea103259SMichael Clark case 194: op = rv_op_amominu_w; break; 2775ea103259SMichael Clark case 195: op = rv_op_amominu_d; break; 2776ea103259SMichael Clark case 196: op = rv_op_amominu_q; break; 2777ea103259SMichael Clark case 226: op = rv_op_amomaxu_w; break; 2778ea103259SMichael Clark case 227: op = rv_op_amomaxu_d; break; 2779ea103259SMichael Clark case 228: op = rv_op_amomaxu_q; break; 2780ea103259SMichael Clark } 2781ea103259SMichael Clark break; 2782ea103259SMichael Clark case 12: 278398624d13SWeiwei Li switch (((inst >> 22) & 0b1111111000) | 278498624d13SWeiwei Li ((inst >> 12) & 0b0000000111)) { 2785ea103259SMichael Clark case 0: op = rv_op_add; break; 2786ea103259SMichael Clark case 1: op = rv_op_sll; break; 2787ea103259SMichael Clark case 2: op = rv_op_slt; break; 2788ea103259SMichael Clark case 3: op = rv_op_sltu; break; 2789ea103259SMichael Clark case 4: op = rv_op_xor; break; 2790ea103259SMichael Clark case 5: op = rv_op_srl; break; 2791ea103259SMichael Clark case 6: op = rv_op_or; break; 2792ea103259SMichael Clark case 7: op = rv_op_and; break; 2793ea103259SMichael Clark case 8: op = rv_op_mul; break; 2794ea103259SMichael Clark case 9: op = rv_op_mulh; break; 2795ea103259SMichael Clark case 10: op = rv_op_mulhsu; break; 2796ea103259SMichael Clark case 11: op = rv_op_mulhu; break; 2797ea103259SMichael Clark case 12: op = rv_op_div; break; 2798ea103259SMichael Clark case 13: op = rv_op_divu; break; 2799ea103259SMichael Clark case 14: op = rv_op_rem; break; 2800ea103259SMichael Clark case 15: op = rv_op_remu; break; 280102c1b569SPhilipp Tomsich case 36: 280202c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 280302c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 28045748c886SWeiwei Li default: op = rv_op_pack; break; 280502c1b569SPhilipp Tomsich } 280602c1b569SPhilipp Tomsich break; 28075748c886SWeiwei Li case 39: op = rv_op_packh; break; 28085748c886SWeiwei Li 280902c1b569SPhilipp Tomsich case 41: op = rv_op_clmul; break; 281002c1b569SPhilipp Tomsich case 42: op = rv_op_clmulr; break; 281102c1b569SPhilipp Tomsich case 43: op = rv_op_clmulh; break; 281202c1b569SPhilipp Tomsich case 44: op = rv_op_min; break; 281302c1b569SPhilipp Tomsich case 45: op = rv_op_minu; break; 281402c1b569SPhilipp Tomsich case 46: op = rv_op_max; break; 281502c1b569SPhilipp Tomsich case 47: op = rv_op_maxu; break; 2816d397be9aSRichard Henderson case 075: op = rv_op_czero_eqz; break; 2817d397be9aSRichard Henderson case 077: op = rv_op_czero_nez; break; 281802c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add; break; 281902c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add; break; 282002c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add; break; 282102c1b569SPhilipp Tomsich case 161: op = rv_op_bset; break; 28225748c886SWeiwei Li case 162: op = rv_op_xperm4; break; 28235748c886SWeiwei Li case 164: op = rv_op_xperm8; break; 28245748c886SWeiwei Li case 200: op = rv_op_aes64es; break; 28255748c886SWeiwei Li case 216: op = rv_op_aes64esm; break; 28265748c886SWeiwei Li case 232: op = rv_op_aes64ds; break; 28275748c886SWeiwei Li case 248: op = rv_op_aes64dsm; break; 2828ea103259SMichael Clark case 256: op = rv_op_sub; break; 282902c1b569SPhilipp Tomsich case 260: op = rv_op_xnor; break; 2830ea103259SMichael Clark case 261: op = rv_op_sra; break; 283102c1b569SPhilipp Tomsich case 262: op = rv_op_orn; break; 283202c1b569SPhilipp Tomsich case 263: op = rv_op_andn; break; 283302c1b569SPhilipp Tomsich case 289: op = rv_op_bclr; break; 283402c1b569SPhilipp Tomsich case 293: op = rv_op_bext; break; 28355748c886SWeiwei Li case 320: op = rv_op_sha512sum0r; break; 28365748c886SWeiwei Li case 328: op = rv_op_sha512sum1r; break; 28375748c886SWeiwei Li case 336: op = rv_op_sha512sig0l; break; 28385748c886SWeiwei Li case 344: op = rv_op_sha512sig1l; break; 28395748c886SWeiwei Li case 368: op = rv_op_sha512sig0h; break; 28405748c886SWeiwei Li case 376: op = rv_op_sha512sig1h; break; 284102c1b569SPhilipp Tomsich case 385: op = rv_op_rol; break; 28425748c886SWeiwei Li case 389: op = rv_op_ror; break; 284302c1b569SPhilipp Tomsich case 417: op = rv_op_binv; break; 28445748c886SWeiwei Li case 504: op = rv_op_aes64ks2; break; 28455748c886SWeiwei Li } 28465748c886SWeiwei Li switch ((inst >> 25) & 0b0011111) { 28475748c886SWeiwei Li case 17: op = rv_op_aes32esi; break; 28485748c886SWeiwei Li case 19: op = rv_op_aes32esmi; break; 28495748c886SWeiwei Li case 21: op = rv_op_aes32dsi; break; 28505748c886SWeiwei Li case 23: op = rv_op_aes32dsmi; break; 28515748c886SWeiwei Li case 24: op = rv_op_sm4ed; break; 28525748c886SWeiwei Li case 26: op = rv_op_sm4ks; break; 2853ea103259SMichael Clark } 2854ea103259SMichael Clark break; 2855ea103259SMichael Clark case 13: op = rv_op_lui; break; 2856ea103259SMichael Clark case 14: 285798624d13SWeiwei Li switch (((inst >> 22) & 0b1111111000) | 285898624d13SWeiwei Li ((inst >> 12) & 0b0000000111)) { 2859ea103259SMichael Clark case 0: op = rv_op_addw; break; 2860ea103259SMichael Clark case 1: op = rv_op_sllw; break; 2861ea103259SMichael Clark case 5: op = rv_op_srlw; break; 2862ea103259SMichael Clark case 8: op = rv_op_mulw; break; 2863ea103259SMichael Clark case 12: op = rv_op_divw; break; 2864ea103259SMichael Clark case 13: op = rv_op_divuw; break; 2865ea103259SMichael Clark case 14: op = rv_op_remw; break; 2866ea103259SMichael Clark case 15: op = rv_op_remuw; break; 286702c1b569SPhilipp Tomsich case 32: op = rv_op_add_uw; break; 286802c1b569SPhilipp Tomsich case 36: 286902c1b569SPhilipp Tomsich switch ((inst >> 20) & 0b11111) { 287002c1b569SPhilipp Tomsich case 0: op = rv_op_zext_h; break; 28715748c886SWeiwei Li default: op = rv_op_packw; break; 287202c1b569SPhilipp Tomsich } 287302c1b569SPhilipp Tomsich break; 287402c1b569SPhilipp Tomsich case 130: op = rv_op_sh1add_uw; break; 287502c1b569SPhilipp Tomsich case 132: op = rv_op_sh2add_uw; break; 287602c1b569SPhilipp Tomsich case 134: op = rv_op_sh3add_uw; break; 2877ea103259SMichael Clark case 256: op = rv_op_subw; break; 2878ea103259SMichael Clark case 261: op = rv_op_sraw; break; 287902c1b569SPhilipp Tomsich case 385: op = rv_op_rolw; break; 288002c1b569SPhilipp Tomsich case 389: op = rv_op_rorw; break; 2881ea103259SMichael Clark } 2882ea103259SMichael Clark break; 2883ea103259SMichael Clark case 16: 28843bd87176SWeiwei Li switch ((inst >> 25) & 0b11) { 2885ea103259SMichael Clark case 0: op = rv_op_fmadd_s; break; 2886ea103259SMichael Clark case 1: op = rv_op_fmadd_d; break; 2887ea103259SMichael Clark case 3: op = rv_op_fmadd_q; break; 2888ea103259SMichael Clark } 2889ea103259SMichael Clark break; 2890ea103259SMichael Clark case 17: 28913bd87176SWeiwei Li switch ((inst >> 25) & 0b11) { 2892ea103259SMichael Clark case 0: op = rv_op_fmsub_s; break; 2893ea103259SMichael Clark case 1: op = rv_op_fmsub_d; break; 2894ea103259SMichael Clark case 3: op = rv_op_fmsub_q; break; 2895ea103259SMichael Clark } 2896ea103259SMichael Clark break; 2897ea103259SMichael Clark case 18: 28983bd87176SWeiwei Li switch ((inst >> 25) & 0b11) { 2899ea103259SMichael Clark case 0: op = rv_op_fnmsub_s; break; 2900ea103259SMichael Clark case 1: op = rv_op_fnmsub_d; break; 2901ea103259SMichael Clark case 3: op = rv_op_fnmsub_q; break; 2902ea103259SMichael Clark } 2903ea103259SMichael Clark break; 2904ea103259SMichael Clark case 19: 29053bd87176SWeiwei Li switch ((inst >> 25) & 0b11) { 2906ea103259SMichael Clark case 0: op = rv_op_fnmadd_s; break; 2907ea103259SMichael Clark case 1: op = rv_op_fnmadd_d; break; 2908ea103259SMichael Clark case 3: op = rv_op_fnmadd_q; break; 2909ea103259SMichael Clark } 2910ea103259SMichael Clark break; 2911ea103259SMichael Clark case 20: 29123bd87176SWeiwei Li switch ((inst >> 25) & 0b1111111) { 2913ea103259SMichael Clark case 0: op = rv_op_fadd_s; break; 2914ea103259SMichael Clark case 1: op = rv_op_fadd_d; break; 2915ea103259SMichael Clark case 3: op = rv_op_fadd_q; break; 2916ea103259SMichael Clark case 4: op = rv_op_fsub_s; break; 2917ea103259SMichael Clark case 5: op = rv_op_fsub_d; break; 2918ea103259SMichael Clark case 7: op = rv_op_fsub_q; break; 2919ea103259SMichael Clark case 8: op = rv_op_fmul_s; break; 2920ea103259SMichael Clark case 9: op = rv_op_fmul_d; break; 2921ea103259SMichael Clark case 11: op = rv_op_fmul_q; break; 2922ea103259SMichael Clark case 12: op = rv_op_fdiv_s; break; 2923ea103259SMichael Clark case 13: op = rv_op_fdiv_d; break; 2924ea103259SMichael Clark case 15: op = rv_op_fdiv_q; break; 2925ea103259SMichael Clark case 16: 29263bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2927ea103259SMichael Clark case 0: op = rv_op_fsgnj_s; break; 2928ea103259SMichael Clark case 1: op = rv_op_fsgnjn_s; break; 2929ea103259SMichael Clark case 2: op = rv_op_fsgnjx_s; break; 2930ea103259SMichael Clark } 2931ea103259SMichael Clark break; 2932ea103259SMichael Clark case 17: 29333bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2934ea103259SMichael Clark case 0: op = rv_op_fsgnj_d; break; 2935ea103259SMichael Clark case 1: op = rv_op_fsgnjn_d; break; 2936ea103259SMichael Clark case 2: op = rv_op_fsgnjx_d; break; 2937ea103259SMichael Clark } 2938ea103259SMichael Clark break; 2939ea103259SMichael Clark case 19: 29403bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2941ea103259SMichael Clark case 0: op = rv_op_fsgnj_q; break; 2942ea103259SMichael Clark case 1: op = rv_op_fsgnjn_q; break; 2943ea103259SMichael Clark case 2: op = rv_op_fsgnjx_q; break; 2944ea103259SMichael Clark } 2945ea103259SMichael Clark break; 2946ea103259SMichael Clark case 20: 29473bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2948ea103259SMichael Clark case 0: op = rv_op_fmin_s; break; 2949ea103259SMichael Clark case 1: op = rv_op_fmax_s; break; 2950*a47842d1SChristoph Müllner case 2: op = rv_op_fminm_s; break; 2951*a47842d1SChristoph Müllner case 3: op = rv_op_fmaxm_s; break; 2952ea103259SMichael Clark } 2953ea103259SMichael Clark break; 2954ea103259SMichael Clark case 21: 29553bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2956ea103259SMichael Clark case 0: op = rv_op_fmin_d; break; 2957ea103259SMichael Clark case 1: op = rv_op_fmax_d; break; 2958*a47842d1SChristoph Müllner case 2: op = rv_op_fminm_d; break; 2959*a47842d1SChristoph Müllner case 3: op = rv_op_fmaxm_d; break; 2960*a47842d1SChristoph Müllner } 2961*a47842d1SChristoph Müllner break; 2962*a47842d1SChristoph Müllner case 22: 2963*a47842d1SChristoph Müllner switch (((inst >> 12) & 0b111)) { 2964*a47842d1SChristoph Müllner case 2: op = rv_op_fminm_h; break; 2965*a47842d1SChristoph Müllner case 3: op = rv_op_fmaxm_h; break; 2966ea103259SMichael Clark } 2967ea103259SMichael Clark break; 2968ea103259SMichael Clark case 23: 29693bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 2970ea103259SMichael Clark case 0: op = rv_op_fmin_q; break; 2971ea103259SMichael Clark case 1: op = rv_op_fmax_q; break; 2972*a47842d1SChristoph Müllner case 2: op = rv_op_fminm_q; break; 2973*a47842d1SChristoph Müllner case 3: op = rv_op_fmaxm_q; break; 2974ea103259SMichael Clark } 2975ea103259SMichael Clark break; 2976ea103259SMichael Clark case 32: 29773bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 2978ea103259SMichael Clark case 1: op = rv_op_fcvt_s_d; break; 2979ea103259SMichael Clark case 3: op = rv_op_fcvt_s_q; break; 2980*a47842d1SChristoph Müllner case 4: op = rv_op_fround_s; break; 2981*a47842d1SChristoph Müllner case 5: op = rv_op_froundnx_s; break; 298232b2d75bSWeiwei Li case 6: op = rv_op_fcvt_s_bf16; break; 2983ea103259SMichael Clark } 2984ea103259SMichael Clark break; 2985ea103259SMichael Clark case 33: 29863bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 2987ea103259SMichael Clark case 0: op = rv_op_fcvt_d_s; break; 2988ea103259SMichael Clark case 3: op = rv_op_fcvt_d_q; break; 2989*a47842d1SChristoph Müllner case 4: op = rv_op_fround_d; break; 2990*a47842d1SChristoph Müllner case 5: op = rv_op_froundnx_d; break; 2991ea103259SMichael Clark } 2992ea103259SMichael Clark break; 299332b2d75bSWeiwei Li case 34: 299432b2d75bSWeiwei Li switch (((inst >> 20) & 0b11111)) { 2995*a47842d1SChristoph Müllner case 4: op = rv_op_fround_h; break; 2996*a47842d1SChristoph Müllner case 5: op = rv_op_froundnx_h; break; 299732b2d75bSWeiwei Li case 8: op = rv_op_fcvt_bf16_s; break; 299832b2d75bSWeiwei Li } 299932b2d75bSWeiwei Li break; 3000ea103259SMichael Clark case 35: 30013bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3002ea103259SMichael Clark case 0: op = rv_op_fcvt_q_s; break; 3003ea103259SMichael Clark case 1: op = rv_op_fcvt_q_d; break; 3004*a47842d1SChristoph Müllner case 4: op = rv_op_fround_q; break; 3005*a47842d1SChristoph Müllner case 5: op = rv_op_froundnx_q; break; 3006ea103259SMichael Clark } 3007ea103259SMichael Clark break; 3008ea103259SMichael Clark case 44: 30093bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3010ea103259SMichael Clark case 0: op = rv_op_fsqrt_s; break; 3011ea103259SMichael Clark } 3012ea103259SMichael Clark break; 3013ea103259SMichael Clark case 45: 30143bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3015ea103259SMichael Clark case 0: op = rv_op_fsqrt_d; break; 3016ea103259SMichael Clark } 3017ea103259SMichael Clark break; 3018ea103259SMichael Clark case 47: 30193bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3020ea103259SMichael Clark case 0: op = rv_op_fsqrt_q; break; 3021ea103259SMichael Clark } 3022ea103259SMichael Clark break; 3023ea103259SMichael Clark case 80: 30243bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3025ea103259SMichael Clark case 0: op = rv_op_fle_s; break; 3026ea103259SMichael Clark case 1: op = rv_op_flt_s; break; 3027ea103259SMichael Clark case 2: op = rv_op_feq_s; break; 3028*a47842d1SChristoph Müllner case 4: op = rv_op_fleq_s; break; 3029*a47842d1SChristoph Müllner case 5: op = rv_op_fltq_s; break; 3030ea103259SMichael Clark } 3031ea103259SMichael Clark break; 3032ea103259SMichael Clark case 81: 30333bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3034ea103259SMichael Clark case 0: op = rv_op_fle_d; break; 3035ea103259SMichael Clark case 1: op = rv_op_flt_d; break; 3036ea103259SMichael Clark case 2: op = rv_op_feq_d; break; 3037*a47842d1SChristoph Müllner case 4: op = rv_op_fleq_d; break; 3038*a47842d1SChristoph Müllner case 5: op = rv_op_fltq_d; break; 3039*a47842d1SChristoph Müllner } 3040*a47842d1SChristoph Müllner break; 3041*a47842d1SChristoph Müllner case 82: 3042*a47842d1SChristoph Müllner switch (((inst >> 12) & 0b111)) { 3043*a47842d1SChristoph Müllner case 4: op = rv_op_fleq_h; break; 3044*a47842d1SChristoph Müllner case 5: op = rv_op_fltq_h; break; 3045ea103259SMichael Clark } 3046ea103259SMichael Clark break; 3047ea103259SMichael Clark case 83: 30483bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3049ea103259SMichael Clark case 0: op = rv_op_fle_q; break; 3050ea103259SMichael Clark case 1: op = rv_op_flt_q; break; 3051ea103259SMichael Clark case 2: op = rv_op_feq_q; break; 3052*a47842d1SChristoph Müllner case 4: op = rv_op_fleq_q; break; 3053*a47842d1SChristoph Müllner case 5: op = rv_op_fltq_q; break; 3054*a47842d1SChristoph Müllner } 3055*a47842d1SChristoph Müllner break; 3056*a47842d1SChristoph Müllner case 89: 3057*a47842d1SChristoph Müllner switch (((inst >> 12) & 0b111)) { 3058*a47842d1SChristoph Müllner case 0: op = rv_op_fmvp_d_x; break; 3059*a47842d1SChristoph Müllner } 3060*a47842d1SChristoph Müllner break; 3061*a47842d1SChristoph Müllner case 91: 3062*a47842d1SChristoph Müllner switch (((inst >> 12) & 0b111)) { 3063*a47842d1SChristoph Müllner case 0: op = rv_op_fmvp_q_x; break; 3064ea103259SMichael Clark } 3065ea103259SMichael Clark break; 3066ea103259SMichael Clark case 96: 30673bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3068ea103259SMichael Clark case 0: op = rv_op_fcvt_w_s; break; 3069ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_s; break; 3070ea103259SMichael Clark case 2: op = rv_op_fcvt_l_s; break; 3071ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_s; break; 3072ea103259SMichael Clark } 3073ea103259SMichael Clark break; 3074ea103259SMichael Clark case 97: 30753bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3076ea103259SMichael Clark case 0: op = rv_op_fcvt_w_d; break; 3077ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_d; break; 3078ea103259SMichael Clark case 2: op = rv_op_fcvt_l_d; break; 3079ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_d; break; 3080*a47842d1SChristoph Müllner case 8: op = rv_op_fcvtmod_w_d; break; 3081ea103259SMichael Clark } 3082ea103259SMichael Clark break; 3083ea103259SMichael Clark case 99: 30843bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3085ea103259SMichael Clark case 0: op = rv_op_fcvt_w_q; break; 3086ea103259SMichael Clark case 1: op = rv_op_fcvt_wu_q; break; 3087ea103259SMichael Clark case 2: op = rv_op_fcvt_l_q; break; 3088ea103259SMichael Clark case 3: op = rv_op_fcvt_lu_q; break; 3089ea103259SMichael Clark } 3090ea103259SMichael Clark break; 3091ea103259SMichael Clark case 104: 30923bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3093ea103259SMichael Clark case 0: op = rv_op_fcvt_s_w; break; 3094ea103259SMichael Clark case 1: op = rv_op_fcvt_s_wu; break; 3095ea103259SMichael Clark case 2: op = rv_op_fcvt_s_l; break; 3096ea103259SMichael Clark case 3: op = rv_op_fcvt_s_lu; break; 3097ea103259SMichael Clark } 3098ea103259SMichael Clark break; 3099ea103259SMichael Clark case 105: 31003bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3101ea103259SMichael Clark case 0: op = rv_op_fcvt_d_w; break; 3102ea103259SMichael Clark case 1: op = rv_op_fcvt_d_wu; break; 3103ea103259SMichael Clark case 2: op = rv_op_fcvt_d_l; break; 3104ea103259SMichael Clark case 3: op = rv_op_fcvt_d_lu; break; 3105ea103259SMichael Clark } 3106ea103259SMichael Clark break; 3107ea103259SMichael Clark case 107: 31083bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3109ea103259SMichael Clark case 0: op = rv_op_fcvt_q_w; break; 3110ea103259SMichael Clark case 1: op = rv_op_fcvt_q_wu; break; 3111ea103259SMichael Clark case 2: op = rv_op_fcvt_q_l; break; 3112ea103259SMichael Clark case 3: op = rv_op_fcvt_q_lu; break; 3113ea103259SMichael Clark } 3114ea103259SMichael Clark break; 3115ea103259SMichael Clark case 112: 311698624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 311798624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3118ea103259SMichael Clark case 0: op = rv_op_fmv_x_s; break; 3119ea103259SMichael Clark case 1: op = rv_op_fclass_s; break; 3120ea103259SMichael Clark } 3121ea103259SMichael Clark break; 3122ea103259SMichael Clark case 113: 312398624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 312498624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3125ea103259SMichael Clark case 0: op = rv_op_fmv_x_d; break; 3126ea103259SMichael Clark case 1: op = rv_op_fclass_d; break; 3127*a47842d1SChristoph Müllner case 8: op = rv_op_fmvh_x_d; break; 3128ea103259SMichael Clark } 3129ea103259SMichael Clark break; 313032b2d75bSWeiwei Li case 114: 313132b2d75bSWeiwei Li switch (((inst >> 17) & 0b11111000) | 313232b2d75bSWeiwei Li ((inst >> 12) & 0b00000111)) { 313332b2d75bSWeiwei Li case 0: op = rv_op_fmv_x_h; break; 313432b2d75bSWeiwei Li } 313532b2d75bSWeiwei Li break; 3136ea103259SMichael Clark case 115: 313798624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 313898624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3139ea103259SMichael Clark case 0: op = rv_op_fmv_x_q; break; 3140ea103259SMichael Clark case 1: op = rv_op_fclass_q; break; 3141*a47842d1SChristoph Müllner case 8: op = rv_op_fmvh_x_q; break; 3142ea103259SMichael Clark } 3143ea103259SMichael Clark break; 3144ea103259SMichael Clark case 120: 314598624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 314698624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3147ea103259SMichael Clark case 0: op = rv_op_fmv_s_x; break; 3148*a47842d1SChristoph Müllner case 8: op = rv_op_fli_s; break; 3149ea103259SMichael Clark } 3150ea103259SMichael Clark break; 3151ea103259SMichael Clark case 121: 315298624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 315398624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3154ea103259SMichael Clark case 0: op = rv_op_fmv_d_x; break; 3155*a47842d1SChristoph Müllner case 8: op = rv_op_fli_d; break; 3156ea103259SMichael Clark } 3157ea103259SMichael Clark break; 315832b2d75bSWeiwei Li case 122: 315932b2d75bSWeiwei Li switch (((inst >> 17) & 0b11111000) | 316032b2d75bSWeiwei Li ((inst >> 12) & 0b00000111)) { 316132b2d75bSWeiwei Li case 0: op = rv_op_fmv_h_x; break; 3162*a47842d1SChristoph Müllner case 8: op = rv_op_fli_h; break; 316332b2d75bSWeiwei Li } 316432b2d75bSWeiwei Li break; 3165ea103259SMichael Clark case 123: 316698624d13SWeiwei Li switch (((inst >> 17) & 0b11111000) | 316798624d13SWeiwei Li ((inst >> 12) & 0b00000111)) { 3168ea103259SMichael Clark case 0: op = rv_op_fmv_q_x; break; 3169*a47842d1SChristoph Müllner case 8: op = rv_op_fli_q; break; 3170ea103259SMichael Clark } 3171ea103259SMichael Clark break; 3172ea103259SMichael Clark } 3173ea103259SMichael Clark break; 317407f4964dSYang Liu case 21: 31753bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 317607f4964dSYang Liu case 0: 31773bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 317807f4964dSYang Liu case 0: op = rv_op_vadd_vv; break; 317907f4964dSYang Liu case 2: op = rv_op_vsub_vv; break; 318007f4964dSYang Liu case 4: op = rv_op_vminu_vv; break; 318107f4964dSYang Liu case 5: op = rv_op_vmin_vv; break; 318207f4964dSYang Liu case 6: op = rv_op_vmaxu_vv; break; 318307f4964dSYang Liu case 7: op = rv_op_vmax_vv; break; 318407f4964dSYang Liu case 9: op = rv_op_vand_vv; break; 318507f4964dSYang Liu case 10: op = rv_op_vor_vv; break; 318607f4964dSYang Liu case 11: op = rv_op_vxor_vv; break; 318707f4964dSYang Liu case 12: op = rv_op_vrgather_vv; break; 318807f4964dSYang Liu case 14: op = rv_op_vrgatherei16_vv; break; 318998624d13SWeiwei Li case 16: 319098624d13SWeiwei Li if (((inst >> 25) & 1) == 0) { 319198624d13SWeiwei Li op = rv_op_vadc_vvm; 319298624d13SWeiwei Li } 319398624d13SWeiwei Li break; 319407f4964dSYang Liu case 17: op = rv_op_vmadc_vvm; break; 319598624d13SWeiwei Li case 18: 319698624d13SWeiwei Li if (((inst >> 25) & 1) == 0) { 319798624d13SWeiwei Li op = rv_op_vsbc_vvm; 319898624d13SWeiwei Li } 319998624d13SWeiwei Li break; 320007f4964dSYang Liu case 19: op = rv_op_vmsbc_vvm; break; 320107f4964dSYang Liu case 23: 320207f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 320307f4964dSYang Liu op = rv_op_vmv_v_v; 320407f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 320507f4964dSYang Liu op = rv_op_vmerge_vvm; 320607f4964dSYang Liu break; 320707f4964dSYang Liu case 24: op = rv_op_vmseq_vv; break; 320807f4964dSYang Liu case 25: op = rv_op_vmsne_vv; break; 320907f4964dSYang Liu case 26: op = rv_op_vmsltu_vv; break; 321007f4964dSYang Liu case 27: op = rv_op_vmslt_vv; break; 321107f4964dSYang Liu case 28: op = rv_op_vmsleu_vv; break; 321207f4964dSYang Liu case 29: op = rv_op_vmsle_vv; break; 321307f4964dSYang Liu case 32: op = rv_op_vsaddu_vv; break; 321407f4964dSYang Liu case 33: op = rv_op_vsadd_vv; break; 321507f4964dSYang Liu case 34: op = rv_op_vssubu_vv; break; 321607f4964dSYang Liu case 35: op = rv_op_vssub_vv; break; 321707f4964dSYang Liu case 37: op = rv_op_vsll_vv; break; 321807f4964dSYang Liu case 39: op = rv_op_vsmul_vv; break; 321907f4964dSYang Liu case 40: op = rv_op_vsrl_vv; break; 322007f4964dSYang Liu case 41: op = rv_op_vsra_vv; break; 322107f4964dSYang Liu case 42: op = rv_op_vssrl_vv; break; 322207f4964dSYang Liu case 43: op = rv_op_vssra_vv; break; 322307f4964dSYang Liu case 44: op = rv_op_vnsrl_wv; break; 322407f4964dSYang Liu case 45: op = rv_op_vnsra_wv; break; 322507f4964dSYang Liu case 46: op = rv_op_vnclipu_wv; break; 322607f4964dSYang Liu case 47: op = rv_op_vnclip_wv; break; 322707f4964dSYang Liu case 48: op = rv_op_vwredsumu_vs; break; 322807f4964dSYang Liu case 49: op = rv_op_vwredsum_vs; break; 322907f4964dSYang Liu } 323007f4964dSYang Liu break; 323107f4964dSYang Liu case 1: 32323bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 323307f4964dSYang Liu case 0: op = rv_op_vfadd_vv; break; 323407f4964dSYang Liu case 1: op = rv_op_vfredusum_vs; break; 323507f4964dSYang Liu case 2: op = rv_op_vfsub_vv; break; 323607f4964dSYang Liu case 3: op = rv_op_vfredosum_vs; break; 323707f4964dSYang Liu case 4: op = rv_op_vfmin_vv; break; 323807f4964dSYang Liu case 5: op = rv_op_vfredmin_vs; break; 323907f4964dSYang Liu case 6: op = rv_op_vfmax_vv; break; 324007f4964dSYang Liu case 7: op = rv_op_vfredmax_vs; break; 324107f4964dSYang Liu case 8: op = rv_op_vfsgnj_vv; break; 324207f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vv; break; 324307f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vv; break; 324407f4964dSYang Liu case 16: 32453bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 324607f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_f_s; break; 324707f4964dSYang Liu } 324807f4964dSYang Liu break; 324907f4964dSYang Liu case 18: 32503bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 325107f4964dSYang Liu case 0: op = rv_op_vfcvt_xu_f_v; break; 325207f4964dSYang Liu case 1: op = rv_op_vfcvt_x_f_v; break; 325307f4964dSYang Liu case 2: op = rv_op_vfcvt_f_xu_v; break; 325407f4964dSYang Liu case 3: op = rv_op_vfcvt_f_x_v; break; 325507f4964dSYang Liu case 6: op = rv_op_vfcvt_rtz_xu_f_v; break; 325607f4964dSYang Liu case 7: op = rv_op_vfcvt_rtz_x_f_v; break; 325707f4964dSYang Liu case 8: op = rv_op_vfwcvt_xu_f_v; break; 325807f4964dSYang Liu case 9: op = rv_op_vfwcvt_x_f_v; break; 325907f4964dSYang Liu case 10: op = rv_op_vfwcvt_f_xu_v; break; 326007f4964dSYang Liu case 11: op = rv_op_vfwcvt_f_x_v; break; 326107f4964dSYang Liu case 12: op = rv_op_vfwcvt_f_f_v; break; 326232b2d75bSWeiwei Li case 13: op = rv_op_vfwcvtbf16_f_f_v; break; 326307f4964dSYang Liu case 14: op = rv_op_vfwcvt_rtz_xu_f_v; break; 326407f4964dSYang Liu case 15: op = rv_op_vfwcvt_rtz_x_f_v; break; 326507f4964dSYang Liu case 16: op = rv_op_vfncvt_xu_f_w; break; 326607f4964dSYang Liu case 17: op = rv_op_vfncvt_x_f_w; break; 326707f4964dSYang Liu case 18: op = rv_op_vfncvt_f_xu_w; break; 326807f4964dSYang Liu case 19: op = rv_op_vfncvt_f_x_w; break; 326907f4964dSYang Liu case 20: op = rv_op_vfncvt_f_f_w; break; 327007f4964dSYang Liu case 21: op = rv_op_vfncvt_rod_f_f_w; break; 327107f4964dSYang Liu case 22: op = rv_op_vfncvt_rtz_xu_f_w; break; 327207f4964dSYang Liu case 23: op = rv_op_vfncvt_rtz_x_f_w; break; 327332b2d75bSWeiwei Li case 29: op = rv_op_vfncvtbf16_f_f_w; break; 327407f4964dSYang Liu } 327507f4964dSYang Liu break; 327607f4964dSYang Liu case 19: 32773bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 327807f4964dSYang Liu case 0: op = rv_op_vfsqrt_v; break; 327907f4964dSYang Liu case 4: op = rv_op_vfrsqrt7_v; break; 328007f4964dSYang Liu case 5: op = rv_op_vfrec7_v; break; 328107f4964dSYang Liu case 16: op = rv_op_vfclass_v; break; 328207f4964dSYang Liu } 328307f4964dSYang Liu break; 328407f4964dSYang Liu case 24: op = rv_op_vmfeq_vv; break; 328507f4964dSYang Liu case 25: op = rv_op_vmfle_vv; break; 328607f4964dSYang Liu case 27: op = rv_op_vmflt_vv; break; 328707f4964dSYang Liu case 28: op = rv_op_vmfne_vv; break; 328807f4964dSYang Liu case 32: op = rv_op_vfdiv_vv; break; 328907f4964dSYang Liu case 36: op = rv_op_vfmul_vv; break; 329007f4964dSYang Liu case 40: op = rv_op_vfmadd_vv; break; 329107f4964dSYang Liu case 41: op = rv_op_vfnmadd_vv; break; 329207f4964dSYang Liu case 42: op = rv_op_vfmsub_vv; break; 329307f4964dSYang Liu case 43: op = rv_op_vfnmsub_vv; break; 329407f4964dSYang Liu case 44: op = rv_op_vfmacc_vv; break; 329507f4964dSYang Liu case 45: op = rv_op_vfnmacc_vv; break; 329607f4964dSYang Liu case 46: op = rv_op_vfmsac_vv; break; 329707f4964dSYang Liu case 47: op = rv_op_vfnmsac_vv; break; 329807f4964dSYang Liu case 48: op = rv_op_vfwadd_vv; break; 329907f4964dSYang Liu case 49: op = rv_op_vfwredusum_vs; break; 330007f4964dSYang Liu case 50: op = rv_op_vfwsub_vv; break; 330107f4964dSYang Liu case 51: op = rv_op_vfwredosum_vs; break; 330207f4964dSYang Liu case 52: op = rv_op_vfwadd_wv; break; 330307f4964dSYang Liu case 54: op = rv_op_vfwsub_wv; break; 330407f4964dSYang Liu case 56: op = rv_op_vfwmul_vv; break; 330532b2d75bSWeiwei Li case 59: op = rv_op_vfwmaccbf16_vv; break; 330607f4964dSYang Liu case 60: op = rv_op_vfwmacc_vv; break; 330707f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vv; break; 330807f4964dSYang Liu case 62: op = rv_op_vfwmsac_vv; break; 330907f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vv; break; 331007f4964dSYang Liu } 331107f4964dSYang Liu break; 331207f4964dSYang Liu case 2: 33133bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 331407f4964dSYang Liu case 0: op = rv_op_vredsum_vs; break; 331507f4964dSYang Liu case 1: op = rv_op_vredand_vs; break; 331607f4964dSYang Liu case 2: op = rv_op_vredor_vs; break; 331707f4964dSYang Liu case 3: op = rv_op_vredxor_vs; break; 331807f4964dSYang Liu case 4: op = rv_op_vredminu_vs; break; 331907f4964dSYang Liu case 5: op = rv_op_vredmin_vs; break; 332007f4964dSYang Liu case 6: op = rv_op_vredmaxu_vs; break; 332107f4964dSYang Liu case 7: op = rv_op_vredmax_vs; break; 332207f4964dSYang Liu case 8: op = rv_op_vaaddu_vv; break; 332307f4964dSYang Liu case 9: op = rv_op_vaadd_vv; break; 332407f4964dSYang Liu case 10: op = rv_op_vasubu_vv; break; 332507f4964dSYang Liu case 11: op = rv_op_vasub_vv; break; 332607f4964dSYang Liu case 16: 33273bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 332807f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_x_s; break; 332907f4964dSYang Liu case 16: op = rv_op_vcpop_m; break; 333007f4964dSYang Liu case 17: op = rv_op_vfirst_m; break; 333107f4964dSYang Liu } 333207f4964dSYang Liu break; 333307f4964dSYang Liu case 18: 33343bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 333507f4964dSYang Liu case 2: op = rv_op_vzext_vf8; break; 333607f4964dSYang Liu case 3: op = rv_op_vsext_vf8; break; 333707f4964dSYang Liu case 4: op = rv_op_vzext_vf4; break; 333807f4964dSYang Liu case 5: op = rv_op_vsext_vf4; break; 333907f4964dSYang Liu case 6: op = rv_op_vzext_vf2; break; 334007f4964dSYang Liu case 7: op = rv_op_vsext_vf2; break; 334107f4964dSYang Liu } 334207f4964dSYang Liu break; 334307f4964dSYang Liu case 20: 33443bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 334507f4964dSYang Liu case 1: op = rv_op_vmsbf_m; break; 334607f4964dSYang Liu case 2: op = rv_op_vmsof_m; break; 334707f4964dSYang Liu case 3: op = rv_op_vmsif_m; break; 334807f4964dSYang Liu case 16: op = rv_op_viota_m; break; 334998624d13SWeiwei Li case 17: 335098624d13SWeiwei Li if (((inst >> 20) & 0b11111) == 0) { 335198624d13SWeiwei Li op = rv_op_vid_v; 335298624d13SWeiwei Li } 335398624d13SWeiwei Li break; 335407f4964dSYang Liu } 335507f4964dSYang Liu break; 335607f4964dSYang Liu case 23: if ((inst >> 25) & 1) op = rv_op_vcompress_vm; break; 335707f4964dSYang Liu case 24: if ((inst >> 25) & 1) op = rv_op_vmandn_mm; break; 335807f4964dSYang Liu case 25: if ((inst >> 25) & 1) op = rv_op_vmand_mm; break; 335907f4964dSYang Liu case 26: if ((inst >> 25) & 1) op = rv_op_vmor_mm; break; 336007f4964dSYang Liu case 27: if ((inst >> 25) & 1) op = rv_op_vmxor_mm; break; 336107f4964dSYang Liu case 28: if ((inst >> 25) & 1) op = rv_op_vmorn_mm; break; 336207f4964dSYang Liu case 29: if ((inst >> 25) & 1) op = rv_op_vmnand_mm; break; 336307f4964dSYang Liu case 30: if ((inst >> 25) & 1) op = rv_op_vmnor_mm; break; 336407f4964dSYang Liu case 31: if ((inst >> 25) & 1) op = rv_op_vmxnor_mm; break; 336507f4964dSYang Liu case 32: op = rv_op_vdivu_vv; break; 336607f4964dSYang Liu case 33: op = rv_op_vdiv_vv; break; 336707f4964dSYang Liu case 34: op = rv_op_vremu_vv; break; 336807f4964dSYang Liu case 35: op = rv_op_vrem_vv; break; 336907f4964dSYang Liu case 36: op = rv_op_vmulhu_vv; break; 337007f4964dSYang Liu case 37: op = rv_op_vmul_vv; break; 337107f4964dSYang Liu case 38: op = rv_op_vmulhsu_vv; break; 337207f4964dSYang Liu case 39: op = rv_op_vmulh_vv; break; 337307f4964dSYang Liu case 41: op = rv_op_vmadd_vv; break; 337407f4964dSYang Liu case 43: op = rv_op_vnmsub_vv; break; 337507f4964dSYang Liu case 45: op = rv_op_vmacc_vv; break; 337607f4964dSYang Liu case 47: op = rv_op_vnmsac_vv; break; 337707f4964dSYang Liu case 48: op = rv_op_vwaddu_vv; break; 337807f4964dSYang Liu case 49: op = rv_op_vwadd_vv; break; 337907f4964dSYang Liu case 50: op = rv_op_vwsubu_vv; break; 338007f4964dSYang Liu case 51: op = rv_op_vwsub_vv; break; 338107f4964dSYang Liu case 52: op = rv_op_vwaddu_wv; break; 338207f4964dSYang Liu case 53: op = rv_op_vwadd_wv; break; 338307f4964dSYang Liu case 54: op = rv_op_vwsubu_wv; break; 338407f4964dSYang Liu case 55: op = rv_op_vwsub_wv; break; 338507f4964dSYang Liu case 56: op = rv_op_vwmulu_vv; break; 338607f4964dSYang Liu case 58: op = rv_op_vwmulsu_vv; break; 338707f4964dSYang Liu case 59: op = rv_op_vwmul_vv; break; 338807f4964dSYang Liu case 60: op = rv_op_vwmaccu_vv; break; 338907f4964dSYang Liu case 61: op = rv_op_vwmacc_vv; break; 339007f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vv; break; 339107f4964dSYang Liu } 339207f4964dSYang Liu break; 339307f4964dSYang Liu case 3: 33943bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 339507f4964dSYang Liu case 0: op = rv_op_vadd_vi; break; 339607f4964dSYang Liu case 3: op = rv_op_vrsub_vi; break; 339707f4964dSYang Liu case 9: op = rv_op_vand_vi; break; 339807f4964dSYang Liu case 10: op = rv_op_vor_vi; break; 339907f4964dSYang Liu case 11: op = rv_op_vxor_vi; break; 340007f4964dSYang Liu case 12: op = rv_op_vrgather_vi; break; 340107f4964dSYang Liu case 14: op = rv_op_vslideup_vi; break; 340207f4964dSYang Liu case 15: op = rv_op_vslidedown_vi; break; 340398624d13SWeiwei Li case 16: 340498624d13SWeiwei Li if (((inst >> 25) & 1) == 0) { 340598624d13SWeiwei Li op = rv_op_vadc_vim; 340698624d13SWeiwei Li } 340798624d13SWeiwei Li break; 340807f4964dSYang Liu case 17: op = rv_op_vmadc_vim; break; 340907f4964dSYang Liu case 23: 341007f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 341107f4964dSYang Liu op = rv_op_vmv_v_i; 341207f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 341307f4964dSYang Liu op = rv_op_vmerge_vim; 341407f4964dSYang Liu break; 341507f4964dSYang Liu case 24: op = rv_op_vmseq_vi; break; 341607f4964dSYang Liu case 25: op = rv_op_vmsne_vi; break; 341707f4964dSYang Liu case 28: op = rv_op_vmsleu_vi; break; 341807f4964dSYang Liu case 29: op = rv_op_vmsle_vi; break; 341907f4964dSYang Liu case 30: op = rv_op_vmsgtu_vi; break; 342007f4964dSYang Liu case 31: op = rv_op_vmsgt_vi; break; 342107f4964dSYang Liu case 32: op = rv_op_vsaddu_vi; break; 342207f4964dSYang Liu case 33: op = rv_op_vsadd_vi; break; 342307f4964dSYang Liu case 37: op = rv_op_vsll_vi; break; 342407f4964dSYang Liu case 39: 34253bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 342607f4964dSYang Liu case 0: op = rv_op_vmv1r_v; break; 342707f4964dSYang Liu case 1: op = rv_op_vmv2r_v; break; 342807f4964dSYang Liu case 3: op = rv_op_vmv4r_v; break; 342907f4964dSYang Liu case 7: op = rv_op_vmv8r_v; break; 343007f4964dSYang Liu } 343107f4964dSYang Liu break; 343207f4964dSYang Liu case 40: op = rv_op_vsrl_vi; break; 343307f4964dSYang Liu case 41: op = rv_op_vsra_vi; break; 343407f4964dSYang Liu case 42: op = rv_op_vssrl_vi; break; 343507f4964dSYang Liu case 43: op = rv_op_vssra_vi; break; 343607f4964dSYang Liu case 44: op = rv_op_vnsrl_wi; break; 343707f4964dSYang Liu case 45: op = rv_op_vnsra_wi; break; 343807f4964dSYang Liu case 46: op = rv_op_vnclipu_wi; break; 343907f4964dSYang Liu case 47: op = rv_op_vnclip_wi; break; 344007f4964dSYang Liu } 344107f4964dSYang Liu break; 344207f4964dSYang Liu case 4: 34433bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 344407f4964dSYang Liu case 0: op = rv_op_vadd_vx; break; 344507f4964dSYang Liu case 2: op = rv_op_vsub_vx; break; 344607f4964dSYang Liu case 3: op = rv_op_vrsub_vx; break; 344707f4964dSYang Liu case 4: op = rv_op_vminu_vx; break; 344807f4964dSYang Liu case 5: op = rv_op_vmin_vx; break; 344907f4964dSYang Liu case 6: op = rv_op_vmaxu_vx; break; 345007f4964dSYang Liu case 7: op = rv_op_vmax_vx; break; 345107f4964dSYang Liu case 9: op = rv_op_vand_vx; break; 345207f4964dSYang Liu case 10: op = rv_op_vor_vx; break; 345307f4964dSYang Liu case 11: op = rv_op_vxor_vx; break; 345407f4964dSYang Liu case 12: op = rv_op_vrgather_vx; break; 345507f4964dSYang Liu case 14: op = rv_op_vslideup_vx; break; 345607f4964dSYang Liu case 15: op = rv_op_vslidedown_vx; break; 345798624d13SWeiwei Li case 16: 345898624d13SWeiwei Li if (((inst >> 25) & 1) == 0) { 345998624d13SWeiwei Li op = rv_op_vadc_vxm; 346098624d13SWeiwei Li } 346198624d13SWeiwei Li break; 346207f4964dSYang Liu case 17: op = rv_op_vmadc_vxm; break; 346398624d13SWeiwei Li case 18: 346498624d13SWeiwei Li if (((inst >> 25) & 1) == 0) { 346598624d13SWeiwei Li op = rv_op_vsbc_vxm; 346698624d13SWeiwei Li } 346798624d13SWeiwei Li break; 346807f4964dSYang Liu case 19: op = rv_op_vmsbc_vxm; break; 346907f4964dSYang Liu case 23: 347007f4964dSYang Liu if (((inst >> 20) & 0b111111) == 32) 347107f4964dSYang Liu op = rv_op_vmv_v_x; 347207f4964dSYang Liu else if (((inst >> 25) & 1) == 0) 347307f4964dSYang Liu op = rv_op_vmerge_vxm; 347407f4964dSYang Liu break; 347507f4964dSYang Liu case 24: op = rv_op_vmseq_vx; break; 347607f4964dSYang Liu case 25: op = rv_op_vmsne_vx; break; 347707f4964dSYang Liu case 26: op = rv_op_vmsltu_vx; break; 347807f4964dSYang Liu case 27: op = rv_op_vmslt_vx; break; 347907f4964dSYang Liu case 28: op = rv_op_vmsleu_vx; break; 348007f4964dSYang Liu case 29: op = rv_op_vmsle_vx; break; 348107f4964dSYang Liu case 30: op = rv_op_vmsgtu_vx; break; 348207f4964dSYang Liu case 31: op = rv_op_vmsgt_vx; break; 348307f4964dSYang Liu case 32: op = rv_op_vsaddu_vx; break; 348407f4964dSYang Liu case 33: op = rv_op_vsadd_vx; break; 348507f4964dSYang Liu case 34: op = rv_op_vssubu_vx; break; 348607f4964dSYang Liu case 35: op = rv_op_vssub_vx; break; 348707f4964dSYang Liu case 37: op = rv_op_vsll_vx; break; 348807f4964dSYang Liu case 39: op = rv_op_vsmul_vx; break; 348907f4964dSYang Liu case 40: op = rv_op_vsrl_vx; break; 349007f4964dSYang Liu case 41: op = rv_op_vsra_vx; break; 349107f4964dSYang Liu case 42: op = rv_op_vssrl_vx; break; 349207f4964dSYang Liu case 43: op = rv_op_vssra_vx; break; 349307f4964dSYang Liu case 44: op = rv_op_vnsrl_wx; break; 349407f4964dSYang Liu case 45: op = rv_op_vnsra_wx; break; 349507f4964dSYang Liu case 46: op = rv_op_vnclipu_wx; break; 349607f4964dSYang Liu case 47: op = rv_op_vnclip_wx; break; 349707f4964dSYang Liu } 349807f4964dSYang Liu break; 349907f4964dSYang Liu case 5: 35003bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 350107f4964dSYang Liu case 0: op = rv_op_vfadd_vf; break; 350207f4964dSYang Liu case 2: op = rv_op_vfsub_vf; break; 350307f4964dSYang Liu case 4: op = rv_op_vfmin_vf; break; 350407f4964dSYang Liu case 6: op = rv_op_vfmax_vf; break; 350507f4964dSYang Liu case 8: op = rv_op_vfsgnj_vf; break; 350607f4964dSYang Liu case 9: op = rv_op_vfsgnjn_vf; break; 350707f4964dSYang Liu case 10: op = rv_op_vfsgnjx_vf; break; 350807f4964dSYang Liu case 14: op = rv_op_vfslide1up_vf; break; 350907f4964dSYang Liu case 15: op = rv_op_vfslide1down_vf; break; 351007f4964dSYang Liu case 16: 35113bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 351207f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vfmv_s_f; break; 351307f4964dSYang Liu } 351407f4964dSYang Liu break; 351507f4964dSYang Liu case 23: 351607f4964dSYang Liu if (((inst >> 25) & 1) == 0) 351707f4964dSYang Liu op = rv_op_vfmerge_vfm; 351807f4964dSYang Liu else if (((inst >> 20) & 0b111111) == 32) 351907f4964dSYang Liu op = rv_op_vfmv_v_f; 352007f4964dSYang Liu break; 352107f4964dSYang Liu case 24: op = rv_op_vmfeq_vf; break; 352207f4964dSYang Liu case 25: op = rv_op_vmfle_vf; break; 352307f4964dSYang Liu case 27: op = rv_op_vmflt_vf; break; 352407f4964dSYang Liu case 28: op = rv_op_vmfne_vf; break; 352507f4964dSYang Liu case 29: op = rv_op_vmfgt_vf; break; 352607f4964dSYang Liu case 31: op = rv_op_vmfge_vf; break; 352707f4964dSYang Liu case 32: op = rv_op_vfdiv_vf; break; 352807f4964dSYang Liu case 33: op = rv_op_vfrdiv_vf; break; 352907f4964dSYang Liu case 36: op = rv_op_vfmul_vf; break; 353007f4964dSYang Liu case 39: op = rv_op_vfrsub_vf; break; 353107f4964dSYang Liu case 40: op = rv_op_vfmadd_vf; break; 353207f4964dSYang Liu case 41: op = rv_op_vfnmadd_vf; break; 353307f4964dSYang Liu case 42: op = rv_op_vfmsub_vf; break; 353407f4964dSYang Liu case 43: op = rv_op_vfnmsub_vf; break; 353507f4964dSYang Liu case 44: op = rv_op_vfmacc_vf; break; 353607f4964dSYang Liu case 45: op = rv_op_vfnmacc_vf; break; 353707f4964dSYang Liu case 46: op = rv_op_vfmsac_vf; break; 353807f4964dSYang Liu case 47: op = rv_op_vfnmsac_vf; break; 353907f4964dSYang Liu case 48: op = rv_op_vfwadd_vf; break; 354007f4964dSYang Liu case 50: op = rv_op_vfwsub_vf; break; 354107f4964dSYang Liu case 52: op = rv_op_vfwadd_wf; break; 354207f4964dSYang Liu case 54: op = rv_op_vfwsub_wf; break; 354307f4964dSYang Liu case 56: op = rv_op_vfwmul_vf; break; 354432b2d75bSWeiwei Li case 59: op = rv_op_vfwmaccbf16_vf; break; 354507f4964dSYang Liu case 60: op = rv_op_vfwmacc_vf; break; 354607f4964dSYang Liu case 61: op = rv_op_vfwnmacc_vf; break; 354707f4964dSYang Liu case 62: op = rv_op_vfwmsac_vf; break; 354807f4964dSYang Liu case 63: op = rv_op_vfwnmsac_vf; break; 354907f4964dSYang Liu } 355007f4964dSYang Liu break; 355107f4964dSYang Liu case 6: 35523bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 355307f4964dSYang Liu case 8: op = rv_op_vaaddu_vx; break; 355407f4964dSYang Liu case 9: op = rv_op_vaadd_vx; break; 355507f4964dSYang Liu case 10: op = rv_op_vasubu_vx; break; 355607f4964dSYang Liu case 11: op = rv_op_vasub_vx; break; 355707f4964dSYang Liu case 14: op = rv_op_vslide1up_vx; break; 355807f4964dSYang Liu case 15: op = rv_op_vslide1down_vx; break; 355907f4964dSYang Liu case 16: 35603bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 356107f4964dSYang Liu case 0: if ((inst >> 25) & 1) op = rv_op_vmv_s_x; break; 356207f4964dSYang Liu } 356307f4964dSYang Liu break; 356407f4964dSYang Liu case 32: op = rv_op_vdivu_vx; break; 356507f4964dSYang Liu case 33: op = rv_op_vdiv_vx; break; 356607f4964dSYang Liu case 34: op = rv_op_vremu_vx; break; 356707f4964dSYang Liu case 35: op = rv_op_vrem_vx; break; 356807f4964dSYang Liu case 36: op = rv_op_vmulhu_vx; break; 356907f4964dSYang Liu case 37: op = rv_op_vmul_vx; break; 357007f4964dSYang Liu case 38: op = rv_op_vmulhsu_vx; break; 357107f4964dSYang Liu case 39: op = rv_op_vmulh_vx; break; 357207f4964dSYang Liu case 41: op = rv_op_vmadd_vx; break; 357307f4964dSYang Liu case 43: op = rv_op_vnmsub_vx; break; 357407f4964dSYang Liu case 45: op = rv_op_vmacc_vx; break; 357507f4964dSYang Liu case 47: op = rv_op_vnmsac_vx; break; 357607f4964dSYang Liu case 48: op = rv_op_vwaddu_vx; break; 357707f4964dSYang Liu case 49: op = rv_op_vwadd_vx; break; 357807f4964dSYang Liu case 50: op = rv_op_vwsubu_vx; break; 357907f4964dSYang Liu case 51: op = rv_op_vwsub_vx; break; 358007f4964dSYang Liu case 52: op = rv_op_vwaddu_wx; break; 358107f4964dSYang Liu case 53: op = rv_op_vwadd_wx; break; 358207f4964dSYang Liu case 54: op = rv_op_vwsubu_wx; break; 358307f4964dSYang Liu case 55: op = rv_op_vwsub_wx; break; 358407f4964dSYang Liu case 56: op = rv_op_vwmulu_vx; break; 358507f4964dSYang Liu case 58: op = rv_op_vwmulsu_vx; break; 358607f4964dSYang Liu case 59: op = rv_op_vwmul_vx; break; 358707f4964dSYang Liu case 60: op = rv_op_vwmaccu_vx; break; 358807f4964dSYang Liu case 61: op = rv_op_vwmacc_vx; break; 358907f4964dSYang Liu case 62: op = rv_op_vwmaccus_vx; break; 359007f4964dSYang Liu case 63: op = rv_op_vwmaccsu_vx; break; 359107f4964dSYang Liu } 359207f4964dSYang Liu break; 359307f4964dSYang Liu case 7: 359407f4964dSYang Liu if (((inst >> 31) & 1) == 0) { 359507f4964dSYang Liu op = rv_op_vsetvli; 359607f4964dSYang Liu } else if ((inst >> 30) & 1) { 359707f4964dSYang Liu op = rv_op_vsetivli; 359807f4964dSYang Liu } else if (((inst >> 25) & 0b11111) == 0) { 359907f4964dSYang Liu op = rv_op_vsetvl; 360007f4964dSYang Liu } 360107f4964dSYang Liu break; 360207f4964dSYang Liu } 360307f4964dSYang Liu break; 3604ea103259SMichael Clark case 22: 36053bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3606ea103259SMichael Clark case 0: op = rv_op_addid; break; 3607ea103259SMichael Clark case 1: 36083bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 3609ea103259SMichael Clark case 0: op = rv_op_sllid; break; 3610ea103259SMichael Clark } 3611ea103259SMichael Clark break; 3612ea103259SMichael Clark case 5: 36133bd87176SWeiwei Li switch ((inst >> 26) & 0b111111) { 3614ea103259SMichael Clark case 0: op = rv_op_srlid; break; 3615ea103259SMichael Clark case 16: op = rv_op_sraid; break; 3616ea103259SMichael Clark } 3617ea103259SMichael Clark break; 3618ea103259SMichael Clark } 3619ea103259SMichael Clark break; 3620ea103259SMichael Clark case 24: 36213bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3622ea103259SMichael Clark case 0: op = rv_op_beq; break; 3623ea103259SMichael Clark case 1: op = rv_op_bne; break; 3624ea103259SMichael Clark case 4: op = rv_op_blt; break; 3625ea103259SMichael Clark case 5: op = rv_op_bge; break; 3626ea103259SMichael Clark case 6: op = rv_op_bltu; break; 3627ea103259SMichael Clark case 7: op = rv_op_bgeu; break; 3628ea103259SMichael Clark } 3629ea103259SMichael Clark break; 3630ea103259SMichael Clark case 25: 36313bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3632ea103259SMichael Clark case 0: op = rv_op_jalr; break; 3633ea103259SMichael Clark } 3634ea103259SMichael Clark break; 3635ea103259SMichael Clark case 27: op = rv_op_jal; break; 3636ea103259SMichael Clark case 28: 36373bd87176SWeiwei Li switch ((inst >> 12) & 0b111) { 3638ea103259SMichael Clark case 0: 363998624d13SWeiwei Li switch (((inst >> 20) & 0b111111100000) | 364098624d13SWeiwei Li ((inst >> 7) & 0b000000011111)) { 3641ea103259SMichael Clark case 0: 36423bd87176SWeiwei Li switch ((inst >> 15) & 0b1111111111) { 3643ea103259SMichael Clark case 0: op = rv_op_ecall; break; 3644ea103259SMichael Clark case 32: op = rv_op_ebreak; break; 3645ea103259SMichael Clark case 64: op = rv_op_uret; break; 3646ea103259SMichael Clark } 3647ea103259SMichael Clark break; 3648ea103259SMichael Clark case 256: 36493bd87176SWeiwei Li switch ((inst >> 20) & 0b11111) { 3650ea103259SMichael Clark case 2: 36513bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 3652ea103259SMichael Clark case 0: op = rv_op_sret; break; 3653ea103259SMichael Clark } 3654ea103259SMichael Clark break; 3655ea103259SMichael Clark case 4: op = rv_op_sfence_vm; break; 3656ea103259SMichael Clark case 5: 36573bd87176SWeiwei Li switch ((inst >> 15) & 0b11111) { 3658ea103259SMichael Clark case 0: op = rv_op_wfi; break; 3659ea103259SMichael Clark } 3660ea103259SMichael Clark break; 3661ea103259SMichael Clark } 3662ea103259SMichael Clark break; 3663ea103259SMichael Clark case 288: op = rv_op_sfence_vma; break; 3664ea103259SMichael Clark case 512: 36653bd87176SWeiwei Li switch ((inst >> 15) & 0b1111111111) { 3666ea103259SMichael Clark case 64: op = rv_op_hret; break; 3667ea103259SMichael Clark } 3668ea103259SMichael Clark break; 3669ea103259SMichael Clark case 768: 36703bd87176SWeiwei Li switch ((inst >> 15) & 0b1111111111) { 3671ea103259SMichael Clark case 64: op = rv_op_mret; break; 3672ea103259SMichael Clark } 3673ea103259SMichael Clark break; 3674ea103259SMichael Clark case 1952: 36753bd87176SWeiwei Li switch ((inst >> 15) & 0b1111111111) { 3676ea103259SMichael Clark case 576: op = rv_op_dret; break; 3677ea103259SMichael Clark } 3678ea103259SMichael Clark break; 3679ea103259SMichael Clark } 3680ea103259SMichael Clark break; 3681ea103259SMichael Clark case 1: op = rv_op_csrrw; break; 3682ea103259SMichael Clark case 2: op = rv_op_csrrs; break; 3683ea103259SMichael Clark case 3: op = rv_op_csrrc; break; 3684ea103259SMichael Clark case 5: op = rv_op_csrrwi; break; 3685ea103259SMichael Clark case 6: op = rv_op_csrrsi; break; 3686ea103259SMichael Clark case 7: op = rv_op_csrrci; break; 3687ea103259SMichael Clark } 3688ea103259SMichael Clark break; 3689ea103259SMichael Clark case 30: 369098624d13SWeiwei Li switch (((inst >> 22) & 0b1111111000) | 369198624d13SWeiwei Li ((inst >> 12) & 0b0000000111)) { 3692ea103259SMichael Clark case 0: op = rv_op_addd; break; 3693ea103259SMichael Clark case 1: op = rv_op_slld; break; 3694ea103259SMichael Clark case 5: op = rv_op_srld; break; 3695ea103259SMichael Clark case 8: op = rv_op_muld; break; 3696ea103259SMichael Clark case 12: op = rv_op_divd; break; 3697ea103259SMichael Clark case 13: op = rv_op_divud; break; 3698ea103259SMichael Clark case 14: op = rv_op_remd; break; 3699ea103259SMichael Clark case 15: op = rv_op_remud; break; 3700ea103259SMichael Clark case 256: op = rv_op_subd; break; 3701ea103259SMichael Clark case 261: op = rv_op_srad; break; 3702ea103259SMichael Clark } 3703ea103259SMichael Clark break; 3704ea103259SMichael Clark } 3705ea103259SMichael Clark break; 3706ea103259SMichael Clark } 3707ea103259SMichael Clark dec->op = op; 3708ea103259SMichael Clark } 3709ea103259SMichael Clark 3710ea103259SMichael Clark /* operand extractors */ 3711ea103259SMichael Clark 3712ea103259SMichael Clark static uint32_t operand_rd(rv_inst inst) 3713ea103259SMichael Clark { 3714ea103259SMichael Clark return (inst << 52) >> 59; 3715ea103259SMichael Clark } 3716ea103259SMichael Clark 3717ea103259SMichael Clark static uint32_t operand_rs1(rv_inst inst) 3718ea103259SMichael Clark { 3719ea103259SMichael Clark return (inst << 44) >> 59; 3720ea103259SMichael Clark } 3721ea103259SMichael Clark 3722ea103259SMichael Clark static uint32_t operand_rs2(rv_inst inst) 3723ea103259SMichael Clark { 3724ea103259SMichael Clark return (inst << 39) >> 59; 3725ea103259SMichael Clark } 3726ea103259SMichael Clark 3727ea103259SMichael Clark static uint32_t operand_rs3(rv_inst inst) 3728ea103259SMichael Clark { 3729ea103259SMichael Clark return (inst << 32) >> 59; 3730ea103259SMichael Clark } 3731ea103259SMichael Clark 3732ea103259SMichael Clark static uint32_t operand_aq(rv_inst inst) 3733ea103259SMichael Clark { 3734ea103259SMichael Clark return (inst << 37) >> 63; 3735ea103259SMichael Clark } 3736ea103259SMichael Clark 3737ea103259SMichael Clark static uint32_t operand_rl(rv_inst inst) 3738ea103259SMichael Clark { 3739ea103259SMichael Clark return (inst << 38) >> 63; 3740ea103259SMichael Clark } 3741ea103259SMichael Clark 3742ea103259SMichael Clark static uint32_t operand_pred(rv_inst inst) 3743ea103259SMichael Clark { 3744ea103259SMichael Clark return (inst << 36) >> 60; 3745ea103259SMichael Clark } 3746ea103259SMichael Clark 3747ea103259SMichael Clark static uint32_t operand_succ(rv_inst inst) 3748ea103259SMichael Clark { 3749ea103259SMichael Clark return (inst << 40) >> 60; 3750ea103259SMichael Clark } 3751ea103259SMichael Clark 3752ea103259SMichael Clark static uint32_t operand_rm(rv_inst inst) 3753ea103259SMichael Clark { 3754ea103259SMichael Clark return (inst << 49) >> 61; 3755ea103259SMichael Clark } 3756ea103259SMichael Clark 3757ea103259SMichael Clark static uint32_t operand_shamt5(rv_inst inst) 3758ea103259SMichael Clark { 3759ea103259SMichael Clark return (inst << 39) >> 59; 3760ea103259SMichael Clark } 3761ea103259SMichael Clark 3762ea103259SMichael Clark static uint32_t operand_shamt6(rv_inst inst) 3763ea103259SMichael Clark { 3764ea103259SMichael Clark return (inst << 38) >> 58; 3765ea103259SMichael Clark } 3766ea103259SMichael Clark 3767ea103259SMichael Clark static uint32_t operand_shamt7(rv_inst inst) 3768ea103259SMichael Clark { 3769ea103259SMichael Clark return (inst << 37) >> 57; 3770ea103259SMichael Clark } 3771ea103259SMichael Clark 3772ea103259SMichael Clark static uint32_t operand_crdq(rv_inst inst) 3773ea103259SMichael Clark { 3774ea103259SMichael Clark return (inst << 59) >> 61; 3775ea103259SMichael Clark } 3776ea103259SMichael Clark 3777ea103259SMichael Clark static uint32_t operand_crs1q(rv_inst inst) 3778ea103259SMichael Clark { 3779ea103259SMichael Clark return (inst << 54) >> 61; 3780ea103259SMichael Clark } 3781ea103259SMichael Clark 3782ea103259SMichael Clark static uint32_t operand_crs1rdq(rv_inst inst) 3783ea103259SMichael Clark { 3784ea103259SMichael Clark return (inst << 54) >> 61; 3785ea103259SMichael Clark } 3786ea103259SMichael Clark 3787ea103259SMichael Clark static uint32_t operand_crs2q(rv_inst inst) 3788ea103259SMichael Clark { 3789ea103259SMichael Clark return (inst << 59) >> 61; 3790ea103259SMichael Clark } 3791ea103259SMichael Clark 37922c71d02eSWeiwei Li static uint32_t calculate_xreg(uint32_t sreg) 37932c71d02eSWeiwei Li { 37942c71d02eSWeiwei Li return sreg < 2 ? sreg + 8 : sreg + 16; 37952c71d02eSWeiwei Li } 37962c71d02eSWeiwei Li 37972c71d02eSWeiwei Li static uint32_t operand_sreg1(rv_inst inst) 37982c71d02eSWeiwei Li { 37992c71d02eSWeiwei Li return calculate_xreg((inst << 54) >> 61); 38002c71d02eSWeiwei Li } 38012c71d02eSWeiwei Li 38022c71d02eSWeiwei Li static uint32_t operand_sreg2(rv_inst inst) 38032c71d02eSWeiwei Li { 38042c71d02eSWeiwei Li return calculate_xreg((inst << 59) >> 61); 38052c71d02eSWeiwei Li } 38062c71d02eSWeiwei Li 3807ea103259SMichael Clark static uint32_t operand_crd(rv_inst inst) 3808ea103259SMichael Clark { 3809ea103259SMichael Clark return (inst << 52) >> 59; 3810ea103259SMichael Clark } 3811ea103259SMichael Clark 3812ea103259SMichael Clark static uint32_t operand_crs1(rv_inst inst) 3813ea103259SMichael Clark { 3814ea103259SMichael Clark return (inst << 52) >> 59; 3815ea103259SMichael Clark } 3816ea103259SMichael Clark 3817ea103259SMichael Clark static uint32_t operand_crs1rd(rv_inst inst) 3818ea103259SMichael Clark { 3819ea103259SMichael Clark return (inst << 52) >> 59; 3820ea103259SMichael Clark } 3821ea103259SMichael Clark 3822ea103259SMichael Clark static uint32_t operand_crs2(rv_inst inst) 3823ea103259SMichael Clark { 3824ea103259SMichael Clark return (inst << 57) >> 59; 3825ea103259SMichael Clark } 3826ea103259SMichael Clark 3827ea103259SMichael Clark static uint32_t operand_cimmsh5(rv_inst inst) 3828ea103259SMichael Clark { 3829ea103259SMichael Clark return (inst << 57) >> 59; 3830ea103259SMichael Clark } 3831ea103259SMichael Clark 3832ea103259SMichael Clark static uint32_t operand_csr12(rv_inst inst) 3833ea103259SMichael Clark { 3834ea103259SMichael Clark return (inst << 32) >> 52; 3835ea103259SMichael Clark } 3836ea103259SMichael Clark 3837ea103259SMichael Clark static int32_t operand_imm12(rv_inst inst) 3838ea103259SMichael Clark { 3839ea103259SMichael Clark return ((int64_t)inst << 32) >> 52; 3840ea103259SMichael Clark } 3841ea103259SMichael Clark 3842ea103259SMichael Clark static int32_t operand_imm20(rv_inst inst) 3843ea103259SMichael Clark { 3844ea103259SMichael Clark return (((int64_t)inst << 32) >> 44) << 12; 3845ea103259SMichael Clark } 3846ea103259SMichael Clark 3847ea103259SMichael Clark static int32_t operand_jimm20(rv_inst inst) 3848ea103259SMichael Clark { 3849ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 20 | 3850ea103259SMichael Clark ((inst << 33) >> 54) << 1 | 3851ea103259SMichael Clark ((inst << 43) >> 63) << 11 | 3852ea103259SMichael Clark ((inst << 44) >> 56) << 12; 3853ea103259SMichael Clark } 3854ea103259SMichael Clark 3855ea103259SMichael Clark static int32_t operand_simm12(rv_inst inst) 3856ea103259SMichael Clark { 3857ea103259SMichael Clark return (((int64_t)inst << 32) >> 57) << 5 | 3858ea103259SMichael Clark (inst << 52) >> 59; 3859ea103259SMichael Clark } 3860ea103259SMichael Clark 3861ea103259SMichael Clark static int32_t operand_sbimm12(rv_inst inst) 3862ea103259SMichael Clark { 3863ea103259SMichael Clark return (((int64_t)inst << 32) >> 63) << 12 | 3864ea103259SMichael Clark ((inst << 33) >> 58) << 5 | 3865ea103259SMichael Clark ((inst << 52) >> 60) << 1 | 3866ea103259SMichael Clark ((inst << 56) >> 63) << 11; 3867ea103259SMichael Clark } 3868ea103259SMichael Clark 386933632775SFrédéric Pétrot static uint32_t operand_cimmshl6(rv_inst inst, rv_isa isa) 3870ea103259SMichael Clark { 387133632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 3872ea103259SMichael Clark (inst << 57) >> 59; 387333632775SFrédéric Pétrot if (isa == rv128) { 387433632775SFrédéric Pétrot imm = imm ? imm : 64; 387533632775SFrédéric Pétrot } 387633632775SFrédéric Pétrot return imm; 387733632775SFrédéric Pétrot } 387833632775SFrédéric Pétrot 387933632775SFrédéric Pétrot static uint32_t operand_cimmshr6(rv_inst inst, rv_isa isa) 388033632775SFrédéric Pétrot { 388133632775SFrédéric Pétrot int imm = ((inst << 51) >> 63) << 5 | 388233632775SFrédéric Pétrot (inst << 57) >> 59; 388333632775SFrédéric Pétrot if (isa == rv128) { 388433632775SFrédéric Pétrot imm = imm | (imm & 32) << 1; 388533632775SFrédéric Pétrot imm = imm ? imm : 64; 388633632775SFrédéric Pétrot } 388733632775SFrédéric Pétrot return imm; 3888ea103259SMichael Clark } 3889ea103259SMichael Clark 3890ea103259SMichael Clark static int32_t operand_cimmi(rv_inst inst) 3891ea103259SMichael Clark { 3892ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 5 | 3893ea103259SMichael Clark (inst << 57) >> 59; 3894ea103259SMichael Clark } 3895ea103259SMichael Clark 3896ea103259SMichael Clark static int32_t operand_cimmui(rv_inst inst) 3897ea103259SMichael Clark { 3898ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 17 | 3899ea103259SMichael Clark ((inst << 57) >> 59) << 12; 3900ea103259SMichael Clark } 3901ea103259SMichael Clark 3902ea103259SMichael Clark static uint32_t operand_cimmlwsp(rv_inst inst) 3903ea103259SMichael Clark { 3904ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3905ea103259SMichael Clark ((inst << 57) >> 61) << 2 | 3906ea103259SMichael Clark ((inst << 60) >> 62) << 6; 3907ea103259SMichael Clark } 3908ea103259SMichael Clark 3909ea103259SMichael Clark static uint32_t operand_cimmldsp(rv_inst inst) 3910ea103259SMichael Clark { 3911ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3912ea103259SMichael Clark ((inst << 57) >> 62) << 3 | 3913ea103259SMichael Clark ((inst << 59) >> 61) << 6; 3914ea103259SMichael Clark } 3915ea103259SMichael Clark 3916ea103259SMichael Clark static uint32_t operand_cimmlqsp(rv_inst inst) 3917ea103259SMichael Clark { 3918ea103259SMichael Clark return ((inst << 51) >> 63) << 5 | 3919ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3920ea103259SMichael Clark ((inst << 58) >> 60) << 6; 3921ea103259SMichael Clark } 3922ea103259SMichael Clark 3923ea103259SMichael Clark static int32_t operand_cimm16sp(rv_inst inst) 3924ea103259SMichael Clark { 3925ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 9 | 3926ea103259SMichael Clark ((inst << 57) >> 63) << 4 | 3927ea103259SMichael Clark ((inst << 58) >> 63) << 6 | 3928ea103259SMichael Clark ((inst << 59) >> 62) << 7 | 3929ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3930ea103259SMichael Clark } 3931ea103259SMichael Clark 3932ea103259SMichael Clark static int32_t operand_cimmj(rv_inst inst) 3933ea103259SMichael Clark { 3934ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 11 | 3935ea103259SMichael Clark ((inst << 52) >> 63) << 4 | 3936ea103259SMichael Clark ((inst << 53) >> 62) << 8 | 3937ea103259SMichael Clark ((inst << 55) >> 63) << 10 | 3938ea103259SMichael Clark ((inst << 56) >> 63) << 6 | 3939ea103259SMichael Clark ((inst << 57) >> 63) << 7 | 3940ea103259SMichael Clark ((inst << 58) >> 61) << 1 | 3941ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3942ea103259SMichael Clark } 3943ea103259SMichael Clark 3944ea103259SMichael Clark static int32_t operand_cimmb(rv_inst inst) 3945ea103259SMichael Clark { 3946ea103259SMichael Clark return (((int64_t)inst << 51) >> 63) << 8 | 3947ea103259SMichael Clark ((inst << 52) >> 62) << 3 | 3948ea103259SMichael Clark ((inst << 57) >> 62) << 6 | 3949ea103259SMichael Clark ((inst << 59) >> 62) << 1 | 3950ea103259SMichael Clark ((inst << 61) >> 63) << 5; 3951ea103259SMichael Clark } 3952ea103259SMichael Clark 3953ea103259SMichael Clark static uint32_t operand_cimmswsp(rv_inst inst) 3954ea103259SMichael Clark { 3955ea103259SMichael Clark return ((inst << 51) >> 60) << 2 | 3956ea103259SMichael Clark ((inst << 55) >> 62) << 6; 3957ea103259SMichael Clark } 3958ea103259SMichael Clark 3959ea103259SMichael Clark static uint32_t operand_cimmsdsp(rv_inst inst) 3960ea103259SMichael Clark { 3961ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3962ea103259SMichael Clark ((inst << 54) >> 61) << 6; 3963ea103259SMichael Clark } 3964ea103259SMichael Clark 3965ea103259SMichael Clark static uint32_t operand_cimmsqsp(rv_inst inst) 3966ea103259SMichael Clark { 3967ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3968ea103259SMichael Clark ((inst << 53) >> 60) << 6; 3969ea103259SMichael Clark } 3970ea103259SMichael Clark 3971ea103259SMichael Clark static uint32_t operand_cimm4spn(rv_inst inst) 3972ea103259SMichael Clark { 3973ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3974ea103259SMichael Clark ((inst << 53) >> 60) << 6 | 3975ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3976ea103259SMichael Clark ((inst << 58) >> 63) << 3; 3977ea103259SMichael Clark } 3978ea103259SMichael Clark 3979ea103259SMichael Clark static uint32_t operand_cimmw(rv_inst inst) 3980ea103259SMichael Clark { 3981ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3982ea103259SMichael Clark ((inst << 57) >> 63) << 2 | 3983ea103259SMichael Clark ((inst << 58) >> 63) << 6; 3984ea103259SMichael Clark } 3985ea103259SMichael Clark 3986ea103259SMichael Clark static uint32_t operand_cimmd(rv_inst inst) 3987ea103259SMichael Clark { 3988ea103259SMichael Clark return ((inst << 51) >> 61) << 3 | 3989ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3990ea103259SMichael Clark } 3991ea103259SMichael Clark 3992ea103259SMichael Clark static uint32_t operand_cimmq(rv_inst inst) 3993ea103259SMichael Clark { 3994ea103259SMichael Clark return ((inst << 51) >> 62) << 4 | 3995ea103259SMichael Clark ((inst << 53) >> 63) << 8 | 3996ea103259SMichael Clark ((inst << 57) >> 62) << 6; 3997ea103259SMichael Clark } 3998ea103259SMichael Clark 399907f4964dSYang Liu static uint32_t operand_vimm(rv_inst inst) 400007f4964dSYang Liu { 400107f4964dSYang Liu return (int64_t)(inst << 44) >> 59; 400207f4964dSYang Liu } 400307f4964dSYang Liu 400407f4964dSYang Liu static uint32_t operand_vzimm11(rv_inst inst) 400507f4964dSYang Liu { 400607f4964dSYang Liu return (inst << 33) >> 53; 400707f4964dSYang Liu } 400807f4964dSYang Liu 400907f4964dSYang Liu static uint32_t operand_vzimm10(rv_inst inst) 401007f4964dSYang Liu { 401107f4964dSYang Liu return (inst << 34) >> 54; 401207f4964dSYang Liu } 401307f4964dSYang Liu 40145748c886SWeiwei Li static uint32_t operand_bs(rv_inst inst) 40155748c886SWeiwei Li { 40165748c886SWeiwei Li return (inst << 32) >> 62; 40175748c886SWeiwei Li } 40185748c886SWeiwei Li 40195748c886SWeiwei Li static uint32_t operand_rnum(rv_inst inst) 40205748c886SWeiwei Li { 40215748c886SWeiwei Li return (inst << 40) >> 60; 40225748c886SWeiwei Li } 40235748c886SWeiwei Li 402407f4964dSYang Liu static uint32_t operand_vm(rv_inst inst) 402507f4964dSYang Liu { 402607f4964dSYang Liu return (inst << 38) >> 63; 402707f4964dSYang Liu } 402807f4964dSYang Liu 40292c71d02eSWeiwei Li static uint32_t operand_uimm_c_lb(rv_inst inst) 40302c71d02eSWeiwei Li { 40312c71d02eSWeiwei Li return (((inst << 58) >> 63) << 1) | 40322c71d02eSWeiwei Li ((inst << 57) >> 63); 40332c71d02eSWeiwei Li } 40342c71d02eSWeiwei Li 40352c71d02eSWeiwei Li static uint32_t operand_uimm_c_lh(rv_inst inst) 40362c71d02eSWeiwei Li { 40372c71d02eSWeiwei Li return (((inst << 58) >> 63) << 1); 40382c71d02eSWeiwei Li } 40392c71d02eSWeiwei Li 40402c71d02eSWeiwei Li static uint32_t operand_zcmp_spimm(rv_inst inst) 40412c71d02eSWeiwei Li { 40422c71d02eSWeiwei Li return ((inst << 60) >> 62) << 4; 40432c71d02eSWeiwei Li } 40442c71d02eSWeiwei Li 40452c71d02eSWeiwei Li static uint32_t operand_zcmp_rlist(rv_inst inst) 40462c71d02eSWeiwei Li { 40472c71d02eSWeiwei Li return ((inst << 56) >> 60); 40482c71d02eSWeiwei Li } 40492c71d02eSWeiwei Li 4050318df723SChristoph Müllner static uint32_t operand_imm6(rv_inst inst) 4051318df723SChristoph Müllner { 4052318df723SChristoph Müllner return (inst << 38) >> 60; 4053318df723SChristoph Müllner } 4054318df723SChristoph Müllner 4055318df723SChristoph Müllner static uint32_t operand_imm2(rv_inst inst) 4056318df723SChristoph Müllner { 4057318df723SChristoph Müllner return (inst << 37) >> 62; 4058318df723SChristoph Müllner } 4059318df723SChristoph Müllner 4060318df723SChristoph Müllner static uint32_t operand_immh(rv_inst inst) 4061318df723SChristoph Müllner { 4062318df723SChristoph Müllner return (inst << 32) >> 58; 4063318df723SChristoph Müllner } 4064318df723SChristoph Müllner 4065318df723SChristoph Müllner static uint32_t operand_imml(rv_inst inst) 4066318df723SChristoph Müllner { 4067318df723SChristoph Müllner return (inst << 38) >> 58; 4068318df723SChristoph Müllner } 4069318df723SChristoph Müllner 40702c71d02eSWeiwei Li static uint32_t calculate_stack_adj(rv_isa isa, uint32_t rlist, uint32_t spimm) 40712c71d02eSWeiwei Li { 40722c71d02eSWeiwei Li int xlen_bytes_log2 = isa == rv64 ? 3 : 2; 40732c71d02eSWeiwei Li int regs = rlist == 15 ? 13 : rlist - 3; 40742c71d02eSWeiwei Li uint32_t stack_adj_base = ROUND_UP(regs << xlen_bytes_log2, 16); 40752c71d02eSWeiwei Li return stack_adj_base + spimm; 40762c71d02eSWeiwei Li } 40772c71d02eSWeiwei Li 40782c71d02eSWeiwei Li static uint32_t operand_zcmp_stack_adj(rv_inst inst, rv_isa isa) 40792c71d02eSWeiwei Li { 40802c71d02eSWeiwei Li return calculate_stack_adj(isa, operand_zcmp_rlist(inst), 40812c71d02eSWeiwei Li operand_zcmp_spimm(inst)); 40822c71d02eSWeiwei Li } 40832c71d02eSWeiwei Li 40842c71d02eSWeiwei Li static uint32_t operand_tbl_index(rv_inst inst) 40852c71d02eSWeiwei Li { 40862c71d02eSWeiwei Li return ((inst << 54) >> 56); 40872c71d02eSWeiwei Li } 40882c71d02eSWeiwei Li 4089ea103259SMichael Clark /* decode operands */ 4090ea103259SMichael Clark 409133632775SFrédéric Pétrot static void decode_inst_operands(rv_decode *dec, rv_isa isa) 4092ea103259SMichael Clark { 4093fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4094ea103259SMichael Clark rv_inst inst = dec->inst; 4095ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 4096ea103259SMichael Clark switch (dec->codec) { 4097ea103259SMichael Clark case rv_codec_none: 4098ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4099ea103259SMichael Clark dec->imm = 0; 4100ea103259SMichael Clark break; 4101ea103259SMichael Clark case rv_codec_u: 4102ea103259SMichael Clark dec->rd = operand_rd(inst); 4103ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4104ea103259SMichael Clark dec->imm = operand_imm20(inst); 4105ea103259SMichael Clark break; 4106ea103259SMichael Clark case rv_codec_uj: 4107ea103259SMichael Clark dec->rd = operand_rd(inst); 4108ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4109ea103259SMichael Clark dec->imm = operand_jimm20(inst); 4110ea103259SMichael Clark break; 4111ea103259SMichael Clark case rv_codec_i: 4112ea103259SMichael Clark dec->rd = operand_rd(inst); 4113ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4114ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4115ea103259SMichael Clark dec->imm = operand_imm12(inst); 4116ea103259SMichael Clark break; 4117ea103259SMichael Clark case rv_codec_i_sh5: 4118ea103259SMichael Clark dec->rd = operand_rd(inst); 4119ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4120ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4121ea103259SMichael Clark dec->imm = operand_shamt5(inst); 4122ea103259SMichael Clark break; 4123ea103259SMichael Clark case rv_codec_i_sh6: 4124ea103259SMichael Clark dec->rd = operand_rd(inst); 4125ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4126ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4127ea103259SMichael Clark dec->imm = operand_shamt6(inst); 4128ea103259SMichael Clark break; 4129ea103259SMichael Clark case rv_codec_i_sh7: 4130ea103259SMichael Clark dec->rd = operand_rd(inst); 4131ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4132ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4133ea103259SMichael Clark dec->imm = operand_shamt7(inst); 4134ea103259SMichael Clark break; 4135ea103259SMichael Clark case rv_codec_i_csr: 4136ea103259SMichael Clark dec->rd = operand_rd(inst); 4137ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4138ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4139ea103259SMichael Clark dec->imm = operand_csr12(inst); 4140ea103259SMichael Clark break; 4141ea103259SMichael Clark case rv_codec_s: 4142ea103259SMichael Clark dec->rd = rv_ireg_zero; 4143ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4144ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4145ea103259SMichael Clark dec->imm = operand_simm12(inst); 4146ea103259SMichael Clark break; 4147ea103259SMichael Clark case rv_codec_sb: 4148ea103259SMichael Clark dec->rd = rv_ireg_zero; 4149ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4150ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4151ea103259SMichael Clark dec->imm = operand_sbimm12(inst); 4152ea103259SMichael Clark break; 4153ea103259SMichael Clark case rv_codec_r: 4154ea103259SMichael Clark dec->rd = operand_rd(inst); 4155ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4156ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4157ea103259SMichael Clark dec->imm = 0; 4158ea103259SMichael Clark break; 4159ea103259SMichael Clark case rv_codec_r_m: 4160ea103259SMichael Clark dec->rd = operand_rd(inst); 4161ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4162ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4163ea103259SMichael Clark dec->imm = 0; 4164ea103259SMichael Clark dec->rm = operand_rm(inst); 4165ea103259SMichael Clark break; 4166ea103259SMichael Clark case rv_codec_r4_m: 4167ea103259SMichael Clark dec->rd = operand_rd(inst); 4168ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4169ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4170ea103259SMichael Clark dec->rs3 = operand_rs3(inst); 4171ea103259SMichael Clark dec->imm = 0; 4172ea103259SMichael Clark dec->rm = operand_rm(inst); 4173ea103259SMichael Clark break; 4174ea103259SMichael Clark case rv_codec_r_a: 4175ea103259SMichael Clark dec->rd = operand_rd(inst); 4176ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4177ea103259SMichael Clark dec->rs2 = operand_rs2(inst); 4178ea103259SMichael Clark dec->imm = 0; 4179ea103259SMichael Clark dec->aq = operand_aq(inst); 4180ea103259SMichael Clark dec->rl = operand_rl(inst); 4181ea103259SMichael Clark break; 4182ea103259SMichael Clark case rv_codec_r_l: 4183ea103259SMichael Clark dec->rd = operand_rd(inst); 4184ea103259SMichael Clark dec->rs1 = operand_rs1(inst); 4185ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4186ea103259SMichael Clark dec->imm = 0; 4187ea103259SMichael Clark dec->aq = operand_aq(inst); 4188ea103259SMichael Clark dec->rl = operand_rl(inst); 4189ea103259SMichael Clark break; 4190ea103259SMichael Clark case rv_codec_r_f: 4191ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4192ea103259SMichael Clark dec->pred = operand_pred(inst); 4193ea103259SMichael Clark dec->succ = operand_succ(inst); 4194ea103259SMichael Clark dec->imm = 0; 4195ea103259SMichael Clark break; 4196ea103259SMichael Clark case rv_codec_cb: 4197ea103259SMichael Clark dec->rd = rv_ireg_zero; 4198ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4199ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4200ea103259SMichael Clark dec->imm = operand_cimmb(inst); 4201ea103259SMichael Clark break; 4202ea103259SMichael Clark case rv_codec_cb_imm: 4203ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4204ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4205ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4206ea103259SMichael Clark break; 4207ea103259SMichael Clark case rv_codec_cb_sh5: 4208ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4209ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4210ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4211ea103259SMichael Clark break; 4212ea103259SMichael Clark case rv_codec_cb_sh6: 4213ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4214ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 421533632775SFrédéric Pétrot dec->imm = operand_cimmshr6(inst, isa); 4216ea103259SMichael Clark break; 4217ea103259SMichael Clark case rv_codec_ci: 4218ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4219ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4220ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4221ea103259SMichael Clark break; 4222ea103259SMichael Clark case rv_codec_ci_sh5: 4223ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4224ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4225ea103259SMichael Clark dec->imm = operand_cimmsh5(inst); 4226ea103259SMichael Clark break; 4227ea103259SMichael Clark case rv_codec_ci_sh6: 4228ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4229ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 423033632775SFrédéric Pétrot dec->imm = operand_cimmshl6(inst, isa); 4231ea103259SMichael Clark break; 4232ea103259SMichael Clark case rv_codec_ci_16sp: 4233ea103259SMichael Clark dec->rd = rv_ireg_sp; 4234ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4235ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4236ea103259SMichael Clark dec->imm = operand_cimm16sp(inst); 4237ea103259SMichael Clark break; 4238ea103259SMichael Clark case rv_codec_ci_lwsp: 4239ea103259SMichael Clark dec->rd = operand_crd(inst); 4240ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4241ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4242ea103259SMichael Clark dec->imm = operand_cimmlwsp(inst); 4243ea103259SMichael Clark break; 4244ea103259SMichael Clark case rv_codec_ci_ldsp: 4245ea103259SMichael Clark dec->rd = operand_crd(inst); 4246ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4247ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4248ea103259SMichael Clark dec->imm = operand_cimmldsp(inst); 4249ea103259SMichael Clark break; 4250ea103259SMichael Clark case rv_codec_ci_lqsp: 4251ea103259SMichael Clark dec->rd = operand_crd(inst); 4252ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4253ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4254ea103259SMichael Clark dec->imm = operand_cimmlqsp(inst); 4255ea103259SMichael Clark break; 4256ea103259SMichael Clark case rv_codec_ci_li: 4257ea103259SMichael Clark dec->rd = operand_crd(inst); 4258ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4259ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4260ea103259SMichael Clark dec->imm = operand_cimmi(inst); 4261ea103259SMichael Clark break; 4262ea103259SMichael Clark case rv_codec_ci_lui: 4263ea103259SMichael Clark dec->rd = operand_crd(inst); 4264ea103259SMichael Clark dec->rs1 = rv_ireg_zero; 4265ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4266ea103259SMichael Clark dec->imm = operand_cimmui(inst); 4267ea103259SMichael Clark break; 4268ea103259SMichael Clark case rv_codec_ci_none: 4269ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4270ea103259SMichael Clark dec->imm = 0; 4271ea103259SMichael Clark break; 4272ea103259SMichael Clark case rv_codec_ciw_4spn: 4273ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4274ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4275ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4276ea103259SMichael Clark dec->imm = operand_cimm4spn(inst); 4277ea103259SMichael Clark break; 4278ea103259SMichael Clark case rv_codec_cj: 4279ea103259SMichael Clark dec->rd = dec->rs1 = dec->rs2 = rv_ireg_zero; 4280ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4281ea103259SMichael Clark break; 4282ea103259SMichael Clark case rv_codec_cj_jal: 4283ea103259SMichael Clark dec->rd = rv_ireg_ra; 4284ea103259SMichael Clark dec->rs1 = dec->rs2 = rv_ireg_zero; 4285ea103259SMichael Clark dec->imm = operand_cimmj(inst); 4286ea103259SMichael Clark break; 4287ea103259SMichael Clark case rv_codec_cl_lw: 4288ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4289ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4290ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4291ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4292ea103259SMichael Clark break; 4293ea103259SMichael Clark case rv_codec_cl_ld: 4294ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4295ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4296ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4297ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4298ea103259SMichael Clark break; 4299ea103259SMichael Clark case rv_codec_cl_lq: 4300ea103259SMichael Clark dec->rd = operand_crdq(inst) + 8; 4301ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4302ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4303ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4304ea103259SMichael Clark break; 4305ea103259SMichael Clark case rv_codec_cr: 4306ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rd(inst); 4307ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4308ea103259SMichael Clark dec->imm = 0; 4309ea103259SMichael Clark break; 4310ea103259SMichael Clark case rv_codec_cr_mv: 4311ea103259SMichael Clark dec->rd = operand_crd(inst); 4312ea103259SMichael Clark dec->rs1 = operand_crs2(inst); 4313ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4314ea103259SMichael Clark dec->imm = 0; 4315ea103259SMichael Clark break; 4316ea103259SMichael Clark case rv_codec_cr_jalr: 4317ea103259SMichael Clark dec->rd = rv_ireg_ra; 4318ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4319ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4320ea103259SMichael Clark dec->imm = 0; 4321ea103259SMichael Clark break; 4322ea103259SMichael Clark case rv_codec_cr_jr: 4323ea103259SMichael Clark dec->rd = rv_ireg_zero; 4324ea103259SMichael Clark dec->rs1 = operand_crs1(inst); 4325ea103259SMichael Clark dec->rs2 = rv_ireg_zero; 4326ea103259SMichael Clark dec->imm = 0; 4327ea103259SMichael Clark break; 4328ea103259SMichael Clark case rv_codec_cs: 4329ea103259SMichael Clark dec->rd = dec->rs1 = operand_crs1rdq(inst) + 8; 4330ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4331ea103259SMichael Clark dec->imm = 0; 4332ea103259SMichael Clark break; 4333ea103259SMichael Clark case rv_codec_cs_sw: 4334ea103259SMichael Clark dec->rd = rv_ireg_zero; 4335ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4336ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4337ea103259SMichael Clark dec->imm = operand_cimmw(inst); 4338ea103259SMichael Clark break; 4339ea103259SMichael Clark case rv_codec_cs_sd: 4340ea103259SMichael Clark dec->rd = rv_ireg_zero; 4341ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4342ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4343ea103259SMichael Clark dec->imm = operand_cimmd(inst); 4344ea103259SMichael Clark break; 4345ea103259SMichael Clark case rv_codec_cs_sq: 4346ea103259SMichael Clark dec->rd = rv_ireg_zero; 4347ea103259SMichael Clark dec->rs1 = operand_crs1q(inst) + 8; 4348ea103259SMichael Clark dec->rs2 = operand_crs2q(inst) + 8; 4349ea103259SMichael Clark dec->imm = operand_cimmq(inst); 4350ea103259SMichael Clark break; 4351ea103259SMichael Clark case rv_codec_css_swsp: 4352ea103259SMichael Clark dec->rd = rv_ireg_zero; 4353ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4354ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4355ea103259SMichael Clark dec->imm = operand_cimmswsp(inst); 4356ea103259SMichael Clark break; 4357ea103259SMichael Clark case rv_codec_css_sdsp: 4358ea103259SMichael Clark dec->rd = rv_ireg_zero; 4359ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4360ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4361ea103259SMichael Clark dec->imm = operand_cimmsdsp(inst); 4362ea103259SMichael Clark break; 4363ea103259SMichael Clark case rv_codec_css_sqsp: 4364ea103259SMichael Clark dec->rd = rv_ireg_zero; 4365ea103259SMichael Clark dec->rs1 = rv_ireg_sp; 4366ea103259SMichael Clark dec->rs2 = operand_crs2(inst); 4367ea103259SMichael Clark dec->imm = operand_cimmsqsp(inst); 4368ea103259SMichael Clark break; 43695748c886SWeiwei Li case rv_codec_k_bs: 43705748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 43715748c886SWeiwei Li dec->rs2 = operand_rs2(inst); 43725748c886SWeiwei Li dec->bs = operand_bs(inst); 43735748c886SWeiwei Li break; 43745748c886SWeiwei Li case rv_codec_k_rnum: 43755748c886SWeiwei Li dec->rd = operand_rd(inst); 43765748c886SWeiwei Li dec->rs1 = operand_rs1(inst); 43775748c886SWeiwei Li dec->rnum = operand_rnum(inst); 43785748c886SWeiwei Li break; 437907f4964dSYang Liu case rv_codec_v_r: 438007f4964dSYang Liu dec->rd = operand_rd(inst); 438107f4964dSYang Liu dec->rs1 = operand_rs1(inst); 438207f4964dSYang Liu dec->rs2 = operand_rs2(inst); 438307f4964dSYang Liu dec->vm = operand_vm(inst); 438407f4964dSYang Liu break; 438507f4964dSYang Liu case rv_codec_v_ldst: 438607f4964dSYang Liu dec->rd = operand_rd(inst); 438707f4964dSYang Liu dec->rs1 = operand_rs1(inst); 438807f4964dSYang Liu dec->vm = operand_vm(inst); 438907f4964dSYang Liu break; 439007f4964dSYang Liu case rv_codec_v_i: 439107f4964dSYang Liu dec->rd = operand_rd(inst); 439207f4964dSYang Liu dec->rs2 = operand_rs2(inst); 439307f4964dSYang Liu dec->imm = operand_vimm(inst); 439407f4964dSYang Liu dec->vm = operand_vm(inst); 439507f4964dSYang Liu break; 439607f4964dSYang Liu case rv_codec_vsetvli: 439707f4964dSYang Liu dec->rd = operand_rd(inst); 439807f4964dSYang Liu dec->rs1 = operand_rs1(inst); 439907f4964dSYang Liu dec->vzimm = operand_vzimm11(inst); 440007f4964dSYang Liu break; 440107f4964dSYang Liu case rv_codec_vsetivli: 440207f4964dSYang Liu dec->rd = operand_rd(inst); 440307f4964dSYang Liu dec->imm = operand_vimm(inst); 440407f4964dSYang Liu dec->vzimm = operand_vzimm10(inst); 440507f4964dSYang Liu break; 44062c71d02eSWeiwei Li case rv_codec_zcb_lb: 44072c71d02eSWeiwei Li dec->rs1 = operand_crs1q(inst) + 8; 44082c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 44092c71d02eSWeiwei Li dec->imm = operand_uimm_c_lb(inst); 44102c71d02eSWeiwei Li break; 44112c71d02eSWeiwei Li case rv_codec_zcb_lh: 44122c71d02eSWeiwei Li dec->rs1 = operand_crs1q(inst) + 8; 44132c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 44142c71d02eSWeiwei Li dec->imm = operand_uimm_c_lh(inst); 44152c71d02eSWeiwei Li break; 44162c71d02eSWeiwei Li case rv_codec_zcb_ext: 44172c71d02eSWeiwei Li dec->rd = operand_crs1q(inst) + 8; 44182c71d02eSWeiwei Li break; 44192c71d02eSWeiwei Li case rv_codec_zcb_mul: 44202c71d02eSWeiwei Li dec->rd = operand_crs1rdq(inst) + 8; 44212c71d02eSWeiwei Li dec->rs2 = operand_crs2q(inst) + 8; 44222c71d02eSWeiwei Li break; 44232c71d02eSWeiwei Li case rv_codec_zcmp_cm_pushpop: 44242c71d02eSWeiwei Li dec->imm = operand_zcmp_stack_adj(inst, isa); 44252c71d02eSWeiwei Li dec->rlist = operand_zcmp_rlist(inst); 44262c71d02eSWeiwei Li break; 44272c71d02eSWeiwei Li case rv_codec_zcmp_cm_mv: 44282c71d02eSWeiwei Li dec->rd = operand_sreg1(inst); 44292c71d02eSWeiwei Li dec->rs2 = operand_sreg2(inst); 44302c71d02eSWeiwei Li break; 44312c71d02eSWeiwei Li case rv_codec_zcmt_jt: 44322c71d02eSWeiwei Li dec->imm = operand_tbl_index(inst); 44332c71d02eSWeiwei Li break; 4434*a47842d1SChristoph Müllner case rv_codec_fli: 4435*a47842d1SChristoph Müllner dec->rd = operand_rd(inst); 4436*a47842d1SChristoph Müllner dec->imm = operand_rs1(inst); 4437*a47842d1SChristoph Müllner break; 4438318df723SChristoph Müllner case rv_codec_r2_imm5: 4439318df723SChristoph Müllner dec->rd = operand_rd(inst); 4440318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4441318df723SChristoph Müllner dec->imm = operand_rs2(inst); 4442318df723SChristoph Müllner break; 4443318df723SChristoph Müllner case rv_codec_r2: 4444318df723SChristoph Müllner dec->rd = operand_rd(inst); 4445318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4446318df723SChristoph Müllner break; 4447318df723SChristoph Müllner case rv_codec_r2_imm6: 4448318df723SChristoph Müllner dec->rd = operand_rd(inst); 4449318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4450318df723SChristoph Müllner dec->imm = operand_imm6(inst); 4451318df723SChristoph Müllner break; 4452318df723SChristoph Müllner case rv_codec_r_imm2: 4453318df723SChristoph Müllner dec->rd = operand_rd(inst); 4454318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4455318df723SChristoph Müllner dec->rs2 = operand_rs2(inst); 4456318df723SChristoph Müllner dec->imm = operand_imm2(inst); 4457318df723SChristoph Müllner break; 4458318df723SChristoph Müllner case rv_codec_r2_immhl: 4459318df723SChristoph Müllner dec->rd = operand_rd(inst); 4460318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4461318df723SChristoph Müllner dec->imm = operand_immh(inst); 4462318df723SChristoph Müllner dec->imm1 = operand_imml(inst); 4463318df723SChristoph Müllner break; 4464318df723SChristoph Müllner case rv_codec_r2_imm2_imm5: 4465318df723SChristoph Müllner dec->rd = operand_rd(inst); 4466318df723SChristoph Müllner dec->rs1 = operand_rs1(inst); 4467318df723SChristoph Müllner dec->imm = sextract32(operand_rs2(inst), 0, 5); 4468318df723SChristoph Müllner dec->imm1 = operand_imm2(inst); 4469318df723SChristoph Müllner break; 4470ea103259SMichael Clark }; 4471ea103259SMichael Clark } 4472ea103259SMichael Clark 4473ea103259SMichael Clark /* check constraint */ 4474ea103259SMichael Clark 4475ea103259SMichael Clark static bool check_constraints(rv_decode *dec, const rvc_constraint *c) 4476ea103259SMichael Clark { 4477ea103259SMichael Clark int32_t imm = dec->imm; 4478ea103259SMichael Clark uint8_t rd = dec->rd, rs1 = dec->rs1, rs2 = dec->rs2; 4479ea103259SMichael Clark while (*c != rvc_end) { 4480ea103259SMichael Clark switch (*c) { 4481ea103259SMichael Clark case rvc_rd_eq_ra: 4482ea103259SMichael Clark if (!(rd == 1)) { 4483ea103259SMichael Clark return false; 4484ea103259SMichael Clark } 4485ea103259SMichael Clark break; 4486ea103259SMichael Clark case rvc_rd_eq_x0: 4487ea103259SMichael Clark if (!(rd == 0)) { 4488ea103259SMichael Clark return false; 4489ea103259SMichael Clark } 4490ea103259SMichael Clark break; 4491ea103259SMichael Clark case rvc_rs1_eq_x0: 4492ea103259SMichael Clark if (!(rs1 == 0)) { 4493ea103259SMichael Clark return false; 4494ea103259SMichael Clark } 4495ea103259SMichael Clark break; 4496ea103259SMichael Clark case rvc_rs2_eq_x0: 4497ea103259SMichael Clark if (!(rs2 == 0)) { 4498ea103259SMichael Clark return false; 4499ea103259SMichael Clark } 4500ea103259SMichael Clark break; 4501ea103259SMichael Clark case rvc_rs2_eq_rs1: 4502ea103259SMichael Clark if (!(rs2 == rs1)) { 4503ea103259SMichael Clark return false; 4504ea103259SMichael Clark } 4505ea103259SMichael Clark break; 4506ea103259SMichael Clark case rvc_rs1_eq_ra: 4507ea103259SMichael Clark if (!(rs1 == 1)) { 4508ea103259SMichael Clark return false; 4509ea103259SMichael Clark } 4510ea103259SMichael Clark break; 4511ea103259SMichael Clark case rvc_imm_eq_zero: 4512ea103259SMichael Clark if (!(imm == 0)) { 4513ea103259SMichael Clark return false; 4514ea103259SMichael Clark } 4515ea103259SMichael Clark break; 4516ea103259SMichael Clark case rvc_imm_eq_n1: 4517ea103259SMichael Clark if (!(imm == -1)) { 4518ea103259SMichael Clark return false; 4519ea103259SMichael Clark } 4520ea103259SMichael Clark break; 4521ea103259SMichael Clark case rvc_imm_eq_p1: 4522ea103259SMichael Clark if (!(imm == 1)) { 4523ea103259SMichael Clark return false; 4524ea103259SMichael Clark } 4525ea103259SMichael Clark break; 4526ea103259SMichael Clark case rvc_csr_eq_0x001: 4527ea103259SMichael Clark if (!(imm == 0x001)) { 4528ea103259SMichael Clark return false; 4529ea103259SMichael Clark } 4530ea103259SMichael Clark break; 4531ea103259SMichael Clark case rvc_csr_eq_0x002: 4532ea103259SMichael Clark if (!(imm == 0x002)) { 4533ea103259SMichael Clark return false; 4534ea103259SMichael Clark } 4535ea103259SMichael Clark break; 4536ea103259SMichael Clark case rvc_csr_eq_0x003: 4537ea103259SMichael Clark if (!(imm == 0x003)) { 4538ea103259SMichael Clark return false; 4539ea103259SMichael Clark } 4540ea103259SMichael Clark break; 4541ea103259SMichael Clark case rvc_csr_eq_0xc00: 4542ea103259SMichael Clark if (!(imm == 0xc00)) { 4543ea103259SMichael Clark return false; 4544ea103259SMichael Clark } 4545ea103259SMichael Clark break; 4546ea103259SMichael Clark case rvc_csr_eq_0xc01: 4547ea103259SMichael Clark if (!(imm == 0xc01)) { 4548ea103259SMichael Clark return false; 4549ea103259SMichael Clark } 4550ea103259SMichael Clark break; 4551ea103259SMichael Clark case rvc_csr_eq_0xc02: 4552ea103259SMichael Clark if (!(imm == 0xc02)) { 4553ea103259SMichael Clark return false; 4554ea103259SMichael Clark } 4555ea103259SMichael Clark break; 4556ea103259SMichael Clark case rvc_csr_eq_0xc80: 4557ea103259SMichael Clark if (!(imm == 0xc80)) { 4558ea103259SMichael Clark return false; 4559ea103259SMichael Clark } 4560ea103259SMichael Clark break; 4561ea103259SMichael Clark case rvc_csr_eq_0xc81: 4562ea103259SMichael Clark if (!(imm == 0xc81)) { 4563ea103259SMichael Clark return false; 4564ea103259SMichael Clark } 4565ea103259SMichael Clark break; 4566ea103259SMichael Clark case rvc_csr_eq_0xc82: 4567ea103259SMichael Clark if (!(imm == 0xc82)) { 4568ea103259SMichael Clark return false; 4569ea103259SMichael Clark } 4570ea103259SMichael Clark break; 4571ea103259SMichael Clark default: break; 4572ea103259SMichael Clark } 4573ea103259SMichael Clark c++; 4574ea103259SMichael Clark } 4575ea103259SMichael Clark return true; 4576ea103259SMichael Clark } 4577ea103259SMichael Clark 4578ea103259SMichael Clark /* instruction length */ 4579ea103259SMichael Clark 4580ea103259SMichael Clark static size_t inst_length(rv_inst inst) 4581ea103259SMichael Clark { 4582ea103259SMichael Clark /* NOTE: supports maximum instruction size of 64-bits */ 4583ea103259SMichael Clark 45843bd87176SWeiwei Li /* 45853bd87176SWeiwei Li * instruction length coding 4586ea103259SMichael Clark * 4587ea103259SMichael Clark * aa - 16 bit aa != 11 4588ea103259SMichael Clark * bbb11 - 32 bit bbb != 111 4589ea103259SMichael Clark * 011111 - 48 bit 4590ea103259SMichael Clark * 0111111 - 64 bit 4591ea103259SMichael Clark */ 4592ea103259SMichael Clark 4593ea103259SMichael Clark return (inst & 0b11) != 0b11 ? 2 4594ea103259SMichael Clark : (inst & 0b11100) != 0b11100 ? 4 4595ea103259SMichael Clark : (inst & 0b111111) == 0b011111 ? 6 4596ea103259SMichael Clark : (inst & 0b1111111) == 0b0111111 ? 8 4597ea103259SMichael Clark : 0; 4598ea103259SMichael Clark } 4599ea103259SMichael Clark 4600ea103259SMichael Clark /* format instruction */ 4601ea103259SMichael Clark 4602ea103259SMichael Clark static void append(char *s1, const char *s2, size_t n) 4603ea103259SMichael Clark { 4604ea103259SMichael Clark size_t l1 = strlen(s1); 4605ea103259SMichael Clark if (n - l1 - 1 > 0) { 4606ea103259SMichael Clark strncat(s1, s2, n - l1); 4607ea103259SMichael Clark } 4608ea103259SMichael Clark } 4609ea103259SMichael Clark 4610ea103259SMichael Clark static void format_inst(char *buf, size_t buflen, size_t tab, rv_decode *dec) 4611ea103259SMichael Clark { 4612fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4613ea103259SMichael Clark char tmp[64]; 4614ea103259SMichael Clark const char *fmt; 4615ea103259SMichael Clark 4616ea103259SMichael Clark fmt = opcode_data[dec->op].format; 4617ea103259SMichael Clark while (*fmt) { 4618ea103259SMichael Clark switch (*fmt) { 4619ea103259SMichael Clark case 'O': 4620ea103259SMichael Clark append(buf, opcode_data[dec->op].name, buflen); 4621ea103259SMichael Clark break; 4622ea103259SMichael Clark case '(': 4623ea103259SMichael Clark append(buf, "(", buflen); 4624ea103259SMichael Clark break; 4625ea103259SMichael Clark case ',': 4626ea103259SMichael Clark append(buf, ",", buflen); 4627ea103259SMichael Clark break; 4628ea103259SMichael Clark case ')': 4629ea103259SMichael Clark append(buf, ")", buflen); 4630ea103259SMichael Clark break; 46312c71d02eSWeiwei Li case '-': 46322c71d02eSWeiwei Li append(buf, "-", buflen); 46332c71d02eSWeiwei Li break; 46345748c886SWeiwei Li case 'b': 46355748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->bs); 46365748c886SWeiwei Li append(buf, tmp, buflen); 46375748c886SWeiwei Li break; 46385748c886SWeiwei Li case 'n': 46395748c886SWeiwei Li snprintf(tmp, sizeof(tmp), "%d", dec->rnum); 46405748c886SWeiwei Li append(buf, tmp, buflen); 46415748c886SWeiwei Li break; 4642ea103259SMichael Clark case '0': 4643ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rd], buflen); 4644ea103259SMichael Clark break; 4645ea103259SMichael Clark case '1': 4646ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs1], buflen); 4647ea103259SMichael Clark break; 4648ea103259SMichael Clark case '2': 4649ea103259SMichael Clark append(buf, rv_ireg_name_sym[dec->rs2], buflen); 4650ea103259SMichael Clark break; 4651ea103259SMichael Clark case '3': 4652c54dab4cSWeiwei Li append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rd] : 4653c54dab4cSWeiwei Li rv_freg_name_sym[dec->rd], 4654c54dab4cSWeiwei Li buflen); 4655ea103259SMichael Clark break; 4656ea103259SMichael Clark case '4': 4657c54dab4cSWeiwei Li append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs1] : 4658c54dab4cSWeiwei Li rv_freg_name_sym[dec->rs1], 4659c54dab4cSWeiwei Li buflen); 4660ea103259SMichael Clark break; 4661ea103259SMichael Clark case '5': 4662c54dab4cSWeiwei Li append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs2] : 4663c54dab4cSWeiwei Li rv_freg_name_sym[dec->rs2], 4664c54dab4cSWeiwei Li buflen); 4665ea103259SMichael Clark break; 4666ea103259SMichael Clark case '6': 4667c54dab4cSWeiwei Li append(buf, dec->cfg->ext_zfinx ? rv_ireg_name_sym[dec->rs3] : 4668c54dab4cSWeiwei Li rv_freg_name_sym[dec->rs3], 4669c54dab4cSWeiwei Li buflen); 4670ea103259SMichael Clark break; 4671ea103259SMichael Clark case '7': 4672ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->rs1); 4673ea103259SMichael Clark append(buf, tmp, buflen); 4674ea103259SMichael Clark break; 4675ea103259SMichael Clark case 'i': 4676ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4677ea103259SMichael Clark append(buf, tmp, buflen); 4678ea103259SMichael Clark break; 467907f4964dSYang Liu case 'u': 468007f4964dSYang Liu snprintf(tmp, sizeof(tmp), "%u", ((uint32_t)dec->imm & 0b11111)); 468107f4964dSYang Liu append(buf, tmp, buflen); 468207f4964dSYang Liu break; 4683318df723SChristoph Müllner case 'j': 4684318df723SChristoph Müllner snprintf(tmp, sizeof(tmp), "%d", dec->imm1); 4685318df723SChristoph Müllner append(buf, tmp, buflen); 4686318df723SChristoph Müllner break; 4687ea103259SMichael Clark case 'o': 4688ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "%d", dec->imm); 4689ea103259SMichael Clark append(buf, tmp, buflen); 4690ea103259SMichael Clark while (strlen(buf) < tab * 2) { 4691ea103259SMichael Clark append(buf, " ", buflen); 4692ea103259SMichael Clark } 4693ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "# 0x%" PRIx64, 4694ea103259SMichael Clark dec->pc + dec->imm); 4695ea103259SMichael Clark append(buf, tmp, buflen); 4696ea103259SMichael Clark break; 4697ea103259SMichael Clark case 'c': { 4698ea103259SMichael Clark const char *name = csr_name(dec->imm & 0xfff); 4699ea103259SMichael Clark if (name) { 4700ea103259SMichael Clark append(buf, name, buflen); 4701ea103259SMichael Clark } else { 4702ea103259SMichael Clark snprintf(tmp, sizeof(tmp), "0x%03x", dec->imm & 0xfff); 4703ea103259SMichael Clark append(buf, tmp, buflen); 4704ea103259SMichael Clark } 4705ea103259SMichael Clark break; 4706ea103259SMichael Clark } 4707ea103259SMichael Clark case 'r': 4708ea103259SMichael Clark switch (dec->rm) { 4709ea103259SMichael Clark case rv_rm_rne: 4710ea103259SMichael Clark append(buf, "rne", buflen); 4711ea103259SMichael Clark break; 4712ea103259SMichael Clark case rv_rm_rtz: 4713ea103259SMichael Clark append(buf, "rtz", buflen); 4714ea103259SMichael Clark break; 4715ea103259SMichael Clark case rv_rm_rdn: 4716ea103259SMichael Clark append(buf, "rdn", buflen); 4717ea103259SMichael Clark break; 4718ea103259SMichael Clark case rv_rm_rup: 4719ea103259SMichael Clark append(buf, "rup", buflen); 4720ea103259SMichael Clark break; 4721ea103259SMichael Clark case rv_rm_rmm: 4722ea103259SMichael Clark append(buf, "rmm", buflen); 4723ea103259SMichael Clark break; 4724ea103259SMichael Clark case rv_rm_dyn: 4725ea103259SMichael Clark append(buf, "dyn", buflen); 4726ea103259SMichael Clark break; 4727ea103259SMichael Clark default: 4728ea103259SMichael Clark append(buf, "inv", buflen); 4729ea103259SMichael Clark break; 4730ea103259SMichael Clark } 4731ea103259SMichael Clark break; 4732ea103259SMichael Clark case 'p': 4733ea103259SMichael Clark if (dec->pred & rv_fence_i) { 4734ea103259SMichael Clark append(buf, "i", buflen); 4735ea103259SMichael Clark } 4736ea103259SMichael Clark if (dec->pred & rv_fence_o) { 4737ea103259SMichael Clark append(buf, "o", buflen); 4738ea103259SMichael Clark } 4739ea103259SMichael Clark if (dec->pred & rv_fence_r) { 4740ea103259SMichael Clark append(buf, "r", buflen); 4741ea103259SMichael Clark } 4742ea103259SMichael Clark if (dec->pred & rv_fence_w) { 4743ea103259SMichael Clark append(buf, "w", buflen); 4744ea103259SMichael Clark } 4745ea103259SMichael Clark break; 4746ea103259SMichael Clark case 's': 4747ea103259SMichael Clark if (dec->succ & rv_fence_i) { 4748ea103259SMichael Clark append(buf, "i", buflen); 4749ea103259SMichael Clark } 4750ea103259SMichael Clark if (dec->succ & rv_fence_o) { 4751ea103259SMichael Clark append(buf, "o", buflen); 4752ea103259SMichael Clark } 4753ea103259SMichael Clark if (dec->succ & rv_fence_r) { 4754ea103259SMichael Clark append(buf, "r", buflen); 4755ea103259SMichael Clark } 4756ea103259SMichael Clark if (dec->succ & rv_fence_w) { 4757ea103259SMichael Clark append(buf, "w", buflen); 4758ea103259SMichael Clark } 4759ea103259SMichael Clark break; 4760ea103259SMichael Clark case '\t': 4761ea103259SMichael Clark while (strlen(buf) < tab) { 4762ea103259SMichael Clark append(buf, " ", buflen); 4763ea103259SMichael Clark } 4764ea103259SMichael Clark break; 4765ea103259SMichael Clark case 'A': 4766ea103259SMichael Clark if (dec->aq) { 4767ea103259SMichael Clark append(buf, ".aq", buflen); 4768ea103259SMichael Clark } 4769ea103259SMichael Clark break; 4770ea103259SMichael Clark case 'R': 4771ea103259SMichael Clark if (dec->rl) { 4772ea103259SMichael Clark append(buf, ".rl", buflen); 4773ea103259SMichael Clark } 4774ea103259SMichael Clark break; 477507f4964dSYang Liu case 'l': 477607f4964dSYang Liu append(buf, ",v0", buflen); 477707f4964dSYang Liu break; 477807f4964dSYang Liu case 'm': 477907f4964dSYang Liu if (dec->vm == 0) { 478007f4964dSYang Liu append(buf, ",v0.t", buflen); 478107f4964dSYang Liu } 478207f4964dSYang Liu break; 478307f4964dSYang Liu case 'D': 478407f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rd], buflen); 478507f4964dSYang Liu break; 478607f4964dSYang Liu case 'E': 478707f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs1], buflen); 478807f4964dSYang Liu break; 478907f4964dSYang Liu case 'F': 479007f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs2], buflen); 479107f4964dSYang Liu break; 479207f4964dSYang Liu case 'G': 479307f4964dSYang Liu append(buf, rv_vreg_name_sym[dec->rs3], buflen); 479407f4964dSYang Liu break; 479507f4964dSYang Liu case 'v': { 479607f4964dSYang Liu char nbuf[32] = {0}; 479707f4964dSYang Liu const int sew = 1 << (((dec->vzimm >> 3) & 0b111) + 3); 479807f4964dSYang Liu sprintf(nbuf, "%d", sew); 479907f4964dSYang Liu const int lmul = dec->vzimm & 0b11; 480007f4964dSYang Liu const int flmul = (dec->vzimm >> 2) & 1; 480107f4964dSYang Liu const char *vta = (dec->vzimm >> 6) & 1 ? "ta" : "tu"; 480207f4964dSYang Liu const char *vma = (dec->vzimm >> 7) & 1 ? "ma" : "mu"; 480307f4964dSYang Liu append(buf, "e", buflen); 480407f4964dSYang Liu append(buf, nbuf, buflen); 480507f4964dSYang Liu append(buf, ",m", buflen); 480607f4964dSYang Liu if (flmul) { 480707f4964dSYang Liu switch (lmul) { 480807f4964dSYang Liu case 3: 480907f4964dSYang Liu sprintf(nbuf, "f2"); 481007f4964dSYang Liu break; 481107f4964dSYang Liu case 2: 481207f4964dSYang Liu sprintf(nbuf, "f4"); 481307f4964dSYang Liu break; 481407f4964dSYang Liu case 1: 481507f4964dSYang Liu sprintf(nbuf, "f8"); 481607f4964dSYang Liu break; 481707f4964dSYang Liu } 481807f4964dSYang Liu append(buf, nbuf, buflen); 481907f4964dSYang Liu } else { 482007f4964dSYang Liu sprintf(nbuf, "%d", 1 << lmul); 482107f4964dSYang Liu append(buf, nbuf, buflen); 482207f4964dSYang Liu } 482307f4964dSYang Liu append(buf, ",", buflen); 482407f4964dSYang Liu append(buf, vta, buflen); 482507f4964dSYang Liu append(buf, ",", buflen); 482607f4964dSYang Liu append(buf, vma, buflen); 482707f4964dSYang Liu break; 482807f4964dSYang Liu } 48292c71d02eSWeiwei Li case 'x': { 48302c71d02eSWeiwei Li switch (dec->rlist) { 48312c71d02eSWeiwei Li case 4: 48322c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra}"); 48332c71d02eSWeiwei Li break; 48342c71d02eSWeiwei Li case 5: 48352c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0}"); 48362c71d02eSWeiwei Li break; 48372c71d02eSWeiwei Li case 15: 48382c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0-s11}"); 48392c71d02eSWeiwei Li break; 48402c71d02eSWeiwei Li default: 48412c71d02eSWeiwei Li snprintf(tmp, sizeof(tmp), "{ra, s0-s%d}", dec->rlist - 5); 48422c71d02eSWeiwei Li break; 48432c71d02eSWeiwei Li } 48442c71d02eSWeiwei Li append(buf, tmp, buflen); 48452c71d02eSWeiwei Li break; 48462c71d02eSWeiwei Li } 4847*a47842d1SChristoph Müllner case 'h': 4848*a47842d1SChristoph Müllner append(buf, rv_fli_name_const[dec->imm], buflen); 4849*a47842d1SChristoph Müllner break; 4850ea103259SMichael Clark default: 4851ea103259SMichael Clark break; 4852ea103259SMichael Clark } 4853ea103259SMichael Clark fmt++; 4854ea103259SMichael Clark } 4855ea103259SMichael Clark } 4856ea103259SMichael Clark 4857ea103259SMichael Clark /* lift instruction to pseudo-instruction */ 4858ea103259SMichael Clark 4859ea103259SMichael Clark static void decode_inst_lift_pseudo(rv_decode *dec) 4860ea103259SMichael Clark { 4861fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4862ea103259SMichael Clark const rv_comp_data *comp_data = opcode_data[dec->op].pseudo; 4863ea103259SMichael Clark if (!comp_data) { 4864ea103259SMichael Clark return; 4865ea103259SMichael Clark } 4866ea103259SMichael Clark while (comp_data->constraints) { 4867ea103259SMichael Clark if (check_constraints(dec, comp_data->constraints)) { 4868ea103259SMichael Clark dec->op = comp_data->op; 4869ea103259SMichael Clark dec->codec = opcode_data[dec->op].codec; 4870ea103259SMichael Clark return; 4871ea103259SMichael Clark } 4872ea103259SMichael Clark comp_data++; 4873ea103259SMichael Clark } 4874ea103259SMichael Clark } 4875ea103259SMichael Clark 4876ea103259SMichael Clark /* decompress instruction */ 4877ea103259SMichael Clark 4878ea103259SMichael Clark static void decode_inst_decompress_rv32(rv_decode *dec) 4879ea103259SMichael Clark { 4880fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4881ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv32; 4882ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4883f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4884f88222daSMichael Clark && dec->imm == 0) { 4885f88222daSMichael Clark dec->op = rv_op_illegal; 4886f88222daSMichael Clark } else { 4887ea103259SMichael Clark dec->op = decomp_op; 4888ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4889ea103259SMichael Clark } 4890ea103259SMichael Clark } 4891f88222daSMichael Clark } 4892ea103259SMichael Clark 4893ea103259SMichael Clark static void decode_inst_decompress_rv64(rv_decode *dec) 4894ea103259SMichael Clark { 4895fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4896ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv64; 4897ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4898f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4899f88222daSMichael Clark && dec->imm == 0) { 4900f88222daSMichael Clark dec->op = rv_op_illegal; 4901f88222daSMichael Clark } else { 4902ea103259SMichael Clark dec->op = decomp_op; 4903ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4904ea103259SMichael Clark } 4905ea103259SMichael Clark } 4906f88222daSMichael Clark } 4907ea103259SMichael Clark 4908ea103259SMichael Clark static void decode_inst_decompress_rv128(rv_decode *dec) 4909ea103259SMichael Clark { 4910fd7c64f6SChristoph Müllner const rv_opcode_data *opcode_data = dec->opcode_data; 4911ea103259SMichael Clark int decomp_op = opcode_data[dec->op].decomp_rv128; 4912ea103259SMichael Clark if (decomp_op != rv_op_illegal) { 4913f88222daSMichael Clark if ((opcode_data[dec->op].decomp_data & rvcd_imm_nz) 4914f88222daSMichael Clark && dec->imm == 0) { 4915f88222daSMichael Clark dec->op = rv_op_illegal; 4916f88222daSMichael Clark } else { 4917ea103259SMichael Clark dec->op = decomp_op; 4918ea103259SMichael Clark dec->codec = opcode_data[decomp_op].codec; 4919ea103259SMichael Clark } 4920ea103259SMichael Clark } 4921f88222daSMichael Clark } 4922ea103259SMichael Clark 4923ea103259SMichael Clark static void decode_inst_decompress(rv_decode *dec, rv_isa isa) 4924ea103259SMichael Clark { 4925ea103259SMichael Clark switch (isa) { 4926ea103259SMichael Clark case rv32: 4927ea103259SMichael Clark decode_inst_decompress_rv32(dec); 4928ea103259SMichael Clark break; 4929ea103259SMichael Clark case rv64: 4930ea103259SMichael Clark decode_inst_decompress_rv64(dec); 4931ea103259SMichael Clark break; 4932ea103259SMichael Clark case rv128: 4933ea103259SMichael Clark decode_inst_decompress_rv128(dec); 4934ea103259SMichael Clark break; 4935ea103259SMichael Clark } 4936ea103259SMichael Clark } 4937ea103259SMichael Clark 4938ea103259SMichael Clark /* disassemble instruction */ 4939ea103259SMichael Clark 4940ea103259SMichael Clark static void 4941454c2201SWeiwei Li disasm_inst(char *buf, size_t buflen, rv_isa isa, uint64_t pc, rv_inst inst, 4942454c2201SWeiwei Li RISCVCPUConfig *cfg) 4943ea103259SMichael Clark { 4944ea103259SMichael Clark rv_decode dec = { 0 }; 4945ea103259SMichael Clark dec.pc = pc; 4946ea103259SMichael Clark dec.inst = inst; 4947454c2201SWeiwei Li dec.cfg = cfg; 4948c859a242SChristoph Müllner 4949c859a242SChristoph Müllner static const struct { 4950c859a242SChristoph Müllner bool (*guard_func)(const RISCVCPUConfig *); 4951c859a242SChristoph Müllner const rv_opcode_data *opcode_data; 4952c859a242SChristoph Müllner void (*decode_func)(rv_decode *, rv_isa); 4953c859a242SChristoph Müllner } decoders[] = { 4954c859a242SChristoph Müllner { always_true_p, rvi_opcode_data, decode_inst_opcode }, 4955318df723SChristoph Müllner { has_xtheadba_p, xthead_opcode_data, decode_xtheadba }, 4956318df723SChristoph Müllner { has_xtheadbb_p, xthead_opcode_data, decode_xtheadbb }, 4957318df723SChristoph Müllner { has_xtheadbs_p, xthead_opcode_data, decode_xtheadbs }, 4958318df723SChristoph Müllner { has_xtheadcmo_p, xthead_opcode_data, decode_xtheadcmo }, 4959318df723SChristoph Müllner { has_xtheadcondmov_p, xthead_opcode_data, decode_xtheadcondmov }, 4960318df723SChristoph Müllner { has_xtheadfmemidx_p, xthead_opcode_data, decode_xtheadfmemidx }, 4961318df723SChristoph Müllner { has_xtheadfmv_p, xthead_opcode_data, decode_xtheadfmv }, 4962318df723SChristoph Müllner { has_xtheadmac_p, xthead_opcode_data, decode_xtheadmac }, 4963318df723SChristoph Müllner { has_xtheadmemidx_p, xthead_opcode_data, decode_xtheadmemidx }, 4964318df723SChristoph Müllner { has_xtheadmempair_p, xthead_opcode_data, decode_xtheadmempair }, 4965318df723SChristoph Müllner { has_xtheadsync_p, xthead_opcode_data, decode_xtheadsync }, 4966f6f72338SChristoph Müllner { has_XVentanaCondOps_p, ventana_opcode_data, decode_xventanacondops }, 4967c859a242SChristoph Müllner }; 4968c859a242SChristoph Müllner 4969c859a242SChristoph Müllner for (size_t i = 0; i < ARRAY_SIZE(decoders); i++) { 4970c859a242SChristoph Müllner bool (*guard_func)(const RISCVCPUConfig *) = decoders[i].guard_func; 4971c859a242SChristoph Müllner const rv_opcode_data *opcode_data = decoders[i].opcode_data; 4972c859a242SChristoph Müllner void (*decode_func)(rv_decode *, rv_isa) = decoders[i].decode_func; 4973c859a242SChristoph Müllner 4974c859a242SChristoph Müllner if (guard_func(cfg)) { 4975c859a242SChristoph Müllner dec.opcode_data = opcode_data; 4976c859a242SChristoph Müllner decode_func(&dec, isa); 4977c859a242SChristoph Müllner if (dec.op != rv_op_illegal) 4978c859a242SChristoph Müllner break; 4979c859a242SChristoph Müllner } 4980c859a242SChristoph Müllner } 4981c859a242SChristoph Müllner 4982c859a242SChristoph Müllner if (dec.op == rv_op_illegal) { 4983c859a242SChristoph Müllner dec.opcode_data = rvi_opcode_data; 4984c859a242SChristoph Müllner } 4985c859a242SChristoph Müllner 498633632775SFrédéric Pétrot decode_inst_operands(&dec, isa); 4987ea103259SMichael Clark decode_inst_decompress(&dec, isa); 4988ea103259SMichael Clark decode_inst_lift_pseudo(&dec); 498907f4964dSYang Liu format_inst(buf, buflen, 24, &dec); 4990ea103259SMichael Clark } 4991ea103259SMichael Clark 49926296a799SMichael Clark #define INST_FMT_2 "%04" PRIx64 " " 49936296a799SMichael Clark #define INST_FMT_4 "%08" PRIx64 " " 49946296a799SMichael Clark #define INST_FMT_6 "%012" PRIx64 " " 49956296a799SMichael Clark #define INST_FMT_8 "%016" PRIx64 " " 49966296a799SMichael Clark 4997ea103259SMichael Clark static int 4998ea103259SMichael Clark print_insn_riscv(bfd_vma memaddr, struct disassemble_info *info, rv_isa isa) 4999ea103259SMichael Clark { 5000ea103259SMichael Clark char buf[128] = { 0 }; 5001ea103259SMichael Clark bfd_byte packet[2]; 5002ea103259SMichael Clark rv_inst inst = 0; 5003ea103259SMichael Clark size_t len = 2; 5004ea103259SMichael Clark bfd_vma n; 5005ea103259SMichael Clark int status; 5006ea103259SMichael Clark 5007ea103259SMichael Clark /* Instructions are made of 2-byte packets in little-endian order */ 5008ea103259SMichael Clark for (n = 0; n < len; n += 2) { 5009ea103259SMichael Clark status = (*info->read_memory_func)(memaddr + n, packet, 2, info); 5010ea103259SMichael Clark if (status != 0) { 5011ea103259SMichael Clark /* Don't fail just because we fell off the end. */ 5012ea103259SMichael Clark if (n > 0) { 5013ea103259SMichael Clark break; 5014ea103259SMichael Clark } 5015ea103259SMichael Clark (*info->memory_error_func)(status, memaddr, info); 5016ea103259SMichael Clark return status; 5017ea103259SMichael Clark } 5018ea103259SMichael Clark inst |= ((rv_inst) bfd_getl16(packet)) << (8 * n); 5019ea103259SMichael Clark if (n == 0) { 5020ea103259SMichael Clark len = inst_length(inst); 5021ea103259SMichael Clark } 5022ea103259SMichael Clark } 5023ea103259SMichael Clark 50246296a799SMichael Clark switch (len) { 50256296a799SMichael Clark case 2: 50266296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_2, inst); 50276296a799SMichael Clark break; 50286296a799SMichael Clark case 4: 50296296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_4, inst); 50306296a799SMichael Clark break; 50316296a799SMichael Clark case 6: 50326296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_6, inst); 50336296a799SMichael Clark break; 50346296a799SMichael Clark default: 50356296a799SMichael Clark (*info->fprintf_func)(info->stream, INST_FMT_8, inst); 50366296a799SMichael Clark break; 50376296a799SMichael Clark } 50386296a799SMichael Clark 5039454c2201SWeiwei Li disasm_inst(buf, sizeof(buf), isa, memaddr, inst, 5040454c2201SWeiwei Li (RISCVCPUConfig *)info->target_info); 5041ea103259SMichael Clark (*info->fprintf_func)(info->stream, "%s", buf); 5042ea103259SMichael Clark 5043ea103259SMichael Clark return len; 5044ea103259SMichael Clark } 5045ea103259SMichael Clark 5046ea103259SMichael Clark int print_insn_riscv32(bfd_vma memaddr, struct disassemble_info *info) 5047ea103259SMichael Clark { 5048ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv32); 5049ea103259SMichael Clark } 5050ea103259SMichael Clark 5051ea103259SMichael Clark int print_insn_riscv64(bfd_vma memaddr, struct disassemble_info *info) 5052ea103259SMichael Clark { 5053ea103259SMichael Clark return print_insn_riscv(memaddr, info, rv64); 5054ea103259SMichael Clark } 5055332dab68SFrédéric Pétrot 5056332dab68SFrédéric Pétrot int print_insn_riscv128(bfd_vma memaddr, struct disassemble_info *info) 5057332dab68SFrédéric Pétrot { 5058332dab68SFrédéric Pétrot return print_insn_riscv(memaddr, info, rv128); 5059332dab68SFrédéric Pétrot } 5060