/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|*                                                                            *|
|* Assembly Writer Source Fragment                                            *|
|*                                                                            *|
|* Automatically generated file, do not edit!                                 *|
|* From: BPF.td                                                               *|
|*                                                                            *|
\*===----------------------------------------------------------------------===*/

/// getMnemonic - This method is automatically generated by tablegen
/// from the instruction set description.
std::pair<const char *, uint64_t>
BPFInstPrinter::getMnemonic(const MCInst &MI) const {

#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Woverlength-strings"
#endif
  static const char AsmStrs[] = {
  /* 0 */ "lea\t\000"
  /* 5 */ "ld_pseudo\t\000"
  /* 16 */ "nop\t\000"
  /* 21 */ "#memcpy dst: \000"
  /* 35 */ "#ADJCALLSTACKDOWN \000"
  /* 54 */ "# Select PSEUDO \000"
  /* 71 */ "#ADJCALLSTACKUP \000"
  /* 88 */ "if \000"
  /* 92 */ "call \000"
  /* 98 */ "gotol \000"
  /* 105 */ "may_goto \000"
  /* 115 */ "callx \000"
  /* 122 */ "gotox \000"
  /* 129 */ "store_release((u32 *)(\000"
  /* 152 */ "lock *(u32 *)(\000"
  /* 167 */ "store_release((u64 *)(\000"
  /* 190 */ "lock *(u64 *)(\000"
  /* 205 */ "store_release((u16 *)(\000"
  /* 228 */ "*(u16 *)(\000"
  /* 238 */ "store_release((u8 *)(\000"
  /* 260 */ "*(u8 *)(\000"
  /* 269 */ "w0 = cmpxchg32_32(\000"
  /* 288 */ "r0 = cmpxchg_64(\000"
  /* 305 */ "core_st(\000"
  /* 314 */ "# XRay Function Patchable RET.\000"
  /* 345 */ "# XRay Typed Event Log.\000"
  /* 369 */ "# XRay Custom Event Log.\000"
  /* 394 */ "# XRay Function Enter.\000"
  /* 417 */ "# XRay Tail Call Exit.\000"
  /* 440 */ "# XRay Function Exit.\000"
  /* 462 */ "LIFETIME_END\000"
  /* 475 */ "PSEUDO_PROBE\000"
  /* 488 */ "BUNDLE\000"
  /* 495 */ "FAKE_USE\000"
  /* 504 */ "DBG_VALUE\000"
  /* 514 */ "DBG_INSTR_REF\000"
  /* 528 */ "DBG_PHI\000"
  /* 536 */ "DBG_LABEL\000"
  /* 546 */ "LIFETIME_START\000"
  /* 561 */ "DBG_VALUE_LIST\000"
  /* 576 */ "r0 = *(u32 *)skb[\000"
  /* 594 */ "r0 = *(u16 *)skb[\000"
  /* 612 */ "r0 = *(u8 *)skb[\000"
  /* 629 */ "# FEntry call\000"
  /* 643 */ "exit\000"
};
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

  static const uint32_t OpInfo0[] = {
    0U,	// PHI
    0U,	// INLINEASM
    0U,	// INLINEASM_BR
    0U,	// CFI_INSTRUCTION
    0U,	// EH_LABEL
    0U,	// GC_LABEL
    0U,	// ANNOTATION_LABEL
    0U,	// KILL
    0U,	// EXTRACT_SUBREG
    0U,	// INSERT_SUBREG
    0U,	// IMPLICIT_DEF
    0U,	// INIT_UNDEF
    0U,	// SUBREG_TO_REG
    0U,	// COPY_TO_REGCLASS
    505U,	// DBG_VALUE
    562U,	// DBG_VALUE_LIST
    515U,	// DBG_INSTR_REF
    529U,	// DBG_PHI
    537U,	// DBG_LABEL
    0U,	// REG_SEQUENCE
    0U,	// COPY
    0U,	// COPY_LANEMASK
    489U,	// BUNDLE
    547U,	// LIFETIME_START
    463U,	// LIFETIME_END
    476U,	// PSEUDO_PROBE
    0U,	// ARITH_FENCE
    0U,	// STACKMAP
    630U,	// FENTRY_CALL
    0U,	// PATCHPOINT
    0U,	// LOAD_STACK_GUARD
    0U,	// PREALLOCATED_SETUP
    0U,	// PREALLOCATED_ARG
    0U,	// STATEPOINT
    0U,	// LOCAL_ESCAPE
    0U,	// FAULTING_OP
    0U,	// PATCHABLE_OP
    395U,	// PATCHABLE_FUNCTION_ENTER
    315U,	// PATCHABLE_RET
    441U,	// PATCHABLE_FUNCTION_EXIT
    418U,	// PATCHABLE_TAIL_CALL
    370U,	// PATCHABLE_EVENT_CALL
    346U,	// PATCHABLE_TYPED_EVENT_CALL
    0U,	// ICALL_BRANCH_FUNNEL
    496U,	// FAKE_USE
    0U,	// MEMBARRIER
    0U,	// JUMP_TABLE_DEBUG_INFO
    0U,	// RELOC_NONE
    0U,	// CONVERGENCECTRL_ENTRY
    0U,	// CONVERGENCECTRL_ANCHOR
    0U,	// CONVERGENCECTRL_LOOP
    0U,	// CONVERGENCECTRL_GLUE
    0U,	// G_ASSERT_SEXT
    0U,	// G_ASSERT_ZEXT
    0U,	// G_ASSERT_ALIGN
    0U,	// G_ADD
    0U,	// G_SUB
    0U,	// G_MUL
    0U,	// G_SDIV
    0U,	// G_UDIV
    0U,	// G_SREM
    0U,	// G_UREM
    0U,	// G_SDIVREM
    0U,	// G_UDIVREM
    0U,	// G_AND
    0U,	// G_OR
    0U,	// G_XOR
    0U,	// G_ABDS
    0U,	// G_ABDU
    0U,	// G_UAVGFLOOR
    0U,	// G_UAVGCEIL
    0U,	// G_SAVGFLOOR
    0U,	// G_SAVGCEIL
    0U,	// G_IMPLICIT_DEF
    0U,	// G_PHI
    0U,	// G_FRAME_INDEX
    0U,	// G_GLOBAL_VALUE
    0U,	// G_PTRAUTH_GLOBAL_VALUE
    0U,	// G_CONSTANT_POOL
    0U,	// G_EXTRACT
    0U,	// G_UNMERGE_VALUES
    0U,	// G_INSERT
    0U,	// G_MERGE_VALUES
    0U,	// G_BUILD_VECTOR
    0U,	// G_BUILD_VECTOR_TRUNC
    0U,	// G_CONCAT_VECTORS
    0U,	// G_PTRTOINT
    0U,	// G_INTTOPTR
    0U,	// G_BITCAST
    0U,	// G_FREEZE
    0U,	// G_CONSTANT_FOLD_BARRIER
    0U,	// G_INTRINSIC_FPTRUNC_ROUND
    0U,	// G_INTRINSIC_TRUNC
    0U,	// G_INTRINSIC_ROUND
    0U,	// G_INTRINSIC_LRINT
    0U,	// G_INTRINSIC_LLRINT
    0U,	// G_INTRINSIC_ROUNDEVEN
    0U,	// G_READCYCLECOUNTER
    0U,	// G_READSTEADYCOUNTER
    0U,	// G_LOAD
    0U,	// G_SEXTLOAD
    0U,	// G_ZEXTLOAD
    0U,	// G_INDEXED_LOAD
    0U,	// G_INDEXED_SEXTLOAD
    0U,	// G_INDEXED_ZEXTLOAD
    0U,	// G_STORE
    0U,	// G_INDEXED_STORE
    0U,	// G_ATOMIC_CMPXCHG_WITH_SUCCESS
    0U,	// G_ATOMIC_CMPXCHG
    0U,	// G_ATOMICRMW_XCHG
    0U,	// G_ATOMICRMW_ADD
    0U,	// G_ATOMICRMW_SUB
    0U,	// G_ATOMICRMW_AND
    0U,	// G_ATOMICRMW_NAND
    0U,	// G_ATOMICRMW_OR
    0U,	// G_ATOMICRMW_XOR
    0U,	// G_ATOMICRMW_MAX
    0U,	// G_ATOMICRMW_MIN
    0U,	// G_ATOMICRMW_UMAX
    0U,	// G_ATOMICRMW_UMIN
    0U,	// G_ATOMICRMW_FADD
    0U,	// G_ATOMICRMW_FSUB
    0U,	// G_ATOMICRMW_FMAX
    0U,	// G_ATOMICRMW_FMIN
    0U,	// G_ATOMICRMW_FMAXIMUM
    0U,	// G_ATOMICRMW_FMINIMUM
    0U,	// G_ATOMICRMW_UINC_WRAP
    0U,	// G_ATOMICRMW_UDEC_WRAP
    0U,	// G_ATOMICRMW_USUB_COND
    0U,	// G_ATOMICRMW_USUB_SAT
    0U,	// G_FENCE
    0U,	// G_PREFETCH
    0U,	// G_BRCOND
    0U,	// G_BRINDIRECT
    0U,	// G_INVOKE_REGION_START
    0U,	// G_INTRINSIC
    0U,	// G_INTRINSIC_W_SIDE_EFFECTS
    0U,	// G_INTRINSIC_CONVERGENT
    0U,	// G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
    0U,	// G_ANYEXT
    0U,	// G_TRUNC
    0U,	// G_TRUNC_SSAT_S
    0U,	// G_TRUNC_SSAT_U
    0U,	// G_TRUNC_USAT_U
    0U,	// G_CONSTANT
    0U,	// G_FCONSTANT
    0U,	// G_VASTART
    0U,	// G_VAARG
    0U,	// G_SEXT
    0U,	// G_SEXT_INREG
    0U,	// G_ZEXT
    0U,	// G_SHL
    0U,	// G_LSHR
    0U,	// G_ASHR
    0U,	// G_FSHL
    0U,	// G_FSHR
    0U,	// G_ROTR
    0U,	// G_ROTL
    0U,	// G_ICMP
    0U,	// G_FCMP
    0U,	// G_SCMP
    0U,	// G_UCMP
    0U,	// G_SELECT
    0U,	// G_UADDO
    0U,	// G_UADDE
    0U,	// G_USUBO
    0U,	// G_USUBE
    0U,	// G_SADDO
    0U,	// G_SADDE
    0U,	// G_SSUBO
    0U,	// G_SSUBE
    0U,	// G_UMULO
    0U,	// G_SMULO
    0U,	// G_UMULH
    0U,	// G_SMULH
    0U,	// G_UADDSAT
    0U,	// G_SADDSAT
    0U,	// G_USUBSAT
    0U,	// G_SSUBSAT
    0U,	// G_USHLSAT
    0U,	// G_SSHLSAT
    0U,	// G_SMULFIX
    0U,	// G_UMULFIX
    0U,	// G_SMULFIXSAT
    0U,	// G_UMULFIXSAT
    0U,	// G_SDIVFIX
    0U,	// G_UDIVFIX
    0U,	// G_SDIVFIXSAT
    0U,	// G_UDIVFIXSAT
    0U,	// G_FADD
    0U,	// G_FSUB
    0U,	// G_FMUL
    0U,	// G_FMA
    0U,	// G_FMAD
    0U,	// G_FDIV
    0U,	// G_FREM
    0U,	// G_FMODF
    0U,	// G_FPOW
    0U,	// G_FPOWI
    0U,	// G_FEXP
    0U,	// G_FEXP2
    0U,	// G_FEXP10
    0U,	// G_FLOG
    0U,	// G_FLOG2
    0U,	// G_FLOG10
    0U,	// G_FLDEXP
    0U,	// G_FFREXP
    0U,	// G_FNEG
    0U,	// G_FPEXT
    0U,	// G_FPTRUNC
    0U,	// G_FPTOSI
    0U,	// G_FPTOUI
    0U,	// G_SITOFP
    0U,	// G_UITOFP
    0U,	// G_FPTOSI_SAT
    0U,	// G_FPTOUI_SAT
    0U,	// G_FABS
    0U,	// G_FCOPYSIGN
    0U,	// G_IS_FPCLASS
    0U,	// G_FCANONICALIZE
    0U,	// G_FMINNUM
    0U,	// G_FMAXNUM
    0U,	// G_FMINNUM_IEEE
    0U,	// G_FMAXNUM_IEEE
    0U,	// G_FMINIMUM
    0U,	// G_FMAXIMUM
    0U,	// G_FMINIMUMNUM
    0U,	// G_FMAXIMUMNUM
    0U,	// G_GET_FPENV
    0U,	// G_SET_FPENV
    0U,	// G_RESET_FPENV
    0U,	// G_GET_FPMODE
    0U,	// G_SET_FPMODE
    0U,	// G_RESET_FPMODE
    0U,	// G_GET_ROUNDING
    0U,	// G_SET_ROUNDING
    0U,	// G_PTR_ADD
    0U,	// G_PTRMASK
    0U,	// G_SMIN
    0U,	// G_SMAX
    0U,	// G_UMIN
    0U,	// G_UMAX
    0U,	// G_ABS
    0U,	// G_LROUND
    0U,	// G_LLROUND
    0U,	// G_BR
    0U,	// G_BRJT
    0U,	// G_VSCALE
    0U,	// G_INSERT_SUBVECTOR
    0U,	// G_EXTRACT_SUBVECTOR
    0U,	// G_INSERT_VECTOR_ELT
    0U,	// G_EXTRACT_VECTOR_ELT
    0U,	// G_SHUFFLE_VECTOR
    0U,	// G_SPLAT_VECTOR
    0U,	// G_STEP_VECTOR
    0U,	// G_VECTOR_COMPRESS
    0U,	// G_CTTZ
    0U,	// G_CTTZ_ZERO_UNDEF
    0U,	// G_CTLZ
    0U,	// G_CTLZ_ZERO_UNDEF
    0U,	// G_CTPOP
    0U,	// G_BSWAP
    0U,	// G_BITREVERSE
    0U,	// G_FCEIL
    0U,	// G_FCOS
    0U,	// G_FSIN
    0U,	// G_FSINCOS
    0U,	// G_FTAN
    0U,	// G_FACOS
    0U,	// G_FASIN
    0U,	// G_FATAN
    0U,	// G_FATAN2
    0U,	// G_FCOSH
    0U,	// G_FSINH
    0U,	// G_FTANH
    0U,	// G_FSQRT
    0U,	// G_FFLOOR
    0U,	// G_FRINT
    0U,	// G_FNEARBYINT
    0U,	// G_ADDRSPACE_CAST
    0U,	// G_BLOCK_ADDR
    0U,	// G_JUMP_TABLE
    0U,	// G_DYN_STACKALLOC
    0U,	// G_STACKSAVE
    0U,	// G_STACKRESTORE
    0U,	// G_STRICT_FADD
    0U,	// G_STRICT_FSUB
    0U,	// G_STRICT_FMUL
    0U,	// G_STRICT_FDIV
    0U,	// G_STRICT_FREM
    0U,	// G_STRICT_FMA
    0U,	// G_STRICT_FSQRT
    0U,	// G_STRICT_FLDEXP
    0U,	// G_READ_REGISTER
    0U,	// G_WRITE_REGISTER
    0U,	// G_MEMCPY
    0U,	// G_MEMCPY_INLINE
    0U,	// G_MEMMOVE
    0U,	// G_MEMSET
    0U,	// G_BZERO
    0U,	// G_TRAP
    0U,	// G_DEBUGTRAP
    0U,	// G_UBSANTRAP
    0U,	// G_VECREDUCE_SEQ_FADD
    0U,	// G_VECREDUCE_SEQ_FMUL
    0U,	// G_VECREDUCE_FADD
    0U,	// G_VECREDUCE_FMUL
    0U,	// G_VECREDUCE_FMAX
    0U,	// G_VECREDUCE_FMIN
    0U,	// G_VECREDUCE_FMAXIMUM
    0U,	// G_VECREDUCE_FMINIMUM
    0U,	// G_VECREDUCE_ADD
    0U,	// G_VECREDUCE_MUL
    0U,	// G_VECREDUCE_AND
    0U,	// G_VECREDUCE_OR
    0U,	// G_VECREDUCE_XOR
    0U,	// G_VECREDUCE_SMAX
    0U,	// G_VECREDUCE_SMIN
    0U,	// G_VECREDUCE_UMAX
    0U,	// G_VECREDUCE_UMIN
    0U,	// G_SBFX
    0U,	// G_UBFX
    1060U,	// ADJCALLSTACKDOWN
    1096U,	// ADJCALLSTACKUP
    9217U,	// FI_ri
    0U,	// LDIMM64
    17430U,	// MEMCPY
    1074231U,	// Select
    1074231U,	// Select_32
    1074231U,	// Select_32_64
    1074231U,	// Select_64_32
    1074231U,	// Select_Ri
    1074231U,	// Select_Ri_32
    1074231U,	// Select_Ri_32_64
    1074231U,	// Select_Ri_64_32
    33797U,	// ADDR_SPACE_CAST
    41989U,	// ADD_ri
    41989U,	// ADD_ri_32
    41989U,	// ADD_rr
    41989U,	// ADD_rr_32
    50181U,	// AND_ri
    50181U,	// AND_ri_32
    50181U,	// AND_rr
    50181U,	// AND_rr_32
    58373U,	// BE16
    66565U,	// BE32
    74757U,	// BE64
    82949U,	// BSWAP16
    91141U,	// BSWAP32
    99333U,	// BSWAP64
    108833U,	// CMPXCHGD
    117006U,	// CMPXCHGW32
    123909U,	// CORE_LD32
    132101U,	// CORE_LD64
    140293U,	// CORE_SHIFT
    6300978U,	// CORE_ST
    148485U,	// DIV_ri
    148485U,	// DIV_ri_32
    148485U,	// DIV_rr
    148485U,	// DIV_rr_32
    156765U,	// JAL
    156788U,	// JALX
    3178U,	// JCOND
    164953U,	// JEQ_ri
    164953U,	// JEQ_ri_32
    164953U,	// JEQ_rr
    164953U,	// JEQ_rr_32
    3182U,	// JMP
    3171U,	// JMPL
    173145U,	// JNE_ri
    173145U,	// JNE_ri_32
    173145U,	// JNE_rr
    173145U,	// JNE_rr_32
    181337U,	// JSET_ri
    181337U,	// JSET_ri_32
    181337U,	// JSET_rr
    181337U,	// JSET_rr_32
    189529U,	// JSGE_ri
    189529U,	// JSGE_ri_32
    189529U,	// JSGE_rr
    189529U,	// JSGE_rr_32
    197721U,	// JSGT_ri
    197721U,	// JSGT_ri_32
    197721U,	// JSGT_rr
    197721U,	// JSGT_rr_32
    205913U,	// JSLE_ri
    205913U,	// JSLE_ri_32
    205913U,	// JSLE_rr
    205913U,	// JSLE_rr_32
    214105U,	// JSLT_ri
    214105U,	// JSLT_ri_32
    214105U,	// JSLT_rr
    214105U,	// JSLT_rr_32
    222297U,	// JUGE_ri
    222297U,	// JUGE_ri_32
    222297U,	// JUGE_rr
    222297U,	// JUGE_rr_32
    230489U,	// JUGT_ri
    230489U,	// JUGT_ri_32
    230489U,	// JUGT_rr
    230489U,	// JUGT_rr_32
    238681U,	// JULE_ri
    238681U,	// JULE_ri_32
    238681U,	// JULE_rr
    238681U,	// JULE_rr_32
    246873U,	// JULT_ri
    246873U,	// JULT_ri_32
    246873U,	// JULT_rr
    246873U,	// JULT_rr_32
    156795U,	// JX
    254981U,	// LDB
    254981U,	// LDB32
    263173U,	// LDBACQ32
    271365U,	// LDBSX
    279557U,	// LDD
    287749U,	// LDDACQ
    295941U,	// LDH
    295941U,	// LDH32
    304133U,	// LDHACQ32
    312325U,	// LDHSX
    320517U,	// LDW
    320517U,	// LDW32
    328709U,	// LDWACQ32
    336901U,	// LDWSX
    345701U,	// LD_ABS_B
    345683U,	// LD_ABS_H
    345665U,	// LD_ABS_W
    345701U,	// LD_IND_B
    345683U,	// LD_IND_H
    345665U,	// LD_IND_W
    10511365U,	// LD_imm64
    22029318U,	// LD_pseudo
    353285U,	// LE16
    361477U,	// LE32
    369669U,	// LE64
    377861U,	// MOD_ri
    377861U,	// MOD_ri_32
    377861U,	// MOD_rr
    377861U,	// MOD_rr_32
    386053U,	// MOVSX_rr_16
    394245U,	// MOVSX_rr_32
    386053U,	// MOVSX_rr_32_16
    402437U,	// MOVSX_rr_32_8
    402437U,	// MOVSX_rr_8
    13657093U,	// MOV_32_64
    13657093U,	// MOV_ri
    13657093U,	// MOV_ri_32
    13657093U,	// MOV_rr
    13657093U,	// MOV_rr_32
    410629U,	// MUL_ri
    410629U,	// MUL_ri_32
    410629U,	// MUL_rr
    410629U,	// MUL_rr_32
    418821U,	// NEG_32
    418821U,	// NEG_64
    156689U,	// NOP
    427013U,	// OR_ri
    427013U,	// OR_ri_32
    427013U,	// OR_rr
    427013U,	// OR_rr_32
    644U,	// RET
    435205U,	// SDIV_ri
    435205U,	// SDIV_ri_32
    435205U,	// SDIV_rr
    435205U,	// SDIV_rr_32
    443397U,	// SLL_ri
    443397U,	// SLL_ri_32
    443397U,	// SLL_rr
    443397U,	// SLL_rr_32
    451589U,	// SMOD_ri
    451589U,	// SMOD_ri_32
    451589U,	// SMOD_rr
    451589U,	// SMOD_rr_32
    459781U,	// SRA_ri
    459781U,	// SRA_ri_32
    459781U,	// SRA_rr
    459781U,	// SRA_rr_32
    467973U,	// SRL_ri
    467973U,	// SRL_ri_32
    467973U,	// SRL_rr
    467973U,	// SRL_rr_32
    479493U,	// STB
    479493U,	// STB32
    487663U,	// STBREL32
    479493U,	// STB_imm
    479428U,	// STD
    487592U,	// STDREL
    479428U,	// STD_imm
    479461U,	// STH
    479461U,	// STH32
    487630U,	// STHREL32
    479461U,	// STH_imm
    479390U,	// STW
    479390U,	// STW32
    487554U,	// STWREL32
    479390U,	// STW_imm
    492549U,	// SUB_ri
    492549U,	// SUB_ri_32
    492549U,	// SUB_rr
    492549U,	// SUB_rr_32
    503999U,	// XADDD
    503961U,	// XADDW
    503961U,	// XADDW32
    512191U,	// XANDD
    512153U,	// XANDW32
    517125U,	// XCHGD
    525317U,	// XCHGW32
    533509U,	// XFADDD
    541701U,	// XFADDW32
    549893U,	// XFANDD
    558085U,	// XFANDW32
    566277U,	// XFORD
    574469U,	// XFORW32
    582661U,	// XFXORD
    590853U,	// XFXORW32
    602303U,	// XORD
    602265U,	// XORW32
    607237U,	// XOR_ri
    607237U,	// XOR_ri_32
    607237U,	// XOR_rr
    607237U,	// XOR_rr_32
    618687U,	// XXORD
    618649U,	// XXORW32
  };

  // Emit the opcode for the instruction.
  uint32_t Bits = 0;
  Bits |= OpInfo0[MI.getOpcode()] << 0;
  if (Bits == 0)
    return {nullptr, Bits};
  return {AsmStrs+(Bits & 1023)-1, Bits};

}
/// printInstruction - This method is automatically generated by tablegen
/// from the instruction set description.
LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
void BPFInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
  O << "\t";

  auto MnemonicInfo = getMnemonic(*MI);

  O << MnemonicInfo.first;

  uint32_t Bits = MnemonicInfo.second;
  assert(Bits != 0 && "Cannot print this instruction.");

  // Fragment 0 encoded into 3 bits for 5 unique commands.
  switch ((Bits >> 10) & 7) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
    return;
    break;
  case 1:
    // ADJCALLSTACKDOWN, ADJCALLSTACKUP, FI_ri, MEMCPY, Select, Select_32, Se...
    printOperand(MI, 0, O);
    break;
  case 2:
    // CMPXCHGD, CMPXCHGW32
    printMemOperand(MI, 0, O);
    break;
  case 3:
    // JCOND, JMP, JMPL
    printBrTargetOperand(MI, 0, O);
    return;
    break;
  case 4:
    // STB, STB32, STBREL32, STB_imm, STD, STDREL, STD_imm, STH, STH32, STHRE...
    printMemOperand(MI, 1, O);
    break;
  }


  // Fragment 1 encoded into 7 bits for 76 unique commands.
  switch ((Bits >> 13) & 127) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // ADJCALLSTACKDOWN, ADJCALLSTACKUP
    O << ' ';
    printOperand(MI, 1, O);
    return;
    break;
  case 1:
    // FI_ri, CORE_ST, LD_pseudo
    O << ", ";
    break;
  case 2:
    // MEMCPY
    O << ", src: ";
    printOperand(MI, 1, O);
    O << ", len: ";
    printOperand(MI, 2, O);
    O << ", align: ";
    printOperand(MI, 3, O);
    return;
    break;
  case 3:
    // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
    O << " = ";
    break;
  case 4:
    // ADDR_SPACE_CAST
    O << " = addr_space_cast(";
    printOperand(MI, 1, O);
    O << ", ";
    printOperand(MI, 2, O);
    O << ", ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 5:
    // ADD_ri, ADD_ri_32, ADD_rr, ADD_rr_32
    O << " += ";
    printOperand(MI, 2, O);
    return;
    break;
  case 6:
    // AND_ri, AND_ri_32, AND_rr, AND_rr_32
    O << " &= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 7:
    // BE16
    O << " = be16 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 8:
    // BE32
    O << " = be32 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 9:
    // BE64
    O << " = be64 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 10:
    // BSWAP16
    O << " = bswap16 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 11:
    // BSWAP32
    O << " = bswap32 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 12:
    // BSWAP64
    O << " = bswap64 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 13:
    // CMPXCHGD
    O << ", r0, ";
    printOperand(MI, 2, O);
    O << ')';
    return;
    break;
  case 14:
    // CMPXCHGW32
    O << ", w0, ";
    printOperand(MI, 2, O);
    O << ')';
    return;
    break;
  case 15:
    // CORE_LD32
    O << " = core_ld32(";
    printImm64Operand(MI, 1, O);
    O << ", ";
    printOperand(MI, 2, O);
    O << ", ";
    printImm64Operand(MI, 3, O);
    O << ')';
    return;
    break;
  case 16:
    // CORE_LD64
    O << " = core_ld64(";
    printImm64Operand(MI, 1, O);
    O << ", ";
    printOperand(MI, 2, O);
    O << ", ";
    printImm64Operand(MI, 3, O);
    O << ')';
    return;
    break;
  case 17:
    // CORE_SHIFT
    O << " = core_shift(";
    printImm64Operand(MI, 1, O);
    O << ", ";
    printOperand(MI, 2, O);
    O << ", ";
    printImm64Operand(MI, 3, O);
    O << ')';
    return;
    break;
  case 18:
    // DIV_ri, DIV_ri_32, DIV_rr, DIV_rr_32
    O << " /= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 19:
    // JAL, JALX, JX, NOP
    return;
    break;
  case 20:
    // JEQ_ri, JEQ_ri_32, JEQ_rr, JEQ_rr_32
    O << " == ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 21:
    // JNE_ri, JNE_ri_32, JNE_rr, JNE_rr_32
    O << " != ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 22:
    // JSET_ri, JSET_ri_32, JSET_rr, JSET_rr_32
    O << " & ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 23:
    // JSGE_ri, JSGE_ri_32, JSGE_rr, JSGE_rr_32
    O << " s>= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 24:
    // JSGT_ri, JSGT_ri_32, JSGT_rr, JSGT_rr_32
    O << " s> ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 25:
    // JSLE_ri, JSLE_ri_32, JSLE_rr, JSLE_rr_32
    O << " s<= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 26:
    // JSLT_ri, JSLT_ri_32, JSLT_rr, JSLT_rr_32
    O << " s< ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 27:
    // JUGE_ri, JUGE_ri_32, JUGE_rr, JUGE_rr_32
    O << " >= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 28:
    // JUGT_ri, JUGT_ri_32, JUGT_rr, JUGT_rr_32
    O << " > ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 29:
    // JULE_ri, JULE_ri_32, JULE_rr, JULE_rr_32
    O << " <= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 30:
    // JULT_ri, JULT_ri_32, JULT_rr, JULT_rr_32
    O << " < ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 31:
    // LDB, LDB32
    O << " = *(u8 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 32:
    // LDBACQ32
    O << " = load_acquire((u8 *)(";
    printMemOperand(MI, 1, O);
    O << "))";
    return;
    break;
  case 33:
    // LDBSX
    O << " = *(s8 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 34:
    // LDD
    O << " = *(u64 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 35:
    // LDDACQ
    O << " = load_acquire((u64 *)(";
    printMemOperand(MI, 1, O);
    O << "))";
    return;
    break;
  case 36:
    // LDH, LDH32
    O << " = *(u16 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 37:
    // LDHACQ32
    O << " = load_acquire((u16 *)(";
    printMemOperand(MI, 1, O);
    O << "))";
    return;
    break;
  case 38:
    // LDHSX
    O << " = *(s16 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 39:
    // LDW, LDW32
    O << " = *(u32 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 40:
    // LDWACQ32
    O << " = load_acquire((u32 *)(";
    printMemOperand(MI, 1, O);
    O << "))";
    return;
    break;
  case 41:
    // LDWSX
    O << " = *(s32 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 42:
    // LD_ABS_B, LD_ABS_H, LD_ABS_W, LD_IND_B, LD_IND_H, LD_IND_W
    O << ']';
    return;
    break;
  case 43:
    // LE16
    O << " = le16 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 44:
    // LE32
    O << " = le32 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 45:
    // LE64
    O << " = le64 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 46:
    // MOD_ri, MOD_ri_32, MOD_rr, MOD_rr_32
    O << " %= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 47:
    // MOVSX_rr_16, MOVSX_rr_32_16
    O << " = (s16)";
    printOperand(MI, 1, O);
    return;
    break;
  case 48:
    // MOVSX_rr_32
    O << " = (s32)";
    printOperand(MI, 1, O);
    return;
    break;
  case 49:
    // MOVSX_rr_32_8, MOVSX_rr_8
    O << " = (s8)";
    printOperand(MI, 1, O);
    return;
    break;
  case 50:
    // MUL_ri, MUL_ri_32, MUL_rr, MUL_rr_32
    O << " *= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 51:
    // NEG_32, NEG_64
    O << " = -";
    printOperand(MI, 1, O);
    return;
    break;
  case 52:
    // OR_ri, OR_ri_32, OR_rr, OR_rr_32
    O << " |= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 53:
    // SDIV_ri, SDIV_ri_32, SDIV_rr, SDIV_rr_32
    O << " s/= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 54:
    // SLL_ri, SLL_ri_32, SLL_rr, SLL_rr_32
    O << " <<= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 55:
    // SMOD_ri, SMOD_ri_32, SMOD_rr, SMOD_rr_32
    O << " s%= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 56:
    // SRA_ri, SRA_ri_32, SRA_rr, SRA_rr_32
    O << " s>>= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 57:
    // SRL_ri, SRL_ri_32, SRL_rr, SRL_rr_32
    O << " >>= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 58:
    // STB, STB32, STB_imm, STD, STD_imm, STH, STH32, STH_imm, STW, STW32, ST...
    O << ") = ";
    printOperand(MI, 0, O);
    return;
    break;
  case 59:
    // STBREL32, STDREL, STHREL32, STWREL32
    O << "), ";
    printOperand(MI, 0, O);
    O << ')';
    return;
    break;
  case 60:
    // SUB_ri, SUB_ri_32, SUB_rr, SUB_rr_32
    O << " -= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 61:
    // XADDD, XADDW, XADDW32
    O << ") += ";
    printOperand(MI, 3, O);
    return;
    break;
  case 62:
    // XANDD, XANDW32
    O << ") &= ";
    printOperand(MI, 3, O);
    return;
    break;
  case 63:
    // XCHGD
    O << " = xchg_64(";
    printMemOperand(MI, 1, O);
    O << ", ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 64:
    // XCHGW32
    O << " = xchg32_32(";
    printMemOperand(MI, 1, O);
    O << ", ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 65:
    // XFADDD
    O << " = atomic_fetch_add((u64 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 66:
    // XFADDW32
    O << " = atomic_fetch_add((u32 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 67:
    // XFANDD
    O << " = atomic_fetch_and((u64 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 68:
    // XFANDW32
    O << " = atomic_fetch_and((u32 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 69:
    // XFORD
    O << " = atomic_fetch_or((u64 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 70:
    // XFORW32
    O << " = atomic_fetch_or((u32 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 71:
    // XFXORD
    O << " = atomic_fetch_xor((u64 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 72:
    // XFXORW32
    O << " = atomic_fetch_xor((u32 *)(";
    printMemOperand(MI, 1, O);
    O << "), ";
    printOperand(MI, 3, O);
    O << ')';
    return;
    break;
  case 73:
    // XORD, XORW32
    O << ") |= ";
    printOperand(MI, 3, O);
    return;
    break;
  case 74:
    // XOR_ri, XOR_ri_32, XOR_rr, XOR_rr_32
    O << " ^= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 75:
    // XXORD, XXORW32
    O << ") ^= ";
    printOperand(MI, 3, O);
    return;
    break;
  }


  // Fragment 2 encoded into 2 bits for 3 unique commands.
  switch ((Bits >> 20) & 3) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // FI_ri
    printMemOperand(MI, 1, O);
    return;
    break;
  case 1:
    // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
    printOperand(MI, 1, O);
    break;
  case 2:
    // CORE_ST, LD_imm64
    printImm64Operand(MI, 1, O);
    break;
  }


  // Fragment 3 encoded into 2 bits for 4 unique commands.
  switch ((Bits >> 22) & 3) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
    O << ' ';
    printOperand(MI, 3, O);
    O << ' ';
    printOperand(MI, 2, O);
    O << " ? ";
    printOperand(MI, 4, O);
    O << " : ";
    printOperand(MI, 5, O);
    return;
    break;
  case 1:
    // CORE_ST, LD_pseudo
    O << ", ";
    break;
  case 2:
    // LD_imm64
    O << " ll";
    return;
    break;
  case 3:
    // MOV_32_64, MOV_ri, MOV_ri_32, MOV_rr, MOV_rr_32
    return;
    break;
  }


  // Fragment 4 encoded into 1 bits for 2 unique commands.
  if ((Bits >> 24) & 1) {
    // LD_pseudo
    printImm64Operand(MI, 2, O);
    return;
  } else {
    // CORE_ST
    printOperand(MI, 2, O);
    O << ", ";
    printImm64Operand(MI, 3, O);
    O << ')';
    return;
  }

}


/// getRegisterName - This method is automatically generated by tblgen
/// from the register set description.  This returns the assembler name
/// for the specified register.
const char *BPFInstPrinter::getRegisterName(MCRegister Reg) {
  unsigned RegNo = Reg.id();
  assert(RegNo && RegNo < 25 && "Invalid register number!");


#ifdef __GNUC__
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Woverlength-strings"
#endif
  static const char AsmStrs[] = {
  /* 0 */ "r10\000"
  /* 4 */ "w10\000"
  /* 8 */ "r0\000"
  /* 11 */ "w0\000"
  /* 14 */ "r11\000"
  /* 18 */ "w11\000"
  /* 22 */ "r1\000"
  /* 25 */ "w1\000"
  /* 28 */ "r2\000"
  /* 31 */ "w2\000"
  /* 34 */ "r3\000"
  /* 37 */ "w3\000"
  /* 40 */ "r4\000"
  /* 43 */ "w4\000"
  /* 46 */ "r5\000"
  /* 49 */ "w5\000"
  /* 52 */ "r6\000"
  /* 55 */ "w6\000"
  /* 58 */ "r7\000"
  /* 61 */ "w7\000"
  /* 64 */ "r8\000"
  /* 67 */ "w8\000"
  /* 70 */ "r9\000"
  /* 73 */ "w9\000"
};
#ifdef __GNUC__
#pragma GCC diagnostic pop
#endif

  static const uint8_t RegAsmOffset[] = {
    8, 22, 28, 34, 40, 46, 52, 58, 64, 70, 0, 14, 11, 25, 
    31, 37, 43, 49, 55, 61, 67, 73, 4, 18, 
  };

  assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
          "Invalid alt name index for register!");
  return AsmStrs+RegAsmOffset[RegNo-1];
}

#ifdef PRINT_ALIAS_INSTR
#undef PRINT_ALIAS_INSTR

bool BPFInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
  return false;
}

#endif // PRINT_ALIAS_INSTR
