Attribute VB_Name = "mx86"
Option Explicit

'Capstone Disassembly Engine bindings for VB6
'Contributed by FireEye FLARE Team
'Author:  David Zimmer <david.zimmer@fireeye.com>, <dzzie@yahoo.com>
'License: Apache 2.0
'Copyright: FireEye 2017


Enum x86_reg
    X86_REG_INVALID = 0
    X86_REG_AH
    X86_REG_AL
    X86_REG_AX
    X86_REG_BH
    X86_REG_BL
    X86_REG_BP
    X86_REG_BPL
    X86_REG_BX
    X86_REG_CH
    X86_REG_CL
    X86_REG_CS
    X86_REG_CX
    X86_REG_DH
    X86_REG_DI
    X86_REG_DIL
    X86_REG_DL
    X86_REG_DS
    X86_REG_DX
    X86_REG_EAX
    X86_REG_EBP
    X86_REG_EBX
    X86_REG_ECX
    X86_REG_EDI
    X86_REG_EDX
    X86_REG_EFLAGS
    X86_REG_EIP
    X86_REG_EIZ
    X86_REG_ES
    X86_REG_ESI
    X86_REG_ESP
    X86_REG_FPSW
    X86_REG_FS
    X86_REG_GS
    X86_REG_IP
    X86_REG_RAX
    X86_REG_RBP
    X86_REG_RBX
    X86_REG_RCX
    X86_REG_RDI
    X86_REG_RDX
    X86_REG_RIP
    X86_REG_RIZ
    X86_REG_RSI
    X86_REG_RSP
    X86_REG_SI
    X86_REG_SIL
    X86_REG_SP
    X86_REG_SPL
    X86_REG_SS
    X86_REG_CR0
    X86_REG_CR1
    X86_REG_CR2
    X86_REG_CR3
    X86_REG_CR4
    X86_REG_CR5
    X86_REG_CR6
    X86_REG_CR7
    X86_REG_CR8
    X86_REG_CR9
    X86_REG_CR10
    X86_REG_CR11
    X86_REG_CR12
    X86_REG_CR13
    X86_REG_CR14
    X86_REG_CR15
    X86_REG_DR0
    X86_REG_DR1
    X86_REG_DR2
    X86_REG_DR3
    X86_REG_DR4
    X86_REG_DR5
    X86_REG_DR6
    X86_REG_DR7
    X86_REG_FP0
    X86_REG_FP1
    X86_REG_FP2
    X86_REG_FP3
    X86_REG_FP4
    X86_REG_FP5
    X86_REG_FP6
    X86_REG_FP7
    X86_REG_K0
    X86_REG_K1
    X86_REG_K2
    X86_REG_K3
    X86_REG_K4
    X86_REG_K5
    X86_REG_K6
    X86_REG_K7
    X86_REG_MM0
    X86_REG_MM1
    X86_REG_MM2
    X86_REG_MM3
    X86_REG_MM4
    X86_REG_MM5
    X86_REG_MM6
    X86_REG_MM7
    X86_REG_R8
    X86_REG_R9
    X86_REG_R10
    X86_REG_R11
    X86_REG_R12
    X86_REG_R13
    X86_REG_R14
    X86_REG_R15
    X86_REG_ST0
    X86_REG_ST1
    X86_REG_ST2
    X86_REG_ST3
    X86_REG_ST4
    X86_REG_ST5
    X86_REG_ST6
    X86_REG_ST7
    X86_REG_XMM0
    X86_REG_XMM1
    X86_REG_XMM2
    X86_REG_XMM3
    X86_REG_XMM4
    X86_REG_XMM5
    X86_REG_XMM6
    X86_REG_XMM7
    X86_REG_XMM8
    X86_REG_XMM9
    X86_REG_XMM10
    X86_REG_XMM11
    X86_REG_XMM12
    X86_REG_XMM13
    X86_REG_XMM14
    X86_REG_XMM15
    X86_REG_XMM16
    X86_REG_XMM17
    X86_REG_XMM18
    X86_REG_XMM19
    X86_REG_XMM20
    X86_REG_XMM21
    X86_REG_XMM22
    X86_REG_XMM23
    X86_REG_XMM24
    X86_REG_XMM25
    X86_REG_XMM26
    X86_REG_XMM27
    X86_REG_XMM28
    X86_REG_XMM29
    X86_REG_XMM30
    X86_REG_XMM31
    X86_REG_YMM0
    X86_REG_YMM1
    X86_REG_YMM2
    X86_REG_YMM3
    X86_REG_YMM4
    X86_REG_YMM5
    X86_REG_YMM6
    X86_REG_YMM7
    X86_REG_YMM8
    X86_REG_YMM9
    X86_REG_YMM10
    X86_REG_YMM11
    X86_REG_YMM12
    X86_REG_YMM13
    X86_REG_YMM14
    X86_REG_YMM15
    X86_REG_YMM16
    X86_REG_YMM17
    X86_REG_YMM18
    X86_REG_YMM19
    X86_REG_YMM20
    X86_REG_YMM21
    X86_REG_YMM22
    X86_REG_YMM23
    X86_REG_YMM24
    X86_REG_YMM25
    X86_REG_YMM26
    X86_REG_YMM27
    X86_REG_YMM28
    X86_REG_YMM29
    X86_REG_YMM30
    X86_REG_YMM31
    X86_REG_ZMM0
    X86_REG_ZMM1
    X86_REG_ZMM2
    X86_REG_ZMM3
    X86_REG_ZMM4
    X86_REG_ZMM5
    X86_REG_ZMM6
    X86_REG_ZMM7
    X86_REG_ZMM8
    X86_REG_ZMM9
    X86_REG_ZMM10
    X86_REG_ZMM11
    X86_REG_ZMM12
    X86_REG_ZMM13
    X86_REG_ZMM14
    X86_REG_ZMM15
    X86_REG_ZMM16
    X86_REG_ZMM17
    X86_REG_ZMM18
    X86_REG_ZMM19
    X86_REG_ZMM20
    X86_REG_ZMM21
    X86_REG_ZMM22
    X86_REG_ZMM23
    X86_REG_ZMM24
    X86_REG_ZMM25
    X86_REG_ZMM26
    X86_REG_ZMM27
    X86_REG_ZMM28
    X86_REG_ZMM29
    X86_REG_ZMM30
    X86_REG_ZMM31
    X86_REG_R8B
    X86_REG_R9B
    X86_REG_R10B
    X86_REG_R11B
    X86_REG_R12B
    X86_REG_R13B
    X86_REG_R14B
    X86_REG_R15B
    X86_REG_R8D
    X86_REG_R9D
    X86_REG_R10D
    X86_REG_R11D
    X86_REG_R12D
    X86_REG_R13D
    X86_REG_R14D
    X86_REG_R15D
    X86_REG_R8W
    X86_REG_R9W
    X86_REG_R10W
    X86_REG_R11W
    X86_REG_R12W
    X86_REG_R13W
    X86_REG_R14W
    X86_REG_R15W
    X86_REG_ENDING          '  <-- mark    the end of  the list    of  registers
End Enum

'Operand type for instruction's operands
Enum x86_op_type
    X86_OP_INVALID = 0   'CS_OP_INVALID (Uninitialized).
    X86_OP_REG           'CS_OP_REG (Register operand).
    X86_OP_IMM           'CS_OP_IMM (Immediate operand).
    x86_op_mem           'CS_OP_MEM (Memory operand).
    X86_OP_FP            'CS_OP_FP  (Floating-Point operand).
End Enum

'AVX broadcast type
Public Enum x86_avx_bcast
    X86_AVX_BCAST_INVALID = 0 ' Uninitialized.
    X86_AVX_BCAST_2         ' AVX512 broadcast type {1to2}
    X86_AVX_BCAST_4         ' AVX512 broadcast type {1to4}
    X86_AVX_BCAST_8         ' AVX512 broadcast type {1to8}
    X86_AVX_BCAST_16        ' AVX512 broadcast type {1to16}
End Enum


'SSE Code Condition type
Public Enum x86_sse_cc
    X86_SSE_CC_INVALID = 0 ' Uninitialized.
    X86_SSE_CC_EQ
    X86_SSE_CC_LT
    X86_SSE_CC_LE
    X86_SSE_CC_UNORD
    X86_SSE_CC_NEQ
    X86_SSE_CC_NLT
    X86_SSE_CC_NLE
    X86_SSE_CC_ORD
    X86_SSE_CC_EQ_UQ
    X86_SSE_CC_NGE
    X86_SSE_CC_NGT
    X86_SSE_CC_FALSE
    X86_SSE_CC_NEQ_OQ
    X86_SSE_CC_GE
    X86_SSE_CC_GT
    X86_SSE_CC_TRUE
End Enum

'AVX Code Condition type
Public Enum x86_avx_cc
    X86_AVX_CC_INVALID = 0 ' Uninitialized.
    X86_AVX_CC_EQ
    X86_AVX_CC_LT
    X86_AVX_CC_LE
    X86_AVX_CC_UNORD
    X86_AVX_CC_NEQ
    X86_AVX_CC_NLT
    X86_AVX_CC_NLE
    X86_AVX_CC_ORD
    X86_AVX_CC_EQ_UQ
    X86_AVX_CC_NGE
    X86_AVX_CC_NGT
    X86_AVX_CC_FALSE
    X86_AVX_CC_NEQ_OQ
    X86_AVX_CC_GE
    X86_AVX_CC_GT
    X86_AVX_CC_TRUE
    X86_AVX_CC_EQ_OS
    X86_AVX_CC_LT_OQ
    X86_AVX_CC_LE_OQ
    X86_AVX_CC_UNORD_S
    X86_AVX_CC_NEQ_US
    X86_AVX_CC_NLT_UQ
    X86_AVX_CC_NLE_UQ
    X86_AVX_CC_ORD_S
    X86_AVX_CC_EQ_US
    X86_AVX_CC_NGE_UQ
    X86_AVX_CC_NGT_UQ
    X86_AVX_CC_FALSE_OS
    X86_AVX_CC_NEQ_OS
    X86_AVX_CC_GE_OQ
    X86_AVX_CC_GT_OQ
    X86_AVX_CC_TRUE_US
End Enum

'AVX static rounding mode type
Public Enum x86_avx_rm
    X86_AVX_RM_INVALID = 0 ' Uninitialized.
    X86_AVX_RM_RN        ' Round to nearest
    X86_AVX_RM_RD        ' Round down
    X86_AVX_RM_RU        ' Round up
    X86_AVX_RM_RZ        ' Round toward zero
End Enum

'Instruction prefixes - to be used in cs_x86.prefix[]
Public Enum x86_prefix
    X86_PREFIX_LOCK = &HF0     ' lock (cs_x86.prefix[0]
    X86_PREFIX_REP = &HF3      ' rep (cs_x86.prefix[0]
    X86_PREFIX_REPNE = &HF2    ' repne (cs_x86.prefix[0]
    X86_PREFIX_CS = &H2E       ' segment override CS (cs_x86.prefix[1]
    X86_PREFIX_SS = &H36       ' segment override SS (cs_x86.prefix[1]
    X86_PREFIX_DS = &H3E       ' segment override DS (cs_x86.prefix[1]
    X86_PREFIX_ES = &H26       ' segment override ES (cs_x86.prefix[1]
    X86_PREFIX_FS = &H64       ' segment override FS (cs_x86.prefix[1]
    X86_PREFIX_GS = &H65       ' segment override GS (cs_x86.prefix[1]
    X86_PREFIX_OPSIZE = &H66   ' operand-size override (cs_x86.prefix[2]
    X86_PREFIX_ADDRSIZE = &H67 ' address-size override (cs_x86.prefix[3]
End Enum

'Instruction's operand referring to memory
'This is associated with X86_OP_MEM operand type above
Public Type x86_op_mem
    segment As Long  ' segment register (or X86_REG_INVALID if irrelevant) UNSIGNED
    base As Long     ' base register (or X86_REG_INVALID if irrelevant) UNSIGNED
    index As Long    ' index register (or X86_REG_INVALID if irrelevant) UNSIGNED
    scale As Long    ' scale for index register
    disp As Currency ' displacement value
End Type

'Instruction operand 48 bytes
'typedef struct cs_x86_op {
'        x86_op_type type;   // operand type
'        union {
'            x86_reg reg;    // register value for REG operand
'            int64_t imm;        // immediate value for IMM operand
'            double fp;      // floating point value for FP operand
'            x86_op_mem mem;     // base/index/scale/disp value for MEM operand
'        };
'
'        // size of this operand (in bytes).
'        uint8_t size;
'
'        // AVX broadcast type, or 0 if irrelevant
'        x86_avx_bcast avx_bcast;
'
'        // AVX zero opmask {z}
'        bool avx_zero_opmask;
'} cs_x86_op;

'Instruction structure
Public Type cs_x86
    ' Instruction prefix, which can be up to 4 bytes.
    ' A prefix byte gets value 0 when irrelevant.
    ' prefix[0] indicates REP/REPNE/LOCK prefix (See X86_PREFIX_REP/REPNE/LOCK above)
    ' prefix[1] indicates segment override (irrelevant for x86_64):
    ' See X86_PREFIX_CS/SS/DS/ES/FS/GS above.
    ' prefix[2] indicates operand-size override (X86_PREFIX_OPSIZE)
    ' prefix[3] indicates address-size override (X86_PREFIX_ADDRSIZE)
    prefix(0 To 3) As Byte        ' UNSIGNED
    
    ' Instruction opcode, wich can be from 1 to 4 bytes in size.
    ' This contains VEX opcode as well.
    ' An trailing opcode byte gets value 0 when irrelevant.
    opcode(0 To 3) As Byte        ' UNSIGNED

    rex As Byte                   ' REX prefix: only a non-zero value is relavant for x86_64  UNSIGNED
    addr_size As Byte             ' Address size, which can be overrided with above prefix[5].  UNSIGNED
    modrm As Byte                 ' ModR/M byte  UNSIGNED
    sib As Byte                   ' SIB value, or 0 when irrelevant.  UNSIGNED
    disp As Long                  ' Displacement value, or 0 when irrelevant.
    sib_index As x86_reg          ' SIB index register, or X86_REG_INVALID when irrelevant.
    sib_scale As Byte             ' SIB scale. only applicable if sib_index is relavant.
    sib_base As x86_reg           ' SIB base register, or X86_REG_INVALID when irrelevant.
    sse_cc As x86_sse_cc          ' SSE Code Condition
    avx_cc As x86_avx_cc          ' AVX Code Condition
    avx_sae As Byte               ' AVX Suppress all Exception
    avx_rm As x86_avx_rm          ' AVX static rounding mode
    op_count As Byte              ' Number of operands of this instruction, or 0 when instruction has no operand.UNSIGNED
    
    'operands(0 To 7) As cs_x86_op ' operands for this instruction.
    'opBuf(0 To 383) As Byte
    
End Type

'X86 instructions
Public Enum x86_insn
    X86_INS_INVALID = 0
    X86_INS_AAA
    X86_INS_AAD
    X86_INS_AAM
    X86_INS_AAS
    X86_INS_FABS
    X86_INS_ADC
    X86_INS_ADCX
    X86_INS_ADD
    X86_INS_ADDPD
    X86_INS_ADDPS
    X86_INS_ADDSD
    X86_INS_ADDSS
    X86_INS_ADDSUBPD
    X86_INS_ADDSUBPS
    X86_INS_FADD
    X86_INS_FIADD
    X86_INS_FADDP
    X86_INS_ADOX
    X86_INS_AESDECLAST
    X86_INS_AESDEC
    X86_INS_AESENCLAST
    X86_INS_AESENC
    X86_INS_AESIMC
    X86_INS_AESKEYGENASSIST
    X86_INS_AND
    X86_INS_ANDN
    X86_INS_ANDNPD
    X86_INS_ANDNPS
    X86_INS_ANDPD
    X86_INS_ANDPS
    X86_INS_ARPL
    X86_INS_BEXTR
    X86_INS_BLCFILL
    X86_INS_BLCI
    X86_INS_BLCIC
    X86_INS_BLCMSK
    X86_INS_BLCS
    X86_INS_BLENDPD
    X86_INS_BLENDPS
    X86_INS_BLENDVPD
    X86_INS_BLENDVPS
    X86_INS_BLSFILL
    X86_INS_BLSI
    X86_INS_BLSIC
    X86_INS_BLSMSK
    X86_INS_BLSR
    X86_INS_BOUND
    X86_INS_BSF
    X86_INS_BSR
    X86_INS_BSWAP
    X86_INS_BT
    X86_INS_BTC
    X86_INS_BTR
    X86_INS_BTS
    X86_INS_BZHI
    X86_INS_CALL
    X86_INS_CBW
    X86_INS_CDQ
    X86_INS_CDQE
    X86_INS_FCHS
    X86_INS_CLAC
    X86_INS_CLC
    X86_INS_CLD
    X86_INS_CLFLUSH
    X86_INS_CLGI
    X86_INS_CLI
    X86_INS_CLTS
    X86_INS_CMC
    X86_INS_CMOVA
    X86_INS_CMOVAE
    X86_INS_CMOVB
    X86_INS_CMOVBE
    X86_INS_FCMOVBE
    X86_INS_FCMOVB
    X86_INS_CMOVE
    X86_INS_FCMOVE
    X86_INS_CMOVG
    X86_INS_CMOVGE
    X86_INS_CMOVL
    X86_INS_CMOVLE
    X86_INS_FCMOVNBE
    X86_INS_FCMOVNB
    X86_INS_CMOVNE
    X86_INS_FCMOVNE
    X86_INS_CMOVNO
    X86_INS_CMOVNP
    X86_INS_FCMOVNU
    X86_INS_CMOVNS
    X86_INS_CMOVO
    X86_INS_CMOVP
    X86_INS_FCMOVU
    X86_INS_CMOVS
    X86_INS_CMP
    X86_INS_CMPPD
    X86_INS_CMPPS
    X86_INS_CMPSB
    X86_INS_CMPSD
    X86_INS_CMPSQ
    X86_INS_CMPSS
    X86_INS_CMPSW
    X86_INS_CMPXCHG16B
    X86_INS_CMPXCHG
    X86_INS_CMPXCHG8B
    X86_INS_COMISD
    X86_INS_COMISS
    X86_INS_FCOMP
    X86_INS_FCOMPI
    X86_INS_FCOMI
    X86_INS_FCOM
    X86_INS_FCOS
    X86_INS_CPUID
    X86_INS_CQO
    X86_INS_CRC32
    X86_INS_CVTDQ2PD
    X86_INS_CVTDQ2PS
    X86_INS_CVTPD2DQ
    X86_INS_CVTPD2PS
    X86_INS_CVTPS2DQ
    X86_INS_CVTPS2PD
    X86_INS_CVTSD2SI
    X86_INS_CVTSD2SS
    X86_INS_CVTSI2SD
    X86_INS_CVTSI2SS
    X86_INS_CVTSS2SD
    X86_INS_CVTSS2SI
    X86_INS_CVTTPD2DQ
    X86_INS_CVTTPS2DQ
    X86_INS_CVTTSD2SI
    X86_INS_CVTTSS2SI
    X86_INS_CWD
    X86_INS_CWDE
    X86_INS_DAA
    X86_INS_DAS
    X86_INS_DATA16
    X86_INS_DEC
    X86_INS_DIV
    X86_INS_DIVPD
    X86_INS_DIVPS
    X86_INS_FDIVR
    X86_INS_FIDIVR
    X86_INS_FDIVRP
    X86_INS_DIVSD
    X86_INS_DIVSS
    X86_INS_FDIV
    X86_INS_FIDIV
    X86_INS_FDIVP
    X86_INS_DPPD
    X86_INS_DPPS
    X86_INS_RET
    X86_INS_ENCLS
    X86_INS_ENCLU
    X86_INS_ENTER
    X86_INS_EXTRACTPS
    X86_INS_EXTRQ
    X86_INS_F2XM1
    X86_INS_LCALL
    X86_INS_LJMP
    X86_INS_FBLD
    X86_INS_FBSTP
    X86_INS_FCOMPP
    X86_INS_FDECSTP
    X86_INS_FEMMS
    X86_INS_FFREE
    X86_INS_FICOM
    X86_INS_FICOMP
    X86_INS_FINCSTP
    X86_INS_FLDCW
    X86_INS_FLDENV
    X86_INS_FLDL2E
    X86_INS_FLDL2T
    X86_INS_FLDLG2
    X86_INS_FLDLN2
    X86_INS_FLDPI
    X86_INS_FNCLEX
    X86_INS_FNINIT
    X86_INS_FNOP
    X86_INS_FNSTCW
    X86_INS_FNSTSW
    X86_INS_FPATAN
    X86_INS_FPREM
    X86_INS_FPREM1
    X86_INS_FPTAN
    X86_INS_FRNDINT
    X86_INS_FRSTOR
    X86_INS_FNSAVE
    X86_INS_FSCALE
    X86_INS_FSETPM
    X86_INS_FSINCOS
    X86_INS_FNSTENV
    X86_INS_FXAM
    X86_INS_FXRSTOR
    X86_INS_FXRSTOR64
    X86_INS_FXSAVE
    X86_INS_FXSAVE64
    X86_INS_FXTRACT
    X86_INS_FYL2X
    X86_INS_FYL2XP1
    X86_INS_MOVAPD
    X86_INS_MOVAPS
    X86_INS_ORPD
    X86_INS_ORPS
    X86_INS_VMOVAPD
    X86_INS_VMOVAPS
    X86_INS_XORPD
    X86_INS_XORPS
    X86_INS_GETSEC
    X86_INS_HADDPD
    X86_INS_HADDPS
    X86_INS_HLT
    X86_INS_HSUBPD
    X86_INS_HSUBPS
    X86_INS_IDIV
    X86_INS_FILD
    X86_INS_IMUL
    X86_INS_IN
    X86_INS_INC
    X86_INS_INSB
    X86_INS_INSERTPS
    X86_INS_INSERTQ
    X86_INS_INSD
    X86_INS_INSW
    X86_INS_INT
    X86_INS_INT1
    X86_INS_INT3
    X86_INS_INTO
    X86_INS_INVD
    X86_INS_INVEPT
    X86_INS_INVLPG
    X86_INS_INVLPGA
    X86_INS_INVPCID
    X86_INS_INVVPID
    X86_INS_IRET
    X86_INS_IRETD
    X86_INS_IRETQ
    X86_INS_FISTTP
    X86_INS_FIST
    X86_INS_FISTP
    X86_INS_UCOMISD
    X86_INS_UCOMISS
    X86_INS_VCMP
    X86_INS_VCOMISD
    X86_INS_VCOMISS
    X86_INS_VCVTSD2SS
    X86_INS_VCVTSI2SD
    X86_INS_VCVTSI2SS
    X86_INS_VCVTSS2SD
    X86_INS_VCVTTSD2SI
    X86_INS_VCVTTSD2USI
    X86_INS_VCVTTSS2SI
    X86_INS_VCVTTSS2USI
    X86_INS_VCVTUSI2SD
    X86_INS_VCVTUSI2SS
    X86_INS_VUCOMISD
    X86_INS_VUCOMISS
    X86_INS_JAE
    X86_INS_JA
    X86_INS_JBE
    X86_INS_JB
    X86_INS_JCXZ
    X86_INS_JECXZ
    X86_INS_JE
    X86_INS_JGE
    X86_INS_JG
    X86_INS_JLE
    X86_INS_JL
    X86_INS_JMP
    X86_INS_JNE
    X86_INS_JNO
    X86_INS_JNP
    X86_INS_JNS
    X86_INS_JO
    X86_INS_JP
    X86_INS_JRCXZ
    X86_INS_JS
    X86_INS_KANDB
    X86_INS_KANDD
    X86_INS_KANDNB
    X86_INS_KANDND
    X86_INS_KANDNQ
    X86_INS_KANDNW
    X86_INS_KANDQ
    X86_INS_KANDW
    X86_INS_KMOVB
    X86_INS_KMOVD
    X86_INS_KMOVQ
    X86_INS_KMOVW
    X86_INS_KNOTB
    X86_INS_KNOTD
    X86_INS_KNOTQ
    X86_INS_KNOTW
    X86_INS_KORB
    X86_INS_KORD
    X86_INS_KORQ
    X86_INS_KORTESTW
    X86_INS_KORW
    X86_INS_KSHIFTLW
    X86_INS_KSHIFTRW
    X86_INS_KUNPCKBW
    X86_INS_KXNORB
    X86_INS_KXNORD
    X86_INS_KXNORQ
    X86_INS_KXNORW
    X86_INS_KXORB
    X86_INS_KXORD
    X86_INS_KXORQ
    X86_INS_KXORW
    X86_INS_LAHF
    X86_INS_LAR
    X86_INS_LDDQU
    X86_INS_LDMXCSR
    X86_INS_LDS
    X86_INS_FLDZ
    X86_INS_FLD1
    X86_INS_FLD
    X86_INS_LEA
    X86_INS_LEAVE
    X86_INS_LES
    X86_INS_LFENCE
    X86_INS_LFS
    X86_INS_LGDT
    X86_INS_LGS
    X86_INS_LIDT
    X86_INS_LLDT
    X86_INS_LMSW
    X86_INS_OR
    X86_INS_SUB
    X86_INS_XOR
    X86_INS_LODSB
    X86_INS_LODSD
    X86_INS_LODSQ
    X86_INS_LODSW
    X86_INS_LOOP
    X86_INS_LOOPE
    X86_INS_LOOPNE
    X86_INS_RETF
    X86_INS_RETFQ
    X86_INS_LSL
    X86_INS_LSS
    X86_INS_LTR
    X86_INS_XADD
    X86_INS_LZCNT
    X86_INS_MASKMOVDQU
    X86_INS_MAXPD
    X86_INS_MAXPS
    X86_INS_MAXSD
    X86_INS_MAXSS
    X86_INS_MFENCE
    X86_INS_MINPD
    X86_INS_MINPS
    X86_INS_MINSD
    X86_INS_MINSS
    X86_INS_CVTPD2PI
    X86_INS_CVTPI2PD
    X86_INS_CVTPI2PS
    X86_INS_CVTPS2PI
    X86_INS_CVTTPD2PI
    X86_INS_CVTTPS2PI
    X86_INS_EMMS
    X86_INS_MASKMOVQ
    X86_INS_MOVD
    X86_INS_MOVDQ2Q
    X86_INS_MOVNTQ
    X86_INS_MOVQ2DQ
    X86_INS_MOVQ
    X86_INS_PABSB
    X86_INS_PABSD
    X86_INS_PABSW
    X86_INS_PACKSSDW
    X86_INS_PACKSSWB
    X86_INS_PACKUSWB
    X86_INS_PADDB
    X86_INS_PADDD
    X86_INS_PADDQ
    X86_INS_PADDSB
    X86_INS_PADDSW
    X86_INS_PADDUSB
    X86_INS_PADDUSW
    X86_INS_PADDW
    X86_INS_PALIGNR
    X86_INS_PANDN
    X86_INS_PAND
    X86_INS_PAVGB
    X86_INS_PAVGW
    X86_INS_PCMPEQB
    X86_INS_PCMPEQD
    X86_INS_PCMPEQW
    X86_INS_PCMPGTB
    X86_INS_PCMPGTD
    X86_INS_PCMPGTW
    X86_INS_PEXTRW
    X86_INS_PHADDSW
    X86_INS_PHADDW
    X86_INS_PHADDD
    X86_INS_PHSUBD
    X86_INS_PHSUBSW
    X86_INS_PHSUBW
    X86_INS_PINSRW
    X86_INS_PMADDUBSW
    X86_INS_PMADDWD
    X86_INS_PMAXSW
    X86_INS_PMAXUB
    X86_INS_PMINSW
    X86_INS_PMINUB
    X86_INS_PMOVMSKB
    X86_INS_PMULHRSW
    X86_INS_PMULHUW
    X86_INS_PMULHW
    X86_INS_PMULLW
    X86_INS_PMULUDQ
    X86_INS_POR
    X86_INS_PSADBW
    X86_INS_PSHUFB
    X86_INS_PSHUFW
    X86_INS_PSIGNB
    X86_INS_PSIGND
    X86_INS_PSIGNW
    X86_INS_PSLLD
    X86_INS_PSLLQ
    X86_INS_PSLLW
    X86_INS_PSRAD
    X86_INS_PSRAW
    X86_INS_PSRLD
    X86_INS_PSRLQ
    X86_INS_PSRLW
    X86_INS_PSUBB
    X86_INS_PSUBD
    X86_INS_PSUBQ
    X86_INS_PSUBSB
    X86_INS_PSUBSW
    X86_INS_PSUBUSB
    X86_INS_PSUBUSW
    X86_INS_PSUBW
    X86_INS_PUNPCKHBW
    X86_INS_PUNPCKHDQ
    X86_INS_PUNPCKHWD
    X86_INS_PUNPCKLBW
    X86_INS_PUNPCKLDQ
    X86_INS_PUNPCKLWD
    X86_INS_PXOR
    X86_INS_MONITOR
    X86_INS_MONTMUL
    X86_INS_MOV
    X86_INS_MOVABS
    X86_INS_MOVBE
    X86_INS_MOVDDUP
    X86_INS_MOVDQA
    X86_INS_MOVDQU
    X86_INS_MOVHLPS
    X86_INS_MOVHPD
    X86_INS_MOVHPS
    X86_INS_MOVLHPS
    X86_INS_MOVLPD
    X86_INS_MOVLPS
    X86_INS_MOVMSKPD
    X86_INS_MOVMSKPS
    X86_INS_MOVNTDQA
    X86_INS_MOVNTDQ
    X86_INS_MOVNTI
    X86_INS_MOVNTPD
    X86_INS_MOVNTPS
    X86_INS_MOVNTSD
    X86_INS_MOVNTSS
    X86_INS_MOVSB
    X86_INS_MOVSD
    X86_INS_MOVSHDUP
    X86_INS_MOVSLDUP
    X86_INS_MOVSQ
    X86_INS_MOVSS
    X86_INS_MOVSW
    X86_INS_MOVSX
    X86_INS_MOVSXD
    X86_INS_MOVUPD
    X86_INS_MOVUPS
    X86_INS_MOVZX
    X86_INS_MPSADBW
    X86_INS_MUL
    X86_INS_MULPD
    X86_INS_MULPS
    X86_INS_MULSD
    X86_INS_MULSS
    X86_INS_MULX
    X86_INS_FMUL
    X86_INS_FIMUL
    X86_INS_FMULP
    X86_INS_MWAIT
    X86_INS_NEG
    X86_INS_NOP
    X86_INS_NOT
    X86_INS_OUT
    X86_INS_OUTSB
    X86_INS_OUTSD
    X86_INS_OUTSW
    X86_INS_PACKUSDW
    X86_INS_PAUSE
    X86_INS_PAVGUSB
    X86_INS_PBLENDVB
    X86_INS_PBLENDW
    X86_INS_PCLMULQDQ
    X86_INS_PCMPEQQ
    X86_INS_PCMPESTRI
    X86_INS_PCMPESTRM
    X86_INS_PCMPGTQ
    X86_INS_PCMPISTRI
    X86_INS_PCMPISTRM
    X86_INS_PDEP
    X86_INS_PEXT
    X86_INS_PEXTRB
    X86_INS_PEXTRD
    X86_INS_PEXTRQ
    X86_INS_PF2ID
    X86_INS_PF2IW
    X86_INS_PFACC
    X86_INS_PFADD
    X86_INS_PFCMPEQ
    X86_INS_PFCMPGE
    X86_INS_PFCMPGT
    X86_INS_PFMAX
    X86_INS_PFMIN
    X86_INS_PFMUL
    X86_INS_PFNACC
    X86_INS_PFPNACC
    X86_INS_PFRCPIT1
    X86_INS_PFRCPIT2
    X86_INS_PFRCP
    X86_INS_PFRSQIT1
    X86_INS_PFRSQRT
    X86_INS_PFSUBR
    X86_INS_PFSUB
    X86_INS_PHMINPOSUW
    X86_INS_PI2FD
    X86_INS_PI2FW
    X86_INS_PINSRB
    X86_INS_PINSRD
    X86_INS_PINSRQ
    X86_INS_PMAXSB
    X86_INS_PMAXSD
    X86_INS_PMAXUD
    X86_INS_PMAXUW
    X86_INS_PMINSB
    X86_INS_PMINSD
    X86_INS_PMINUD
    X86_INS_PMINUW
    X86_INS_PMOVSXBD
    X86_INS_PMOVSXBQ
    X86_INS_PMOVSXBW
    X86_INS_PMOVSXDQ
    X86_INS_PMOVSXWD
    X86_INS_PMOVSXWQ
    X86_INS_PMOVZXBD
    X86_INS_PMOVZXBQ
    X86_INS_PMOVZXBW
    X86_INS_PMOVZXDQ
    X86_INS_PMOVZXWD
    X86_INS_PMOVZXWQ
    X86_INS_PMULDQ
    X86_INS_PMULHRW
    X86_INS_PMULLD
    X86_INS_POP
    X86_INS_POPAW
    X86_INS_POPAL
    X86_INS_POPCNT
    X86_INS_POPF
    X86_INS_POPFD
    X86_INS_POPFQ
    X86_INS_PREFETCH
    X86_INS_PREFETCHNTA
    X86_INS_PREFETCHT0
    X86_INS_PREFETCHT1
    X86_INS_PREFETCHT2
    X86_INS_PREFETCHW
    X86_INS_PSHUFD
    X86_INS_PSHUFHW
    X86_INS_PSHUFLW
    X86_INS_PSLLDQ
    X86_INS_PSRLDQ
    X86_INS_PSWAPD
    X86_INS_PTEST
    X86_INS_PUNPCKHQDQ
    X86_INS_PUNPCKLQDQ
    X86_INS_PUSH
    X86_INS_PUSHAW
    X86_INS_PUSHAL
    X86_INS_PUSHF
    X86_INS_PUSHFD
    X86_INS_PUSHFQ
    X86_INS_RCL
    X86_INS_RCPPS
    X86_INS_RCPSS
    X86_INS_RCR
    X86_INS_RDFSBASE
    X86_INS_RDGSBASE
    X86_INS_RDMSR
    X86_INS_RDPMC
    X86_INS_RDRAND
    X86_INS_RDSEED
    X86_INS_RDTSC
    X86_INS_RDTSCP
    X86_INS_ROL
    X86_INS_ROR
    X86_INS_RORX
    X86_INS_ROUNDPD
    X86_INS_ROUNDPS
    X86_INS_ROUNDSD
    X86_INS_ROUNDSS
    X86_INS_RSM
    X86_INS_RSQRTPS
    X86_INS_RSQRTSS
    X86_INS_SAHF
    X86_INS_SAL
    X86_INS_SALC
    X86_INS_SAR
    X86_INS_SARX
    X86_INS_SBB
    X86_INS_SCASB
    X86_INS_SCASD
    X86_INS_SCASQ
    X86_INS_SCASW
    X86_INS_SETAE
    X86_INS_SETA
    X86_INS_SETBE
    X86_INS_SETB
    X86_INS_SETE
    X86_INS_SETGE
    X86_INS_SETG
    X86_INS_SETLE
    X86_INS_SETL
    X86_INS_SETNE
    X86_INS_SETNO
    X86_INS_SETNP
    X86_INS_SETNS
    X86_INS_SETO
    X86_INS_SETP
    X86_INS_SETS
    X86_INS_SFENCE
    X86_INS_SGDT
    X86_INS_SHA1MSG1
    X86_INS_SHA1MSG2
    X86_INS_SHA1NEXTE
    X86_INS_SHA1RNDS4
    X86_INS_SHA256MSG1
    X86_INS_SHA256MSG2
    X86_INS_SHA256RNDS2
    X86_INS_SHL
    X86_INS_SHLD
    X86_INS_SHLX
    X86_INS_SHR
    X86_INS_SHRD
    X86_INS_SHRX
    X86_INS_SHUFPD
    X86_INS_SHUFPS
    X86_INS_SIDT
    X86_INS_FSIN
    X86_INS_SKINIT
    X86_INS_SLDT
    X86_INS_SMSW
    X86_INS_SQRTPD
    X86_INS_SQRTPS
    X86_INS_SQRTSD
    X86_INS_SQRTSS
    X86_INS_FSQRT
    X86_INS_STAC
    X86_INS_STC
    X86_INS_STD
    X86_INS_STGI
    X86_INS_STI
    X86_INS_STMXCSR
    X86_INS_STOSB
    X86_INS_STOSD
    X86_INS_STOSQ
    X86_INS_STOSW
    X86_INS_STR
    X86_INS_FST
    X86_INS_FSTP
    X86_INS_FSTPNCE
    X86_INS_SUBPD
    X86_INS_SUBPS
    X86_INS_FSUBR
    X86_INS_FISUBR
    X86_INS_FSUBRP
    X86_INS_SUBSD
    X86_INS_SUBSS
    X86_INS_FSUB
    X86_INS_FISUB
    X86_INS_FSUBP
    X86_INS_SWAPGS
    X86_INS_SYSCALL
    X86_INS_SYSENTER
    X86_INS_SYSEXIT
    X86_INS_SYSRET
    X86_INS_T1MSKC
    X86_INS_TEST
    X86_INS_UD2
    X86_INS_FTST
    X86_INS_TZCNT
    X86_INS_TZMSK
    X86_INS_FUCOMPI
    X86_INS_FUCOMI
    X86_INS_FUCOMPP
    X86_INS_FUCOMP
    X86_INS_FUCOM
    X86_INS_UD2B
    X86_INS_UNPCKHPD
    X86_INS_UNPCKHPS
    X86_INS_UNPCKLPD
    X86_INS_UNPCKLPS
    X86_INS_VADDPD
    X86_INS_VADDPS
    X86_INS_VADDSD
    X86_INS_VADDSS
    X86_INS_VADDSUBPD
    X86_INS_VADDSUBPS
    X86_INS_VAESDECLAST
    X86_INS_VAESDEC
    X86_INS_VAESENCLAST
    X86_INS_VAESENC
    X86_INS_VAESIMC
    X86_INS_VAESKEYGENASSIST
    X86_INS_VALIGND
    X86_INS_VALIGNQ
    X86_INS_VANDNPD
    X86_INS_VANDNPS
    X86_INS_VANDPD
    X86_INS_VANDPS
    X86_INS_VBLENDMPD
    X86_INS_VBLENDMPS
    X86_INS_VBLENDPD
    X86_INS_VBLENDPS
    X86_INS_VBLENDVPD
    X86_INS_VBLENDVPS
    X86_INS_VBROADCASTF128
    X86_INS_VBROADCASTI128
    X86_INS_VBROADCASTI32X4
    X86_INS_VBROADCASTI64X4
    X86_INS_VBROADCASTSD
    X86_INS_VBROADCASTSS
    X86_INS_VCMPPD
    X86_INS_VCMPPS
    X86_INS_VCMPSD
    X86_INS_VCMPSS
    X86_INS_VCVTDQ2PD
    X86_INS_VCVTDQ2PS
    X86_INS_VCVTPD2DQX
    X86_INS_VCVTPD2DQ
    X86_INS_VCVTPD2PSX
    X86_INS_VCVTPD2PS
    X86_INS_VCVTPD2UDQ
    X86_INS_VCVTPH2PS
    X86_INS_VCVTPS2DQ
    X86_INS_VCVTPS2PD
    X86_INS_VCVTPS2PH
    X86_INS_VCVTPS2UDQ
    X86_INS_VCVTSD2SI
    X86_INS_VCVTSD2USI
    X86_INS_VCVTSS2SI
    X86_INS_VCVTSS2USI
    X86_INS_VCVTTPD2DQX
    X86_INS_VCVTTPD2DQ
    X86_INS_VCVTTPD2UDQ
    X86_INS_VCVTTPS2DQ
    X86_INS_VCVTTPS2UDQ
    X86_INS_VCVTUDQ2PD
    X86_INS_VCVTUDQ2PS
    X86_INS_VDIVPD
    X86_INS_VDIVPS
    X86_INS_VDIVSD
    X86_INS_VDIVSS
    X86_INS_VDPPD
    X86_INS_VDPPS
    X86_INS_VERR
    X86_INS_VERW
    X86_INS_VEXTRACTF128
    X86_INS_VEXTRACTF32X4
    X86_INS_VEXTRACTF64X4
    X86_INS_VEXTRACTI128
    X86_INS_VEXTRACTI32X4
    X86_INS_VEXTRACTI64X4
    X86_INS_VEXTRACTPS
    X86_INS_VFMADD132PD
    X86_INS_VFMADD132PS
    X86_INS_VFMADD213PD
    X86_INS_VFMADD213PS
    X86_INS_VFMADDPD
    X86_INS_VFMADD231PD
    X86_INS_VFMADDPS
    X86_INS_VFMADD231PS
    X86_INS_VFMADDSD
    X86_INS_VFMADD213SD
    X86_INS_VFMADD132SD
    X86_INS_VFMADD231SD
    X86_INS_VFMADDSS
    X86_INS_VFMADD213SS
    X86_INS_VFMADD132SS
    X86_INS_VFMADD231SS
    X86_INS_VFMADDSUB132PD
    X86_INS_VFMADDSUB132PS
    X86_INS_VFMADDSUB213PD
    X86_INS_VFMADDSUB213PS
    X86_INS_VFMADDSUBPD
    X86_INS_VFMADDSUB231PD
    X86_INS_VFMADDSUBPS
    X86_INS_VFMADDSUB231PS
    X86_INS_VFMSUB132PD
    X86_INS_VFMSUB132PS
    X86_INS_VFMSUB213PD
    X86_INS_VFMSUB213PS
    X86_INS_VFMSUBADD132PD
    X86_INS_VFMSUBADD132PS
    X86_INS_VFMSUBADD213PD
    X86_INS_VFMSUBADD213PS
    X86_INS_VFMSUBADDPD
    X86_INS_VFMSUBADD231PD
    X86_INS_VFMSUBADDPS
    X86_INS_VFMSUBADD231PS
    X86_INS_VFMSUBPD
    X86_INS_VFMSUB231PD
    X86_INS_VFMSUBPS
    X86_INS_VFMSUB231PS
    X86_INS_VFMSUBSD
    X86_INS_VFMSUB213SD
    X86_INS_VFMSUB132SD
    X86_INS_VFMSUB231SD
    X86_INS_VFMSUBSS
    X86_INS_VFMSUB213SS
    X86_INS_VFMSUB132SS
    X86_INS_VFMSUB231SS
    X86_INS_VFNMADD132PD
    X86_INS_VFNMADD132PS
    X86_INS_VFNMADD213PD
    X86_INS_VFNMADD213PS
    X86_INS_VFNMADDPD
    X86_INS_VFNMADD231PD
    X86_INS_VFNMADDPS
    X86_INS_VFNMADD231PS
    X86_INS_VFNMADDSD
    X86_INS_VFNMADD213SD
    X86_INS_VFNMADD132SD
    X86_INS_VFNMADD231SD
    X86_INS_VFNMADDSS
    X86_INS_VFNMADD213SS
    X86_INS_VFNMADD132SS
    X86_INS_VFNMADD231SS
    X86_INS_VFNMSUB132PD
    X86_INS_VFNMSUB132PS
    X86_INS_VFNMSUB213PD
    X86_INS_VFNMSUB213PS
    X86_INS_VFNMSUBPD
    X86_INS_VFNMSUB231PD
    X86_INS_VFNMSUBPS
    X86_INS_VFNMSUB231PS
    X86_INS_VFNMSUBSD
    X86_INS_VFNMSUB213SD
    X86_INS_VFNMSUB132SD
    X86_INS_VFNMSUB231SD
    X86_INS_VFNMSUBSS
    X86_INS_VFNMSUB213SS
    X86_INS_VFNMSUB132SS
    X86_INS_VFNMSUB231SS
    X86_INS_VFRCZPD
    X86_INS_VFRCZPS
    X86_INS_VFRCZSD
    X86_INS_VFRCZSS
    X86_INS_VORPD
    X86_INS_VORPS
    X86_INS_VXORPD
    X86_INS_VXORPS
    X86_INS_VGATHERDPD
    X86_INS_VGATHERDPS
    X86_INS_VGATHERPF0DPD
    X86_INS_VGATHERPF0DPS
    X86_INS_VGATHERPF0QPD
    X86_INS_VGATHERPF0QPS
    X86_INS_VGATHERPF1DPD
    X86_INS_VGATHERPF1DPS
    X86_INS_VGATHERPF1QPD
    X86_INS_VGATHERPF1QPS
    X86_INS_VGATHERQPD
    X86_INS_VGATHERQPS
    X86_INS_VHADDPD
    X86_INS_VHADDPS
    X86_INS_VHSUBPD
    X86_INS_VHSUBPS
    X86_INS_VINSERTF128
    X86_INS_VINSERTF32X4
    X86_INS_VINSERTF64X4
    X86_INS_VINSERTI128
    X86_INS_VINSERTI32X4
    X86_INS_VINSERTI64X4
    X86_INS_VINSERTPS
    X86_INS_VLDDQU
    X86_INS_VLDMXCSR
    X86_INS_VMASKMOVDQU
    X86_INS_VMASKMOVPD
    X86_INS_VMASKMOVPS
    X86_INS_VMAXPD
    X86_INS_VMAXPS
    X86_INS_VMAXSD
    X86_INS_VMAXSS
    X86_INS_VMCALL
    X86_INS_VMCLEAR
    X86_INS_VMFUNC
    X86_INS_VMINPD
    X86_INS_VMINPS
    X86_INS_VMINSD
    X86_INS_VMINSS
    X86_INS_VMLAUNCH
    X86_INS_VMLOAD
    X86_INS_VMMCALL
    X86_INS_VMOVQ
    X86_INS_VMOVDDUP
    X86_INS_VMOVD
    X86_INS_VMOVDQA32
    X86_INS_VMOVDQA64
    X86_INS_VMOVDQA
    X86_INS_VMOVDQU16
    X86_INS_VMOVDQU32
    X86_INS_VMOVDQU64
    X86_INS_VMOVDQU8
    X86_INS_VMOVDQU
    X86_INS_VMOVHLPS
    X86_INS_VMOVHPD
    X86_INS_VMOVHPS
    X86_INS_VMOVLHPS
    X86_INS_VMOVLPD
    X86_INS_VMOVLPS
    X86_INS_VMOVMSKPD
    X86_INS_VMOVMSKPS
    X86_INS_VMOVNTDQA
    X86_INS_VMOVNTDQ
    X86_INS_VMOVNTPD
    X86_INS_VMOVNTPS
    X86_INS_VMOVSD
    X86_INS_VMOVSHDUP
    X86_INS_VMOVSLDUP
    X86_INS_VMOVSS
    X86_INS_VMOVUPD
    X86_INS_VMOVUPS
    X86_INS_VMPSADBW
    X86_INS_VMPTRLD
    X86_INS_VMPTRST
    X86_INS_VMREAD
    X86_INS_VMRESUME
    X86_INS_VMRUN
    X86_INS_VMSAVE
    X86_INS_VMULPD
    X86_INS_VMULPS
    X86_INS_VMULSD
    X86_INS_VMULSS
    X86_INS_VMWRITE
    X86_INS_VMXOFF
    X86_INS_VMXON
    X86_INS_VPABSB
    X86_INS_VPABSD
    X86_INS_VPABSQ
    X86_INS_VPABSW
    X86_INS_VPACKSSDW
    X86_INS_VPACKSSWB
    X86_INS_VPACKUSDW
    X86_INS_VPACKUSWB
    X86_INS_VPADDB
    X86_INS_VPADDD
    X86_INS_VPADDQ
    X86_INS_VPADDSB
    X86_INS_VPADDSW
    X86_INS_VPADDUSB
    X86_INS_VPADDUSW
    X86_INS_VPADDW
    X86_INS_VPALIGNR
    X86_INS_VPANDD
    X86_INS_VPANDND
    X86_INS_VPANDNQ
    X86_INS_VPANDN
    X86_INS_VPANDQ
    X86_INS_VPAND
    X86_INS_VPAVGB
    X86_INS_VPAVGW
    X86_INS_VPBLENDD
    X86_INS_VPBLENDMD
    X86_INS_VPBLENDMQ
    X86_INS_VPBLENDVB
    X86_INS_VPBLENDW
    X86_INS_VPBROADCASTB
    X86_INS_VPBROADCASTD
    X86_INS_VPBROADCASTMB2Q
    X86_INS_VPBROADCASTMW2D
    X86_INS_VPBROADCASTQ
    X86_INS_VPBROADCASTW
    X86_INS_VPCLMULQDQ
    X86_INS_VPCMOV
    X86_INS_VPCMP
    X86_INS_VPCMPD
    X86_INS_VPCMPEQB
    X86_INS_VPCMPEQD
    X86_INS_VPCMPEQQ
    X86_INS_VPCMPEQW
    X86_INS_VPCMPESTRI
    X86_INS_VPCMPESTRM
    X86_INS_VPCMPGTB
    X86_INS_VPCMPGTD
    X86_INS_VPCMPGTQ
    X86_INS_VPCMPGTW
    X86_INS_VPCMPISTRI
    X86_INS_VPCMPISTRM
    X86_INS_VPCMPQ
    X86_INS_VPCMPUD
    X86_INS_VPCMPUQ
    X86_INS_VPCOMB
    X86_INS_VPCOMD
    X86_INS_VPCOMQ
    X86_INS_VPCOMUB
    X86_INS_VPCOMUD
    X86_INS_VPCOMUQ
    X86_INS_VPCOMUW
    X86_INS_VPCOMW
    X86_INS_VPCONFLICTD
    X86_INS_VPCONFLICTQ
    X86_INS_VPERM2F128
    X86_INS_VPERM2I128
    X86_INS_VPERMD
    X86_INS_VPERMI2D
    X86_INS_VPERMI2PD
    X86_INS_VPERMI2PS
    X86_INS_VPERMI2Q
    X86_INS_VPERMIL2PD
    X86_INS_VPERMIL2PS
    X86_INS_VPERMILPD
    X86_INS_VPERMILPS
    X86_INS_VPERMPD
    X86_INS_VPERMPS
    X86_INS_VPERMQ
    X86_INS_VPERMT2D
    X86_INS_VPERMT2PD
    X86_INS_VPERMT2PS
    X86_INS_VPERMT2Q
    X86_INS_VPEXTRB
    X86_INS_VPEXTRD
    X86_INS_VPEXTRQ
    X86_INS_VPEXTRW
    X86_INS_VPGATHERDD
    X86_INS_VPGATHERDQ
    X86_INS_VPGATHERQD
    X86_INS_VPGATHERQQ
    X86_INS_VPHADDBD
    X86_INS_VPHADDBQ
    X86_INS_VPHADDBW
    X86_INS_VPHADDDQ
    X86_INS_VPHADDD
    X86_INS_VPHADDSW
    X86_INS_VPHADDUBD
    X86_INS_VPHADDUBQ
    X86_INS_VPHADDUBW
    X86_INS_VPHADDUDQ
    X86_INS_VPHADDUWD
    X86_INS_VPHADDUWQ
    X86_INS_VPHADDWD
    X86_INS_VPHADDWQ
    X86_INS_VPHADDW
    X86_INS_VPHMINPOSUW
    X86_INS_VPHSUBBW
    X86_INS_VPHSUBDQ
    X86_INS_VPHSUBD
    X86_INS_VPHSUBSW
    X86_INS_VPHSUBWD
    X86_INS_VPHSUBW
    X86_INS_VPINSRB
    X86_INS_VPINSRD
    X86_INS_VPINSRQ
    X86_INS_VPINSRW
    X86_INS_VPLZCNTD
    X86_INS_VPLZCNTQ
    X86_INS_VPMACSDD
    X86_INS_VPMACSDQH
    X86_INS_VPMACSDQL
    X86_INS_VPMACSSDD
    X86_INS_VPMACSSDQH
    X86_INS_VPMACSSDQL
    X86_INS_VPMACSSWD
    X86_INS_VPMACSSWW
    X86_INS_VPMACSWD
    X86_INS_VPMACSWW
    X86_INS_VPMADCSSWD
    X86_INS_VPMADCSWD
    X86_INS_VPMADDUBSW
    X86_INS_VPMADDWD
    X86_INS_VPMASKMOVD
    X86_INS_VPMASKMOVQ
    X86_INS_VPMAXSB
    X86_INS_VPMAXSD
    X86_INS_VPMAXSQ
    X86_INS_VPMAXSW
    X86_INS_VPMAXUB
    X86_INS_VPMAXUD
    X86_INS_VPMAXUQ
    X86_INS_VPMAXUW
    X86_INS_VPMINSB
    X86_INS_VPMINSD
    X86_INS_VPMINSQ
    X86_INS_VPMINSW
    X86_INS_VPMINUB
    X86_INS_VPMINUD
    X86_INS_VPMINUQ
    X86_INS_VPMINUW
    X86_INS_VPMOVDB
    X86_INS_VPMOVDW
    X86_INS_VPMOVMSKB
    X86_INS_VPMOVQB
    X86_INS_VPMOVQD
    X86_INS_VPMOVQW
    X86_INS_VPMOVSDB
    X86_INS_VPMOVSDW
    X86_INS_VPMOVSQB
    X86_INS_VPMOVSQD
    X86_INS_VPMOVSQW
    X86_INS_VPMOVSXBD
    X86_INS_VPMOVSXBQ
    X86_INS_VPMOVSXBW
    X86_INS_VPMOVSXDQ
    X86_INS_VPMOVSXWD
    X86_INS_VPMOVSXWQ
    X86_INS_VPMOVUSDB
    X86_INS_VPMOVUSDW
    X86_INS_VPMOVUSQB
    X86_INS_VPMOVUSQD
    X86_INS_VPMOVUSQW
    X86_INS_VPMOVZXBD
    X86_INS_VPMOVZXBQ
    X86_INS_VPMOVZXBW
    X86_INS_VPMOVZXDQ
    X86_INS_VPMOVZXWD
    X86_INS_VPMOVZXWQ
    X86_INS_VPMULDQ
    X86_INS_VPMULHRSW
    X86_INS_VPMULHUW
    X86_INS_VPMULHW
    X86_INS_VPMULLD
    X86_INS_VPMULLW
    X86_INS_VPMULUDQ
    X86_INS_VPORD
    X86_INS_VPORQ
    X86_INS_VPOR
    X86_INS_VPPERM
    X86_INS_VPROTB
    X86_INS_VPROTD
    X86_INS_VPROTQ
    X86_INS_VPROTW
    X86_INS_VPSADBW
    X86_INS_VPSCATTERDD
    X86_INS_VPSCATTERDQ
    X86_INS_VPSCATTERQD
    X86_INS_VPSCATTERQQ
    X86_INS_VPSHAB
    X86_INS_VPSHAD
    X86_INS_VPSHAQ
    X86_INS_VPSHAW
    X86_INS_VPSHLB
    X86_INS_VPSHLD
    X86_INS_VPSHLQ
    X86_INS_VPSHLW
    X86_INS_VPSHUFB
    X86_INS_VPSHUFD
    X86_INS_VPSHUFHW
    X86_INS_VPSHUFLW
    X86_INS_VPSIGNB
    X86_INS_VPSIGND
    X86_INS_VPSIGNW
    X86_INS_VPSLLDQ
    X86_INS_VPSLLD
    X86_INS_VPSLLQ
    X86_INS_VPSLLVD
    X86_INS_VPSLLVQ
    X86_INS_VPSLLW
    X86_INS_VPSRAD
    X86_INS_VPSRAQ
    X86_INS_VPSRAVD
    X86_INS_VPSRAVQ
    X86_INS_VPSRAW
    X86_INS_VPSRLDQ
    X86_INS_VPSRLD
    X86_INS_VPSRLQ
    X86_INS_VPSRLVD
    X86_INS_VPSRLVQ
    X86_INS_VPSRLW
    X86_INS_VPSUBB
    X86_INS_VPSUBD
    X86_INS_VPSUBQ
    X86_INS_VPSUBSB
    X86_INS_VPSUBSW
    X86_INS_VPSUBUSB
    X86_INS_VPSUBUSW
    X86_INS_VPSUBW
    X86_INS_VPTESTMD
    X86_INS_VPTESTMQ
    X86_INS_VPTESTNMD
    X86_INS_VPTESTNMQ
    X86_INS_VPTEST
    X86_INS_VPUNPCKHBW
    X86_INS_VPUNPCKHDQ
    X86_INS_VPUNPCKHQDQ
    X86_INS_VPUNPCKHWD
    X86_INS_VPUNPCKLBW
    X86_INS_VPUNPCKLDQ
    X86_INS_VPUNPCKLQDQ
    X86_INS_VPUNPCKLWD
    X86_INS_VPXORD
    X86_INS_VPXORQ
    X86_INS_VPXOR
    X86_INS_VRCP14PD
    X86_INS_VRCP14PS
    X86_INS_VRCP14SD
    X86_INS_VRCP14SS
    X86_INS_VRCP28PD
    X86_INS_VRCP28PS
    X86_INS_VRCP28SD
    X86_INS_VRCP28SS
    X86_INS_VRCPPS
    X86_INS_VRCPSS
    X86_INS_VRNDSCALEPD
    X86_INS_VRNDSCALEPS
    X86_INS_VRNDSCALESD
    X86_INS_VRNDSCALESS
    X86_INS_VROUNDPD
    X86_INS_VROUNDPS
    X86_INS_VROUNDSD
    X86_INS_VROUNDSS
    X86_INS_VRSQRT14PD
    X86_INS_VRSQRT14PS
    X86_INS_VRSQRT14SD
    X86_INS_VRSQRT14SS
    X86_INS_VRSQRT28PD
    X86_INS_VRSQRT28PS
    X86_INS_VRSQRT28SD
    X86_INS_VRSQRT28SS
    X86_INS_VRSQRTPS
    X86_INS_VRSQRTSS
    X86_INS_VSCATTERDPD
    X86_INS_VSCATTERDPS
    X86_INS_VSCATTERPF0DPD
    X86_INS_VSCATTERPF0DPS
    X86_INS_VSCATTERPF0QPD
    X86_INS_VSCATTERPF0QPS
    X86_INS_VSCATTERPF1DPD
    X86_INS_VSCATTERPF1DPS
    X86_INS_VSCATTERPF1QPD
    X86_INS_VSCATTERPF1QPS
    X86_INS_VSCATTERQPD
    X86_INS_VSCATTERQPS
    X86_INS_VSHUFPD
    X86_INS_VSHUFPS
    X86_INS_VSQRTPD
    X86_INS_VSQRTPS
    X86_INS_VSQRTSD
    X86_INS_VSQRTSS
    X86_INS_VSTMXCSR
    X86_INS_VSUBPD
    X86_INS_VSUBPS
    X86_INS_VSUBSD
    X86_INS_VSUBSS
    X86_INS_VTESTPD
    X86_INS_VTESTPS
    X86_INS_VUNPCKHPD
    X86_INS_VUNPCKHPS
    X86_INS_VUNPCKLPD
    X86_INS_VUNPCKLPS
    X86_INS_VZEROALL
    X86_INS_VZEROUPPER
    X86_INS_WAIT
    X86_INS_WBINVD
    X86_INS_WRFSBASE
    X86_INS_WRGSBASE
    X86_INS_WRMSR
    X86_INS_XABORT
    X86_INS_XACQUIRE
    X86_INS_XBEGIN
    X86_INS_XCHG
    X86_INS_FXCH
    X86_INS_XCRYPTCBC
    X86_INS_XCRYPTCFB
    X86_INS_XCRYPTCTR
    X86_INS_XCRYPTECB
    X86_INS_XCRYPTOFB
    X86_INS_XEND
    X86_INS_XGETBV
    X86_INS_XLATB
    X86_INS_XRELEASE
    X86_INS_XRSTOR
    X86_INS_XRSTOR64
    X86_INS_XSAVE
    X86_INS_XSAVE64
    X86_INS_XSAVEOPT
    X86_INS_XSAVEOPT64
    X86_INS_XSETBV
    X86_INS_XSHA1
    X86_INS_XSHA256
    X86_INS_XSTORE
    X86_INS_XTEST
    X86_INS_ENDING ' mark the end of the list of insn
End Enum

'Group of X86 instructions
Public Enum x86_insn_group
    X86_GRP_INVALID = 0 ' = CS_GRP_INVALID
    
    ' > Generic groups                      '
    X86_GRP_JUMP      'all jump instructions (conditional+direct+indirect jumps) = CS_GRP_JUMP
    X86_GRP_CALL      'all call instructions = CS_GRP_CALL
    X86_GRP_RET       ' all return instructions = CS_GRP_RET
    X86_GRP_INT       'all interrupt instructions (int+syscall) = CS_GRP_INT
    X86_GRP_IRET      'all interrupt return instructions = CS_GRP_IRET
    
    ' > Architecture-specific groups
    X86_GRP_VM = 128  ' all virtualization instructions (VT-x + AMD-V)
    X86_GRP_3DNOW
    X86_GRP_AES
    X86_GRP_ADX
    X86_GRP_AVX
    X86_GRP_AVX2
    X86_GRP_AVX512
    X86_GRP_BMI
    X86_GRP_BMI2
    X86_GRP_CMOV
    X86_GRP_F16C
    X86_GRP_FMA
    X86_GRP_FMA4
    X86_GRP_FSGSBASE
    X86_GRP_HLE
    X86_GRP_MMX
    X86_GRP_MODE32
    X86_GRP_MODE64
    X86_GRP_RTM
    X86_GRP_SHA
    X86_GRP_SSE1
    X86_GRP_SSE2
    X86_GRP_SSE3
    X86_GRP_SSE41
    X86_GRP_SSE42
    X86_GRP_SSE4A
    X86_GRP_SSSE3
    X86_GRP_PCLMUL
    X86_GRP_XOP
    X86_GRP_CDI
    X86_GRP_ERI
    X86_GRP_TBM
    X86_GRP_16BITMODE
    X86_GRP_NOT64BITMODE
    X86_GRP_SGX
    X86_GRP_DQI
    X86_GRP_BWI
    X86_GRP_PFI
    X86_GRP_VLX
    X86_GRP_SMAP
    X86_GRP_NOVLX
    X86_GRP_ENDING
End Enum



Function x86_sse_cc2str(v As x86_sse_cc) As String
     Dim r As String
    If v = X86_SSE_CC_INVALID Then r = "X86_SSE_CC_INVALID"
    If v = X86_SSE_CC_EQ Then r = "X86_SSE_CC_EQ"
    If v = X86_SSE_CC_LT Then r = "X86_SSE_CC_LT"
    If v = X86_SSE_CC_LE Then r = "X86_SSE_CC_LE"
    If v = X86_SSE_CC_UNORD Then r = "X86_SSE_CC_UNORD"
    If v = X86_SSE_CC_NEQ Then r = "X86_SSE_CC_NEQ"
    If v = X86_SSE_CC_NLT Then r = "X86_SSE_CC_NLT"
    If v = X86_SSE_CC_NLE Then r = "X86_SSE_CC_NLE"
    If v = X86_SSE_CC_ORD Then r = "X86_SSE_CC_ORD"
    If v = X86_SSE_CC_EQ_UQ Then r = "X86_SSE_CC_EQ_UQ"
    If v = X86_SSE_CC_NGE Then r = "X86_SSE_CC_NGE"
    If v = X86_SSE_CC_NGT Then r = "X86_SSE_CC_NGT"
    If v = X86_SSE_CC_FALSE Then r = "X86_SSE_CC_FALSE"
    If v = X86_SSE_CC_NEQ_OQ Then r = "X86_SSE_CC_NEQ_OQ"
    If v = X86_SSE_CC_GE Then r = "X86_SSE_CC_GE"
    If v = X86_SSE_CC_GT Then r = "X86_SSE_CC_GT"
    If v = X86_SSE_CC_TRUE Then r = "X86_SSE_CC_TRUE"
    
    If Len(r) = 0 Then
        r = "Unknown: " & Hex(v)
    ElseIf DEBUG_DUMP Then
        r = r & " (" & Hex(v) & ")"
    End If
    
    x86_sse_cc2str = r
    
End Function

Function x86_avx_cc2str(v As x86_avx_cc) As String
     Dim r As String
    If v = X86_AVX_CC_INVALID Then r = "X86_AVX_CC_INVALID"
    If v = X86_AVX_CC_EQ Then r = "X86_AVX_CC_EQ"
    If v = X86_AVX_CC_LT Then r = "X86_AVX_CC_LT"
    If v = X86_AVX_CC_LE Then r = "X86_AVX_CC_LE"
    If v = X86_AVX_CC_UNORD Then r = "X86_AVX_CC_UNORD"
    If v = X86_AVX_CC_NEQ Then r = "X86_AVX_CC_NEQ"
    If v = X86_AVX_CC_NLT Then r = "X86_AVX_CC_NLT"
    If v = X86_AVX_CC_NLE Then r = "X86_AVX_CC_NLE"
    If v = X86_AVX_CC_ORD Then r = "X86_AVX_CC_ORD"
    If v = X86_AVX_CC_EQ_UQ Then r = "X86_AVX_CC_EQ_UQ"
    If v = X86_AVX_CC_NGE Then r = "X86_AVX_CC_NGE"
    If v = X86_AVX_CC_NGT Then r = "X86_AVX_CC_NGT"
    If v = X86_AVX_CC_FALSE Then r = "X86_AVX_CC_FALSE"
    If v = X86_AVX_CC_NEQ_OQ Then r = "X86_AVX_CC_NEQ_OQ"
    If v = X86_AVX_CC_GE Then r = "X86_AVX_CC_GE"
    If v = X86_AVX_CC_GT Then r = "X86_AVX_CC_GT"
    If v = X86_AVX_CC_TRUE Then r = "X86_AVX_CC_TRUE"
    If v = X86_AVX_CC_EQ_OS Then r = "X86_AVX_CC_EQ_OS"
    If v = X86_AVX_CC_LT_OQ Then r = "X86_AVX_CC_LT_OQ"
    If v = X86_AVX_CC_LE_OQ Then r = "X86_AVX_CC_LE_OQ"
    If v = X86_AVX_CC_UNORD_S Then r = "X86_AVX_CC_UNORD_S"
    If v = X86_AVX_CC_NEQ_US Then r = "X86_AVX_CC_NEQ_US"
    If v = X86_AVX_CC_NLT_UQ Then r = "X86_AVX_CC_NLT_UQ"
    If v = X86_AVX_CC_NLE_UQ Then r = "X86_AVX_CC_NLE_UQ"
    If v = X86_AVX_CC_ORD_S Then r = "X86_AVX_CC_ORD_S"
    If v = X86_AVX_CC_EQ_US Then r = "X86_AVX_CC_EQ_US"
    If v = X86_AVX_CC_NGE_UQ Then r = "X86_AVX_CC_NGE_UQ"
    If v = X86_AVX_CC_NGT_UQ Then r = "X86_AVX_CC_NGT_UQ"
    If v = X86_AVX_CC_FALSE_OS Then r = "X86_AVX_CC_FALSE_OS"
    If v = X86_AVX_CC_NEQ_OS Then r = "X86_AVX_CC_NEQ_OS"
    If v = X86_AVX_CC_GE_OQ Then r = "X86_AVX_CC_GE_OQ"
    If v = X86_AVX_CC_GT_OQ Then r = "X86_AVX_CC_GT_OQ"
    If v = X86_AVX_CC_TRUE_US Then r = "X86_AVX_CC_TRUE_US"
    
    If Len(r) = 0 Then
        r = "Unknown: " & Hex(v)
    ElseIf DEBUG_DUMP Then
        r = r & " (" & Hex(v) & ")"
    End If
    
    x86_avx_cc2str = r
    
End Function


Function x86_avx_rm2str(v As x86_avx_rm) As String
    Dim r As String
    
    If v = X86_AVX_RM_INVALID Then r = "X86_AVX_RM_INVALID"
    If v = X86_AVX_RM_RN Then r = "X86_AVX_RM_RN"
    If v = X86_AVX_RM_RD Then r = "X86_AVX_RM_RD"
    If v = X86_AVX_RM_RU Then r = "X86_AVX_RM_RU"
    If v = X86_AVX_RM_RZ Then r = "X86_AVX_RM_RZ"
    
    If Len(r) = 0 Then
        r = "Unknown: " & Hex(v)
    ElseIf DEBUG_DUMP Then
        r = r & " (" & Hex(v) & ")"
    End If
    
    x86_avx_rm2str = r
End Function


