#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#include <orc/orc.h>
#include <orc/orcinternal.h>
#include <orc/orcx86.h>
#include <orc/orcx86-private.h>
#include <orc/orcx86insn.h>

#include <orc/orcsse-private.h>
#include <orc/orcavx-internal.h>

#include <orc/avx512/orcavx512.h>
#include <orc/avx512/orcavx512insn.h>
#include <orc/avx512/orcavx512-private.h>

#define DEBUG_INSN 0

#define ORC_TARGET_AVX512_VL_BW (ORC_TARGET_AVX512_VL | ORC_TARGET_AVX512_BW)
#define ORC_TARGET_AVX512_VL_F (ORC_TARGET_AVX512_VL | ORC_TARGET_AVX512_F)
#define ORC_TARGET_AVX512_VL_DQ (ORC_TARGET_AVX512_VL | ORC_TARGET_AVX512_DQ)
#define ORC_TARGET_AVX512_VL_VBMI (ORC_TARGET_AVX512_VL | ORC_TARGET_AVX512_VBMI)

#define ORC_AVX512_INSN_VALIDATE_OPERAND_12(op, n, reg)                        \
  if ((op->avx512_operands & ORC_AVX512_INSN_OPERAND_OP##n##_ZMM) &&           \
      orc_avx512_insn_validate_reg (reg)) {                                    \
    return TRUE;                                                               \
  } else if ((op->avx512_operands & ORC_AVX512_INSN_OPERAND_OP##n##_K) &&      \
      orc_avx512_insn_validate_mask_reg (reg)) {                               \
    return TRUE;                                                               \
  } else if ((op->avx512_operands & ORC_AVX_INSN_OPERAND_OP##n##_YMM) &&       \
      orc_avx512_insn_validate_avx_reg (reg)) {                                \
    return TRUE;                                                               \
  } else if ((op->avx512_operands & ORC_SSE_INSN_OPERAND_OP##n##_XMM) &&       \
      orc_avx512_insn_validate_sse_reg (reg)) {                                \
    return TRUE;                                                               \
  } else {                                                                     \
    ORC_ERROR ("Unsupported operand %d with reg %d for op %s", n, reg,         \
        op->name);                                                             \
    return FALSE;                                                              \
  }

typedef struct _OrcAVX512InsnOp {
  char name[16];
  unsigned int target_flags;
  unsigned int operands;
  unsigned int avx512_operands;
  OrcX86InsnOpcodePrefix prefix;
  OrcX86InsnOpcodeEscapeSequence escape;
  orc_uint32 opcode;
  orc_uint8 extension;
  orc_uint32 flags;
  OrcX86InsnTupleType tuple_type;
} OrcAVX512InsnOp;

/* 
 * Some notes on how/why the ops are defined
 * - Given that the instructions can appear in more than one instruction
 *   extension, we just order them by opcode
 */ 

/* clang-format off */
static OrcAVX512InsnOp orc_avx512_ops[] = {
  { "vpshufb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x00, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x00, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufb"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x00, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x00, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x00, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmaddubsw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x04, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaddubsw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x04, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaddubsw"   , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x04, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhrsw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x0b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhrsw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x0b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhrsw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x0b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpalignr"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x0f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpalignr"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x0f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpalignr"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M_IMM8, ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x0f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpextrb"      , ORC_TARGET_AVX512_BW     , ORC_SSE_INSN_TYPE_REG32TO64M8_SSE_IMM8         , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x14, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpextrw"      , ORC_TARGET_AVX512_BW     , ORC_SSE_INSN_TYPE_REG32TO64M16_SSE_IMM8        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x15, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR},
  { "vmovhps"      , ORC_TARGET_AVX512_F      , ORC_AVX_INSN_TYPE_SSE_SSE_MEM                  , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x16, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T2 },
  /* missing VPEXTRD */
  /* missing VPEXTRQ */
  { "vmovhps"      , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_MEM_SSE                      , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x17, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T2 },
  /* missing VEXTRACTF32x4 */
  /* missing VEXTRACTF64x2 */
  /* missing VEXTRACTF32x8 */
  /* missing VEXTRACTF64x4 */
  { "vpabsb"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsb"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsw"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpabsd"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpabsd"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpabsd"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x1e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  /* missing VPABSQ */

  { "vpcmpeqd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpeqd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpeqd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpltd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpltd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpltd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpled"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpled"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpled"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpneqd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpneqd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpneqd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnltd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnltd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnltd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnled"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnled"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},
  { "vpcmpnled"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x1F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL},


  { "vpinsrb"      , ORC_TARGET_AVX512_BW     , ORC_AVX_INSN_TYPE_SSE_SSE_REG32M8_IMM8         , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x20, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpmovsxbw"    , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x20, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxbw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x20, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxbw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x20, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxbd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x21, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxbd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x21, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxbd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x21, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxbq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x22, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "vpmovsxbq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x22, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "vpmovsxbq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x22, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "vpinsrd"      , ORC_TARGET_AVX512_DQ     , ORC_AVX_INSN_TYPE_SSE_SSE_REG32M32_IMM8        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x22, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  /* missing PINSRQ */
  { "vpmovsxwd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x23, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxwd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x23, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxwd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x23, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxwq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x24, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxwq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x24, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxwq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x24, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovsxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovsxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpternlogd"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpternlogd"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpternlogd"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M_IMM8, ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpternlogq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpternlogq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpternlogq"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M_IMM8, ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x25, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpmuldq"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmuldq"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmuldq"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmovm2b"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_SSE_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28                                                                                                       },
  { "vpmovm2b"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_AVX_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28                                                                                                       },
  { "vpmovm2b"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_K                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28                                                                                                       },
  { "vpmovm2w"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_SSE_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                   },
  { "vpmovm2w"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_AVX_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                   },
  { "vpmovm2w"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_K                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x28, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                   },
  { "vpcmpeqq"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpeqq"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpeqq"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpmovb2m"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0                                                                                                    },
  { "vpmovb2m"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0                                                                                                    },
  { "vpmovb2m"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0                                                                                                    },
  { "vpmovw2m"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1,                                                                  },
  { "vpmovw2m"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1,                                                                  },
  { "vpmovw2m"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x29, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1,                                                                  },
  { "vpackusdw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x2b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpackusdw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x2b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpackusdw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x2b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmovzxbw"    , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x30, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxbw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x30, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxbw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x30, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "kshiftrw"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X30, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                         },
  { "kshiftrb"     , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X30, 0                                                                                                           },
  { "vpmovzxbd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x31, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovzxbd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x31, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovzxbd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x31, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "kshiftrq"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X31, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                          },
  { "kshiftrd"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X31, 0 },
  { "vpmovzxbq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x32, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "vpmovzxbq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x32, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "vpmovzxbq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x32, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_EIGHTH_MEM },
  { "kshiftlb"     , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X32, 0 },
  { "kshiftlw"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X32, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                         },
  { "vpmovzxwd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x33, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxwd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x33, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxwd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x33, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "kshiftld"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X33, 0                                                                                                        },
  { "kshiftlq"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_IMM8                  , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X33, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                       },
  { "vpmovzxwq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x34, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovzxwq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x34, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovzxwq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x34, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_QUARTER_MEM },
  { "vpmovzxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovzxdq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },

  { "vpmovqd"      , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovqd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSEM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },
  { "vpmovqd"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVXM_AVX512               , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x35, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF_MEM },

  { "vpermd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x36, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x36, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x36, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x36, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtq"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x37, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtq"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x37, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtq"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x37, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpminsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminsb"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vinserti32x4" , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T4 },
  { "vinserti32x4" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM_IMM8   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T4 },
  { "vinserti64x2" , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM_IMM8            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T2 },
  { "vinserti64x2" , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM_IMM8   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T2 },

  { "vpmovm2d"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_SSE_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38                                                                                                     },
  { "vpmovm2d"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_AVX_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38                                                                                                     },
  { "vpmovm2d"     , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_K                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38                                                                                                     },
  { "vpmovm2q"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_SSE_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                 },
  { "vpmovm2q"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_AVX_K                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                 },
  { "vpmovm2q"     , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_K                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x38, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                                                 },
  { "vpminsd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpminsd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpminsd"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  /* missing VPMINSQ */
  { "vextracti32x4", ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSEM_AVX_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T4      },
  { "vextracti32x4", ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_SSEM_AVX512_IMM8          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T4      },
  { "vextracti64x2", ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_SSEM_AVX_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T4      },
  { "vextracti64x2", ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_SSEM_AVX512_IMM8          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X39, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T4      },
  { "vpmovd2m"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_K_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0                                                                                                       },
  { "vpmovd2m"     , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX512_INSN_TYPE_K_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0                                                                                                       },
  { "vpmovd2m"     , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_AVX512                  , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x39, 0                                                                                                       },
  { "vpminuw"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3A, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminuw"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3A, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminuw"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3A, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vinserti32x8" , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVXM_IMM8   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3A, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T8 },
  { "vinserti64x4" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVXM_IMM8   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3A, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T4 },

  { "vpminud"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3B, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpminud"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3B, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpminud"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3B, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  /* missing VPMINUQ */
  { "vextracti32x8", ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVXM_AVX512_IMM8          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X3B, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T8      },
  { "vextracti64x4", ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVXM_AVX512_IMM8          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0X3B, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T4      },

  { "vpmaxsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3C, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3C, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsb"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3C, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3D, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmaxsd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3D, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmaxsd"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3D, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  /* missing VPMAXSQ */
  { "vpmaxuw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3E, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxuw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3E, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxuw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3E, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxud"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmaxud"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmaxud"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpcmpeqb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpeqb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpeqb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpleb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpleb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpleb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnleb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnleb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnleb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},

  { "vpcmpeqw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpeqw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpeqw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpltw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmplew"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmplew"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmplew"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpneqw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 3, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnltw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnlew"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnlew"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},
  { "vpcmpnlew"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x3F, 5, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM},

  /* missing VPMAXUQ */
  { "vpmulld"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x40, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmulld"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x40, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmulld"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x40, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "kxnorw"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_K_K                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X46, 0                                                                                                    },
  { "kxnorb"       , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_K_K                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X46, 0                                                                                                    },
  { "kxnorq"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_K                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X46, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1},
  { "kxnord"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_K_K                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X46, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1},
  /* missing VPMULLQ */
  { "vsqrtps"      , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsqrtps"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsqrtps"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsqrtpd"      , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsqrtpd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsqrtpd"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x51, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vandps"       , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x54, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vandps"       , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x54, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vandps"       , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x54, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorps"        , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorps"        , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorps"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorpd"        , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorpd"        , ORC_TARGET_AVX512_VL_DQ  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vorpd"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x56, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vaddpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpbroadcastd" , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM32                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastd" , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM32                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastd" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM32             , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x58, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vmulps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmulps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmulps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmulpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmulpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmulpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpbroadcastq" , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM64                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastq" , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM64                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastq" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_SSEM64             , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x59, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vcvtps2pd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtps2pd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtps2pd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtpd2ps"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    },
  { "vcvtpd2ps"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    },
  { "vcvtpd2ps"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX_AVX512M               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    },

  { "vcvtdq2ps"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtdq2ps"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtdq2ps"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtps2dq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtps2dq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvtps2dq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvttps2dq"   , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvttps2dq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vcvttps2dq"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                                                      },
  { "vsubps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsubps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsubps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsubpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsubpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vsubpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vminpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vdivpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxps"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxps"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxpd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vmaxpd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x5f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpunpcklbw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x60, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpcklbw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x60, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpcklbw"   , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x60, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpcklwd"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x61, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpcklwd"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x61, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpcklwd"   , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x61, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckldq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x62, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckldq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x62, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckldq"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x62, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpacksswb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x63, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpacksswb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x63, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpacksswb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x63, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpgtb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpgtb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpgtb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vpblendmd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpblendmd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpblendmd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpblendmq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpblendmq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpblendmq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x64, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x65, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpgtw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x65, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpgtw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x65, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpblendmw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vpcmpgtd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpcmpgtd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x66, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpackuswb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x67, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpackuswb"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x67, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpackuswb"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x67, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckhbw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x68, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckhbw"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x68, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckhbw"   , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x68, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vpunpckhwd"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x69, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckhwd"   , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x69, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpunpckhwd"   , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x69, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vpunpckhdq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckhdq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckhdq"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpackssdw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpackssdw"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpackssdw"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpunpcklqdq"  , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpcklqdq"  , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpcklqdq"  , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpunpckhqdq"  , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckhqdq"  , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpunpckhqdq"  , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vmovd"        , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_SSE_REG32M32                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6e, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vmovq"        , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_SSE_REG64M64                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6e, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vmovdqa32"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa32"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa32"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M            , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x6f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufd"      , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpshufd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpshufd"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpshuflw"     , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshuflw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshuflw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufhw"     , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufhw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpshufhw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x70, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrlw"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrlw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrlw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsraw"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsraw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsraw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsllw"       , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsllw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsllw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x71, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrld"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrld"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrad"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrad"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrad"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsraq"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsraq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsraq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 4, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpslld"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpslld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpslld"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x72, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrlq"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrlq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrlq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsrldq"      , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 3, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrldq"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 3, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsrldq"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 3, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsllq"       , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsllq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsllq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 6, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpslldq"      , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 7, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpslldq"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVXM_IMM8                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 7, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpslldq"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512M_IMM8       , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x73, 7, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X74, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X74, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X74, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X75, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X75, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpcmpeqw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0X75, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
#if 0
  { "pcmpeqd"      , ORC_TARGET_SSE_SSE2, ORC_SSE_INSN_TYPE_SSE_SSEM, ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F, 0x76 },
#endif
  { "vpbroadcastb" , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM8                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x78, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastb" , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_SSEM8                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x78, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastb" , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_SSEM8              , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x78, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_SSEM16                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x79, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_SSEM16                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x79, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_SSEM16             , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x79, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },

  { "vpbroadcastb" , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_REG32TO64                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastb" , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_REG32TO64                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastb" , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_REG32TO64          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7a, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSE_REG32TO64                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_REG32TO64                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastw" , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_REG32TO64          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7b, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastd" , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_REG32                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastd" , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_REG32                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastd" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_REG32              , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastq" , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_REG64                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastq" , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_REG64                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpbroadcastq" , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_REG64              , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7c, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpermt2b"     , ORC_TARGET_AVX512_VL_VBMI, ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2b"     , ORC_TARGET_AVX512_VL_VBMI, ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2b"     , ORC_TARGET_AVX512_VBMI   , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2w"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2w"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2w"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vmovd"        , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_REG32M32_SSE                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7e, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpermt2d"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2d"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2d"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermt2q"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermt2q"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpermt2q"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vmovq"        , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_SSE_SSEM64                   , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7e, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vmovdqa32"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa32"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa32"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqa64"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu8"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_VL_BW  , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu16"    , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu32"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSEM_SSE                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVXM_AVX                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovdqu64"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512M_AVX512            , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x7f, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermb"       , ORC_TARGET_AVX512_VL_VBMI, ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermb"       , ORC_TARGET_AVX512_VL_VBMI, ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermb"       , ORC_TARGET_AVX512_VBMI   , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpermw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F38, 0x8d, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "kmovw"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_KM16                    , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x90                                                                                                           },
  { "kmovq"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_KM64                    , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x90, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovb"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_KM8                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x90                                                                                                          },
  { "kmovd"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_KM32                    , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x90, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovw"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_M16_K                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x91                                                                                                          },
  { "kmovq"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_M64_K                     , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x91, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovb"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_M8_K                      , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x91                                                                                                          },
  { "kmovd"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_M32_K                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x91, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovw"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_REG32                   , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x92                                                                                                          },
  { "kmovq"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_REG64                   , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x92, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovb"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_K_REG32                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x92                                                                                                          },
  { "kmovd"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_K_REG32                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x92, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovw"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_REG32_K                   , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x93                                                                                                          },
  { "kmovq"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_REG64_K                   , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x93, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "kmovb"        , ORC_TARGET_AVX512_DQ     , ORC_AVX512_INSN_TYPE_REG32_K                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x93                                                                                                          },
  { "kmovd"        , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_REG32_K                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0x93, 0                                                                     , ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },

  { "vcmpeqps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpeqps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpeqps"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltps"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpleps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpleps"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpleps"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_NONE, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K                                    , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpeqpd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpeqpd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpeqpd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltpd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltpd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmpltpd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 1, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmplepd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_SSE_SSEM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmplepd"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_K_AVX_AVXM                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcmplepd"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_K_AVX512_AVX512M          , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc2, 2, ORC_X86_INSN_OPCODE_FLAG_EVEX_K | ORC_X86_INSN_OPCODE_FLAG_VEX_W1  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },

  { "vpinsrw"      , ORC_TARGET_AVX512_BW     , ORC_AVX_INSN_TYPE_SSE_SSE_REG32M16_IMM8        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xc4, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
#if 0
  { "pextrw"       , ORC_TARGET_SSE_SSE2, ORC_SSE_INSN_TYPE_REG32TO64_SSE_IMM8, ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F, 0xc5 },
  { "vblendpd"     , 0, ORC_AVX_INSN_TYPE_AVX_AVX_AVXM_IMM8      , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F3A, 0x0d},
#endif
  { "vpsrlw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrlw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrlw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrld"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrlq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrlq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrlq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpaddq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpmullw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmullw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmullw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovq"        , ORC_TARGET_AVX512_F      , ORC_SSE_INSN_TYPE_SSEM64_SSE                   , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd6, 0, ORC_X86_INSN_OPCODE_FLAG_VEX_W1                                    , ORC_X86_INSN_TUPLE_TYPE_T1_SCALAR },
  { "vpsubusb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubusb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubusb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubusw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubusw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubusw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xd9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminub"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xda, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminub"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xda, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminub"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xda, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpandd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddusb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddusb"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddusb"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddusw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddusw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddusw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxub"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xde, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxub"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xde, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxub"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xde, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpandnd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandnd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandnd"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandnq"      , ORC_TARGET_AVX512_F      , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandnq"      , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpandnq"      , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xdf, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpavgb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe0, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpavgb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe0, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpavgb"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe0, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsraw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsraw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsraw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsrad"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpsrad"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpsrad"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpsraq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpsraq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpsraq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128},
  { "vpavgw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpavgw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpavgw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhuw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhuw"     , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhuw"     , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmulhw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe5, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vcvtdq2pd"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF },
  { "vcvtdq2pd"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF },
  { "vcvtdq2pd"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVXM               , ORC_X86_INSN_OPCODE_PREFIX_0XF3, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_HALF },
  { "vcvtpd2dq"    , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vcvtpd2dq"    , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vcvtpd2dq"    , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX_AVX512M               , ORC_X86_INSN_OPCODE_PREFIX_0XF2, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vcvttpd2dq"   , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_SSE_SSEM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vcvttpd2dq"   , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_AVXM                     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vcvttpd2dq"   , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX_AVX512M               , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe6, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
#if 0
  { "cvttpd2dq"    , ORC_TARGET_SSE_SSE2, ORC_SSE_INSN_TYPE_SSE_SSEM     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F, 0xe6 },
#endif
  { "vmovntdq"     , ORC_TARGET_AVX512_VL_F   , ORC_SSE_INSN_TYPE_MEM_SSE                      , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe7, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovntdq"     , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_MEM_AVX                      , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe7, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vmovntdq"     , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_MEM_AVX512                , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe7, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsb"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubsw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xe9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xea, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xea, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpminsw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xea, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpord"        , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpord"        , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpord"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vporq"        , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vporq"        , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vporq"        , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xeb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },

  { "vpaddsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xec, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddsb"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xec, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddsb"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xec, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xed, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xed, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddsw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xed, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xee, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xee, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpmaxsw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xee, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpxord"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpxord"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpxord"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpxorq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpxorq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpxorq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xef, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsllw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsllw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsllw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf1, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpslld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpslld"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpslld"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf2, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsllq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsllq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpsllq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_SSEM        , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf3, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_MEM_128 },
  { "vpmuludq"     , ORC_TARGET_AVX512_VL     , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "vpmuludq"     , ORC_TARGET_AVX512_VL     , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "vpmuludq"     , ORC_TARGET_AVX512_VL     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf4, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1 },
  { "vpsadbw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf6, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsadbw"      , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf6, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsadbw"      , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf6, 0, 0                                                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubb"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf8, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xf9, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpsubd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfa, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsubd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfa, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsubd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfa, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsubq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsubq"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpsubq"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfb, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z | ORC_X86_INSN_OPCODE_FLAG_VEX_W1, ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddb"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddb"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfc, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddw"       , ORC_TARGET_AVX512_VL_BW  , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddw"       , ORC_TARGET_AVX512_BW     , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfd, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL_MEM },
  { "vpaddd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_SSE_SSE_SSEM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfe, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddd"       , ORC_TARGET_AVX512_VL_F   , ORC_AVX_INSN_TYPE_AVX_AVX_AVXM                 , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfe, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
  { "vpaddd"       , ORC_TARGET_AVX512_F      , ORC_AVX512_INSN_TYPE_AVX512_AVX512_AVX512M     , ORC_X86_INSN_OPCODE_PREFIX_0X66, ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F  , 0xfe, 0, ORC_X86_INSN_OPCODE_FLAG_EVEX_K_Z                                  , ORC_X86_INSN_TUPLE_TYPE_FULL },
};
/* clang-format on */

static orc_bool
orc_avx512_insn_validate_target_flags (const OrcAVX512InsnOp *op,
    int index, OrcCompiler *c)
{
  if ((c->target_flags & op->target_flags) != op->target_flags) {
    ORC_ERROR ("Using unsupported instruction %s (%d) [t: %08x i: %08x]",
        op->name, index, c->target_flags, op->target_flags);
    return FALSE;
  } else {
    return TRUE;
  }
}

static void
orc_avx512_insn_from_opcode (OrcX86Insn *insn, int index,
    const OrcAVX512InsnOp *op, int k, orc_bool zero)
{
  orc_bool mask_only = TRUE;

  /* common attributes */
  insn->name = op->name;
  insn->opcode = op->opcode;
  insn->opcode_type = ORC_X86_INSN_OPCODE_TYPE_OTHER;
  insn->opcode_escape = op->escape;
  insn->opcode_prefix = op->prefix;
  insn->opcode_flags = op->flags;
  insn->tuple_type = op->tuple_type;
  /*
   * If the operands require a K register, use VEX.L0/L1 prefix
   * If the operands require a XMM register, use EVEX128 prefix,
   * If the operands require a YMM register, use EVEX256 prefix,
   * If the operands require a ZMM register, use EVEX512 prefix
   */
  if (op->avx512_operands & (ORC_AVX512_INSN_OPERAND_OP1_K |
      ORC_AVX512_INSN_OPERAND_OP2_K | ORC_AVX512_INSN_OPERAND_OP3_K)) {
    insn->prefix = ORC_X86_INSN_PREFIX_VEX128;
    /* For more than two operands, use VEX.L1 (VEX256) */
    if (op->operands & ORC_X86_INSN_OPERAND_OP3_REG) {
      insn->prefix = ORC_X86_INSN_PREFIX_VEX256;
    }
  }
  if (op->avx512_operands & (ORC_SSE_INSN_OPERAND_OP1_XMM |
      ORC_SSE_INSN_OPERAND_OP2_XMM | ORC_AVX_INSN_OPERAND_OP3_XMM |
      ORC_AVX_INSN_OPERAND_OP4_XMM)) {
    insn->prefix = ORC_X86_INSN_PREFIX_EVEX128;
    mask_only = FALSE;
  }

  if (op->avx512_operands & (ORC_AVX_INSN_OPERAND_OP1_YMM |
      ORC_AVX_INSN_OPERAND_OP2_YMM | ORC_AVX_INSN_OPERAND_OP3_YMM |
      ORC_AVX_INSN_OPERAND_OP4_YMM)) {
    insn->prefix = ORC_X86_INSN_PREFIX_EVEX256;
    mask_only = FALSE;
  }

  if (op->avx512_operands & (ORC_AVX512_INSN_OPERAND_OP1_ZMM |
      ORC_AVX512_INSN_OPERAND_OP2_ZMM | ORC_AVX512_INSN_OPERAND_OP3_ZMM |
      ORC_AVX512_INSN_OPERAND_OP4_ZMM)) {
    insn->prefix = ORC_X86_INSN_PREFIX_EVEX512;
    mask_only = FALSE;
  }

  insn->extension = op->extension;
  insn->k = k;
  insn->zero = zero;
  if (!orc_x86_insn_encoding_from_operands (&insn->encoding, op->operands,
      op->extension, mask_only)) {
    ORC_ERROR ("Can not encode %s (%d) opcode", op->name, index);
  }
#if DEBUG_INSN
  ORC_ERROR ("Ins %s encoded as %s %d", op->name, orc_x86_insn_encoding_to_string (insn->encoding), insn->prefix);
#endif
}

/* AVX512 supports per instruction floating operation flags but only on
 * AVX512 operands, not AVX or SSE. Sadly, there is no stmxcsr or ldmxcsr
 * on EVEX encoding, only on VEX. To avoid having to depend on AVX target
 * we call the instruction directly here
 */
static void
orc_avx512_insn_emit_vex_mxcsr (OrcCompiler *c, const char *name,
    orc_uint32 opcode, orc_uint8 extension, int offset, int reg)
{
  OrcX86Insn *insn;
  unsigned int operands = ORC_X86_INSN_TYPE_MEM32; 

  insn = orc_x86_get_output_insn (c);
  insn->name = name;
  insn->opcode = opcode;
  insn->opcode_type = ORC_X86_INSN_OPCODE_TYPE_OTHER;
  insn->opcode_escape = ORC_X86_INSN_OPCODE_ESCAPE_SEQUENCE_0X0F;
  insn->opcode_prefix = ORC_X86_INSN_OPCODE_PREFIX_NONE;
  insn->prefix = ORC_X86_INSN_PREFIX_VEX128;
  insn->extension = extension;
  orc_x86_insn_encoding_from_operands (&insn->encoding, operands, 0, FALSE);
  insn->operands[0].type = ORC_X86_INSN_OPERAND_TYPE_OFF;
  insn->operands[0].reg = reg;
  insn->offset = offset;
}

static orc_bool
orc_avx512_insn_validate_reg (int reg)
{
  if (reg >= ORC_AVX512_ZMM0 && reg < ORC_AVX512_ZMM0 + 32)
    return TRUE;
  else
    return FALSE;
}

static orc_bool
orc_avx512_insn_validate_mask_reg (int reg)
{
  if (reg >= ORC_AVX512_K0 && reg < ORC_AVX512_K0 + 8)
    return TRUE;
  else
    return FALSE;
}

/* For AVX we extend it to 32 registers */
static orc_bool
orc_avx512_insn_validate_avx_reg (int reg)
{
  if (reg >= X86_YMM0 && reg < X86_YMM0 + 32)
    return TRUE;
  else
    return FALSE;
}

/* For SSE we extend it to 32 registers */
static orc_bool
orc_avx512_insn_validate_sse_reg (int reg)
{
  if (reg >= X86_XMM0 && reg < X86_XMM0 + 32)
    return TRUE;
  else
    return FALSE;
}

static orc_bool
orc_avx512_insn_validate_operand3 (OrcAVX512InsnOp * op, int reg)
{
  if ((op->avx512_operands & ORC_AVX512_INSN_OPERAND_OP3_ZMM) &&
      orc_avx512_insn_validate_reg (reg)) {
    return TRUE;
  } else if ((op->avx512_operands & ORC_AVX512_INSN_OPERAND_OP3_K) &&
      orc_avx512_insn_validate_mask_reg (reg)) {
    return TRUE;
  } else if ((op->avx512_operands & ORC_AVX_INSN_OPERAND_OP3_YMM) &&
      orc_avx512_insn_validate_avx_reg (reg)) {
    return TRUE;
  } else if ((op->avx512_operands & ORC_AVX_INSN_OPERAND_OP3_XMM) &&
      orc_avx512_insn_validate_sse_reg (reg)) {
    return TRUE;
  } else {
    ORC_ERROR ("Unsupported operand 3 with reg %d for op %s", reg, op->name);
    return FALSE;
  }
}

static orc_bool
orc_avx512_insn_validate_operand4 (OrcAVX512InsnOp * op, int reg)
{
  if ((op->avx512_operands & ORC_AVX512_INSN_OPERAND_OP4_ZMM) &&
      orc_avx512_insn_validate_reg (reg)) {
    return TRUE;
  } else if ((op->avx512_operands & ORC_AVX_INSN_OPERAND_OP4_YMM) &&
      orc_avx512_insn_validate_avx_reg (reg)) {
    return TRUE;
  } else if ((op->avx512_operands & ORC_AVX_INSN_OPERAND_OP4_XMM) &&
      orc_avx512_insn_validate_sse_reg (reg)) {
    return TRUE;
  } else {
    ORC_ERROR ("Unsupported operand 4 with reg %d for op %s", reg, op->name);
    return FALSE;
  }
}

static orc_bool
orc_avx512_insn_validate_operand (OrcX86InsnOperandNum n, int reg, void *data)
{
  OrcAVX512InsnOp *op = (OrcAVX512InsnOp *)data;
  switch (n) {
    case ORC_X86_INSN_OPERAND_NUM_1:
      ORC_AVX512_INSN_VALIDATE_OPERAND_12 (op, 1, reg)
      break;
    case ORC_X86_INSN_OPERAND_NUM_2:
      ORC_AVX512_INSN_VALIDATE_OPERAND_12 (op, 2, reg)
      break;
    case ORC_X86_INSN_OPERAND_NUM_3:
      return orc_avx512_insn_validate_operand3 (op, reg);
    case ORC_X86_INSN_OPERAND_NUM_4:
      return orc_avx512_insn_validate_operand4 (op, reg);
    default:
      ORC_ERROR ("Unsupported operand num %d", n);
      return FALSE;
  }
  return TRUE;
}

static orc_bool
orc_avx512_insn_validate_operands (OrcCompiler *c, OrcAVX512Insn index,
    OrcX86InsnOperandSize size, int dest, int src0, int src1, int src2,
    orc_int64 imm)
{
  OrcAVX512InsnOp *op = orc_avx512_ops + index;

  if (!orc_avx512_insn_validate_target_flags (op, index, c)) {
    return FALSE;
  }

  if (!orc_x86_insn_validate_operands (c, op->operands, size, dest, src0, src1,
    src2, imm, &orc_avx512_insn_validate_operand, (void *)op)) {
    ORC_ERROR ("Failed validating %s (%d)", op->name, index);
    return FALSE;
  }

  return TRUE;
} 

void
orc_avx512_insn_emit_stmxcsr (OrcCompiler *c, int offset, int reg)
{
  orc_avx512_insn_emit_vex_mxcsr (c, "vstmxcsr", 0xae, 3, offset, reg);
}

void
orc_avx512_insn_emit_ldmxcsr (OrcCompiler *c, int offset, int reg)
{
  orc_avx512_insn_emit_vex_mxcsr (c, "vldmxcsr", 0xae, 2, offset, reg);
}

/**
 * orc_avx512_insn_emit_mov_reg_memoffset:
 *
 * Loads a register with memory content
 *
 * @c: The #OrcCompiler that emits the instruction
 * @size: The size of the memory content in bytes
 * @offset: The offset to add to the base address at @s0
 * @s0: The source address
 * @d: The destination register to get the contents into
 * @aligned: In case the memory is aligned
 */
void
orc_avx512_insn_emit_mov_memoffset_reg (OrcCompiler *c, int size, int offset,
    int s0, int d, int is_aligned)
{
  switch (size) {
    case 1:
      orc_avx512_insn_emit_vpxord (c, d, d, d, ORC_REG_INVALID, FALSE);
      orc_avx512_insn_emit_vpinsrb_r_r_m_i (c, 0, offset,
          ORC_AVX512_SSE_REG (d), s0, ORC_AVX512_SSE_REG (d));
      break;
    case 2:
      orc_avx512_insn_emit_vpxord (c, d, d, d, ORC_REG_INVALID, FALSE);
      orc_avx512_insn_emit_vpinsrw_r_r_m_i (c, 0, offset,
          ORC_AVX512_SSE_REG (d), s0, ORC_AVX512_SSE_REG (d));
      break;
    case 4:
      orc_avx512_insn_emit_vmovd_r_m (c, offset, s0,
          ORC_AVX512_SSE_REG (d));
      break;
    case 8:
      orc_avx512_insn_emit_vmovq_sse_m (c, offset, s0,
          ORC_AVX512_SSE_REG (d));
      break;
    case 16:
      if (is_aligned) {
        orc_avx512_insn_sse_emit_vmovdqa32_r_m (c, offset, s0,
            ORC_AVX512_SSE_REG (d), ORC_REG_INVALID, FALSE);
      } else {
        orc_avx512_insn_sse_emit_vmovdqu32_r_m (c, offset, s0,
            ORC_AVX512_SSE_REG (d), ORC_REG_INVALID, FALSE);
      }
      break;
    case 32:
      if (is_aligned) {
        orc_avx512_insn_avx_emit_vmovdqa32_r_m (c, offset, s0,
            ORC_AVX512_AVX_REG (d), ORC_REG_INVALID, FALSE);
      } else {
        orc_avx512_insn_avx_emit_vmovdqu32_r_m (c, offset, s0,
            ORC_AVX512_AVX_REG (d), ORC_REG_INVALID, FALSE);
      }
      break;
    case 64:
      if (is_aligned) {
        orc_avx512_insn_emit_vmovdqa32_r_m (c, offset, s0, d,
            ORC_REG_INVALID, FALSE);
      } else {
        orc_avx512_insn_emit_vmovdqu32_r_m (c, offset, s0, d,
            ORC_REG_INVALID, FALSE);
      }
      break;
    default:
      ORC_COMPILER_ERROR (c, "bad load size %d", size);
      break;
  }
}

/**
 * orc_avx512_insn_emit_mov_reg_memoffset:
 *
 * Stores a register content into a memory address
 *
 * @c: The #OrcCompiler that emits the instruction
 * @size: The size of the memory content in bytes
 * @s0: The source register to get the contents from
 * @offset: The offset to add to the base address at @d
 * @d: The register that holds the destination address
 * @aligned: In case the memory is aligned
 * @uncached: In case the memory access does not need to be cached
 */
void
orc_avx512_insn_emit_mov_reg_memoffset (OrcCompiler *c, int size, int s0,
    int offset, int d, int aligned, int uncached)
{
  switch (size) {
    case 1:
      orc_avx512_insn_emit_vpextrb_m_r_i (c, 0, offset,
          ORC_AVX512_SSE_REG (s0), d);
      break;
    case 2:
      orc_avx512_insn_emit_vpextrw_m_r_i (c, 0, offset,
          ORC_AVX512_SSE_REG (s0), d);
      break;
    case 4:
      orc_avx512_insn_emit_vmovd_m_r (c, offset, ORC_AVX512_SSE_REG (s0), d);
      break;
    case 8:
      orc_avx512_insn_emit_vmovq_m_r (c, offset, ORC_AVX512_SSE_REG (s0), d);
      break;
    case 16:
      if (aligned) {
        if (uncached) {
          orc_avx512_insn_sse_emit_vmovntdq (c, offset, ORC_AVX512_SSE_REG (s0),
              d);
        } else {
          orc_avx512_insn_sse_emit_vmovdqa32_m_r (c, offset,
              ORC_AVX512_SSE_REG (s0), d, ORC_REG_INVALID, FALSE);
        }
      } else {
        orc_avx512_insn_sse_emit_vmovdqu32_m_r (c, offset,
            ORC_AVX512_SSE_REG (s0), d, ORC_REG_INVALID, FALSE);
      }
      break;
    case 32:
      if (aligned) {
        if (uncached) {
          orc_avx512_insn_avx_emit_vmovntdq (c, offset, ORC_AVX512_AVX_REG (s0),
              d);
        } else {
          orc_avx512_insn_avx_emit_vmovdqa32_m_r (c, offset,
              ORC_AVX512_AVX_REG (s0), d, ORC_REG_INVALID, FALSE);
        }
      } else {
        orc_avx512_insn_avx_emit_vmovdqu32_m_r (c, offset,
            ORC_AVX512_AVX_REG (s0), d, ORC_REG_INVALID, FALSE);
      }
      break;
    case 64:
      if (aligned) {
        if (uncached) {
          orc_avx512_insn_emit_vmovntdq (c, offset, s0, d);
        } else {
          orc_avx512_insn_emit_vmovdqa32_m_r (c, offset, s0, d,
              ORC_REG_INVALID, FALSE);
        }
      } else {
        orc_avx512_insn_emit_vmovdqu32_m_r (c, offset, s0, d,
            ORC_REG_INVALID, FALSE);
      }
      break;
    default:
      ORC_COMPILER_ERROR (c, "bad store size %d", size);
      break;
  }
}

/**
 * orc_avx512_insn_emit_avx512:
 *
 * Emit an AVX512 instruction where all operands are of type AVX512
 *
 * @c: The #OrcCompiler that emits the instruction
 * @i: The #OrcAVX512Insn to emit
 * @s0: The first source register to use
 * @s1: The second source register to use
 * @s2: The third source register to use
 * @d: The destination register
 * @m: The mask to use
 * @z: Use the zero bit or not
 */
void orc_avx512_insn_emit_avx512 (OrcCompiler *c, OrcAVX512Insn i,
    int s0, int s1, int s2, int d, int m, orc_bool z)
{
  OrcX86Insn *xinsn;
  const OrcAVX512InsnOp *op = orc_avx512_ops + i;

  if (!orc_avx512_insn_validate_operands (c, i,
      ORC_X86_INSN_OPERAND_SIZE_NONE, d, s0, s1, s2, 0)) {
    return;
  }
  xinsn = orc_x86_get_output_insn (c);
  orc_avx512_insn_from_opcode (xinsn, i, op, m, z);
  orc_x86_insn_set_operands (xinsn, op->operands,
      ORC_X86_INSN_OPERAND_SIZE_NONE, d, s0, s1, s2);

  /* Special case for cmpeqpd until cmpleps, all are REG_REG_REGM_IMM8 but faked on
   * the definition
   */
  if ((i >= ORC_AVX512_INSN_SSE_vcmpeqps && i <= ORC_AVX512_INSN_vcmplepd) ||
      (i >= ORC_AVX512_INSN_SSE_vpcmpeqb && i <= ORC_AVX512_INSN_vpcmpnlew) ||
      (i >= ORC_AVX512_INSN_SSE_vpcmpeqd && i <= ORC_AVX512_INSN_vpcmpnled)) {
    xinsn->encoding = ORC_X86_INSN_ENCODING_RVMI;
    orc_x86_insn_operand_set (&xinsn->operands[3],
        ORC_X86_INSN_OPERAND_TYPE_IMM, ORC_X86_INSN_OPERAND_SIZE_8, 0);
    xinsn->imm = op->extension;
    xinsn->extension = 0;
  }
}

/**
 * orc_avx512_insn_emit_store_memoffset:
 *
 * Emit an AVX512 instruction that stores the content of a register into a memory address
 *
 * @c: The #OrcCompiler that emits the instruction
 * @i: The #OrcAVX512Insn to emit
 * @imm: The immediate value in case the instruction requires one
 * @offset: The offset to add to the base address at @d
 * @s0: The source register to get the contents from
 * @d: The register that holds the destination address
 * @m: The mask to use
 * @z: Use the zero bit or not
 */ 
void
orc_avx512_insn_emit_store_memoffset (OrcCompiler *c, OrcAVX512Insn i,
    int imm, int offset, int s0, int d, int m, orc_bool z)
{
  OrcX86Insn *xinsn;
  OrcX86InsnOperandSize size = c->is_64bit ? ORC_X86_INSN_OPERAND_SIZE_64 : ORC_X86_INSN_OPERAND_SIZE_32;
  const OrcAVX512InsnOp *op = orc_avx512_ops + i;

  if (!orc_avx512_insn_validate_operands (c, i, size, d, s0, ORC_REG_INVALID,
      ORC_REG_INVALID, 0)) {
    return;
  }
  xinsn = orc_x86_get_output_insn (c);
  orc_avx512_insn_from_opcode (xinsn, i, op, m, z);
  orc_x86_insn_set_operands (xinsn, op->operands,
      ORC_X86_INSN_OPERAND_SIZE_NONE, d, s0, ORC_REG_INVALID, ORC_REG_INVALID);
  orc_x86_insn_set_mem (xinsn, op->operands, size,
      ORC_X86_INSN_OPERAND_TYPE_OFF, d, s0, ORC_REG_INVALID, ORC_REG_INVALID);
  orc_x86_insn_set_imm (xinsn, op->operands, ORC_X86_INSN_OPERAND_SIZE_8, imm);
  xinsn->offset = offset;
}

/**
 * orc_avx512_insn_emit_load_memoffset:
 *
 * Emit an AVX512 instruction that loads the contents of a memory address into a register
 *
 * @c: The #OrcCompiler that emits the instruction
 * @i: The #OrcAVX512Insn to emit
 * @imm: The immediate value in case the instruction requires one
 * @offset: The offset to add to the base address at @s0 or @s1
 * @s0: The first source register to use
 * @s1: The second source register to use
 * @d: The register to set the contents to
 * @m: The mask to use
 * @z: Use the zero bit or not
 */
void
orc_avx512_insn_emit_load_memoffset (OrcCompiler *c, OrcAVX512Insn i,
    int imm, int offset, int s0, int s1, int d, int m, orc_bool z)
{
  OrcX86Insn *xinsn;
  OrcX86InsnOperandSize size = c->is_64bit ? ORC_X86_INSN_OPERAND_SIZE_64 :
      ORC_X86_INSN_OPERAND_SIZE_32;
  const OrcAVX512InsnOp *op = orc_avx512_ops + i;

  if (!orc_avx512_insn_validate_operands (c, i, size, d, s0, s1,
      ORC_REG_INVALID, imm)) {
    return;
  }
  xinsn = orc_x86_get_output_insn (c);
  orc_avx512_insn_from_opcode (xinsn, i, op, m, z);
  orc_x86_insn_set_operands (xinsn, op->operands,
      ORC_X86_INSN_OPERAND_SIZE_NONE, d, s0, s1, ORC_REG_INVALID);
  orc_x86_insn_set_mem (xinsn, op->operands, size,
      ORC_X86_INSN_OPERAND_TYPE_OFF, d, s0, s1, ORC_REG_INVALID);
  orc_x86_insn_set_imm (xinsn, op->operands, ORC_X86_INSN_OPERAND_SIZE_8, imm);
  xinsn->offset = offset;
}

/**
 * orc_avx512_insn_emit_imm:
 *
 * Emit an AVX512 instruction that requires an immediate value
 *
 * @c: The #OrcCompiler that emits the instruction
 * @i: The #OrcAVX512Insn to emit
 * @imm: The immediate value
 * @s0: The first source register to use
 * @s1: The second source register to use
 * @d: The destination register
 * @m: The mask to use
 * @z: Use the zero bit or not
 */
void
orc_avx512_insn_emit_imm (OrcCompiler *c, OrcAVX512Insn i, int size,
    int imm, int src0, int src1, int dest, int m, orc_bool z)
{
  OrcX86Insn *xinsn;
  const OrcAVX512InsnOp *op = orc_avx512_ops + i;
  const OrcX86InsnOperandSize opsize = orc_x86_insn_size_to_operand_size (size);

  if (!orc_avx512_insn_validate_operands (c, i, opsize, dest, src0, src1,
      ORC_REG_INVALID, imm)) {
    return;
  }
  xinsn = orc_x86_get_output_insn (c);
  orc_avx512_insn_from_opcode (xinsn, i, op, m, z);
  orc_x86_insn_set_operands (xinsn, op->operands, opsize, dest, src0, src1,
    ORC_REG_INVALID);
  orc_x86_insn_set_imm (xinsn, op->operands, ORC_X86_INSN_OPERAND_SIZE_8, imm);
}

void
orc_avx512_insn_emit_size (OrcCompiler *c, OrcAVX512Insn i, int size,
    int src0, int src1, int src2, int dest, int m, orc_bool z)
{
  OrcX86Insn *xinsn;
  const OrcX86InsnOperandSize opsize = orc_x86_insn_size_to_operand_size (size);
  const OrcAVX512InsnOp *op = orc_avx512_ops + i;

  if (!orc_avx512_insn_validate_operands (c, i, opsize, dest, src0, src1,
      src2, 0)) {
    return;
  }
  xinsn = orc_x86_get_output_insn (c);
  orc_avx512_insn_from_opcode (xinsn, i, op, m, z);
  orc_x86_insn_set_operands (xinsn, op->operands, opsize, dest, src0, src1, src2);
}
