/* This file is autogenerated by scripts/decodetree.py.  */

#include "qemu/osdep.h"
#include "qemu/bitops.h"
#include "disas/dis-asm.h"
#include <stdint.h>
#include <stdbool.h>

typedef enum {
    OPC_CLO_W,
    OPC_CLZ_W,
    OPC_CTO_W,
    OPC_CTZ_W,
    OPC_CLO_D,
    OPC_CLZ_D,
    OPC_CTO_D,
    OPC_CTZ_D,
    OPC_REVB_2H,
    OPC_REVB_4H,
    OPC_REVB_2W,
    OPC_REVB_D,
    OPC_REVH_2W,
    OPC_REVH_D,
    OPC_BITREV_4B,
    OPC_BITREV_8B,
    OPC_BITREV_W,
    OPC_BITREV_D,
    OPC_EXT_W_H,
    OPC_EXT_W_B,
    OPC_RDTIMEL_W,
    OPC_RDTIMEH_W,
    OPC_RDTIME_D,
    OPC_CPUCFG,
    OPC_ASRTLE_D,
    OPC_ASRTGT_D,
    OPC_ALSL_W,
    OPC_ALSL_WU,
    OPC_BYTEPICK_W,
    OPC_BYTEPICK_D,
    OPC_ADD_W,
    OPC_ADD_D,
    OPC_SUB_W,
    OPC_SUB_D,
    OPC_SLT,
    OPC_SLTU,
    OPC_MASKEQZ,
    OPC_MASKNEZ,
    OPC_NOR,
    OPC_AND,
    OPC_OR,
    OPC_XOR,
    OPC_ORN,
    OPC_ANDN,
    OPC_SLL_W,
    OPC_SRL_W,
    OPC_SRA_W,
    OPC_SLL_D,
    OPC_SRL_D,
    OPC_SRA_D,
    OPC_ROTR_W,
    OPC_ROTR_D,
    OPC_MUL_W,
    OPC_MULH_W,
    OPC_MULH_WU,
    OPC_MUL_D,
    OPC_MULH_D,
    OPC_MULH_DU,
    OPC_MULW_D_W,
    OPC_MULW_D_WU,
    OPC_DIV_W,
    OPC_MOD_W,
    OPC_DIV_WU,
    OPC_MOD_WU,
    OPC_DIV_D,
    OPC_MOD_D,
    OPC_DIV_DU,
    OPC_MOD_DU,
    OPC_CRC_W_B_W,
    OPC_CRC_W_H_W,
    OPC_CRC_W_W_W,
    OPC_CRC_W_D_W,
    OPC_CRCC_W_B_W,
    OPC_CRCC_W_H_W,
    OPC_CRCC_W_W_W,
    OPC_CRCC_W_D_W,
    OPC_BREAK,
    OPC_DBCL,
    OPC_SYSCALL,
    OPC_ALSL_D,
    OPC_SLLI_W,
    OPC_SLLI_D,
    OPC_SRLI_W,
    OPC_SRLI_D,
    OPC_SRAI_W,
    OPC_SRAI_D,
    OPC_ROTRI_W,
    OPC_ROTRI_D,
    OPC_BSTRINS_W,
    OPC_BSTRPICK_W,
    OPC_BSTRINS_D,
    OPC_BSTRPICK_D,
    OPC_FADD_S,
    OPC_FADD_D,
    OPC_FSUB_S,
    OPC_FSUB_D,
    OPC_FMUL_S,
    OPC_FMUL_D,
    OPC_FDIV_S,
    OPC_FDIV_D,
    OPC_FMAX_S,
    OPC_FMAX_D,
    OPC_FMIN_S,
    OPC_FMIN_D,
    OPC_FMAXA_S,
    OPC_FMAXA_D,
    OPC_FMINA_S,
    OPC_FMINA_D,
    OPC_FSCALEB_S,
    OPC_FSCALEB_D,
    OPC_FCOPYSIGN_S,
    OPC_FCOPYSIGN_D,
    OPC_FABS_S,
    OPC_FABS_D,
    OPC_FNEG_S,
    OPC_FNEG_D,
    OPC_FLOGB_S,
    OPC_FLOGB_D,
    OPC_FCLASS_S,
    OPC_FCLASS_D,
    OPC_FSQRT_S,
    OPC_FSQRT_D,
    OPC_FRECIP_S,
    OPC_FRECIP_D,
    OPC_FRSQRT_S,
    OPC_FRSQRT_D,
    OPC_FMOV_S,
    OPC_FMOV_D,
    OPC_MOVGR2FR_W,
    OPC_MOVGR2FR_D,
    OPC_MOVGR2FRH_W,
    OPC_MOVFR2GR_S,
    OPC_MOVFR2GR_D,
    OPC_MOVFRH2GR_S,
    OPC_MOVGR2FCSR,
    OPC_MOVFCSR2GR,
    OPC_MOVFR2CF,
    OPC_MOVCF2FR,
    OPC_MOVGR2CF,
    OPC_MOVCF2GR,
    OPC_FCVT_S_D,
    OPC_FCVT_D_S,
    OPC_FTINTRM_W_S,
    OPC_FTINTRM_W_D,
    OPC_FTINTRM_L_S,
    OPC_FTINTRM_L_D,
    OPC_FTINTRP_W_S,
    OPC_FTINTRP_W_D,
    OPC_FTINTRP_L_S,
    OPC_FTINTRP_L_D,
    OPC_FTINTRZ_W_S,
    OPC_FTINTRZ_W_D,
    OPC_FTINTRZ_L_S,
    OPC_FTINTRZ_L_D,
    OPC_FTINTRNE_W_S,
    OPC_FTINTRNE_W_D,
    OPC_FTINTRNE_L_S,
    OPC_FTINTRNE_L_D,
    OPC_FTINT_W_S,
    OPC_FTINT_W_D,
    OPC_FTINT_L_S,
    OPC_FTINT_L_D,
    OPC_FFINT_S_W,
    OPC_FFINT_S_L,
    OPC_FFINT_D_W,
    OPC_FFINT_D_L,
    OPC_FRINT_S,
    OPC_FRINT_D,
    OPC_SLTI,
    OPC_SLTUI,
    OPC_ADDI_W,
    OPC_ADDI_D,
    OPC_LU52I_D,
    OPC_ANDI,
    OPC_ORI,
    OPC_XORI,
    OPC_CSRRD,
    OPC_CSRWR,
    OPC_CSRXCHG,
    OPC_CACOP,
    OPC_LDDIR,
    OPC_LDPTE,
    OPC_IOCSRRD_B,
    OPC_IOCSRRD_H,
    OPC_IOCSRRD_W,
    OPC_IOCSRRD_D,
    OPC_IOCSRWR_B,
    OPC_IOCSRWR_H,
    OPC_IOCSRWR_W,
    OPC_IOCSRWR_D,
    OPC_TLBCLR,
    OPC_TLBFLUSH,
    OPC_TLBSRCH,
    OPC_TLBRD,
    OPC_TLBWR,
    OPC_TLBFILL,
    OPC_ERTN,
    OPC_IDLE,
    OPC_INVTLB,
    OPC_FMADD_S,
    OPC_FMADD_D,
    OPC_FMSUB_S,
    OPC_FMSUB_D,
    OPC_FNMADD_S,
    OPC_FNMADD_D,
    OPC_FNMSUB_S,
    OPC_FNMSUB_D,
    OPC_FCMP_CAF_S,
    OPC_FCMP_SAF_S,
    OPC_FCMP_CLT_S,
    OPC_FCMP_STL_S,
    OPC_FCMP_CEQ_S,
    OPC_FCMP_SEQ_S,
    OPC_FCMP_CLE_S,
    OPC_FCMP_SLE_S,
    OPC_FCMP_CUN_S,
    OPC_FCMP_SUN_S,
    OPC_FCMP_CULT_S,
    OPC_FCMP_SULT_S,
    OPC_FCMP_CUEQ_S,
    OPC_FCMP_SUEQ_S,
    OPC_FCMP_CULE_S,
    OPC_FCMP_SULE_S,
    OPC_FCMP_CNE_S,
    OPC_FCMP_SNE_S,
    OPC_FCMP_COR_S,
    OPC_FCMP_SOR_S,
    OPC_FCMP_CUNE_S,
    OPC_FCMP_SUNE_S,
    OPC_FCMP_CAF_D,
    OPC_FCMP_SAF_D,
    OPC_FCMP_CLT_D,
    OPC_FCMP_STL_D,
    OPC_FCMP_CEQ_D,
    OPC_FCMP_SEQ_D,
    OPC_FCMP_CLE_D,
    OPC_FCMP_SLE_D,
    OPC_FCMP_CUN_D,
    OPC_FCMP_SUN_D,
    OPC_FCMP_CULT_D,
    OPC_FCMP_SULT_D,
    OPC_FCMP_CUEQ_D,
    OPC_FCMP_SUEQ_D,
    OPC_FCMP_CULE_D,
    OPC_FCMP_SULE_D,
    OPC_FCMP_CNE_D,
    OPC_FCMP_SNE_D,
    OPC_FCMP_COR_D,
    OPC_FCMP_SOR_D,
    OPC_FCMP_CUNE_D,
    OPC_FCMP_SUNE_D,
    OPC_FSEL,
    OPC_ADDU16I_D,
    OPC_LU12I_W,
    OPC_LU32I_D,
    OPC_PCADDI,
    OPC_PCALAU12I,
    OPC_PCADDU12I,
    OPC_PCADDU18I,
    OPC_LL_W,
    OPC_SC_W,
    OPC_LL_D,
    OPC_SC_D,
    OPC_LDPTR_W,
    OPC_STPTR_W,
    OPC_LDPTR_D,
    OPC_STPTR_D,
    OPC_LD_B,
    OPC_LD_H,
    OPC_LD_W,
    OPC_LD_D,
    OPC_ST_B,
    OPC_ST_H,
    OPC_ST_W,
    OPC_ST_D,
    OPC_LD_BU,
    OPC_LD_HU,
    OPC_LD_WU,
    OPC_PRELD,
    OPC_FLD_S,
    OPC_FST_S,
    OPC_FLD_D,
    OPC_FST_D,
    OPC_LDX_B,
    OPC_LDX_H,
    OPC_LDX_W,
    OPC_LDX_D,
    OPC_STX_B,
    OPC_STX_H,
    OPC_STX_W,
    OPC_STX_D,
    OPC_LDX_BU,
    OPC_LDX_HU,
    OPC_LDX_WU,
    OPC_PRELDX,
    OPC_FLDX_S,
    OPC_FLDX_D,
    OPC_FSTX_S,
    OPC_FSTX_D,
    OPC_AMSWAP_W,
    OPC_AMSWAP_D,
    OPC_AMADD_W,
    OPC_AMADD_D,
    OPC_AMAND_W,
    OPC_AMAND_D,
    OPC_AMOR_W,
    OPC_AMOR_D,
    OPC_AMXOR_W,
    OPC_AMXOR_D,
    OPC_AMMAX_W,
    OPC_AMMAX_D,
    OPC_AMMIN_W,
    OPC_AMMIN_D,
    OPC_AMMAX_WU,
    OPC_AMMAX_DU,
    OPC_AMMIN_WU,
    OPC_AMMIN_DU,
    OPC_AMSWAP_DB_W,
    OPC_AMSWAP_DB_D,
    OPC_AMADD_DB_W,
    OPC_AMADD_DB_D,
    OPC_AMAND_DB_W,
    OPC_AMAND_DB_D,
    OPC_AMOR_DB_W,
    OPC_AMOR_DB_D,
    OPC_AMXOR_DB_W,
    OPC_AMXOR_DB_D,
    OPC_AMMAX_DB_W,
    OPC_AMMAX_DB_D,
    OPC_AMMIN_DB_W,
    OPC_AMMIN_DB_D,
    OPC_AMMAX_DB_WU,
    OPC_AMMAX_DB_DU,
    OPC_AMMIN_DB_WU,
    OPC_AMMIN_DB_DU,
    OPC_DBAR,
    OPC_IBAR,
    OPC_FLDGT_S,
    OPC_FLDGT_D,
    OPC_FLDLE_S,
    OPC_FLDLE_D,
    OPC_FSTGT_S,
    OPC_FSTGT_D,
    OPC_FSTLE_S,
    OPC_FSTLE_D,
    OPC_LDGT_B,
    OPC_LDGT_H,
    OPC_LDGT_W,
    OPC_LDGT_D,
    OPC_LDLE_B,
    OPC_LDLE_H,
    OPC_LDLE_W,
    OPC_LDLE_D,
    OPC_STGT_B,
    OPC_STGT_H,
    OPC_STGT_W,
    OPC_STGT_D,
    OPC_STLE_B,
    OPC_STLE_H,
    OPC_STLE_W,
    OPC_STLE_D,
    OPC_BEQZ,
    OPC_BNEZ,
    OPC_BCEQZ,
    OPC_BCNEZ,
    OPC_JIRL,
    OPC_B,
    OPC_BL,
    OPC_BEQ,
    OPC_BNE,
    OPC_BLT,
    OPC_BGE,
    OPC_BLTU,
    OPC_BGEU,
} LoongArchOpc;

static const char *opcode_name[] = {
    [OPC_CLO_W] = "clo.w",
    [OPC_CLZ_W] = "clz.w",
    [OPC_CTO_W] = "cto.w",
    [OPC_CTZ_W] = "ctz.w",
    [OPC_CLO_D] = "clo.d",
    [OPC_CLZ_D] = "clz.d",
    [OPC_CTO_D] = "cto.d",
    [OPC_CTZ_D] = "ctz.d",
    [OPC_REVB_2H] = "revb.2h",
    [OPC_REVB_4H] = "revb.4h",
    [OPC_REVB_2W] = "revb.2w",
    [OPC_REVB_D] = "revb.d",
    [OPC_REVH_2W] = "revh.2w",
    [OPC_REVH_D] = "revh.d",
    [OPC_BITREV_4B] = "bitrev.4b",
    [OPC_BITREV_8B] = "bitrev.8b",
    [OPC_BITREV_W] = "bitrev.w",
    [OPC_BITREV_D] = "bitrev.d",
    [OPC_EXT_W_H] = "ext.w.h",
    [OPC_EXT_W_B] = "ext.w.b",
    [OPC_RDTIMEL_W] = "rdtimel.w",
    [OPC_RDTIMEH_W] = "rdtimeh.w",
    [OPC_RDTIME_D] = "rdtime.d",
    [OPC_CPUCFG] = "cpucfg",
    [OPC_ASRTLE_D] = "asrtle.d",
    [OPC_ASRTGT_D] = "asrtgt.d",
    [OPC_ALSL_W] = "alsl.w",
    [OPC_ALSL_WU] = "alsl.wu",
    [OPC_BYTEPICK_W] = "bytepick.w",
    [OPC_BYTEPICK_D] = "bytepick.d",
    [OPC_ADD_W] = "add.w",
    [OPC_ADD_D] = "add.d",
    [OPC_SUB_W] = "sub.w",
    [OPC_SUB_D] = "sub.d",
    [OPC_SLT] = "slt",
    [OPC_SLTU] = "sltu",
    [OPC_MASKEQZ] = "maskeqz",
    [OPC_MASKNEZ] = "masknez",
    [OPC_NOR] = "nor",
    [OPC_AND] = "and",
    [OPC_OR] = "or",
    [OPC_XOR] = "xor",
    [OPC_ORN] = "orn",
    [OPC_ANDN] = "andn",
    [OPC_SLL_W] = "sll.w",
    [OPC_SRL_W] = "srl.w",
    [OPC_SRA_W] = "sra.w",
    [OPC_SLL_D] = "sll.d",
    [OPC_SRL_D] = "srl.d",
    [OPC_SRA_D] = "sra.d",
    [OPC_ROTR_W] = "rotr.w",
    [OPC_ROTR_D] = "rotr.d",
    [OPC_MUL_W] = "mul.w",
    [OPC_MULH_W] = "mulh.w",
    [OPC_MULH_WU] = "mulh.wu",
    [OPC_MUL_D] = "mul.d",
    [OPC_MULH_D] = "mulh.d",
    [OPC_MULH_DU] = "mulh.du",
    [OPC_MULW_D_W] = "mulw.d.w",
    [OPC_MULW_D_WU] = "mulw.d.wu",
    [OPC_DIV_W] = "div.w",
    [OPC_MOD_W] = "mod.w",
    [OPC_DIV_WU] = "div.wu",
    [OPC_MOD_WU] = "mod.wu",
    [OPC_DIV_D] = "div.d",
    [OPC_MOD_D] = "mod.d",
    [OPC_DIV_DU] = "div.du",
    [OPC_MOD_DU] = "mod.du",
    [OPC_CRC_W_B_W] = "crc.w.b.w",
    [OPC_CRC_W_H_W] = "crc.w.h.w",
    [OPC_CRC_W_W_W] = "crc.w.w.w",
    [OPC_CRC_W_D_W] = "crc.w.d.w",
    [OPC_CRCC_W_B_W] = "crcc.w.b.w",
    [OPC_CRCC_W_H_W] = "crcc.w.h.w",
    [OPC_CRCC_W_W_W] = "crcc.w.w.w",
    [OPC_CRCC_W_D_W] = "crcc.w.d.w",
    [OPC_BREAK] = "break",
    [OPC_DBCL] = "dbcl",
    [OPC_SYSCALL] = "syscall",
    [OPC_ALSL_D] = "alsl.d",
    [OPC_SLLI_W] = "slli.w",
    [OPC_SLLI_D] = "slli.d",
    [OPC_SRLI_W] = "srli.w",
    [OPC_SRLI_D] = "srli.d",
    [OPC_SRAI_W] = "srai.w",
    [OPC_SRAI_D] = "srai.d",
    [OPC_ROTRI_W] = "rotri.w",
    [OPC_ROTRI_D] = "rotri.d",
    [OPC_BSTRINS_W] = "bstrins.w",
    [OPC_BSTRPICK_W] = "bstrpick.w",
    [OPC_BSTRINS_D] = "bstrins.d",
    [OPC_BSTRPICK_D] = "bstrpick.d",
    [OPC_FADD_S] = "fadd.s",
    [OPC_FADD_D] = "fadd.d",
    [OPC_FSUB_S] = "fsub.s",
    [OPC_FSUB_D] = "fsub.d",
    [OPC_FMUL_S] = "fmul.s",
    [OPC_FMUL_D] = "fmul.d",
    [OPC_FDIV_S] = "fdiv.s",
    [OPC_FDIV_D] = "fdiv.d",
    [OPC_FMAX_S] = "fmax.s",
    [OPC_FMAX_D] = "fmax.d",
    [OPC_FMIN_S] = "fmin.s",
    [OPC_FMIN_D] = "fmin.d",
    [OPC_FMAXA_S] = "fmaxa.s",
    [OPC_FMAXA_D] = "fmaxa.d",
    [OPC_FMINA_S] = "fmina.s",
    [OPC_FMINA_D] = "fmina.d",
    [OPC_FSCALEB_S] = "fscaleb.s",
    [OPC_FSCALEB_D] = "fscaleb.d",
    [OPC_FCOPYSIGN_S] = "fcopysign.s",
    [OPC_FCOPYSIGN_D] = "fcopysign.d",
    [OPC_FABS_S] = "fabs.s",
    [OPC_FABS_D] = "fabs.d",
    [OPC_FNEG_S] = "fneg.s",
    [OPC_FNEG_D] = "fneg.d",
    [OPC_FLOGB_S] = "flogb.s",
    [OPC_FLOGB_D] = "flogb.d",
    [OPC_FCLASS_S] = "fclass.s",
    [OPC_FCLASS_D] = "fclass.d",
    [OPC_FSQRT_S] = "fsqrt.s",
    [OPC_FSQRT_D] = "fsqrt.d",
    [OPC_FRECIP_S] = "frecip.s",
    [OPC_FRECIP_D] = "frecip.d",
    [OPC_FRSQRT_S] = "frsqrt.s",
    [OPC_FRSQRT_D] = "frsqrt.d",
    [OPC_FMOV_S] = "fmov.s",
    [OPC_FMOV_D] = "fmov.d",
    [OPC_MOVGR2FR_W] = "movgr2fr.w",
    [OPC_MOVGR2FR_D] = "movgr2fr.d",
    [OPC_MOVGR2FRH_W] = "movgr2frh.w",
    [OPC_MOVFR2GR_S] = "movfr2gr.s",
    [OPC_MOVFR2GR_D] = "movfr2gr.d",
    [OPC_MOVFRH2GR_S] = "movfrh2gr.s",
    [OPC_MOVGR2FCSR] = "movgr2fcsr",
    [OPC_MOVFCSR2GR] = "movfcsr2gr",
    [OPC_MOVFR2CF] = "movfr2cf",
    [OPC_MOVCF2FR] = "movcf2fr",
    [OPC_MOVGR2CF] = "movgr2cf",
    [OPC_MOVCF2GR] = "movcf2gr",
    [OPC_FCVT_S_D] = "fcvt.s.d",
    [OPC_FCVT_D_S] = "fcvt.d.s",
    [OPC_FTINTRM_W_S] = "ftintrm.w.s",
    [OPC_FTINTRM_W_D] = "ftintrm.w.d",
    [OPC_FTINTRM_L_S] = "ftintrm.l.s",
    [OPC_FTINTRM_L_D] = "ftintrm.l.d",
    [OPC_FTINTRP_W_S] = "ftintrp.w.s",
    [OPC_FTINTRP_W_D] = "ftintrp.w.d",
    [OPC_FTINTRP_L_S] = "ftintrp.l.s",
    [OPC_FTINTRP_L_D] = "ftintrp.l.d",
    [OPC_FTINTRZ_W_S] = "ftintrz.w.s",
    [OPC_FTINTRZ_W_D] = "ftintrz.w.d",
    [OPC_FTINTRZ_L_S] = "ftintrz.l.s",
    [OPC_FTINTRZ_L_D] = "ftintrz.l.d",
    [OPC_FTINTRNE_W_S] = "ftintrne.w.s",
    [OPC_FTINTRNE_W_D] = "ftintrne.w.d",
    [OPC_FTINTRNE_L_S] = "ftintrne.l.s",
    [OPC_FTINTRNE_L_D] = "ftintrne.l.d",
    [OPC_FTINT_W_S] = "ftint.w.s",
    [OPC_FTINT_W_D] = "ftint.w.d",
    [OPC_FTINT_L_S] = "ftint.l.s",
    [OPC_FTINT_L_D] = "ftint.l.d",
    [OPC_FFINT_S_W] = "ffint.s.w",
    [OPC_FFINT_S_L] = "ffint.s.l",
    [OPC_FFINT_D_W] = "ffint.d.w",
    [OPC_FFINT_D_L] = "ffint.d.l",
    [OPC_FRINT_S] = "frint.s",
    [OPC_FRINT_D] = "frint.d",
    [OPC_SLTI] = "slti",
    [OPC_SLTUI] = "sltui",
    [OPC_ADDI_W] = "addi.w",
    [OPC_ADDI_D] = "addi.d",
    [OPC_LU52I_D] = "lu52i.d",
    [OPC_ANDI] = "andi",
    [OPC_ORI] = "ori",
    [OPC_XORI] = "xori",
    [OPC_CSRRD] = "csrrd",
    [OPC_CSRWR] = "csrwr",
    [OPC_CSRXCHG] = "csrxchg",
    [OPC_CACOP] = "cacop",
    [OPC_LDDIR] = "lddir",
    [OPC_LDPTE] = "ldpte",
    [OPC_IOCSRRD_B] = "iocsrrd.b",
    [OPC_IOCSRRD_H] = "iocsrrd.h",
    [OPC_IOCSRRD_W] = "iocsrrd.w",
    [OPC_IOCSRRD_D] = "iocsrrd.d",
    [OPC_IOCSRWR_B] = "iocsrwr.b",
    [OPC_IOCSRWR_H] = "iocsrwr.h",
    [OPC_IOCSRWR_W] = "iocsrwr.w",
    [OPC_IOCSRWR_D] = "iocsrwr.d",
    [OPC_TLBCLR] = "tlbclr",
    [OPC_TLBFLUSH] = "tlbflush",
    [OPC_TLBSRCH] = "tlbsrch",
    [OPC_TLBRD] = "tlbrd",
    [OPC_TLBWR] = "tlbwr",
    [OPC_TLBFILL] = "tlbfill",
    [OPC_ERTN] = "ertn",
    [OPC_IDLE] = "idle",
    [OPC_INVTLB] = "invtlb",
    [OPC_FMADD_S] = "fmadd.s",
    [OPC_FMADD_D] = "fmadd.d",
    [OPC_FMSUB_S] = "fmsub.s",
    [OPC_FMSUB_D] = "fmsub.d",
    [OPC_FNMADD_S] = "fnmadd.s",
    [OPC_FNMADD_D] = "fnmadd.d",
    [OPC_FNMSUB_S] = "fnmsub.s",
    [OPC_FNMSUB_D] = "fnmsub.d",
    [OPC_FCMP_CAF_S] = "fcmp.caf.s",
    [OPC_FCMP_SAF_S] = "fcmp.saf.s",
    [OPC_FCMP_CLT_S] = "fcmp.clt.s",
    [OPC_FCMP_STL_S] = "fcmp.stl.s",
    [OPC_FCMP_CEQ_S] = "fcmp.ceq.s",
    [OPC_FCMP_SEQ_S] = "fcmp.seq.s",
    [OPC_FCMP_CLE_S] = "fcmp.cle.s",
    [OPC_FCMP_SLE_S] = "fcmp.sle.s",
    [OPC_FCMP_CUN_S] = "fcmp.cun.s",
    [OPC_FCMP_SUN_S] = "fcmp.sun.s",
    [OPC_FCMP_CULT_S] = "fcmp.cult.s",
    [OPC_FCMP_SULT_S] = "fcmp.sult.s",
    [OPC_FCMP_CUEQ_S] = "fcmp.cueq.s",
    [OPC_FCMP_SUEQ_S] = "fcmp.sueq.s",
    [OPC_FCMP_CULE_S] = "fcmp.cule.s",
    [OPC_FCMP_SULE_S] = "fcmp.sule.s",
    [OPC_FCMP_CNE_S] = "fcmp.cne.s",
    [OPC_FCMP_SNE_S] = "fcmp.sne.s",
    [OPC_FCMP_COR_S] = "fcmp.cor.s",
    [OPC_FCMP_SOR_S] = "fcmp.sor.s",
    [OPC_FCMP_CUNE_S] = "fcmp.cune.s",
    [OPC_FCMP_SUNE_S] = "fcmp.sune.s",
    [OPC_FCMP_CAF_D] = "fcmp.caf.d",
    [OPC_FCMP_SAF_D] = "fcmp.saf.d",
    [OPC_FCMP_CLT_D] = "fcmp.clt.d",
    [OPC_FCMP_STL_D] = "fcmp.stl.d",
    [OPC_FCMP_CEQ_D] = "fcmp.ceq.d",
    [OPC_FCMP_SEQ_D] = "fcmp.seq.d",
    [OPC_FCMP_CLE_D] = "fcmp.cle.d",
    [OPC_FCMP_SLE_D] = "fcmp.sle.d",
    [OPC_FCMP_CUN_D] = "fcmp.cun.d",
    [OPC_FCMP_SUN_D] = "fcmp.sun.d",
    [OPC_FCMP_CULT_D] = "fcmp.cult.d",
    [OPC_FCMP_SULT_D] = "fcmp.sult.d",
    [OPC_FCMP_CUEQ_D] = "fcmp.cueq.d",
    [OPC_FCMP_SUEQ_D] = "fcmp.sueq.d",
    [OPC_FCMP_CULE_D] = "fcmp.cule.d",
    [OPC_FCMP_SULE_D] = "fcmp.sule.d",
    [OPC_FCMP_CNE_D] = "fcmp.cne.d",
    [OPC_FCMP_SNE_D] = "fcmp.sne.d",
    [OPC_FCMP_COR_D] = "fcmp.cor.d",
    [OPC_FCMP_SOR_D] = "fcmp.sor.d",
    [OPC_FCMP_CUNE_D] = "fcmp.cune.d",
    [OPC_FCMP_SUNE_D] = "fcmp.sune.d",
    [OPC_FSEL] = "fsel",
    [OPC_ADDU16I_D] = "addu16i.d",
    [OPC_LU12I_W] = "lu12i.w",
    [OPC_LU32I_D] = "lu32i.d",
    [OPC_PCADDI] = "pcaddi",
    [OPC_PCALAU12I] = "pcalau12i",
    [OPC_PCADDU12I] = "pcaddu12i",
    [OPC_PCADDU18I] = "pcaddu18i",
    [OPC_LL_W] = "ll.w",
    [OPC_SC_W] = "sc.w",
    [OPC_LL_D] = "ll.d",
    [OPC_SC_D] = "sc.d",
    [OPC_LDPTR_W] = "ldptr.w",
    [OPC_STPTR_W] = "stptr.w",
    [OPC_LDPTR_D] = "ldptr.d",
    [OPC_STPTR_D] = "stptr.d",
    [OPC_LD_B] = "ld.b",
    [OPC_LD_H] = "ld.h",
    [OPC_LD_W] = "ld.w",
    [OPC_LD_D] = "ld.d",
    [OPC_ST_B] = "st.b",
    [OPC_ST_H] = "st.h",
    [OPC_ST_W] = "st.w",
    [OPC_ST_D] = "st.d",
    [OPC_LD_BU] = "ld.bu",
    [OPC_LD_HU] = "ld.hu",
    [OPC_LD_WU] = "ld.wu",
    [OPC_PRELD] = "preld",
    [OPC_FLD_S] = "fld.s",
    [OPC_FST_S] = "fst.s",
    [OPC_FLD_D] = "fld.d",
    [OPC_FST_D] = "fst.d",
    [OPC_LDX_B] = "ldx.b",
    [OPC_LDX_H] = "ldx.h",
    [OPC_LDX_W] = "ldx.w",
    [OPC_LDX_D] = "ldx.d",
    [OPC_STX_B] = "stx.b",
    [OPC_STX_H] = "stx.h",
    [OPC_STX_W] = "stx.w",
    [OPC_STX_D] = "stx.d",
    [OPC_LDX_BU] = "ldx.bu",
    [OPC_LDX_HU] = "ldx.hu",
    [OPC_LDX_WU] = "ldx.wu",
    [OPC_PRELDX] = "preldx",
    [OPC_FLDX_S] = "fldx.s",
    [OPC_FLDX_D] = "fldx.d",
    [OPC_FSTX_S] = "fstx.s",
    [OPC_FSTX_D] = "fstx.d",
    [OPC_AMSWAP_W] = "amswap.w",
    [OPC_AMSWAP_D] = "amswap.d",
    [OPC_AMADD_W] = "amadd.w",
    [OPC_AMADD_D] = "amadd.d",
    [OPC_AMAND_W] = "amand.w",
    [OPC_AMAND_D] = "amand.d",
    [OPC_AMOR_W] = "amor.w",
    [OPC_AMOR_D] = "amor.d",
    [OPC_AMXOR_W] = "amxor.w",
    [OPC_AMXOR_D] = "amxor.d",
    [OPC_AMMAX_W] = "ammax.w",
    [OPC_AMMAX_D] = "ammax.d",
    [OPC_AMMIN_W] = "ammin.w",
    [OPC_AMMIN_D] = "ammin.d",
    [OPC_AMMAX_WU] = "ammax.wu",
    [OPC_AMMAX_DU] = "ammax.du",
    [OPC_AMMIN_WU] = "ammin.wu",
    [OPC_AMMIN_DU] = "ammin.du",
    [OPC_AMSWAP_DB_W] = "amswap.db.w",
    [OPC_AMSWAP_DB_D] = "amswap.db.d",
    [OPC_AMADD_DB_W] = "amadd.db.w",
    [OPC_AMADD_DB_D] = "amadd.db.d",
    [OPC_AMAND_DB_W] = "amand.db.w",
    [OPC_AMAND_DB_D] = "amand.db.d",
    [OPC_AMOR_DB_W] = "amor.db.w",
    [OPC_AMOR_DB_D] = "amor.db.d",
    [OPC_AMXOR_DB_W] = "amxor.db.w",
    [OPC_AMXOR_DB_D] = "amxor.db.d",
    [OPC_AMMAX_DB_W] = "ammax.db.w",
    [OPC_AMMAX_DB_D] = "ammax.db.d",
    [OPC_AMMIN_DB_W] = "ammin.db.w",
    [OPC_AMMIN_DB_D] = "ammin.db.d",
    [OPC_AMMAX_DB_WU] = "ammax.db.wu",
    [OPC_AMMAX_DB_DU] = "ammax.db.du",
    [OPC_AMMIN_DB_WU] = "ammin.db.wu",
    [OPC_AMMIN_DB_DU] = "ammin.db.du",
    [OPC_DBAR] = "dbar",
    [OPC_IBAR] = "ibar",
    [OPC_FLDGT_S] = "fldgt.s",
    [OPC_FLDGT_D] = "fldgt.d",
    [OPC_FLDLE_S] = "fldle.s",
    [OPC_FLDLE_D] = "fldle.d",
    [OPC_FSTGT_S] = "fstgt.s",
    [OPC_FSTGT_D] = "fstgt.d",
    [OPC_FSTLE_S] = "fstle.s",
    [OPC_FSTLE_D] = "fstle.d",
    [OPC_LDGT_B] = "ldgt.b",
    [OPC_LDGT_H] = "ldgt.h",
    [OPC_LDGT_W] = "ldgt.w",
    [OPC_LDGT_D] = "ldgt.d",
    [OPC_LDLE_B] = "ldle.b",
    [OPC_LDLE_H] = "ldle.h",
    [OPC_LDLE_W] = "ldle.w",
    [OPC_LDLE_D] = "ldle.d",
    [OPC_STGT_B] = "stgt.b",
    [OPC_STGT_H] = "stgt.h",
    [OPC_STGT_W] = "stgt.w",
    [OPC_STGT_D] = "stgt.d",
    [OPC_STLE_B] = "stle.b",
    [OPC_STLE_H] = "stle.h",
    [OPC_STLE_W] = "stle.w",
    [OPC_STLE_D] = "stle.d",
    [OPC_BEQZ] = "beqz",
    [OPC_BNEZ] = "bnez",
    [OPC_BCEQZ] = "bceqz",
    [OPC_BCNEZ] = "bcnez",
    [OPC_JIRL] = "jirl",
    [OPC_B] = "b",
    [OPC_BL] = "bl",
    [OPC_BEQ] = "beq",
    [OPC_BNE] = "bne",
    [OPC_BLT] = "blt",
    [OPC_BGE] = "bge",
    [OPC_BLTU] = "bltu",
    [OPC_BGEU] = "bgeu",
};

typedef struct {
    uint64_t pc;
    LoongArchOpc opc;
    int nb_opnds;
    int opnds[4];
} LoongArchInsInfo;

static void decode_extract_format_0(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->nb_opnds = 2;
}

static void decode_extract_format_1(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 5, 5); //rj
    info->opnds[1] = extract32(insn, 10, 5); //rk
    info->nb_opnds = 2;
}

static void decode_extract_format_10(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->opnds[2] = extract32(insn, 10, 5); //fk
    info->nb_opnds = 3;
}

static void decode_extract_format_11(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->nb_opnds = 2;
}

static void decode_extract_format_12(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->nb_opnds = 2;
}

static void decode_extract_format_13(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->nb_opnds = 2;
}

static void decode_extract_format_14(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fcsr
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->nb_opnds = 2;
}

static void decode_extract_format_15(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //fcsr_1
    info->nb_opnds = 2;
}

static void decode_extract_format_16(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 3); //cd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->nb_opnds = 2;
}

static void decode_extract_format_17(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 3); //cj
    info->nb_opnds = 2;
}

static void decode_extract_format_18(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 3); //cd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->nb_opnds = 2;
}

static void decode_extract_format_19(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 3); //cj
    info->nb_opnds = 2;
}

static void decode_extract_format_2(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->opnds[3] = extract32(insn, 15, 2); //sa2
    info->nb_opnds = 4;
}

static void decode_extract_format_20(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 12); //si12
    info->nb_opnds = 3;
}

static void decode_extract_format_21(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 12); //ui12
    info->nb_opnds = 3;
}

static void decode_extract_format_22(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 10, 14); //csr
    info->nb_opnds = 2;
}

static void decode_extract_format_23(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 14); //csr
    info->nb_opnds = 3;
}

static void decode_extract_format_24(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //code_2
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 12); //si12
    info->nb_opnds = 3;
}

static void decode_extract_format_25(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 8); //level
    info->nb_opnds = 3;
}

static void decode_extract_format_26(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 5, 5); //rj
    info->opnds[1] = extract32(insn, 10, 8); //seq
    info->nb_opnds = 2;
}

static void decode_extract_format_27(LoongArchInsInfo *info, uint32_t insn)
{
    info->nb_opnds = 0;
}

static void decode_extract_format_28(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 15); //level_3
    info->nb_opnds = 1;
}

static void decode_extract_format_29(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //op
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->nb_opnds = 3;
}

static void decode_extract_format_3(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->opnds[3] = extract32(insn, 15, 3); //sa3
    info->nb_opnds = 4;
}

static void decode_extract_format_30(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->opnds[2] = extract32(insn, 10, 5); //fk
    info->opnds[3] = extract32(insn, 15, 5); //fa
    info->nb_opnds = 4;
}

static void decode_extract_format_31(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 3); //cd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->opnds[2] = extract32(insn, 10, 5); //fk
    info->nb_opnds = 3;
}

static void decode_extract_format_32(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //fj
    info->opnds[2] = extract32(insn, 10, 5); //fk
    info->opnds[3] = extract32(insn, 15, 3); //ca
    info->nb_opnds = 4;
}

static void decode_extract_format_33(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 16); //si16
    info->nb_opnds = 3;
}

static void decode_extract_format_34(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = sextract32(insn, 5, 20); //si20
    info->nb_opnds = 2;
}

static void decode_extract_format_35(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 14); //si14
    info->nb_opnds = 3;
}

static void decode_extract_format_36(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //hint
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 12); //si12
    info->nb_opnds = 3;
}

static void decode_extract_format_37(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 12); //si12
    info->nb_opnds = 3;
}

static void decode_extract_format_38(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //hint
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->nb_opnds = 3;
}

static void decode_extract_format_39(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //fd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->nb_opnds = 3;
}

static void decode_extract_format_4(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //rk
    info->nb_opnds = 3;
}

static void decode_extract_format_40(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 15); //hint_4
    info->nb_opnds = 1;
}

static void decode_extract_format_41(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 15); //hint_5
    info->nb_opnds = 1;
}

static void decode_extract_format_42(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 5, 5); //rj
    info->opnds[1] = deposit32(extract32(insn, 10, 16), 16, 16, sextract32(insn, 0, 5)); //offs2
    info->nb_opnds = 2;
}

static void decode_extract_format_43(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 5, 3); //cj
    info->opnds[1] = deposit32(extract32(insn, 10, 16), 16, 16, sextract32(insn, 0, 5)); //offs2
    info->nb_opnds = 2;
}

static void decode_extract_format_44(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = sextract32(insn, 10, 16); //offs1
    info->nb_opnds = 3;
}

static void decode_extract_format_45(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = deposit32(extract32(insn, 10, 16), 16, 16, sextract32(insn, 0, 10)); //offs3
    info->nb_opnds = 1;
}

static void decode_extract_format_5(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 15); //code
    info->nb_opnds = 1;
}

static void decode_extract_format_6(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 5); //ui5
    info->nb_opnds = 3;
}

static void decode_extract_format_7(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 10, 6); //ui6
    info->nb_opnds = 3;
}

static void decode_extract_format_8(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 16, 5); //msbw
    info->opnds[3] = extract32(insn, 10, 5); //lsbw
    info->nb_opnds = 4;
}

static void decode_extract_format_9(LoongArchInsInfo *info, uint32_t insn)
{
    info->opnds[0] = extract32(insn, 0, 5); //rd
    info->opnds[1] = extract32(insn, 5, 5); //rj
    info->opnds[2] = extract32(insn, 16, 6); //msbd
    info->opnds[3] = extract32(insn, 10, 6); //lsbd
    info->nb_opnds = 4;
}

static bool decode(LoongArchInsInfo *info, uint32_t insn)
{
    switch ((insn >> 26) & 0x3f) {
    case 0x0:
        /* 000000.. ........ ........ ........ */
        switch ((insn >> 22) & 0xf) {
        case 0x0:
            /* 00000000 00...... ........ ........ */
            switch ((insn >> 18) & 0xf) {
            case 0x0:
                /* 00000000 000000.. ........ ........ */
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00000000 0....... ........ */
                    decode_extract_format_0(info, insn);
                    switch ((insn >> 10) & 0x1f) {
                    case 0x4:
                        /* 00000000 00000000 000100.. ........ */
                        /* loongarch.decode:40 */
                        info->opc = OPC_CLO_W;
                        return true;
                        break;
                    case 0x5:
                        /* 00000000 00000000 000101.. ........ */
                        /* loongarch.decode:41 */
                        info->opc = OPC_CLZ_W;
                        return true;
                        break;
                    case 0x6:
                        /* 00000000 00000000 000110.. ........ */
                        /* loongarch.decode:42 */
                        info->opc = OPC_CTO_W;
                        return true;
                        break;
                    case 0x7:
                        /* 00000000 00000000 000111.. ........ */
                        /* loongarch.decode:43 */
                        info->opc = OPC_CTZ_W;
                        return true;
                        break;
                    case 0x8:
                        /* 00000000 00000000 001000.. ........ */
                        /* loongarch.decode:44 */
                        info->opc = OPC_CLO_D;
                        return true;
                        break;
                    case 0x9:
                        /* 00000000 00000000 001001.. ........ */
                        /* loongarch.decode:45 */
                        info->opc = OPC_CLZ_D;
                        return true;
                        break;
                    case 0xa:
                        /* 00000000 00000000 001010.. ........ */
                        /* loongarch.decode:46 */
                        info->opc = OPC_CTO_D;
                        return true;
                        break;
                    case 0xb:
                        /* 00000000 00000000 001011.. ........ */
                        /* loongarch.decode:47 */
                        info->opc = OPC_CTZ_D;
                        return true;
                        break;
                    case 0xc:
                        /* 00000000 00000000 001100.. ........ */
                        /* loongarch.decode:48 */
                        info->opc = OPC_REVB_2H;
                        return true;
                        break;
                    case 0xd:
                        /* 00000000 00000000 001101.. ........ */
                        /* loongarch.decode:49 */
                        info->opc = OPC_REVB_4H;
                        return true;
                        break;
                    case 0xe:
                        /* 00000000 00000000 001110.. ........ */
                        /* loongarch.decode:50 */
                        info->opc = OPC_REVB_2W;
                        return true;
                        break;
                    case 0xf:
                        /* 00000000 00000000 001111.. ........ */
                        /* loongarch.decode:51 */
                        info->opc = OPC_REVB_D;
                        return true;
                        break;
                    case 0x10:
                        /* 00000000 00000000 010000.. ........ */
                        /* loongarch.decode:52 */
                        info->opc = OPC_REVH_2W;
                        return true;
                        break;
                    case 0x11:
                        /* 00000000 00000000 010001.. ........ */
                        /* loongarch.decode:53 */
                        info->opc = OPC_REVH_D;
                        return true;
                        break;
                    case 0x12:
                        /* 00000000 00000000 010010.. ........ */
                        /* loongarch.decode:54 */
                        info->opc = OPC_BITREV_4B;
                        return true;
                        break;
                    case 0x13:
                        /* 00000000 00000000 010011.. ........ */
                        /* loongarch.decode:55 */
                        info->opc = OPC_BITREV_8B;
                        return true;
                        break;
                    case 0x14:
                        /* 00000000 00000000 010100.. ........ */
                        /* loongarch.decode:56 */
                        info->opc = OPC_BITREV_W;
                        return true;
                        break;
                    case 0x15:
                        /* 00000000 00000000 010101.. ........ */
                        /* loongarch.decode:57 */
                        info->opc = OPC_BITREV_D;
                        return true;
                        break;
                    case 0x16:
                        /* 00000000 00000000 010110.. ........ */
                        /* loongarch.decode:58 */
                        info->opc = OPC_EXT_W_H;
                        return true;
                        break;
                    case 0x17:
                        /* 00000000 00000000 010111.. ........ */
                        /* loongarch.decode:59 */
                        info->opc = OPC_EXT_W_B;
                        return true;
                        break;
                    case 0x18:
                        /* 00000000 00000000 011000.. ........ */
                        /* loongarch.decode:60 */
                        info->opc = OPC_RDTIMEL_W;
                        return true;
                        break;
                    case 0x19:
                        /* 00000000 00000000 011001.. ........ */
                        /* loongarch.decode:61 */
                        info->opc = OPC_RDTIMEH_W;
                        return true;
                        break;
                    case 0x1a:
                        /* 00000000 00000000 011010.. ........ */
                        /* loongarch.decode:62 */
                        info->opc = OPC_RDTIME_D;
                        return true;
                        break;
                    case 0x1b:
                        /* 00000000 00000000 011011.. ........ */
                        /* loongarch.decode:63 */
                        info->opc = OPC_CPUCFG;
                        return true;
                        break;
                    }
                    break;
                case 0x2:
                    /* 00000000 00000001 0....... ........ */
                    decode_extract_format_1(info, insn);
                    switch (insn & 0x0000001f) {
                    case 0x00000000:
                        /* 00000000 00000001 0....... ...00000 */
                        /* loongarch.decode:64 */
                        info->opc = OPC_ASRTLE_D;
                        return true;
                        break;
                    }
                    break;
                case 0x3:
                    /* 00000000 00000001 1....... ........ */
                    decode_extract_format_1(info, insn);
                    switch (insn & 0x0000001f) {
                    case 0x00000000:
                        /* 00000000 00000001 1....... ...00000 */
                        /* loongarch.decode:65 */
                        info->opc = OPC_ASRTGT_D;
                        return true;
                        break;
                    }
                    break;
                }
                break;
            case 0x1:
                /* 00000000 000001.. ........ ........ */
                decode_extract_format_2(info, insn);
                switch ((insn >> 17) & 0x1) {
                case 0x0:
                    /* 00000000 0000010. ........ ........ */
                    /* loongarch.decode:66 */
                    info->opc = OPC_ALSL_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 0000011. ........ ........ */
                    /* loongarch.decode:67 */
                    info->opc = OPC_ALSL_WU;
                    return true;
                    break;
                }
                break;
            case 0x2:
                /* 00000000 000010.. ........ ........ */
                decode_extract_format_2(info, insn);
                switch ((insn >> 17) & 0x1) {
                case 0x0:
                    /* 00000000 0000100. ........ ........ */
                    /* loongarch.decode:68 */
                    info->opc = OPC_BYTEPICK_W;
                    return true;
                    break;
                }
                break;
            case 0x3:
                /* 00000000 000011.. ........ ........ */
                /* loongarch.decode:69 */
                decode_extract_format_3(info, insn);
                info->opc = OPC_BYTEPICK_D;
                return true;
                break;
            case 0x4:
                /* 00000000 000100.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00010000 0....... ........ */
                    /* loongarch.decode:70 */
                    info->opc = OPC_ADD_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00010000 1....... ........ */
                    /* loongarch.decode:71 */
                    info->opc = OPC_ADD_D;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00010001 0....... ........ */
                    /* loongarch.decode:72 */
                    info->opc = OPC_SUB_W;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00010001 1....... ........ */
                    /* loongarch.decode:73 */
                    info->opc = OPC_SUB_D;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 00010010 0....... ........ */
                    /* loongarch.decode:74 */
                    info->opc = OPC_SLT;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00010010 1....... ........ */
                    /* loongarch.decode:75 */
                    info->opc = OPC_SLTU;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00010011 0....... ........ */
                    /* loongarch.decode:76 */
                    info->opc = OPC_MASKEQZ;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00010011 1....... ........ */
                    /* loongarch.decode:77 */
                    info->opc = OPC_MASKNEZ;
                    return true;
                    break;
                }
                break;
            case 0x5:
                /* 00000000 000101.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00010100 0....... ........ */
                    /* loongarch.decode:78 */
                    info->opc = OPC_NOR;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00010100 1....... ........ */
                    /* loongarch.decode:79 */
                    info->opc = OPC_AND;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00010101 0....... ........ */
                    /* loongarch.decode:80 */
                    info->opc = OPC_OR;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00010101 1....... ........ */
                    /* loongarch.decode:81 */
                    info->opc = OPC_XOR;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 00010110 0....... ........ */
                    /* loongarch.decode:82 */
                    info->opc = OPC_ORN;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00010110 1....... ........ */
                    /* loongarch.decode:83 */
                    info->opc = OPC_ANDN;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00010111 0....... ........ */
                    /* loongarch.decode:84 */
                    info->opc = OPC_SLL_W;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00010111 1....... ........ */
                    /* loongarch.decode:85 */
                    info->opc = OPC_SRL_W;
                    return true;
                    break;
                }
                break;
            case 0x6:
                /* 00000000 000110.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00011000 0....... ........ */
                    /* loongarch.decode:86 */
                    info->opc = OPC_SRA_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00011000 1....... ........ */
                    /* loongarch.decode:87 */
                    info->opc = OPC_SLL_D;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00011001 0....... ........ */
                    /* loongarch.decode:88 */
                    info->opc = OPC_SRL_D;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00011001 1....... ........ */
                    /* loongarch.decode:89 */
                    info->opc = OPC_SRA_D;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00011011 0....... ........ */
                    /* loongarch.decode:90 */
                    info->opc = OPC_ROTR_W;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00011011 1....... ........ */
                    /* loongarch.decode:91 */
                    info->opc = OPC_ROTR_D;
                    return true;
                    break;
                }
                break;
            case 0x7:
                /* 00000000 000111.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00011100 0....... ........ */
                    /* loongarch.decode:92 */
                    info->opc = OPC_MUL_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00011100 1....... ........ */
                    /* loongarch.decode:93 */
                    info->opc = OPC_MULH_W;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00011101 0....... ........ */
                    /* loongarch.decode:94 */
                    info->opc = OPC_MULH_WU;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00011101 1....... ........ */
                    /* loongarch.decode:95 */
                    info->opc = OPC_MUL_D;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 00011110 0....... ........ */
                    /* loongarch.decode:96 */
                    info->opc = OPC_MULH_D;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00011110 1....... ........ */
                    /* loongarch.decode:97 */
                    info->opc = OPC_MULH_DU;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00011111 0....... ........ */
                    /* loongarch.decode:98 */
                    info->opc = OPC_MULW_D_W;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00011111 1....... ........ */
                    /* loongarch.decode:99 */
                    info->opc = OPC_MULW_D_WU;
                    return true;
                    break;
                }
                break;
            case 0x8:
                /* 00000000 001000.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00100000 0....... ........ */
                    /* loongarch.decode:100 */
                    info->opc = OPC_DIV_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00100000 1....... ........ */
                    /* loongarch.decode:101 */
                    info->opc = OPC_MOD_W;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00100001 0....... ........ */
                    /* loongarch.decode:102 */
                    info->opc = OPC_DIV_WU;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00100001 1....... ........ */
                    /* loongarch.decode:103 */
                    info->opc = OPC_MOD_WU;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 00100010 0....... ........ */
                    /* loongarch.decode:104 */
                    info->opc = OPC_DIV_D;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00100010 1....... ........ */
                    /* loongarch.decode:105 */
                    info->opc = OPC_MOD_D;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00100011 0....... ........ */
                    /* loongarch.decode:106 */
                    info->opc = OPC_DIV_DU;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00100011 1....... ........ */
                    /* loongarch.decode:107 */
                    info->opc = OPC_MOD_DU;
                    return true;
                    break;
                }
                break;
            case 0x9:
                /* 00000000 001001.. ........ ........ */
                decode_extract_format_4(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x0:
                    /* 00000000 00100100 0....... ........ */
                    /* loongarch.decode:108 */
                    info->opc = OPC_CRC_W_B_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 00100100 1....... ........ */
                    /* loongarch.decode:109 */
                    info->opc = OPC_CRC_W_H_W;
                    return true;
                    break;
                case 0x2:
                    /* 00000000 00100101 0....... ........ */
                    /* loongarch.decode:110 */
                    info->opc = OPC_CRC_W_W_W;
                    return true;
                    break;
                case 0x3:
                    /* 00000000 00100101 1....... ........ */
                    /* loongarch.decode:111 */
                    info->opc = OPC_CRC_W_D_W;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 00100110 0....... ........ */
                    /* loongarch.decode:112 */
                    info->opc = OPC_CRCC_W_B_W;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00100110 1....... ........ */
                    /* loongarch.decode:113 */
                    info->opc = OPC_CRCC_W_H_W;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00100111 0....... ........ */
                    /* loongarch.decode:114 */
                    info->opc = OPC_CRCC_W_W_W;
                    return true;
                    break;
                case 0x7:
                    /* 00000000 00100111 1....... ........ */
                    /* loongarch.decode:115 */
                    info->opc = OPC_CRCC_W_D_W;
                    return true;
                    break;
                }
                break;
            case 0xa:
                /* 00000000 001010.. ........ ........ */
                decode_extract_format_5(info, insn);
                switch ((insn >> 15) & 0x7) {
                case 0x4:
                    /* 00000000 00101010 0....... ........ */
                    /* loongarch.decode:116 */
                    info->opc = OPC_BREAK;
                    return true;
                    break;
                case 0x5:
                    /* 00000000 00101010 1....... ........ */
                    /* loongarch.decode:117 */
                    info->opc = OPC_DBCL;
                    return true;
                    break;
                case 0x6:
                    /* 00000000 00101011 0....... ........ */
                    /* loongarch.decode:118 */
                    info->opc = OPC_SYSCALL;
                    return true;
                    break;
                }
                break;
            case 0xb:
                /* 00000000 001011.. ........ ........ */
                decode_extract_format_2(info, insn);
                switch ((insn >> 17) & 0x1) {
                case 0x0:
                    /* 00000000 0010110. ........ ........ */
                    /* loongarch.decode:119 */
                    info->opc = OPC_ALSL_D;
                    return true;
                    break;
                }
                break;
            }
            break;
        case 0x1:
            /* 00000000 01...... ........ ........ */
            switch ((insn >> 21) & 0x1) {
            case 0x0:
                /* 00000000 010..... ........ ........ */
                switch ((insn >> 16) & 0x1f) {
                case 0x0:
                    /* 00000000 01000000 ........ ........ */
                    decode_extract_format_6(info, insn);
                    switch ((insn >> 15) & 0x1) {
                    case 0x1:
                        /* 00000000 01000000 1....... ........ */
                        /* loongarch.decode:120 */
                        info->opc = OPC_SLLI_W;
                        return true;
                        break;
                    }
                    break;
                case 0x1:
                    /* 00000000 01000001 ........ ........ */
                    /* loongarch.decode:121 */
                    decode_extract_format_7(info, insn);
                    info->opc = OPC_SLLI_D;
                    return true;
                    break;
                case 0x4:
                    /* 00000000 01000100 ........ ........ */
                    decode_extract_format_6(info, insn);
                    switch ((insn >> 15) & 0x1) {
                    case 0x1:
                        /* 00000000 01000100 1....... ........ */
                        /* loongarch.decode:122 */
                        info->opc = OPC_SRLI_W;
                        return true;
                        break;
                    }
                    break;
                case 0x5:
                    /* 00000000 01000101 ........ ........ */
                    /* loongarch.decode:123 */
                    decode_extract_format_7(info, insn);
                    info->opc = OPC_SRLI_D;
                    return true;
                    break;
                case 0x8:
                    /* 00000000 01001000 ........ ........ */
                    decode_extract_format_6(info, insn);
                    switch ((insn >> 15) & 0x1) {
                    case 0x1:
                        /* 00000000 01001000 1....... ........ */
                        /* loongarch.decode:124 */
                        info->opc = OPC_SRAI_W;
                        return true;
                        break;
                    }
                    break;
                case 0x9:
                    /* 00000000 01001001 ........ ........ */
                    /* loongarch.decode:125 */
                    decode_extract_format_7(info, insn);
                    info->opc = OPC_SRAI_D;
                    return true;
                    break;
                case 0xc:
                    /* 00000000 01001100 ........ ........ */
                    decode_extract_format_6(info, insn);
                    switch ((insn >> 15) & 0x1) {
                    case 0x1:
                        /* 00000000 01001100 1....... ........ */
                        /* loongarch.decode:126 */
                        info->opc = OPC_ROTRI_W;
                        return true;
                        break;
                    }
                    break;
                case 0xd:
                    /* 00000000 01001101 ........ ........ */
                    /* loongarch.decode:127 */
                    decode_extract_format_7(info, insn);
                    info->opc = OPC_ROTRI_D;
                    return true;
                    break;
                }
                break;
            case 0x1:
                /* 00000000 011..... ........ ........ */
                decode_extract_format_8(info, insn);
                switch ((insn >> 15) & 0x1) {
                case 0x0:
                    /* 00000000 011..... 0....... ........ */
                    /* loongarch.decode:128 */
                    info->opc = OPC_BSTRINS_W;
                    return true;
                    break;
                case 0x1:
                    /* 00000000 011..... 1....... ........ */
                    /* loongarch.decode:129 */
                    info->opc = OPC_BSTRPICK_W;
                    return true;
                    break;
                }
                break;
            }
            break;
        case 0x2:
            /* 00000000 10...... ........ ........ */
            /* loongarch.decode:130 */
            decode_extract_format_9(info, insn);
            info->opc = OPC_BSTRINS_D;
            return true;
            break;
        case 0x3:
            /* 00000000 11...... ........ ........ */
            /* loongarch.decode:131 */
            decode_extract_format_9(info, insn);
            info->opc = OPC_BSTRPICK_D;
            return true;
            break;
        case 0x4:
            /* 00000001 00...... ........ ........ */
            switch ((insn >> 15) & 0x7f) {
            case 0x1:
                /* 00000001 00000000 1....... ........ */
                /* loongarch.decode:132 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FADD_S;
                return true;
                break;
            case 0x2:
                /* 00000001 00000001 0....... ........ */
                /* loongarch.decode:133 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FADD_D;
                return true;
                break;
            case 0x5:
                /* 00000001 00000010 1....... ........ */
                /* loongarch.decode:134 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FSUB_S;
                return true;
                break;
            case 0x6:
                /* 00000001 00000011 0....... ........ */
                /* loongarch.decode:135 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FSUB_D;
                return true;
                break;
            case 0x9:
                /* 00000001 00000100 1....... ........ */
                /* loongarch.decode:136 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMUL_S;
                return true;
                break;
            case 0xa:
                /* 00000001 00000101 0....... ........ */
                /* loongarch.decode:137 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMUL_D;
                return true;
                break;
            case 0xd:
                /* 00000001 00000110 1....... ........ */
                /* loongarch.decode:138 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FDIV_S;
                return true;
                break;
            case 0xe:
                /* 00000001 00000111 0....... ........ */
                /* loongarch.decode:139 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FDIV_D;
                return true;
                break;
            case 0x11:
                /* 00000001 00001000 1....... ........ */
                /* loongarch.decode:140 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMAX_S;
                return true;
                break;
            case 0x12:
                /* 00000001 00001001 0....... ........ */
                /* loongarch.decode:141 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMAX_D;
                return true;
                break;
            case 0x15:
                /* 00000001 00001010 1....... ........ */
                /* loongarch.decode:142 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMIN_S;
                return true;
                break;
            case 0x16:
                /* 00000001 00001011 0....... ........ */
                /* loongarch.decode:143 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMIN_D;
                return true;
                break;
            case 0x19:
                /* 00000001 00001100 1....... ........ */
                /* loongarch.decode:144 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMAXA_S;
                return true;
                break;
            case 0x1a:
                /* 00000001 00001101 0....... ........ */
                /* loongarch.decode:145 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMAXA_D;
                return true;
                break;
            case 0x1d:
                /* 00000001 00001110 1....... ........ */
                /* loongarch.decode:146 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMINA_S;
                return true;
                break;
            case 0x1e:
                /* 00000001 00001111 0....... ........ */
                /* loongarch.decode:147 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FMINA_D;
                return true;
                break;
            case 0x21:
                /* 00000001 00010000 1....... ........ */
                /* loongarch.decode:148 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FSCALEB_S;
                return true;
                break;
            case 0x22:
                /* 00000001 00010001 0....... ........ */
                /* loongarch.decode:149 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FSCALEB_D;
                return true;
                break;
            case 0x25:
                /* 00000001 00010010 1....... ........ */
                /* loongarch.decode:150 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FCOPYSIGN_S;
                return true;
                break;
            case 0x26:
                /* 00000001 00010011 0....... ........ */
                /* loongarch.decode:151 */
                decode_extract_format_10(info, insn);
                info->opc = OPC_FCOPYSIGN_D;
                return true;
                break;
            case 0x28:
                /* 00000001 00010100 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x1:
                    /* 00000001 00010100 000001.. ........ */
                    /* loongarch.decode:152 */
                    info->opc = OPC_FABS_S;
                    return true;
                    break;
                case 0x2:
                    /* 00000001 00010100 000010.. ........ */
                    /* loongarch.decode:153 */
                    info->opc = OPC_FABS_D;
                    return true;
                    break;
                case 0x5:
                    /* 00000001 00010100 000101.. ........ */
                    /* loongarch.decode:154 */
                    info->opc = OPC_FNEG_S;
                    return true;
                    break;
                case 0x6:
                    /* 00000001 00010100 000110.. ........ */
                    /* loongarch.decode:155 */
                    info->opc = OPC_FNEG_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00010100 001001.. ........ */
                    /* loongarch.decode:156 */
                    info->opc = OPC_FLOGB_S;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00010100 001010.. ........ */
                    /* loongarch.decode:157 */
                    info->opc = OPC_FLOGB_D;
                    return true;
                    break;
                case 0xd:
                    /* 00000001 00010100 001101.. ........ */
                    /* loongarch.decode:158 */
                    info->opc = OPC_FCLASS_S;
                    return true;
                    break;
                case 0xe:
                    /* 00000001 00010100 001110.. ........ */
                    /* loongarch.decode:159 */
                    info->opc = OPC_FCLASS_D;
                    return true;
                    break;
                case 0x11:
                    /* 00000001 00010100 010001.. ........ */
                    /* loongarch.decode:160 */
                    info->opc = OPC_FSQRT_S;
                    return true;
                    break;
                case 0x12:
                    /* 00000001 00010100 010010.. ........ */
                    /* loongarch.decode:161 */
                    info->opc = OPC_FSQRT_D;
                    return true;
                    break;
                case 0x15:
                    /* 00000001 00010100 010101.. ........ */
                    /* loongarch.decode:162 */
                    info->opc = OPC_FRECIP_S;
                    return true;
                    break;
                case 0x16:
                    /* 00000001 00010100 010110.. ........ */
                    /* loongarch.decode:163 */
                    info->opc = OPC_FRECIP_D;
                    return true;
                    break;
                case 0x19:
                    /* 00000001 00010100 011001.. ........ */
                    /* loongarch.decode:164 */
                    info->opc = OPC_FRSQRT_S;
                    return true;
                    break;
                case 0x1a:
                    /* 00000001 00010100 011010.. ........ */
                    /* loongarch.decode:165 */
                    info->opc = OPC_FRSQRT_D;
                    return true;
                    break;
                }
                break;
            case 0x29:
                /* 00000001 00010100 1....... ........ */
                switch ((insn >> 10) & 0x1f) {
                case 0x5:
                    /* 00000001 00010100 100101.. ........ */
                    /* loongarch.decode:166 */
                    decode_extract_format_11(info, insn);
                    info->opc = OPC_FMOV_S;
                    return true;
                    break;
                case 0x6:
                    /* 00000001 00010100 100110.. ........ */
                    /* loongarch.decode:167 */
                    decode_extract_format_11(info, insn);
                    info->opc = OPC_FMOV_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00010100 101001.. ........ */
                    /* loongarch.decode:168 */
                    decode_extract_format_12(info, insn);
                    info->opc = OPC_MOVGR2FR_W;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00010100 101010.. ........ */
                    /* loongarch.decode:169 */
                    decode_extract_format_12(info, insn);
                    info->opc = OPC_MOVGR2FR_D;
                    return true;
                    break;
                case 0xb:
                    /* 00000001 00010100 101011.. ........ */
                    /* loongarch.decode:170 */
                    decode_extract_format_12(info, insn);
                    info->opc = OPC_MOVGR2FRH_W;
                    return true;
                    break;
                case 0xd:
                    /* 00000001 00010100 101101.. ........ */
                    /* loongarch.decode:171 */
                    decode_extract_format_13(info, insn);
                    info->opc = OPC_MOVFR2GR_S;
                    return true;
                    break;
                case 0xe:
                    /* 00000001 00010100 101110.. ........ */
                    /* loongarch.decode:172 */
                    decode_extract_format_13(info, insn);
                    info->opc = OPC_MOVFR2GR_D;
                    return true;
                    break;
                case 0xf:
                    /* 00000001 00010100 101111.. ........ */
                    /* loongarch.decode:173 */
                    decode_extract_format_13(info, insn);
                    info->opc = OPC_MOVFRH2GR_S;
                    return true;
                    break;
                case 0x10:
                    /* 00000001 00010100 110000.. ........ */
                    /* loongarch.decode:174 */
                    decode_extract_format_14(info, insn);
                    info->opc = OPC_MOVGR2FCSR;
                    return true;
                    break;
                case 0x12:
                    /* 00000001 00010100 110010.. ........ */
                    /* loongarch.decode:175 */
                    decode_extract_format_15(info, insn);
                    info->opc = OPC_MOVFCSR2GR;
                    return true;
                    break;
                case 0x14:
                    /* 00000001 00010100 110100.. ........ */
                    decode_extract_format_16(info, insn);
                    switch ((insn >> 3) & 0x3) {
                    case 0x0:
                        /* 00000001 00010100 110100.. ...00... */
                        /* loongarch.decode:176 */
                        info->opc = OPC_MOVFR2CF;
                        return true;
                        break;
                    }
                    break;
                case 0x15:
                    /* 00000001 00010100 110101.. ........ */
                    decode_extract_format_17(info, insn);
                    switch ((insn >> 8) & 0x3) {
                    case 0x0:
                        /* 00000001 00010100 11010100 ........ */
                        /* loongarch.decode:177 */
                        info->opc = OPC_MOVCF2FR;
                        return true;
                        break;
                    }
                    break;
                case 0x16:
                    /* 00000001 00010100 110110.. ........ */
                    decode_extract_format_18(info, insn);
                    switch ((insn >> 3) & 0x3) {
                    case 0x0:
                        /* 00000001 00010100 110110.. ...00... */
                        /* loongarch.decode:178 */
                        info->opc = OPC_MOVGR2CF;
                        return true;
                        break;
                    }
                    break;
                case 0x17:
                    /* 00000001 00010100 110111.. ........ */
                    decode_extract_format_19(info, insn);
                    switch ((insn >> 8) & 0x3) {
                    case 0x0:
                        /* 00000001 00010100 11011100 ........ */
                        /* loongarch.decode:179 */
                        info->opc = OPC_MOVCF2GR;
                        return true;
                        break;
                    }
                    break;
                }
                break;
            case 0x32:
                /* 00000001 00011001 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x6:
                    /* 00000001 00011001 000110.. ........ */
                    /* loongarch.decode:180 */
                    info->opc = OPC_FCVT_S_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00011001 001001.. ........ */
                    /* loongarch.decode:181 */
                    info->opc = OPC_FCVT_D_S;
                    return true;
                    break;
                }
                break;
            case 0x34:
                /* 00000001 00011010 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x1:
                    /* 00000001 00011010 000001.. ........ */
                    /* loongarch.decode:182 */
                    info->opc = OPC_FTINTRM_W_S;
                    return true;
                    break;
                case 0x2:
                    /* 00000001 00011010 000010.. ........ */
                    /* loongarch.decode:183 */
                    info->opc = OPC_FTINTRM_W_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00011010 001001.. ........ */
                    /* loongarch.decode:184 */
                    info->opc = OPC_FTINTRM_L_S;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00011010 001010.. ........ */
                    /* loongarch.decode:185 */
                    info->opc = OPC_FTINTRM_L_D;
                    return true;
                    break;
                case 0x11:
                    /* 00000001 00011010 010001.. ........ */
                    /* loongarch.decode:186 */
                    info->opc = OPC_FTINTRP_W_S;
                    return true;
                    break;
                case 0x12:
                    /* 00000001 00011010 010010.. ........ */
                    /* loongarch.decode:187 */
                    info->opc = OPC_FTINTRP_W_D;
                    return true;
                    break;
                case 0x19:
                    /* 00000001 00011010 011001.. ........ */
                    /* loongarch.decode:188 */
                    info->opc = OPC_FTINTRP_L_S;
                    return true;
                    break;
                case 0x1a:
                    /* 00000001 00011010 011010.. ........ */
                    /* loongarch.decode:189 */
                    info->opc = OPC_FTINTRP_L_D;
                    return true;
                    break;
                }
                break;
            case 0x35:
                /* 00000001 00011010 1....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x1:
                    /* 00000001 00011010 100001.. ........ */
                    /* loongarch.decode:190 */
                    info->opc = OPC_FTINTRZ_W_S;
                    return true;
                    break;
                case 0x2:
                    /* 00000001 00011010 100010.. ........ */
                    /* loongarch.decode:191 */
                    info->opc = OPC_FTINTRZ_W_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00011010 101001.. ........ */
                    /* loongarch.decode:192 */
                    info->opc = OPC_FTINTRZ_L_S;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00011010 101010.. ........ */
                    /* loongarch.decode:193 */
                    info->opc = OPC_FTINTRZ_L_D;
                    return true;
                    break;
                case 0x11:
                    /* 00000001 00011010 110001.. ........ */
                    /* loongarch.decode:194 */
                    info->opc = OPC_FTINTRNE_W_S;
                    return true;
                    break;
                case 0x12:
                    /* 00000001 00011010 110010.. ........ */
                    /* loongarch.decode:195 */
                    info->opc = OPC_FTINTRNE_W_D;
                    return true;
                    break;
                case 0x19:
                    /* 00000001 00011010 111001.. ........ */
                    /* loongarch.decode:196 */
                    info->opc = OPC_FTINTRNE_L_S;
                    return true;
                    break;
                case 0x1a:
                    /* 00000001 00011010 111010.. ........ */
                    /* loongarch.decode:197 */
                    info->opc = OPC_FTINTRNE_L_D;
                    return true;
                    break;
                }
                break;
            case 0x36:
                /* 00000001 00011011 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x1:
                    /* 00000001 00011011 000001.. ........ */
                    /* loongarch.decode:198 */
                    info->opc = OPC_FTINT_W_S;
                    return true;
                    break;
                case 0x2:
                    /* 00000001 00011011 000010.. ........ */
                    /* loongarch.decode:199 */
                    info->opc = OPC_FTINT_W_D;
                    return true;
                    break;
                case 0x9:
                    /* 00000001 00011011 001001.. ........ */
                    /* loongarch.decode:200 */
                    info->opc = OPC_FTINT_L_S;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00011011 001010.. ........ */
                    /* loongarch.decode:201 */
                    info->opc = OPC_FTINT_L_D;
                    return true;
                    break;
                }
                break;
            case 0x3a:
                /* 00000001 00011101 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x4:
                    /* 00000001 00011101 000100.. ........ */
                    /* loongarch.decode:202 */
                    info->opc = OPC_FFINT_S_W;
                    return true;
                    break;
                case 0x6:
                    /* 00000001 00011101 000110.. ........ */
                    /* loongarch.decode:203 */
                    info->opc = OPC_FFINT_S_L;
                    return true;
                    break;
                case 0x8:
                    /* 00000001 00011101 001000.. ........ */
                    /* loongarch.decode:204 */
                    info->opc = OPC_FFINT_D_W;
                    return true;
                    break;
                case 0xa:
                    /* 00000001 00011101 001010.. ........ */
                    /* loongarch.decode:205 */
                    info->opc = OPC_FFINT_D_L;
                    return true;
                    break;
                }
                break;
            case 0x3c:
                /* 00000001 00011110 0....... ........ */
                decode_extract_format_11(info, insn);
                switch ((insn >> 10) & 0x1f) {
                case 0x11:
                    /* 00000001 00011110 010001.. ........ */
                    /* loongarch.decode:206 */
                    info->opc = OPC_FRINT_S;
                    return true;
                    break;
                case 0x12:
                    /* 00000001 00011110 010010.. ........ */
                    /* loongarch.decode:207 */
                    info->opc = OPC_FRINT_D;
                    return true;
                    break;
                }
                break;
            }
            break;
        case 0x8:
            /* 00000010 00...... ........ ........ */
            /* loongarch.decode:208 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_SLTI;
            return true;
            break;
        case 0x9:
            /* 00000010 01...... ........ ........ */
            /* loongarch.decode:209 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_SLTUI;
            return true;
            break;
        case 0xa:
            /* 00000010 10...... ........ ........ */
            /* loongarch.decode:210 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ADDI_W;
            return true;
            break;
        case 0xb:
            /* 00000010 11...... ........ ........ */
            /* loongarch.decode:211 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ADDI_D;
            return true;
            break;
        case 0xc:
            /* 00000011 00...... ........ ........ */
            /* loongarch.decode:212 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LU52I_D;
            return true;
            break;
        case 0xd:
            /* 00000011 01...... ........ ........ */
            /* loongarch.decode:213 */
            decode_extract_format_21(info, insn);
            info->opc = OPC_ANDI;
            return true;
            break;
        case 0xe:
            /* 00000011 10...... ........ ........ */
            /* loongarch.decode:214 */
            decode_extract_format_21(info, insn);
            info->opc = OPC_ORI;
            return true;
            break;
        case 0xf:
            /* 00000011 11...... ........ ........ */
            /* loongarch.decode:215 */
            decode_extract_format_21(info, insn);
            info->opc = OPC_XORI;
            return true;
            break;
        }
        break;
    case 0x1:
        /* 000001.. ........ ........ ........ */
        switch ((insn >> 24) & 0x3) {
        case 0x0:
            /* 00000100 ........ ........ ........ */
            if ((insn & 0x000003e0) == 0x00000000) {
                /* 00000100 ........ ......00 000..... */
                /* loongarch.decode:217 */
                decode_extract_format_22(info, insn);
                info->opc = OPC_CSRRD;
                return true;
            }
            if ((insn & 0x000003e0) == 0x00000020) {
                /* 00000100 ........ ......00 001..... */
                /* loongarch.decode:218 */
                decode_extract_format_22(info, insn);
                info->opc = OPC_CSRWR;
                return true;
            }
            /* loongarch.decode:219 */
            decode_extract_format_23(info, insn);
            info->opc = OPC_CSRXCHG;
            return true;
            break;
        case 0x2:
            /* 00000110 ........ ........ ........ */
            switch ((insn >> 22) & 0x3) {
            case 0x0:
                /* 00000110 00...... ........ ........ */
                /* loongarch.decode:221 */
                decode_extract_format_24(info, insn);
                info->opc = OPC_CACOP;
                return true;
                break;
            case 0x1:
                /* 00000110 01...... ........ ........ */
                switch ((insn >> 18) & 0xf) {
                case 0x0:
                    /* 00000110 010000.. ........ ........ */
                    /* loongarch.decode:222 */
                    decode_extract_format_25(info, insn);
                    info->opc = OPC_LDDIR;
                    return true;
                    break;
                case 0x1:
                    /* 00000110 010001.. ........ ........ */
                    decode_extract_format_26(info, insn);
                    switch (insn & 0x0000001f) {
                    case 0x00000000:
                        /* 00000110 010001.. ........ ...00000 */
                        /* loongarch.decode:223 */
                        info->opc = OPC_LDPTE;
                        return true;
                        break;
                    }
                    break;
                case 0x2:
                    /* 00000110 010010.. ........ ........ */
                    switch ((insn >> 15) & 0x7) {
                    case 0x0:
                        /* 00000110 01001000 0....... ........ */
                        switch ((insn >> 10) & 0x1f) {
                        case 0x0:
                            /* 00000110 01001000 000000.. ........ */
                            /* loongarch.decode:224 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRRD_B;
                            return true;
                            break;
                        case 0x1:
                            /* 00000110 01001000 000001.. ........ */
                            /* loongarch.decode:225 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRRD_H;
                            return true;
                            break;
                        case 0x2:
                            /* 00000110 01001000 000010.. ........ */
                            /* loongarch.decode:226 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRRD_W;
                            return true;
                            break;
                        case 0x3:
                            /* 00000110 01001000 000011.. ........ */
                            /* loongarch.decode:227 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRRD_D;
                            return true;
                            break;
                        case 0x4:
                            /* 00000110 01001000 000100.. ........ */
                            /* loongarch.decode:228 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRWR_B;
                            return true;
                            break;
                        case 0x5:
                            /* 00000110 01001000 000101.. ........ */
                            /* loongarch.decode:229 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRWR_H;
                            return true;
                            break;
                        case 0x6:
                            /* 00000110 01001000 000110.. ........ */
                            /* loongarch.decode:230 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRWR_W;
                            return true;
                            break;
                        case 0x7:
                            /* 00000110 01001000 000111.. ........ */
                            /* loongarch.decode:231 */
                            decode_extract_format_0(info, insn);
                            info->opc = OPC_IOCSRWR_D;
                            return true;
                            break;
                        case 0x8:
                            /* 00000110 01001000 001000.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00100000 00000000 */
                                /* loongarch.decode:232 */
                                info->opc = OPC_TLBCLR;
                                return true;
                                break;
                            }
                            break;
                        case 0x9:
                            /* 00000110 01001000 001001.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00100100 00000000 */
                                /* loongarch.decode:233 */
                                info->opc = OPC_TLBFLUSH;
                                return true;
                                break;
                            }
                            break;
                        case 0xa:
                            /* 00000110 01001000 001010.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00101000 00000000 */
                                /* loongarch.decode:234 */
                                info->opc = OPC_TLBSRCH;
                                return true;
                                break;
                            }
                            break;
                        case 0xb:
                            /* 00000110 01001000 001011.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00101100 00000000 */
                                /* loongarch.decode:235 */
                                info->opc = OPC_TLBRD;
                                return true;
                                break;
                            }
                            break;
                        case 0xc:
                            /* 00000110 01001000 001100.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00110000 00000000 */
                                /* loongarch.decode:236 */
                                info->opc = OPC_TLBWR;
                                return true;
                                break;
                            }
                            break;
                        case 0xd:
                            /* 00000110 01001000 001101.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00110100 00000000 */
                                /* loongarch.decode:237 */
                                info->opc = OPC_TLBFILL;
                                return true;
                                break;
                            }
                            break;
                        case 0xe:
                            /* 00000110 01001000 001110.. ........ */
                            decode_extract_format_27(info, insn);
                            switch (insn & 0x000003ff) {
                            case 0x00000000:
                                /* 00000110 01001000 00111000 00000000 */
                                /* loongarch.decode:238 */
                                info->opc = OPC_ERTN;
                                return true;
                                break;
                            }
                            break;
                        }
                        break;
                    case 0x1:
                        /* 00000110 01001000 1....... ........ */
                        /* loongarch.decode:239 */
                        decode_extract_format_28(info, insn);
                        info->opc = OPC_IDLE;
                        return true;
                        break;
                    case 0x2:
                        /* 00000110 01001001 0....... ........ */
                        /* loongarch.decode:240 */
                        decode_extract_format_29(info, insn);
                        info->opc = OPC_INVTLB;
                        return true;
                        break;
                    }
                    break;
                }
                break;
            }
            break;
        }
        break;
    case 0x2:
        /* 000010.. ........ ........ ........ */
        decode_extract_format_30(info, insn);
        switch ((insn >> 20) & 0x3f) {
        case 0x1:
            /* 00001000 0001.... ........ ........ */
            /* loongarch.decode:241 */
            info->opc = OPC_FMADD_S;
            return true;
            break;
        case 0x2:
            /* 00001000 0010.... ........ ........ */
            /* loongarch.decode:242 */
            info->opc = OPC_FMADD_D;
            return true;
            break;
        case 0x5:
            /* 00001000 0101.... ........ ........ */
            /* loongarch.decode:243 */
            info->opc = OPC_FMSUB_S;
            return true;
            break;
        case 0x6:
            /* 00001000 0110.... ........ ........ */
            /* loongarch.decode:244 */
            info->opc = OPC_FMSUB_D;
            return true;
            break;
        case 0x9:
            /* 00001000 1001.... ........ ........ */
            /* loongarch.decode:245 */
            info->opc = OPC_FNMADD_S;
            return true;
            break;
        case 0xa:
            /* 00001000 1010.... ........ ........ */
            /* loongarch.decode:246 */
            info->opc = OPC_FNMADD_D;
            return true;
            break;
        case 0xd:
            /* 00001000 1101.... ........ ........ */
            /* loongarch.decode:247 */
            info->opc = OPC_FNMSUB_S;
            return true;
            break;
        case 0xe:
            /* 00001000 1110.... ........ ........ */
            /* loongarch.decode:248 */
            info->opc = OPC_FNMSUB_D;
            return true;
            break;
        }
        break;
    case 0x3:
        /* 000011.. ........ ........ ........ */
        switch ((insn >> 18) & 0xff) {
        case 0x4:
            /* 00001100 000100.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00010000 0....... ...00... */
                /* loongarch.decode:249 */
                info->opc = OPC_FCMP_CAF_S;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00010000 1....... ...00... */
                /* loongarch.decode:250 */
                info->opc = OPC_FCMP_SAF_S;
                return true;
                break;
            case 0x00010000:
                /* 00001100 00010001 0....... ...00... */
                /* loongarch.decode:251 */
                info->opc = OPC_FCMP_CLT_S;
                return true;
                break;
            case 0x00018000:
                /* 00001100 00010001 1....... ...00... */
                /* loongarch.decode:252 */
                info->opc = OPC_FCMP_STL_S;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00010010 0....... ...00... */
                /* loongarch.decode:253 */
                info->opc = OPC_FCMP_CEQ_S;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00010010 1....... ...00... */
                /* loongarch.decode:254 */
                info->opc = OPC_FCMP_SEQ_S;
                return true;
                break;
            case 0x00030000:
                /* 00001100 00010011 0....... ...00... */
                /* loongarch.decode:255 */
                info->opc = OPC_FCMP_CLE_S;
                return true;
                break;
            case 0x00038000:
                /* 00001100 00010011 1....... ...00... */
                /* loongarch.decode:256 */
                info->opc = OPC_FCMP_SLE_S;
                return true;
                break;
            }
            break;
        case 0x5:
            /* 00001100 000101.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00010100 0....... ...00... */
                /* loongarch.decode:257 */
                info->opc = OPC_FCMP_CUN_S;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00010100 1....... ...00... */
                /* loongarch.decode:258 */
                info->opc = OPC_FCMP_SUN_S;
                return true;
                break;
            case 0x00010000:
                /* 00001100 00010101 0....... ...00... */
                /* loongarch.decode:259 */
                info->opc = OPC_FCMP_CULT_S;
                return true;
                break;
            case 0x00018000:
                /* 00001100 00010101 1....... ...00... */
                /* loongarch.decode:260 */
                info->opc = OPC_FCMP_SULT_S;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00010110 0....... ...00... */
                /* loongarch.decode:261 */
                info->opc = OPC_FCMP_CUEQ_S;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00010110 1....... ...00... */
                /* loongarch.decode:262 */
                info->opc = OPC_FCMP_SUEQ_S;
                return true;
                break;
            case 0x00030000:
                /* 00001100 00010111 0....... ...00... */
                /* loongarch.decode:263 */
                info->opc = OPC_FCMP_CULE_S;
                return true;
                break;
            case 0x00038000:
                /* 00001100 00010111 1....... ...00... */
                /* loongarch.decode:264 */
                info->opc = OPC_FCMP_SULE_S;
                return true;
                break;
            }
            break;
        case 0x6:
            /* 00001100 000110.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00011000 0....... ...00... */
                /* loongarch.decode:265 */
                info->opc = OPC_FCMP_CNE_S;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00011000 1....... ...00... */
                /* loongarch.decode:266 */
                info->opc = OPC_FCMP_SNE_S;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00011010 0....... ...00... */
                /* loongarch.decode:267 */
                info->opc = OPC_FCMP_COR_S;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00011010 1....... ...00... */
                /* loongarch.decode:268 */
                info->opc = OPC_FCMP_SOR_S;
                return true;
                break;
            }
            break;
        case 0x7:
            /* 00001100 000111.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00011100 0....... ...00... */
                /* loongarch.decode:269 */
                info->opc = OPC_FCMP_CUNE_S;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00011100 1....... ...00... */
                /* loongarch.decode:270 */
                info->opc = OPC_FCMP_SUNE_S;
                return true;
                break;
            }
            break;
        case 0x8:
            /* 00001100 001000.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00100000 0....... ...00... */
                /* loongarch.decode:271 */
                info->opc = OPC_FCMP_CAF_D;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00100000 1....... ...00... */
                /* loongarch.decode:272 */
                info->opc = OPC_FCMP_SAF_D;
                return true;
                break;
            case 0x00010000:
                /* 00001100 00100001 0....... ...00... */
                /* loongarch.decode:273 */
                info->opc = OPC_FCMP_CLT_D;
                return true;
                break;
            case 0x00018000:
                /* 00001100 00100001 1....... ...00... */
                /* loongarch.decode:274 */
                info->opc = OPC_FCMP_STL_D;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00100010 0....... ...00... */
                /* loongarch.decode:275 */
                info->opc = OPC_FCMP_CEQ_D;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00100010 1....... ...00... */
                /* loongarch.decode:276 */
                info->opc = OPC_FCMP_SEQ_D;
                return true;
                break;
            case 0x00030000:
                /* 00001100 00100011 0....... ...00... */
                /* loongarch.decode:277 */
                info->opc = OPC_FCMP_CLE_D;
                return true;
                break;
            case 0x00038000:
                /* 00001100 00100011 1....... ...00... */
                /* loongarch.decode:278 */
                info->opc = OPC_FCMP_SLE_D;
                return true;
                break;
            }
            break;
        case 0x9:
            /* 00001100 001001.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00100100 0....... ...00... */
                /* loongarch.decode:279 */
                info->opc = OPC_FCMP_CUN_D;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00100100 1....... ...00... */
                /* loongarch.decode:280 */
                info->opc = OPC_FCMP_SUN_D;
                return true;
                break;
            case 0x00010000:
                /* 00001100 00100101 0....... ...00... */
                /* loongarch.decode:281 */
                info->opc = OPC_FCMP_CULT_D;
                return true;
                break;
            case 0x00018000:
                /* 00001100 00100101 1....... ...00... */
                /* loongarch.decode:282 */
                info->opc = OPC_FCMP_SULT_D;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00100110 0....... ...00... */
                /* loongarch.decode:283 */
                info->opc = OPC_FCMP_CUEQ_D;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00100110 1....... ...00... */
                /* loongarch.decode:284 */
                info->opc = OPC_FCMP_SUEQ_D;
                return true;
                break;
            case 0x00030000:
                /* 00001100 00100111 0....... ...00... */
                /* loongarch.decode:285 */
                info->opc = OPC_FCMP_CULE_D;
                return true;
                break;
            case 0x00038000:
                /* 00001100 00100111 1....... ...00... */
                /* loongarch.decode:286 */
                info->opc = OPC_FCMP_SULE_D;
                return true;
                break;
            }
            break;
        case 0xa:
            /* 00001100 001010.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00101000 0....... ...00... */
                /* loongarch.decode:287 */
                info->opc = OPC_FCMP_CNE_D;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00101000 1....... ...00... */
                /* loongarch.decode:288 */
                info->opc = OPC_FCMP_SNE_D;
                return true;
                break;
            case 0x00020000:
                /* 00001100 00101010 0....... ...00... */
                /* loongarch.decode:289 */
                info->opc = OPC_FCMP_COR_D;
                return true;
                break;
            case 0x00028000:
                /* 00001100 00101010 1....... ...00... */
                /* loongarch.decode:290 */
                info->opc = OPC_FCMP_SOR_D;
                return true;
                break;
            }
            break;
        case 0xb:
            /* 00001100 001011.. ........ ........ */
            decode_extract_format_31(info, insn);
            switch (insn & 0x00038018) {
            case 0x00000000:
                /* 00001100 00101100 0....... ...00... */
                /* loongarch.decode:291 */
                info->opc = OPC_FCMP_CUNE_D;
                return true;
                break;
            case 0x00008000:
                /* 00001100 00101100 1....... ...00... */
                /* loongarch.decode:292 */
                info->opc = OPC_FCMP_SUNE_D;
                return true;
                break;
            }
            break;
        case 0x40:
            /* 00001101 000000.. ........ ........ */
            /* loongarch.decode:293 */
            decode_extract_format_32(info, insn);
            info->opc = OPC_FSEL;
            return true;
            break;
        }
        break;
    case 0x4:
        /* 000100.. ........ ........ ........ */
        /* loongarch.decode:294 */
        decode_extract_format_33(info, insn);
        info->opc = OPC_ADDU16I_D;
        return true;
        break;
    case 0x5:
        /* 000101.. ........ ........ ........ */
        decode_extract_format_34(info, insn);
        switch ((insn >> 25) & 0x1) {
        case 0x0:
            /* 0001010. ........ ........ ........ */
            /* loongarch.decode:295 */
            info->opc = OPC_LU12I_W;
            return true;
            break;
        case 0x1:
            /* 0001011. ........ ........ ........ */
            /* loongarch.decode:296 */
            info->opc = OPC_LU32I_D;
            return true;
            break;
        }
        break;
    case 0x6:
        /* 000110.. ........ ........ ........ */
        decode_extract_format_34(info, insn);
        switch ((insn >> 25) & 0x1) {
        case 0x0:
            /* 0001100. ........ ........ ........ */
            /* loongarch.decode:297 */
            info->opc = OPC_PCADDI;
            return true;
            break;
        case 0x1:
            /* 0001101. ........ ........ ........ */
            /* loongarch.decode:298 */
            info->opc = OPC_PCALAU12I;
            return true;
            break;
        }
        break;
    case 0x7:
        /* 000111.. ........ ........ ........ */
        decode_extract_format_34(info, insn);
        switch ((insn >> 25) & 0x1) {
        case 0x0:
            /* 0001110. ........ ........ ........ */
            /* loongarch.decode:299 */
            info->opc = OPC_PCADDU12I;
            return true;
            break;
        case 0x1:
            /* 0001111. ........ ........ ........ */
            /* loongarch.decode:300 */
            info->opc = OPC_PCADDU18I;
            return true;
            break;
        }
        break;
    case 0x8:
        /* 001000.. ........ ........ ........ */
        decode_extract_format_35(info, insn);
        switch ((insn >> 24) & 0x3) {
        case 0x0:
            /* 00100000 ........ ........ ........ */
            /* loongarch.decode:301 */
            info->opc = OPC_LL_W;
            return true;
            break;
        case 0x1:
            /* 00100001 ........ ........ ........ */
            /* loongarch.decode:302 */
            info->opc = OPC_SC_W;
            return true;
            break;
        case 0x2:
            /* 00100010 ........ ........ ........ */
            /* loongarch.decode:303 */
            info->opc = OPC_LL_D;
            return true;
            break;
        case 0x3:
            /* 00100011 ........ ........ ........ */
            /* loongarch.decode:304 */
            info->opc = OPC_SC_D;
            return true;
            break;
        }
        break;
    case 0x9:
        /* 001001.. ........ ........ ........ */
        decode_extract_format_35(info, insn);
        switch ((insn >> 24) & 0x3) {
        case 0x0:
            /* 00100100 ........ ........ ........ */
            /* loongarch.decode:305 */
            info->opc = OPC_LDPTR_W;
            return true;
            break;
        case 0x1:
            /* 00100101 ........ ........ ........ */
            /* loongarch.decode:306 */
            info->opc = OPC_STPTR_W;
            return true;
            break;
        case 0x2:
            /* 00100110 ........ ........ ........ */
            /* loongarch.decode:307 */
            info->opc = OPC_LDPTR_D;
            return true;
            break;
        case 0x3:
            /* 00100111 ........ ........ ........ */
            /* loongarch.decode:308 */
            info->opc = OPC_STPTR_D;
            return true;
            break;
        }
        break;
    case 0xa:
        /* 001010.. ........ ........ ........ */
        switch ((insn >> 22) & 0xf) {
        case 0x0:
            /* 00101000 00...... ........ ........ */
            /* loongarch.decode:309 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_B;
            return true;
            break;
        case 0x1:
            /* 00101000 01...... ........ ........ */
            /* loongarch.decode:310 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_H;
            return true;
            break;
        case 0x2:
            /* 00101000 10...... ........ ........ */
            /* loongarch.decode:311 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_W;
            return true;
            break;
        case 0x3:
            /* 00101000 11...... ........ ........ */
            /* loongarch.decode:312 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_D;
            return true;
            break;
        case 0x4:
            /* 00101001 00...... ........ ........ */
            /* loongarch.decode:313 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ST_B;
            return true;
            break;
        case 0x5:
            /* 00101001 01...... ........ ........ */
            /* loongarch.decode:314 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ST_H;
            return true;
            break;
        case 0x6:
            /* 00101001 10...... ........ ........ */
            /* loongarch.decode:315 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ST_W;
            return true;
            break;
        case 0x7:
            /* 00101001 11...... ........ ........ */
            /* loongarch.decode:316 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_ST_D;
            return true;
            break;
        case 0x8:
            /* 00101010 00...... ........ ........ */
            /* loongarch.decode:317 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_BU;
            return true;
            break;
        case 0x9:
            /* 00101010 01...... ........ ........ */
            /* loongarch.decode:318 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_HU;
            return true;
            break;
        case 0xa:
            /* 00101010 10...... ........ ........ */
            /* loongarch.decode:319 */
            decode_extract_format_20(info, insn);
            info->opc = OPC_LD_WU;
            return true;
            break;
        case 0xb:
            /* 00101010 11...... ........ ........ */
            /* loongarch.decode:320 */
            decode_extract_format_36(info, insn);
            info->opc = OPC_PRELD;
            return true;
            break;
        case 0xc:
            /* 00101011 00...... ........ ........ */
            /* loongarch.decode:321 */
            decode_extract_format_37(info, insn);
            info->opc = OPC_FLD_S;
            return true;
            break;
        case 0xd:
            /* 00101011 01...... ........ ........ */
            /* loongarch.decode:322 */
            decode_extract_format_37(info, insn);
            info->opc = OPC_FST_S;
            return true;
            break;
        case 0xe:
            /* 00101011 10...... ........ ........ */
            /* loongarch.decode:323 */
            decode_extract_format_37(info, insn);
            info->opc = OPC_FLD_D;
            return true;
            break;
        case 0xf:
            /* 00101011 11...... ........ ........ */
            /* loongarch.decode:324 */
            decode_extract_format_37(info, insn);
            info->opc = OPC_FST_D;
            return true;
            break;
        }
        break;
    case 0xe:
        /* 001110.. ........ ........ ........ */
        switch ((insn >> 15) & 0x7ff) {
        case 0x0:
            /* 00111000 00000000 0....... ........ */
            /* loongarch.decode:325 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_B;
            return true;
            break;
        case 0x8:
            /* 00111000 00000100 0....... ........ */
            /* loongarch.decode:326 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_H;
            return true;
            break;
        case 0x10:
            /* 00111000 00001000 0....... ........ */
            /* loongarch.decode:327 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_W;
            return true;
            break;
        case 0x18:
            /* 00111000 00001100 0....... ........ */
            /* loongarch.decode:328 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_D;
            return true;
            break;
        case 0x20:
            /* 00111000 00010000 0....... ........ */
            /* loongarch.decode:329 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STX_B;
            return true;
            break;
        case 0x28:
            /* 00111000 00010100 0....... ........ */
            /* loongarch.decode:330 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STX_H;
            return true;
            break;
        case 0x30:
            /* 00111000 00011000 0....... ........ */
            /* loongarch.decode:331 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STX_W;
            return true;
            break;
        case 0x38:
            /* 00111000 00011100 0....... ........ */
            /* loongarch.decode:332 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STX_D;
            return true;
            break;
        case 0x40:
            /* 00111000 00100000 0....... ........ */
            /* loongarch.decode:333 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_BU;
            return true;
            break;
        case 0x48:
            /* 00111000 00100100 0....... ........ */
            /* loongarch.decode:334 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_HU;
            return true;
            break;
        case 0x50:
            /* 00111000 00101000 0....... ........ */
            /* loongarch.decode:335 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDX_WU;
            return true;
            break;
        case 0x58:
            /* 00111000 00101100 0....... ........ */
            /* loongarch.decode:336 */
            decode_extract_format_38(info, insn);
            info->opc = OPC_PRELDX;
            return true;
            break;
        case 0x60:
            /* 00111000 00110000 0....... ........ */
            /* loongarch.decode:337 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDX_S;
            return true;
            break;
        case 0x68:
            /* 00111000 00110100 0....... ........ */
            /* loongarch.decode:338 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDX_D;
            return true;
            break;
        case 0x70:
            /* 00111000 00111000 0....... ........ */
            /* loongarch.decode:339 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTX_S;
            return true;
            break;
        case 0x78:
            /* 00111000 00111100 0....... ........ */
            /* loongarch.decode:340 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTX_D;
            return true;
            break;
        case 0xc0:
            /* 00111000 01100000 0....... ........ */
            /* loongarch.decode:341 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMSWAP_W;
            return true;
            break;
        case 0xc1:
            /* 00111000 01100000 1....... ........ */
            /* loongarch.decode:342 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMSWAP_D;
            return true;
            break;
        case 0xc2:
            /* 00111000 01100001 0....... ........ */
            /* loongarch.decode:343 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMADD_W;
            return true;
            break;
        case 0xc3:
            /* 00111000 01100001 1....... ........ */
            /* loongarch.decode:344 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMADD_D;
            return true;
            break;
        case 0xc4:
            /* 00111000 01100010 0....... ........ */
            /* loongarch.decode:345 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMAND_W;
            return true;
            break;
        case 0xc5:
            /* 00111000 01100010 1....... ........ */
            /* loongarch.decode:346 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMAND_D;
            return true;
            break;
        case 0xc6:
            /* 00111000 01100011 0....... ........ */
            /* loongarch.decode:347 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMOR_W;
            return true;
            break;
        case 0xc7:
            /* 00111000 01100011 1....... ........ */
            /* loongarch.decode:348 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMOR_D;
            return true;
            break;
        case 0xc8:
            /* 00111000 01100100 0....... ........ */
            /* loongarch.decode:349 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMXOR_W;
            return true;
            break;
        case 0xc9:
            /* 00111000 01100100 1....... ........ */
            /* loongarch.decode:350 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMXOR_D;
            return true;
            break;
        case 0xca:
            /* 00111000 01100101 0....... ........ */
            /* loongarch.decode:351 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_W;
            return true;
            break;
        case 0xcb:
            /* 00111000 01100101 1....... ........ */
            /* loongarch.decode:352 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_D;
            return true;
            break;
        case 0xcc:
            /* 00111000 01100110 0....... ........ */
            /* loongarch.decode:353 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_W;
            return true;
            break;
        case 0xcd:
            /* 00111000 01100110 1....... ........ */
            /* loongarch.decode:354 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_D;
            return true;
            break;
        case 0xce:
            /* 00111000 01100111 0....... ........ */
            /* loongarch.decode:355 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_WU;
            return true;
            break;
        case 0xcf:
            /* 00111000 01100111 1....... ........ */
            /* loongarch.decode:356 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_DU;
            return true;
            break;
        case 0xd0:
            /* 00111000 01101000 0....... ........ */
            /* loongarch.decode:357 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_WU;
            return true;
            break;
        case 0xd1:
            /* 00111000 01101000 1....... ........ */
            /* loongarch.decode:358 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_DU;
            return true;
            break;
        case 0xd2:
            /* 00111000 01101001 0....... ........ */
            /* loongarch.decode:359 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMSWAP_DB_W;
            return true;
            break;
        case 0xd3:
            /* 00111000 01101001 1....... ........ */
            /* loongarch.decode:360 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMSWAP_DB_D;
            return true;
            break;
        case 0xd4:
            /* 00111000 01101010 0....... ........ */
            /* loongarch.decode:361 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMADD_DB_W;
            return true;
            break;
        case 0xd5:
            /* 00111000 01101010 1....... ........ */
            /* loongarch.decode:362 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMADD_DB_D;
            return true;
            break;
        case 0xd6:
            /* 00111000 01101011 0....... ........ */
            /* loongarch.decode:363 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMAND_DB_W;
            return true;
            break;
        case 0xd7:
            /* 00111000 01101011 1....... ........ */
            /* loongarch.decode:364 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMAND_DB_D;
            return true;
            break;
        case 0xd8:
            /* 00111000 01101100 0....... ........ */
            /* loongarch.decode:365 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMOR_DB_W;
            return true;
            break;
        case 0xd9:
            /* 00111000 01101100 1....... ........ */
            /* loongarch.decode:366 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMOR_DB_D;
            return true;
            break;
        case 0xda:
            /* 00111000 01101101 0....... ........ */
            /* loongarch.decode:367 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMXOR_DB_W;
            return true;
            break;
        case 0xdb:
            /* 00111000 01101101 1....... ........ */
            /* loongarch.decode:368 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMXOR_DB_D;
            return true;
            break;
        case 0xdc:
            /* 00111000 01101110 0....... ........ */
            /* loongarch.decode:369 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_DB_W;
            return true;
            break;
        case 0xdd:
            /* 00111000 01101110 1....... ........ */
            /* loongarch.decode:370 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_DB_D;
            return true;
            break;
        case 0xde:
            /* 00111000 01101111 0....... ........ */
            /* loongarch.decode:371 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_DB_W;
            return true;
            break;
        case 0xdf:
            /* 00111000 01101111 1....... ........ */
            /* loongarch.decode:372 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_DB_D;
            return true;
            break;
        case 0xe0:
            /* 00111000 01110000 0....... ........ */
            /* loongarch.decode:373 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_DB_WU;
            return true;
            break;
        case 0xe1:
            /* 00111000 01110000 1....... ........ */
            /* loongarch.decode:374 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMAX_DB_DU;
            return true;
            break;
        case 0xe2:
            /* 00111000 01110001 0....... ........ */
            /* loongarch.decode:375 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_DB_WU;
            return true;
            break;
        case 0xe3:
            /* 00111000 01110001 1....... ........ */
            /* loongarch.decode:376 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_AMMIN_DB_DU;
            return true;
            break;
        case 0xe4:
            /* 00111000 01110010 0....... ........ */
            /* loongarch.decode:377 */
            decode_extract_format_40(info, insn);
            info->opc = OPC_DBAR;
            return true;
            break;
        case 0xe5:
            /* 00111000 01110010 1....... ........ */
            /* loongarch.decode:378 */
            decode_extract_format_41(info, insn);
            info->opc = OPC_IBAR;
            return true;
            break;
        case 0xe8:
            /* 00111000 01110100 0....... ........ */
            /* loongarch.decode:379 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDGT_S;
            return true;
            break;
        case 0xe9:
            /* 00111000 01110100 1....... ........ */
            /* loongarch.decode:380 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDGT_D;
            return true;
            break;
        case 0xea:
            /* 00111000 01110101 0....... ........ */
            /* loongarch.decode:381 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDLE_S;
            return true;
            break;
        case 0xeb:
            /* 00111000 01110101 1....... ........ */
            /* loongarch.decode:382 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FLDLE_D;
            return true;
            break;
        case 0xec:
            /* 00111000 01110110 0....... ........ */
            /* loongarch.decode:383 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTGT_S;
            return true;
            break;
        case 0xed:
            /* 00111000 01110110 1....... ........ */
            /* loongarch.decode:384 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTGT_D;
            return true;
            break;
        case 0xee:
            /* 00111000 01110111 0....... ........ */
            /* loongarch.decode:385 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTLE_S;
            return true;
            break;
        case 0xef:
            /* 00111000 01110111 1....... ........ */
            /* loongarch.decode:386 */
            decode_extract_format_39(info, insn);
            info->opc = OPC_FSTLE_D;
            return true;
            break;
        case 0xf0:
            /* 00111000 01111000 0....... ........ */
            /* loongarch.decode:387 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDGT_B;
            return true;
            break;
        case 0xf1:
            /* 00111000 01111000 1....... ........ */
            /* loongarch.decode:388 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDGT_H;
            return true;
            break;
        case 0xf2:
            /* 00111000 01111001 0....... ........ */
            /* loongarch.decode:389 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDGT_W;
            return true;
            break;
        case 0xf3:
            /* 00111000 01111001 1....... ........ */
            /* loongarch.decode:390 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDGT_D;
            return true;
            break;
        case 0xf4:
            /* 00111000 01111010 0....... ........ */
            /* loongarch.decode:391 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDLE_B;
            return true;
            break;
        case 0xf5:
            /* 00111000 01111010 1....... ........ */
            /* loongarch.decode:392 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDLE_H;
            return true;
            break;
        case 0xf6:
            /* 00111000 01111011 0....... ........ */
            /* loongarch.decode:393 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDLE_W;
            return true;
            break;
        case 0xf7:
            /* 00111000 01111011 1....... ........ */
            /* loongarch.decode:394 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_LDLE_D;
            return true;
            break;
        case 0xf8:
            /* 00111000 01111100 0....... ........ */
            /* loongarch.decode:395 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STGT_B;
            return true;
            break;
        case 0xf9:
            /* 00111000 01111100 1....... ........ */
            /* loongarch.decode:396 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STGT_H;
            return true;
            break;
        case 0xfa:
            /* 00111000 01111101 0....... ........ */
            /* loongarch.decode:397 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STGT_W;
            return true;
            break;
        case 0xfb:
            /* 00111000 01111101 1....... ........ */
            /* loongarch.decode:398 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STGT_D;
            return true;
            break;
        case 0xfc:
            /* 00111000 01111110 0....... ........ */
            /* loongarch.decode:399 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STLE_B;
            return true;
            break;
        case 0xfd:
            /* 00111000 01111110 1....... ........ */
            /* loongarch.decode:400 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STLE_H;
            return true;
            break;
        case 0xfe:
            /* 00111000 01111111 0....... ........ */
            /* loongarch.decode:401 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STLE_W;
            return true;
            break;
        case 0xff:
            /* 00111000 01111111 1....... ........ */
            /* loongarch.decode:402 */
            decode_extract_format_4(info, insn);
            info->opc = OPC_STLE_D;
            return true;
            break;
        }
        break;
    case 0x10:
        /* 010000.. ........ ........ ........ */
        /* loongarch.decode:403 */
        decode_extract_format_42(info, insn);
        info->opc = OPC_BEQZ;
        return true;
        break;
    case 0x11:
        /* 010001.. ........ ........ ........ */
        /* loongarch.decode:404 */
        decode_extract_format_42(info, insn);
        info->opc = OPC_BNEZ;
        return true;
        break;
    case 0x12:
        /* 010010.. ........ ........ ........ */
        decode_extract_format_43(info, insn);
        switch ((insn >> 8) & 0x3) {
        case 0x0:
            /* 010010.. ........ ......00 ........ */
            /* loongarch.decode:405 */
            info->opc = OPC_BCEQZ;
            return true;
            break;
        case 0x1:
            /* 010010.. ........ ......01 ........ */
            /* loongarch.decode:406 */
            info->opc = OPC_BCNEZ;
            return true;
            break;
        }
        break;
    case 0x13:
        /* 010011.. ........ ........ ........ */
        /* loongarch.decode:407 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_JIRL;
        return true;
        break;
    case 0x14:
        /* 010100.. ........ ........ ........ */
        /* loongarch.decode:408 */
        decode_extract_format_45(info, insn);
        info->opc = OPC_B;
        return true;
        break;
    case 0x15:
        /* 010101.. ........ ........ ........ */
        /* loongarch.decode:409 */
        decode_extract_format_45(info, insn);
        info->opc = OPC_BL;
        return true;
        break;
    case 0x16:
        /* 010110.. ........ ........ ........ */
        /* loongarch.decode:410 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BEQ;
        return true;
        break;
    case 0x17:
        /* 010111.. ........ ........ ........ */
        /* loongarch.decode:411 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BNE;
        return true;
        break;
    case 0x18:
        /* 011000.. ........ ........ ........ */
        /* loongarch.decode:412 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BLT;
        return true;
        break;
    case 0x19:
        /* 011001.. ........ ........ ........ */
        /* loongarch.decode:413 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BGE;
        return true;
        break;
    case 0x1a:
        /* 011010.. ........ ........ ........ */
        /* loongarch.decode:414 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BLTU;
        return true;
        break;
    case 0x1b:
        /* 011011.. ........ ........ ........ */
        /* loongarch.decode:415 */
        decode_extract_format_44(info, insn);
        info->opc = OPC_BGEU;
        return true;
        break;
    }
    return false;
}

/* Register alias */
static const char *gpr_name[] = {
    "$zero" , "$ra" , "$tp" , "$sp" , "$a0" , "$a1" , "$a2" , "$a3" ,
    "$a4"   , "$a5" , "$a6" , "$a7" , "$t0" , "$t1" , "$t2" , "$t3" ,
    "$t4"   , "$t5" , "$t6" , "$t7" , "$t8" , "$x"  , "$fp" , "$s0" ,
    "$s1"   , "$s2" , "$s3" , "$s4" , "$s5" , "$s6" , "$s7" , "$s8" ,
};

static const char *fpr_name[] = {
    "$fa0"  , "$fa1"  , "$fa2"  , "$fa3"  ,
    "$fa4"  , "$fa5"  , "$fa6"  , "$fa7"  ,
    "$ft0"  , "$ft1"  , "$ft2"  , "$ft3"  ,
    "$ft4"  , "$ft5"  , "$ft6"  , "$ft7"  ,
    "$ft8"  , "$ft9"  , "$ft10" , "$ft11" ,
    "$ft12" , "$ft13" , "$ft14" , "$ft15" ,
    "$fs0"  , "$fs1"  , "$fs2"  , "$fs3"  ,
    "$fs4"  , "$fs5"  , "$fs6"  , "$s7"   ,
};

static const char *cc_name[] = {
    "$cc0" , "$cc1" , "$cc2" , "$cc3" ,
    "$cc4" , "$cc5" , "$cc6" , "$cc7" ,
};

/* NOTE! You should finish these print functions below. */
static void print_format_0(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", gpr_name[info->opnds[0]], 
                                             gpr_name[info->opnds[1]]);
}

static void print_format_1(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rj rk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", gpr_name[info->opnds[0]], 
                                             gpr_name[info->opnds[1]]);
}

static void print_format_10(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd fj fk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s", fpr_name[info->opnds[0]], 
                                                 fpr_name[info->opnds[1]],
                                                 fpr_name[info->opnds[2]]);
}

static void print_format_11(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd fj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", fpr_name[info->opnds[0]], 
                                             fpr_name[info->opnds[1]]);
}

static void print_format_12(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd rj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", fpr_name[info->opnds[0]], 
                                             gpr_name[info->opnds[1]]);
}

static void print_format_13(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd fj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", gpr_name[info->opnds[0]], 
                                             fpr_name[info->opnds[1]]);
}

static void print_format_14(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fcsr rj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x, %s", info->opnds[0], 
                                              gpr_name[info->opnds[1]]);
}

static void print_format_15(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd fcsr_1 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %#x", gpr_name[info->opnds[0]], 
                                              info->opnds[1]);
}

static void print_format_16(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* cd fj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", cc_name[info->opnds[0]], 
                                             fpr_name[info->opnds[1]]);
}

static void print_format_17(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd cj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", fpr_name[info->opnds[0]], 
                                             cc_name[info->opnds[1]]);
}

static void print_format_18(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* cd rj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", cc_name[info->opnds[0]], 
                                             gpr_name[info->opnds[1]]);
}

static void print_format_19(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd cj */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s", gpr_name[info->opnds[0]], 
                                             cc_name[info->opnds[1]]);
}

static void print_format_2(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj rk sa2 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                       gpr_name[info->opnds[1]],
                                                       gpr_name[info->opnds[2]],
                                                       info->opnds[3],
                                                       info->opnds[3]);
}

static void print_format_20(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj si12 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                 gpr_name[info->opnds[1]],
                                                 info->opnds[2],
                                                 info->opnds[2]);
}

static void print_format_21(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj ui12 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                   gpr_name[info->opnds[1]],
                                                   info->opnds[2],
                                                   info->opnds[2]);
}

static void print_format_22(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd csr */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                  info->opnds[1],
                                                  info->opnds[1]);
}

static void print_format_23(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj csr */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %#x", gpr_name[info->opnds[0]], 
                                                   gpr_name[info->opnds[1]], 
                                                   info->opnds[2]);
}

static void print_format_24(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* code_2 rj si12 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x, %s, %d(%#x)", info->opnds[0], 
                                                   gpr_name[info->opnds[1]], 
                                                   info->opnds[2],
                                                   info->opnds[2]);
}

static void print_format_25(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj level */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %#x", gpr_name[info->opnds[0]], 
                                                  gpr_name[info->opnds[1]], 
                                                  info->opnds[2]);
}

static void print_format_26(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rj seq */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %#x", gpr_name[info->opnds[0]], 
                                              info->opnds[1]); 
}

static void print_format_27(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* */
}

static void print_format_28(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* level_3 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x", info->opnds[0]); 
}

static void print_format_29(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* op rj rk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x, %s, %s", info->opnds[0], 
                                                  gpr_name[info->opnds[1]], 
                                                  gpr_name[info->opnds[2]]);
}

static void print_format_3(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj rk sa3 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                      gpr_name[info->opnds[1]], 
                                                      gpr_name[info->opnds[2]],
                                                      info->opnds[3],
                                                      info->opnds[3]);
}

static void print_format_30(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd fj fk fa */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s, %s", fpr_name[info->opnds[0]], 
                                                     fpr_name[info->opnds[1]], 
                                                     fpr_name[info->opnds[2]],
                                                     fpr_name[info->opnds[3]]);
}

static void print_format_31(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* cd fj fk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s", cc_name[info->opnds[0]], 
                                                 fpr_name[info->opnds[1]], 
                                                 fpr_name[info->opnds[2]]);
}

static void print_format_32(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd fj fk ca */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s, %s", fpr_name[info->opnds[0]], 
                                                     fpr_name[info->opnds[1]], 
                                                     fpr_name[info->opnds[2]],
                                                     cc_name[info->opnds[3]]);
}

static void print_format_33(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj si16 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                 gpr_name[info->opnds[1]], 
                                                 info->opnds[2],
                                                 info->opnds[2]);
}

static void print_format_34(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd si20 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                  info->opnds[1],
                                                  info->opnds[1]);
}

static void print_format_35(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj si14 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]], 
                                                      gpr_name[info->opnds[1]], 
                                                      info->opnds[2],
                                                      info->opnds[2]);
}

static void print_format_36(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* hint rj si12 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x, %s, %d(%#x)", info->opnds[0], 
                                                       gpr_name[info->opnds[1]], 
                                                       info->opnds[2],
                                                       info->opnds[2]);
}

static void print_format_37(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd rj si12 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", fpr_name[info->opnds[0]], 
                                                      gpr_name[info->opnds[1]], 
                                                      info->opnds[2],
                                                      info->opnds[2]);
}

static void print_format_38(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* hint rj rk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x, %s, %s", info->opnds[0], 
                                                  gpr_name[info->opnds[1]], 
                                                  gpr_name[info->opnds[2]]);
}

static void print_format_39(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* fd rj rk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s", fpr_name[info->opnds[0]], 
                                                 gpr_name[info->opnds[1]], 
                                                 gpr_name[info->opnds[2]]);
}

static void print_format_4(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj rk */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %s", gpr_name[info->opnds[0]], 
                                                 gpr_name[info->opnds[1]], 
                                                 gpr_name[info->opnds[2]]);
}

static void print_format_40(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* hint_4 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x", info->opnds[0]); 
}

static void print_format_41(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* hint_5 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x", info->opnds[0]); 
}

static void print_format_42(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rj offs2 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %#lx", gpr_name[info->opnds[0]],
                                               info->pc + (info->opnds[1] << 2)); 
}

static void print_format_43(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* cj offs2 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %#lx", cc_name[info->opnds[0]],
                                               info->pc + (info->opnds[1] << 2)); 
}

static void print_format_44(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj offs1 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %#lx", gpr_name[info->opnds[0]],
                                                   gpr_name[info->opnds[1]],
                                                   info->pc + (info->opnds[2] << 2)); 
}

static void print_format_45(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* offs3 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#lx", info->pc + (info->opnds[0] << 2));
}

static void print_format_5(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* code */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%#x", info->opnds[0]);
}

static void print_format_6(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj ui5 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]],
                                                   gpr_name[info->opnds[1]],
                                                   info->opnds[2],
                                                   info->opnds[2]);
}

static void print_format_7(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj ui6 */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d(%#x)", gpr_name[info->opnds[0]],
                                                   gpr_name[info->opnds[1]],
                                                   info->opnds[2],
                                                   info->opnds[2]);
}

static void print_format_8(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj msbw lsbw */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d, %d", gpr_name[info->opnds[0]],
                                                     gpr_name[info->opnds[1]],
                                                     info->opnds[2],
                                                     info->opnds[3]);
}

static void print_format_9(LoongArchInsInfo *info, struct disassemble_info *dis)
{
    /* rd rj msbd lsbd */
    dis->fprintf_func(dis->stream, "%-16s", opcode_name[info->opc]);
    dis->fprintf_func(dis->stream, "%s, %s, %d, %d", gpr_name[info->opnds[0]],
                                                     gpr_name[info->opnds[1]],
                                                     info->opnds[2],
                                                     info->opnds[3]);
}

static void (*print_func_table[]) (LoongArchInsInfo *, struct disassemble_info *) = {
    [OPC_CLO_W] = print_format_0,
    [OPC_CLZ_W] = print_format_0,
    [OPC_CTO_W] = print_format_0,
    [OPC_CTZ_W] = print_format_0,
    [OPC_CLO_D] = print_format_0,
    [OPC_CLZ_D] = print_format_0,
    [OPC_CTO_D] = print_format_0,
    [OPC_CTZ_D] = print_format_0,
    [OPC_REVB_2H] = print_format_0,
    [OPC_REVB_4H] = print_format_0,
    [OPC_REVB_2W] = print_format_0,
    [OPC_REVB_D] = print_format_0,
    [OPC_REVH_2W] = print_format_0,
    [OPC_REVH_D] = print_format_0,
    [OPC_BITREV_4B] = print_format_0,
    [OPC_BITREV_8B] = print_format_0,
    [OPC_BITREV_W] = print_format_0,
    [OPC_BITREV_D] = print_format_0,
    [OPC_EXT_W_H] = print_format_0,
    [OPC_EXT_W_B] = print_format_0,
    [OPC_RDTIMEL_W] = print_format_0,
    [OPC_RDTIMEH_W] = print_format_0,
    [OPC_RDTIME_D] = print_format_0,
    [OPC_CPUCFG] = print_format_0,
    [OPC_ASRTLE_D] = print_format_1,
    [OPC_ASRTGT_D] = print_format_1,
    [OPC_ALSL_W] = print_format_2,
    [OPC_ALSL_WU] = print_format_2,
    [OPC_BYTEPICK_W] = print_format_2,
    [OPC_BYTEPICK_D] = print_format_3,
    [OPC_ADD_W] = print_format_4,
    [OPC_ADD_D] = print_format_4,
    [OPC_SUB_W] = print_format_4,
    [OPC_SUB_D] = print_format_4,
    [OPC_SLT] = print_format_4,
    [OPC_SLTU] = print_format_4,
    [OPC_MASKEQZ] = print_format_4,
    [OPC_MASKNEZ] = print_format_4,
    [OPC_NOR] = print_format_4,
    [OPC_AND] = print_format_4,
    [OPC_OR] = print_format_4,
    [OPC_XOR] = print_format_4,
    [OPC_ORN] = print_format_4,
    [OPC_ANDN] = print_format_4,
    [OPC_SLL_W] = print_format_4,
    [OPC_SRL_W] = print_format_4,
    [OPC_SRA_W] = print_format_4,
    [OPC_SLL_D] = print_format_4,
    [OPC_SRL_D] = print_format_4,
    [OPC_SRA_D] = print_format_4,
    [OPC_ROTR_W] = print_format_4,
    [OPC_ROTR_D] = print_format_4,
    [OPC_MUL_W] = print_format_4,
    [OPC_MULH_W] = print_format_4,
    [OPC_MULH_WU] = print_format_4,
    [OPC_MUL_D] = print_format_4,
    [OPC_MULH_D] = print_format_4,
    [OPC_MULH_DU] = print_format_4,
    [OPC_MULW_D_W] = print_format_4,
    [OPC_MULW_D_WU] = print_format_4,
    [OPC_DIV_W] = print_format_4,
    [OPC_MOD_W] = print_format_4,
    [OPC_DIV_WU] = print_format_4,
    [OPC_MOD_WU] = print_format_4,
    [OPC_DIV_D] = print_format_4,
    [OPC_MOD_D] = print_format_4,
    [OPC_DIV_DU] = print_format_4,
    [OPC_MOD_DU] = print_format_4,
    [OPC_CRC_W_B_W] = print_format_4,
    [OPC_CRC_W_H_W] = print_format_4,
    [OPC_CRC_W_W_W] = print_format_4,
    [OPC_CRC_W_D_W] = print_format_4,
    [OPC_CRCC_W_B_W] = print_format_4,
    [OPC_CRCC_W_H_W] = print_format_4,
    [OPC_CRCC_W_W_W] = print_format_4,
    [OPC_CRCC_W_D_W] = print_format_4,
    [OPC_BREAK] = print_format_5,
    [OPC_DBCL] = print_format_5,
    [OPC_SYSCALL] = print_format_5,
    [OPC_ALSL_D] = print_format_2,
    [OPC_SLLI_W] = print_format_6,
    [OPC_SLLI_D] = print_format_7,
    [OPC_SRLI_W] = print_format_6,
    [OPC_SRLI_D] = print_format_7,
    [OPC_SRAI_W] = print_format_6,
    [OPC_SRAI_D] = print_format_7,
    [OPC_ROTRI_W] = print_format_6,
    [OPC_ROTRI_D] = print_format_7,
    [OPC_BSTRINS_W] = print_format_8,
    [OPC_BSTRPICK_W] = print_format_8,
    [OPC_BSTRINS_D] = print_format_9,
    [OPC_BSTRPICK_D] = print_format_9,
    [OPC_FADD_S] = print_format_10,
    [OPC_FADD_D] = print_format_10,
    [OPC_FSUB_S] = print_format_10,
    [OPC_FSUB_D] = print_format_10,
    [OPC_FMUL_S] = print_format_10,
    [OPC_FMUL_D] = print_format_10,
    [OPC_FDIV_S] = print_format_10,
    [OPC_FDIV_D] = print_format_10,
    [OPC_FMAX_S] = print_format_10,
    [OPC_FMAX_D] = print_format_10,
    [OPC_FMIN_S] = print_format_10,
    [OPC_FMIN_D] = print_format_10,
    [OPC_FMAXA_S] = print_format_10,
    [OPC_FMAXA_D] = print_format_10,
    [OPC_FMINA_S] = print_format_10,
    [OPC_FMINA_D] = print_format_10,
    [OPC_FSCALEB_S] = print_format_10,
    [OPC_FSCALEB_D] = print_format_10,
    [OPC_FCOPYSIGN_S] = print_format_10,
    [OPC_FCOPYSIGN_D] = print_format_10,
    [OPC_FABS_S] = print_format_11,
    [OPC_FABS_D] = print_format_11,
    [OPC_FNEG_S] = print_format_11,
    [OPC_FNEG_D] = print_format_11,
    [OPC_FLOGB_S] = print_format_11,
    [OPC_FLOGB_D] = print_format_11,
    [OPC_FCLASS_S] = print_format_11,
    [OPC_FCLASS_D] = print_format_11,
    [OPC_FSQRT_S] = print_format_11,
    [OPC_FSQRT_D] = print_format_11,
    [OPC_FRECIP_S] = print_format_11,
    [OPC_FRECIP_D] = print_format_11,
    [OPC_FRSQRT_S] = print_format_11,
    [OPC_FRSQRT_D] = print_format_11,
    [OPC_FMOV_S] = print_format_11,
    [OPC_FMOV_D] = print_format_11,
    [OPC_MOVGR2FR_W] = print_format_12,
    [OPC_MOVGR2FR_D] = print_format_12,
    [OPC_MOVGR2FRH_W] = print_format_12,
    [OPC_MOVFR2GR_S] = print_format_13,
    [OPC_MOVFR2GR_D] = print_format_13,
    [OPC_MOVFRH2GR_S] = print_format_13,
    [OPC_MOVGR2FCSR] = print_format_14,
    [OPC_MOVFCSR2GR] = print_format_15,
    [OPC_MOVFR2CF] = print_format_16,
    [OPC_MOVCF2FR] = print_format_17,
    [OPC_MOVGR2CF] = print_format_18,
    [OPC_MOVCF2GR] = print_format_19,
    [OPC_FCVT_S_D] = print_format_11,
    [OPC_FCVT_D_S] = print_format_11,
    [OPC_FTINTRM_W_S] = print_format_11,
    [OPC_FTINTRM_W_D] = print_format_11,
    [OPC_FTINTRM_L_S] = print_format_11,
    [OPC_FTINTRM_L_D] = print_format_11,
    [OPC_FTINTRP_W_S] = print_format_11,
    [OPC_FTINTRP_W_D] = print_format_11,
    [OPC_FTINTRP_L_S] = print_format_11,
    [OPC_FTINTRP_L_D] = print_format_11,
    [OPC_FTINTRZ_W_S] = print_format_11,
    [OPC_FTINTRZ_W_D] = print_format_11,
    [OPC_FTINTRZ_L_S] = print_format_11,
    [OPC_FTINTRZ_L_D] = print_format_11,
    [OPC_FTINTRNE_W_S] = print_format_11,
    [OPC_FTINTRNE_W_D] = print_format_11,
    [OPC_FTINTRNE_L_S] = print_format_11,
    [OPC_FTINTRNE_L_D] = print_format_11,
    [OPC_FTINT_W_S] = print_format_11,
    [OPC_FTINT_W_D] = print_format_11,
    [OPC_FTINT_L_S] = print_format_11,
    [OPC_FTINT_L_D] = print_format_11,
    [OPC_FFINT_S_W] = print_format_11,
    [OPC_FFINT_S_L] = print_format_11,
    [OPC_FFINT_D_W] = print_format_11,
    [OPC_FFINT_D_L] = print_format_11,
    [OPC_FRINT_S] = print_format_11,
    [OPC_FRINT_D] = print_format_11,
    [OPC_SLTI] = print_format_20,
    [OPC_SLTUI] = print_format_20,
    [OPC_ADDI_W] = print_format_20,
    [OPC_ADDI_D] = print_format_20,
    [OPC_LU52I_D] = print_format_20,
    [OPC_ANDI] = print_format_21,
    [OPC_ORI] = print_format_21,
    [OPC_XORI] = print_format_21,
    [OPC_CSRRD] = print_format_22,
    [OPC_CSRWR] = print_format_22,
    [OPC_CSRXCHG] = print_format_23,
    [OPC_CACOP] = print_format_24,
    [OPC_LDDIR] = print_format_25,
    [OPC_LDPTE] = print_format_26,
    [OPC_IOCSRRD_B] = print_format_0,
    [OPC_IOCSRRD_H] = print_format_0,
    [OPC_IOCSRRD_W] = print_format_0,
    [OPC_IOCSRRD_D] = print_format_0,
    [OPC_IOCSRWR_B] = print_format_0,
    [OPC_IOCSRWR_H] = print_format_0,
    [OPC_IOCSRWR_W] = print_format_0,
    [OPC_IOCSRWR_D] = print_format_0,
    [OPC_TLBCLR] = print_format_27,
    [OPC_TLBFLUSH] = print_format_27,
    [OPC_TLBSRCH] = print_format_27,
    [OPC_TLBRD] = print_format_27,
    [OPC_TLBWR] = print_format_27,
    [OPC_TLBFILL] = print_format_27,
    [OPC_ERTN] = print_format_27,
    [OPC_IDLE] = print_format_28,
    [OPC_INVTLB] = print_format_29,
    [OPC_FMADD_S] = print_format_30,
    [OPC_FMADD_D] = print_format_30,
    [OPC_FMSUB_S] = print_format_30,
    [OPC_FMSUB_D] = print_format_30,
    [OPC_FNMADD_S] = print_format_30,
    [OPC_FNMADD_D] = print_format_30,
    [OPC_FNMSUB_S] = print_format_30,
    [OPC_FNMSUB_D] = print_format_30,
    [OPC_FCMP_CAF_S] = print_format_31,
    [OPC_FCMP_SAF_S] = print_format_31,
    [OPC_FCMP_CLT_S] = print_format_31,
    [OPC_FCMP_STL_S] = print_format_31,
    [OPC_FCMP_CEQ_S] = print_format_31,
    [OPC_FCMP_SEQ_S] = print_format_31,
    [OPC_FCMP_CLE_S] = print_format_31,
    [OPC_FCMP_SLE_S] = print_format_31,
    [OPC_FCMP_CUN_S] = print_format_31,
    [OPC_FCMP_SUN_S] = print_format_31,
    [OPC_FCMP_CULT_S] = print_format_31,
    [OPC_FCMP_SULT_S] = print_format_31,
    [OPC_FCMP_CUEQ_S] = print_format_31,
    [OPC_FCMP_SUEQ_S] = print_format_31,
    [OPC_FCMP_CULE_S] = print_format_31,
    [OPC_FCMP_SULE_S] = print_format_31,
    [OPC_FCMP_CNE_S] = print_format_31,
    [OPC_FCMP_SNE_S] = print_format_31,
    [OPC_FCMP_COR_S] = print_format_31,
    [OPC_FCMP_SOR_S] = print_format_31,
    [OPC_FCMP_CUNE_S] = print_format_31,
    [OPC_FCMP_SUNE_S] = print_format_31,
    [OPC_FCMP_CAF_D] = print_format_31,
    [OPC_FCMP_SAF_D] = print_format_31,
    [OPC_FCMP_CLT_D] = print_format_31,
    [OPC_FCMP_STL_D] = print_format_31,
    [OPC_FCMP_CEQ_D] = print_format_31,
    [OPC_FCMP_SEQ_D] = print_format_31,
    [OPC_FCMP_CLE_D] = print_format_31,
    [OPC_FCMP_SLE_D] = print_format_31,
    [OPC_FCMP_CUN_D] = print_format_31,
    [OPC_FCMP_SUN_D] = print_format_31,
    [OPC_FCMP_CULT_D] = print_format_31,
    [OPC_FCMP_SULT_D] = print_format_31,
    [OPC_FCMP_CUEQ_D] = print_format_31,
    [OPC_FCMP_SUEQ_D] = print_format_31,
    [OPC_FCMP_CULE_D] = print_format_31,
    [OPC_FCMP_SULE_D] = print_format_31,
    [OPC_FCMP_CNE_D] = print_format_31,
    [OPC_FCMP_SNE_D] = print_format_31,
    [OPC_FCMP_COR_D] = print_format_31,
    [OPC_FCMP_SOR_D] = print_format_31,
    [OPC_FCMP_CUNE_D] = print_format_31,
    [OPC_FCMP_SUNE_D] = print_format_31,
    [OPC_FSEL] = print_format_32,
    [OPC_ADDU16I_D] = print_format_33,
    [OPC_LU12I_W] = print_format_34,
    [OPC_LU32I_D] = print_format_34,
    [OPC_PCADDI] = print_format_34,
    [OPC_PCALAU12I] = print_format_34,
    [OPC_PCADDU12I] = print_format_34,
    [OPC_PCADDU18I] = print_format_34,
    [OPC_LL_W] = print_format_35,
    [OPC_SC_W] = print_format_35,
    [OPC_LL_D] = print_format_35,
    [OPC_SC_D] = print_format_35,
    [OPC_LDPTR_W] = print_format_35,
    [OPC_STPTR_W] = print_format_35,
    [OPC_LDPTR_D] = print_format_35,
    [OPC_STPTR_D] = print_format_35,
    [OPC_LD_B] = print_format_20,
    [OPC_LD_H] = print_format_20,
    [OPC_LD_W] = print_format_20,
    [OPC_LD_D] = print_format_20,
    [OPC_ST_B] = print_format_20,
    [OPC_ST_H] = print_format_20,
    [OPC_ST_W] = print_format_20,
    [OPC_ST_D] = print_format_20,
    [OPC_LD_BU] = print_format_20,
    [OPC_LD_HU] = print_format_20,
    [OPC_LD_WU] = print_format_20,
    [OPC_PRELD] = print_format_36,
    [OPC_FLD_S] = print_format_37,
    [OPC_FST_S] = print_format_37,
    [OPC_FLD_D] = print_format_37,
    [OPC_FST_D] = print_format_37,
    [OPC_LDX_B] = print_format_4,
    [OPC_LDX_H] = print_format_4,
    [OPC_LDX_W] = print_format_4,
    [OPC_LDX_D] = print_format_4,
    [OPC_STX_B] = print_format_4,
    [OPC_STX_H] = print_format_4,
    [OPC_STX_W] = print_format_4,
    [OPC_STX_D] = print_format_4,
    [OPC_LDX_BU] = print_format_4,
    [OPC_LDX_HU] = print_format_4,
    [OPC_LDX_WU] = print_format_4,
    [OPC_PRELDX] = print_format_38,
    [OPC_FLDX_S] = print_format_39,
    [OPC_FLDX_D] = print_format_39,
    [OPC_FSTX_S] = print_format_39,
    [OPC_FSTX_D] = print_format_39,
    [OPC_AMSWAP_W] = print_format_4,
    [OPC_AMSWAP_D] = print_format_4,
    [OPC_AMADD_W] = print_format_4,
    [OPC_AMADD_D] = print_format_4,
    [OPC_AMAND_W] = print_format_4,
    [OPC_AMAND_D] = print_format_4,
    [OPC_AMOR_W] = print_format_4,
    [OPC_AMOR_D] = print_format_4,
    [OPC_AMXOR_W] = print_format_4,
    [OPC_AMXOR_D] = print_format_4,
    [OPC_AMMAX_W] = print_format_4,
    [OPC_AMMAX_D] = print_format_4,
    [OPC_AMMIN_W] = print_format_4,
    [OPC_AMMIN_D] = print_format_4,
    [OPC_AMMAX_WU] = print_format_4,
    [OPC_AMMAX_DU] = print_format_4,
    [OPC_AMMIN_WU] = print_format_4,
    [OPC_AMMIN_DU] = print_format_4,
    [OPC_AMSWAP_DB_W] = print_format_4,
    [OPC_AMSWAP_DB_D] = print_format_4,
    [OPC_AMADD_DB_W] = print_format_4,
    [OPC_AMADD_DB_D] = print_format_4,
    [OPC_AMAND_DB_W] = print_format_4,
    [OPC_AMAND_DB_D] = print_format_4,
    [OPC_AMOR_DB_W] = print_format_4,
    [OPC_AMOR_DB_D] = print_format_4,
    [OPC_AMXOR_DB_W] = print_format_4,
    [OPC_AMXOR_DB_D] = print_format_4,
    [OPC_AMMAX_DB_W] = print_format_4,
    [OPC_AMMAX_DB_D] = print_format_4,
    [OPC_AMMIN_DB_W] = print_format_4,
    [OPC_AMMIN_DB_D] = print_format_4,
    [OPC_AMMAX_DB_WU] = print_format_4,
    [OPC_AMMAX_DB_DU] = print_format_4,
    [OPC_AMMIN_DB_WU] = print_format_4,
    [OPC_AMMIN_DB_DU] = print_format_4,
    [OPC_DBAR] = print_format_40,
    [OPC_IBAR] = print_format_41,
    [OPC_FLDGT_S] = print_format_39,
    [OPC_FLDGT_D] = print_format_39,
    [OPC_FLDLE_S] = print_format_39,
    [OPC_FLDLE_D] = print_format_39,
    [OPC_FSTGT_S] = print_format_39,
    [OPC_FSTGT_D] = print_format_39,
    [OPC_FSTLE_S] = print_format_39,
    [OPC_FSTLE_D] = print_format_39,
    [OPC_LDGT_B] = print_format_4,
    [OPC_LDGT_H] = print_format_4,
    [OPC_LDGT_W] = print_format_4,
    [OPC_LDGT_D] = print_format_4,
    [OPC_LDLE_B] = print_format_4,
    [OPC_LDLE_H] = print_format_4,
    [OPC_LDLE_W] = print_format_4,
    [OPC_LDLE_D] = print_format_4,
    [OPC_STGT_B] = print_format_4,
    [OPC_STGT_H] = print_format_4,
    [OPC_STGT_W] = print_format_4,
    [OPC_STGT_D] = print_format_4,
    [OPC_STLE_B] = print_format_4,
    [OPC_STLE_H] = print_format_4,
    [OPC_STLE_W] = print_format_4,
    [OPC_STLE_D] = print_format_4,
    [OPC_BEQZ] = print_format_42,
    [OPC_BNEZ] = print_format_42,
    [OPC_BCEQZ] = print_format_43,
    [OPC_BCNEZ] = print_format_43,
    [OPC_JIRL] = print_format_44,
    [OPC_B] = print_format_45,
    [OPC_BL] = print_format_45,
    [OPC_BEQ] = print_format_44,
    [OPC_BNE] = print_format_44,
    [OPC_BLT] = print_format_44,
    [OPC_BGE] = print_format_44,
    [OPC_BLTU] = print_format_44,
    [OPC_BGEU] = print_format_44,
};


int print_insn_loongarch(bfd_vma pc, disassemble_info *dis) {
    LoongArchInsInfo info = {.pc = pc};
    bfd_byte buffer[4];

    int status = (*dis->read_memory_func)(pc, buffer, 4, dis);
    if (status == 0) {
        uint32_t insn = bfd_getl32(buffer);
        if (decode(&info, insn)) {
            print_func_table[info.opc](&info, dis);
            return 4;
        }
        else {
            dis->fprintf_func(dis->stream, "%s", "UNKNOWN INSTRUCTION!");
            return -1;
        }
    }
    else {
        (*dis->memory_error_func)(status, pc, dis);
        return -1;
    }
}
