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

/// printInstruction - This method is automatically generated by tablegen
/// from the instruction set description.
void BPFInstPrinter::printInstruction(const MCInst *MI, raw_ostream &O) {
  static const char AsmStrs[] = {
  /* 0 */ 'l', 'e', 'a', 9, 0,
  /* 5 */ 'l', 'd', '_', 'p', 's', 'e', 'u', 'd', 'o', 9, 0,
  /* 16 */ 'n', 'o', 'p', 9, 0,
  /* 21 */ '#', 'm', 'e', 'm', 'c', 'p', 'y', 32, 'd', 's', 't', ':', 32, 0,
  /* 35 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0,
  /* 54 */ '#', 32, 'S', 'e', 'l', 'e', 'c', 't', 32, 'P', 'S', 'E', 'U', 'D', 'O', 32, 0,
  /* 71 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0,
  /* 88 */ 'i', 'f', 32, 0,
  /* 92 */ 'c', 'a', 'l', 'l', 32, 0,
  /* 98 */ 'g', 'o', 't', 'o', 32, 0,
  /* 104 */ 'c', 'a', 'l', 'l', 'x', 32, 0,
  /* 111 */ 'l', 'o', 'c', 'k', 32, '*', '(', 'u', '3', '2', 32, '*', ')', '(', 0,
  /* 126 */ 'l', 'o', 'c', 'k', 32, '*', '(', 'u', '6', '4', 32, '*', ')', '(', 0,
  /* 141 */ '*', '(', 'u', '1', '6', 32, '*', ')', '(', 0,
  /* 151 */ '*', '(', 'u', '8', 32, '*', ')', '(', 0,
  /* 160 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'P', 'a', 't', 'c', 'h', 'a', 'b', 'l', 'e', 32, 'R', 'E', 'T', '.', 0,
  /* 191 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'y', 'p', 'e', 'd', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
  /* 215 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'C', 'u', 's', 't', 'o', 'm', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
  /* 240 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'n', 't', 'e', 'r', '.', 0,
  /* 263 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'a', 'i', 'l', 32, 'C', 'a', 'l', 'l', 32, 'E', 'x', 'i', 't', '.', 0,
  /* 286 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'x', 'i', 't', '.', 0,
  /* 308 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
  /* 321 */ 'B', 'U', 'N', 'D', 'L', 'E', 0,
  /* 328 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
  /* 338 */ 'D', 'B', 'G', '_', 'L', 'A', 'B', 'E', 'L', 0,
  /* 348 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
  /* 363 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '3', '2', 32, '*', ')', 's', 'k', 'b', '[', 0,
  /* 381 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '1', '6', 32, '*', ')', 's', 'k', 'b', '[', 0,
  /* 399 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '8', 32, '*', ')', 's', 'k', 'b', '[', 0,
  /* 416 */ '#', 32, 'F', 'E', 'n', 't', 'r', 'y', 32, 'c', 'a', 'l', 'l', 0,
  /* 430 */ 'e', 'x', 'i', 't', 0,
  };

  static const uint16_t OpInfo0[] = {
    0U,	// PHI
    0U,	// INLINEASM
    0U,	// CFI_INSTRUCTION
    0U,	// EH_LABEL
    0U,	// GC_LABEL
    0U,	// ANNOTATION_LABEL
    0U,	// KILL
    0U,	// EXTRACT_SUBREG
    0U,	// INSERT_SUBREG
    0U,	// IMPLICIT_DEF
    0U,	// SUBREG_TO_REG
    0U,	// COPY_TO_REGCLASS
    329U,	// DBG_VALUE
    339U,	// DBG_LABEL
    0U,	// REG_SEQUENCE
    0U,	// COPY
    322U,	// BUNDLE
    349U,	// LIFETIME_START
    309U,	// LIFETIME_END
    0U,	// STACKMAP
    417U,	// FENTRY_CALL
    0U,	// PATCHPOINT
    0U,	// LOAD_STACK_GUARD
    0U,	// STATEPOINT
    0U,	// LOCAL_ESCAPE
    0U,	// FAULTING_OP
    0U,	// PATCHABLE_OP
    241U,	// PATCHABLE_FUNCTION_ENTER
    161U,	// PATCHABLE_RET
    287U,	// PATCHABLE_FUNCTION_EXIT
    264U,	// PATCHABLE_TAIL_CALL
    216U,	// PATCHABLE_EVENT_CALL
    192U,	// PATCHABLE_TYPED_EVENT_CALL
    0U,	// ICALL_BRANCH_FUNNEL
    0U,	// G_ADD
    0U,	// G_SUB
    0U,	// G_MUL
    0U,	// G_SDIV
    0U,	// G_UDIV
    0U,	// G_SREM
    0U,	// G_UREM
    0U,	// G_AND
    0U,	// G_OR
    0U,	// G_XOR
    0U,	// G_IMPLICIT_DEF
    0U,	// G_PHI
    0U,	// G_FRAME_INDEX
    0U,	// G_GLOBAL_VALUE
    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_INTRINSIC_TRUNC
    0U,	// G_INTRINSIC_ROUND
    0U,	// G_LOAD
    0U,	// G_SEXTLOAD
    0U,	// G_ZEXTLOAD
    0U,	// G_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_BRCOND
    0U,	// G_BRINDIRECT
    0U,	// G_INTRINSIC
    0U,	// G_INTRINSIC_W_SIDE_EFFECTS
    0U,	// G_ANYEXT
    0U,	// G_TRUNC
    0U,	// G_CONSTANT
    0U,	// G_FCONSTANT
    0U,	// G_VASTART
    0U,	// G_VAARG
    0U,	// G_SEXT
    0U,	// G_ZEXT
    0U,	// G_SHL
    0U,	// G_LSHR
    0U,	// G_ASHR
    0U,	// G_ICMP
    0U,	// G_FCMP
    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_FADD
    0U,	// G_FSUB
    0U,	// G_FMUL
    0U,	// G_FMA
    0U,	// G_FDIV
    0U,	// G_FREM
    0U,	// G_FPOW
    0U,	// G_FEXP
    0U,	// G_FEXP2
    0U,	// G_FLOG
    0U,	// G_FLOG2
    0U,	// G_FLOG10
    0U,	// G_FNEG
    0U,	// G_FPEXT
    0U,	// G_FPTRUNC
    0U,	// G_FPTOSI
    0U,	// G_FPTOUI
    0U,	// G_SITOFP
    0U,	// G_UITOFP
    0U,	// G_FABS
    0U,	// G_GEP
    0U,	// G_PTR_MASK
    0U,	// G_BR
    0U,	// G_INSERT_VECTOR_ELT
    0U,	// G_EXTRACT_VECTOR_ELT
    0U,	// G_SHUFFLE_VECTOR
    0U,	// G_CTTZ
    0U,	// G_CTTZ_ZERO_UNDEF
    0U,	// G_CTLZ
    0U,	// G_CTLZ_ZERO_UNDEF
    0U,	// G_CTPOP
    0U,	// G_BSWAP
    0U,	// G_FCEIL
    0U,	// G_ADDRSPACE_CAST
    0U,	// G_BLOCK_ADDR
    548U,	// ADJCALLSTACKDOWN
    584U,	// ADJCALLSTACKUP
    4630U,	// MEMCPY
    8759U,	// Select
    8759U,	// Select_32
    8759U,	// Select_32_64
    8759U,	// Select_64_32
    8759U,	// Select_Ri
    8759U,	// Select_Ri_32
    8759U,	// Select_Ri_32_64
    8759U,	// Select_Ri_64_32
    12805U,	// ADD_ri
    12805U,	// ADD_ri_32
    12805U,	// ADD_rr
    12805U,	// ADD_rr_32
    16901U,	// AND_ri
    16901U,	// AND_ri_32
    16901U,	// AND_rr
    16901U,	// AND_rr_32
    20997U,	// BE16
    25093U,	// BE32
    29189U,	// BE64
    33285U,	// DIV_ri
    33285U,	// DIV_ri_32
    33285U,	// DIV_rr
    33285U,	// DIV_rr_32
    37377U,	// FI_ri
    41565U,	// JAL
    41577U,	// JALX
    45657U,	// JEQ_ri
    45657U,	// JEQ_rr
    1123U,	// JMP
    49753U,	// JNE_ri
    49753U,	// JNE_rr
    53849U,	// JSGE_ri
    53849U,	// JSGE_rr
    57945U,	// JSGT_ri
    57945U,	// JSGT_rr
    62041U,	// JSLE_ri
    62041U,	// JSLE_rr
    601U,	// JSLT_ri
    601U,	// JSLT_rr
    4697U,	// JUGE_ri
    4697U,	// JUGE_rr
    8793U,	// JUGT_ri
    8793U,	// JUGT_rr
    12889U,	// JULE_ri
    12889U,	// JULE_rr
    16985U,	// JULT_ri
    16985U,	// JULT_rr
    20997U,	// LDB
    20997U,	// LDB32
    25093U,	// LDD
    29189U,	// LDH
    29189U,	// LDH32
    33285U,	// LDW
    33285U,	// LDW32
    1936U,	// LD_ABS_B
    1918U,	// LD_ABS_H
    1900U,	// LD_ABS_W
    1936U,	// LD_IND_B
    1918U,	// LD_IND_H
    1900U,	// LD_IND_W
    8709U,	// LD_imm64
    37382U,	// LD_pseudo
    37381U,	// LE16
    41477U,	// LE32
    45573U,	// LE64
    8709U,	// MOV_32_64
    8709U,	// MOV_ri
    8709U,	// MOV_ri_32
    8709U,	// MOV_rr
    8709U,	// MOV_rr_32
    49669U,	// MUL_ri
    49669U,	// MUL_ri_32
    49669U,	// MUL_rr
    49669U,	// MUL_rr_32
    53765U,	// NEG_32
    53765U,	// NEG_64
    41489U,	// NOP
    57861U,	// OR_ri
    57861U,	// OR_ri_32
    57861U,	// OR_rr
    57861U,	// OR_rr_32
    431U,	// RET
    61957U,	// SLL_ri
    61957U,	// SLL_ri_32
    61957U,	// SLL_rr
    61957U,	// SLL_rr_32
    517U,	// SRA_ri
    517U,	// SRA_ri_32
    517U,	// SRA_rr
    517U,	// SRA_rr_32
    4613U,	// SRL_ri
    4613U,	// SRL_ri_32
    4613U,	// SRL_rr
    4613U,	// SRL_rr_32
    10392U,	// STB
    10392U,	// STB32
    10372U,	// STD
    10382U,	// STH
    10382U,	// STH32
    10357U,	// STW
    10357U,	// STW32
    12805U,	// SUB_ri
    12805U,	// SUB_ri_32
    12805U,	// SUB_rr
    12805U,	// SUB_rr_32
    18544U,	// XADD32
    18559U,	// XADD64
    20997U,	// XOR_ri
    20997U,	// XOR_ri_32
    20997U,	// XOR_rr
    20997U,	// XOR_rr_32
  };

  static const uint8_t OpInfo1[] = {
    0U,	// PHI
    0U,	// INLINEASM
    0U,	// CFI_INSTRUCTION
    0U,	// EH_LABEL
    0U,	// GC_LABEL
    0U,	// ANNOTATION_LABEL
    0U,	// KILL
    0U,	// EXTRACT_SUBREG
    0U,	// INSERT_SUBREG
    0U,	// IMPLICIT_DEF
    0U,	// SUBREG_TO_REG
    0U,	// COPY_TO_REGCLASS
    0U,	// DBG_VALUE
    0U,	// DBG_LABEL
    0U,	// REG_SEQUENCE
    0U,	// COPY
    0U,	// BUNDLE
    0U,	// LIFETIME_START
    0U,	// LIFETIME_END
    0U,	// STACKMAP
    0U,	// FENTRY_CALL
    0U,	// PATCHPOINT
    0U,	// LOAD_STACK_GUARD
    0U,	// STATEPOINT
    0U,	// LOCAL_ESCAPE
    0U,	// FAULTING_OP
    0U,	// PATCHABLE_OP
    0U,	// PATCHABLE_FUNCTION_ENTER
    0U,	// PATCHABLE_RET
    0U,	// PATCHABLE_FUNCTION_EXIT
    0U,	// PATCHABLE_TAIL_CALL
    0U,	// PATCHABLE_EVENT_CALL
    0U,	// PATCHABLE_TYPED_EVENT_CALL
    0U,	// ICALL_BRANCH_FUNNEL
    0U,	// G_ADD
    0U,	// G_SUB
    0U,	// G_MUL
    0U,	// G_SDIV
    0U,	// G_UDIV
    0U,	// G_SREM
    0U,	// G_UREM
    0U,	// G_AND
    0U,	// G_OR
    0U,	// G_XOR
    0U,	// G_IMPLICIT_DEF
    0U,	// G_PHI
    0U,	// G_FRAME_INDEX
    0U,	// G_GLOBAL_VALUE
    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_INTRINSIC_TRUNC
    0U,	// G_INTRINSIC_ROUND
    0U,	// G_LOAD
    0U,	// G_SEXTLOAD
    0U,	// G_ZEXTLOAD
    0U,	// G_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_BRCOND
    0U,	// G_BRINDIRECT
    0U,	// G_INTRINSIC
    0U,	// G_INTRINSIC_W_SIDE_EFFECTS
    0U,	// G_ANYEXT
    0U,	// G_TRUNC
    0U,	// G_CONSTANT
    0U,	// G_FCONSTANT
    0U,	// G_VASTART
    0U,	// G_VAARG
    0U,	// G_SEXT
    0U,	// G_ZEXT
    0U,	// G_SHL
    0U,	// G_LSHR
    0U,	// G_ASHR
    0U,	// G_ICMP
    0U,	// G_FCMP
    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_FADD
    0U,	// G_FSUB
    0U,	// G_FMUL
    0U,	// G_FMA
    0U,	// G_FDIV
    0U,	// G_FREM
    0U,	// G_FPOW
    0U,	// G_FEXP
    0U,	// G_FEXP2
    0U,	// G_FLOG
    0U,	// G_FLOG2
    0U,	// G_FLOG10
    0U,	// G_FNEG
    0U,	// G_FPEXT
    0U,	// G_FPTRUNC
    0U,	// G_FPTOSI
    0U,	// G_FPTOUI
    0U,	// G_SITOFP
    0U,	// G_UITOFP
    0U,	// G_FABS
    0U,	// G_GEP
    0U,	// G_PTR_MASK
    0U,	// G_BR
    0U,	// G_INSERT_VECTOR_ELT
    0U,	// G_EXTRACT_VECTOR_ELT
    0U,	// G_SHUFFLE_VECTOR
    0U,	// G_CTTZ
    0U,	// G_CTTZ_ZERO_UNDEF
    0U,	// G_CTLZ
    0U,	// G_CTLZ_ZERO_UNDEF
    0U,	// G_CTPOP
    0U,	// G_BSWAP
    0U,	// G_FCEIL
    0U,	// G_ADDRSPACE_CAST
    0U,	// G_BLOCK_ADDR
    0U,	// ADJCALLSTACKDOWN
    0U,	// ADJCALLSTACKUP
    0U,	// MEMCPY
    0U,	// Select
    0U,	// Select_32
    0U,	// Select_32_64
    0U,	// Select_64_32
    0U,	// Select_Ri
    0U,	// Select_Ri_32
    0U,	// Select_Ri_32_64
    0U,	// Select_Ri_64_32
    0U,	// ADD_ri
    0U,	// ADD_ri_32
    0U,	// ADD_rr
    0U,	// ADD_rr_32
    0U,	// AND_ri
    0U,	// AND_ri_32
    0U,	// AND_rr
    0U,	// AND_rr_32
    0U,	// BE16
    0U,	// BE32
    0U,	// BE64
    0U,	// DIV_ri
    0U,	// DIV_ri_32
    0U,	// DIV_rr
    0U,	// DIV_rr_32
    4U,	// FI_ri
    0U,	// JAL
    0U,	// JALX
    0U,	// JEQ_ri
    0U,	// JEQ_rr
    0U,	// JMP
    0U,	// JNE_ri
    0U,	// JNE_rr
    0U,	// JSGE_ri
    0U,	// JSGE_rr
    0U,	// JSGT_ri
    0U,	// JSGT_rr
    0U,	// JSLE_ri
    0U,	// JSLE_rr
    1U,	// JSLT_ri
    1U,	// JSLT_rr
    1U,	// JUGE_ri
    1U,	// JUGE_rr
    1U,	// JUGT_ri
    1U,	// JUGT_rr
    1U,	// JULE_ri
    1U,	// JULE_rr
    1U,	// JULT_ri
    1U,	// JULT_rr
    1U,	// LDB
    1U,	// LDB32
    1U,	// LDD
    1U,	// LDH
    1U,	// LDH32
    1U,	// LDW
    1U,	// LDW32
    0U,	// LD_ABS_B
    0U,	// LD_ABS_H
    0U,	// LD_ABS_W
    0U,	// LD_IND_B
    0U,	// LD_IND_H
    0U,	// LD_IND_W
    8U,	// LD_imm64
    16U,	// LD_pseudo
    1U,	// LE16
    1U,	// LE32
    1U,	// LE64
    32U,	// MOV_32_64
    32U,	// MOV_ri
    32U,	// MOV_ri_32
    32U,	// MOV_rr
    32U,	// MOV_rr_32
    1U,	// MUL_ri
    1U,	// MUL_ri_32
    1U,	// MUL_rr
    1U,	// MUL_rr_32
    1U,	// NEG_32
    1U,	// NEG_64
    0U,	// NOP
    1U,	// OR_ri
    1U,	// OR_ri_32
    1U,	// OR_rr
    1U,	// OR_rr_32
    0U,	// RET
    1U,	// SLL_ri
    1U,	// SLL_ri_32
    1U,	// SLL_rr
    1U,	// SLL_rr_32
    2U,	// SRA_ri
    2U,	// SRA_ri_32
    2U,	// SRA_rr
    2U,	// SRA_rr_32
    2U,	// SRL_ri
    2U,	// SRL_ri_32
    2U,	// SRL_rr
    2U,	// SRL_rr_32
    2U,	// STB
    2U,	// STB32
    2U,	// STD
    2U,	// STH
    2U,	// STH32
    2U,	// STW
    2U,	// STW32
    2U,	// SUB_ri
    2U,	// SUB_ri_32
    2U,	// SUB_rr
    2U,	// SUB_rr_32
    2U,	// XADD32
    2U,	// XADD64
    2U,	// XOR_ri
    2U,	// XOR_ri_32
    2U,	// XOR_rr
    2U,	// XOR_rr_32
  };

  O << "\t";

  // Emit the opcode for the instruction.
  uint32_t Bits = 0;
  Bits |= OpInfo0[MI->getOpcode()] << 0;
  Bits |= OpInfo1[MI->getOpcode()] << 16;
  assert(Bits != 0 && "Cannot print this instruction.");
  O << AsmStrs+(Bits & 511)-1;


  // Fragment 0 encoded into 3 bits for 5 unique commands.
  switch ((Bits >> 9) & 7) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // DBG_VALUE, DBG_LABEL, BUNDLE, LIFETIME_START, LIFETIME_END, FENTRY_CAL...
    return;
    break;
  case 1:
    // ADJCALLSTACKDOWN, ADJCALLSTACKUP, MEMCPY, Select, Select_32, Select_32...
    printOperand(MI, 0, O);
    break;
  case 2:
    // JMP
    printBrTargetOperand(MI, 0, O);
    return;
    break;
  case 3:
    // LD_ABS_B, LD_ABS_H, LD_ABS_W, LD_IND_B, LD_IND_H, LD_IND_W
    printOperand(MI, 1, O);
    O << ']';
    return;
    break;
  case 4:
    // STB, STB32, STD, STH, STH32, STW, STW32, XADD32, XADD64
    printMemOperand(MI, 1, O);
    break;
  }


  // Fragment 1 encoded into 6 bits for 38 unique commands.
  switch ((Bits >> 12) & 63) {
  default: llvm_unreachable("Invalid command number.");
  case 0:
    // ADJCALLSTACKDOWN, ADJCALLSTACKUP
    O << ' ';
    printOperand(MI, 1, O);
    return;
    break;
  case 1:
    // MEMCPY
    O << ", src: ";
    printOperand(MI, 1, O);
    O << ", len: ";
    printOperand(MI, 2, O);
    O << ", align: ";
    printOperand(MI, 3, O);
    return;
    break;
  case 2:
    // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
    O << " = ";
    break;
  case 3:
    // ADD_ri, ADD_ri_32, ADD_rr, ADD_rr_32
    O << " += ";
    printOperand(MI, 2, O);
    return;
    break;
  case 4:
    // AND_ri, AND_ri_32, AND_rr, AND_rr_32
    O << " &= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 5:
    // BE16
    O << " = be16 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 6:
    // BE32
    O << " = be32 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 7:
    // BE64
    O << " = be64 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 8:
    // DIV_ri, DIV_ri_32, DIV_rr, DIV_rr_32
    O << " /= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 9:
    // FI_ri, LD_pseudo
    O << ", ";
    break;
  case 10:
    // JAL, JALX, NOP
    return;
    break;
  case 11:
    // JEQ_ri, JEQ_rr
    O << " == ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 12:
    // JNE_ri, JNE_rr
    O << " != ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 13:
    // JSGE_ri, JSGE_rr
    O << " s>= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 14:
    // JSGT_ri, JSGT_rr
    O << " s> ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 15:
    // JSLE_ri, JSLE_rr
    O << " s<= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 16:
    // JSLT_ri, JSLT_rr
    O << " s< ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 17:
    // JUGE_ri, JUGE_rr
    O << " >= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 18:
    // JUGT_ri, JUGT_rr
    O << " > ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 19:
    // JULE_ri, JULE_rr
    O << " <= ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 20:
    // JULT_ri, JULT_rr
    O << " < ";
    printOperand(MI, 1, O);
    O << " goto ";
    printBrTargetOperand(MI, 2, O);
    return;
    break;
  case 21:
    // LDB, LDB32
    O << " = *(u8 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 22:
    // LDD
    O << " = *(u64 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 23:
    // LDH, LDH32
    O << " = *(u16 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 24:
    // LDW, LDW32
    O << " = *(u32 *)(";
    printMemOperand(MI, 1, O);
    O << ')';
    return;
    break;
  case 25:
    // LE16
    O << " = le16 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 26:
    // LE32
    O << " = le32 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 27:
    // LE64
    O << " = le64 ";
    printOperand(MI, 1, O);
    return;
    break;
  case 28:
    // MUL_ri, MUL_ri_32, MUL_rr, MUL_rr_32
    O << " *= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 29:
    // NEG_32, NEG_64
    O << " = -";
    printOperand(MI, 1, O);
    return;
    break;
  case 30:
    // OR_ri, OR_ri_32, OR_rr, OR_rr_32
    O << " |= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 31:
    // SLL_ri, SLL_ri_32, SLL_rr, SLL_rr_32
    O << " <<= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 32:
    // SRA_ri, SRA_ri_32, SRA_rr, SRA_rr_32
    O << " s>>= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 33:
    // SRL_ri, SRL_ri_32, SRL_rr, SRL_rr_32
    O << " >>= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 34:
    // STB, STB32, STD, STH, STH32, STW, STW32
    O << ") = ";
    printOperand(MI, 0, O);
    return;
    break;
  case 35:
    // SUB_ri, SUB_ri_32, SUB_rr, SUB_rr_32
    O << " -= ";
    printOperand(MI, 2, O);
    return;
    break;
  case 36:
    // XADD32, XADD64
    O << ") += ";
    printOperand(MI, 3, O);
    return;
    break;
  case 37:
    // XOR_ri, XOR_ri_32, XOR_rr, XOR_rr_32
    O << " ^= ";
    printOperand(MI, 2, O);
    return;
    break;
  }


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


  // Fragment 3 encoded into 2 bits for 3 unique commands.
  switch ((Bits >> 20) & 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:
    // LD_pseudo
    O << ", ";
    printImm64Operand(MI, 2, O);
    return;
    break;
  case 2:
    // MOV_32_64, MOV_ri, MOV_ri_32, MOV_rr, MOV_rr_32
    return;
    break;
  }

}


/// 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(unsigned RegNo) {
  assert(RegNo && RegNo < 25 && "Invalid register number!");

  static const char AsmStrs[] = {
  /* 0 */ 'r', '1', '0', 0,
  /* 4 */ 'w', '1', '0', 0,
  /* 8 */ 'r', '0', 0,
  /* 11 */ 'w', '0', 0,
  /* 14 */ 'r', '1', '1', 0,
  /* 18 */ 'w', '1', '1', 0,
  /* 22 */ 'r', '1', 0,
  /* 25 */ 'w', '1', 0,
  /* 28 */ 'r', '2', 0,
  /* 31 */ 'w', '2', 0,
  /* 34 */ 'r', '3', 0,
  /* 37 */ 'w', '3', 0,
  /* 40 */ 'r', '4', 0,
  /* 43 */ 'w', '4', 0,
  /* 46 */ 'r', '5', 0,
  /* 49 */ 'w', '5', 0,
  /* 52 */ 'r', '6', 0,
  /* 55 */ 'w', '6', 0,
  /* 58 */ 'r', '7', 0,
  /* 61 */ 'w', '7', 0,
  /* 64 */ 'r', '8', 0,
  /* 67 */ 'w', '8', 0,
  /* 70 */ 'r', '9', 0,
  /* 73 */ 'w', '9', 0,
  };

  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, raw_ostream &OS) {
  return false;
}

#endif // PRINT_ALIAS_INSTR
