VirtualBox

Ignore:
Timestamp:
Oct 20, 2014 4:04:09 PM (10 years ago)
Author:
vboxsync
Message:

DIS: #6251: AVX / VEX instructions support (two byte instructions only) and some fixes to the other tables.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmTables.cpp

    r53052 r53094  
    648648
    649649    /* e */
    650     OP("pavgn %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PAVGN,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     650    OP("pavgb %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PAVGB,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    651651    OP("psraw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSRAW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    652652    OP("psrad %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSRAD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    654654    OP("pmulhuw %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMULHUW, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    655655    OP("pmulhw %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMULHW,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    656     INVALID_OPCODE, /** @todo 0x0f 0xe6 cvtpd2dq// */
     656    INVALID_OPCODE,
    657657    OP("movntq %Wq,%Vq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_MOVNTQ,  OP_PARM_Wq,         OP_PARM_Vq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    658658    OP("psubsb %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBSB,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    666666
    667667    /* f */
    668     INVALID_OPCODE, /** @todo 0x0f 0xf0 lddqu */
     668    INVALID_OPCODE,
    669669    OP("psllw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSLLW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    670670    OP("pslld %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSLLD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    671671    OP("psllq %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSSQ,    OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    672672    OP("pmuludq %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMULUDQ, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    673     OP("paddwd %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADDWD, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    674     OP("psadbw %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADBW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    675     OP("maskmovq %Ppi,%Qpi", IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMASKMOVQ, OP_PARM_Ppi,      OP_PARM_Qpi,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     673    OP("pmaddwd %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMADDWD, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     674    OP("psadbw %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSADBW,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     675    OP("maskmovq %Ppi,%Qpi", IDX_ParseModRM,     IDX_UseModRM,   0,          OP_MASKMOVQ,OP_PARM_Ppi,        OP_PARM_Qpi,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    676676    OP("psubb %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBB,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    677677    OP("psubw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    678678    OP("psubd %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    679     OP("psubq %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     679    OP("psubq %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBQ,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    680680    OP("paddb %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADDB,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    681681    OP("paddw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADDW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    779779    OP("packssdw %Pdq,%Qdq", IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PACKSSDW,OP_PARM_Pdq,        OP_PARM_Qdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    780780    OP("punpcklqdq %Vdq,%Wdq",IDX_ParseModRM,    IDX_UseModRM,   0,          OP_PUNPCKLQDQ,OP_PARM_Vdq,      OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    781     OP("punpckhqd %Vdq,%Wdq",IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PUNPCKHQD, OP_PARM_Vdq,      OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     781    OP("punpckhqdq %Vdq,%Wdq",IDX_ParseModRM,    IDX_UseModRM,   0,          OP_PUNPCKHQDQ,OP_PARM_Vdq,      OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    782782    OP("movd %Vdq,%Ed",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_MOVD,    OP_PARM_Vdq,        OP_PARM_Ed,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    783783    OP("movdqa %Vdq,%Wdq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_MOVDQA,  OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    850850
    851851    /* e */
    852     OP("pavgn %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PAVGN,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     852    OP("pavgb %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PAVGB,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    853853    OP("psraw %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSRAW,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    854854    OP("psrad %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSRAD,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    873873    OP("psllq %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSSQ,    OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    874874    OP("pmuludq %Vdq,%Wdq",  IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMULUDQ, OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    875     OP("paddwd %Vdq,%Wdq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADDWD, OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    876     OP("psadbw %Vdq,%Wdq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PADBW,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    877     OP("maskmovdqu %Vdq,%Wdq",IDX_ParseModRM,    IDX_UseModRM,   0,          OP_PMASKMOVDQU, OP_PARM_Vdq,    OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     875    OP("pmaddwd %Vdq,%Wdq",  IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PMADDWD, OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     876    OP("psadbw %Vdq,%Wdq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSADBW,  OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     877    OP("maskmovdqu %Vdq,%Wdq",IDX_ParseModRM,    IDX_UseModRM,   0,          OP_MASKMOVDQU, OP_PARM_Vdq,    OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    878878    OP("psubb %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBB,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    879879    OP("psubw %Vdq,%Wdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PSUBW,   OP_PARM_Vdq,        OP_PARM_Wdq,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    10551055
    10561056    /* f */
    1057     INVALID_OPCODE_BLOCK
     1057    OP("lddqu %Vdq,%Mdq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_LDDQU,   OP_PARM_Vdq,         OP_PARM_Mdq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     1058    INVALID_OPCODE,
     1059    INVALID_OPCODE,
     1060    INVALID_OPCODE,
     1061    INVALID_OPCODE,
     1062    INVALID_OPCODE,
     1063    INVALID_OPCODE,
     1064    INVALID_OPCODE,
     1065    INVALID_OPCODE,
     1066    INVALID_OPCODE,
     1067    INVALID_OPCODE,
     1068    INVALID_OPCODE,
     1069    INVALID_OPCODE,
     1070    INVALID_OPCODE,
     1071    INVALID_OPCODE,
     1072    INVALID_OPCODE
    10581073};
    10591074
     
    29242939};
    29252940
     2941/* Vex codes for two bytes opcodes starting with 0Fh */
     2942const DISOPCODE g_aMapTwoBytesVex[256] =
     2943{
     2944    /* 0 */
     2945    INVALID_OPCODE_BLOCK
     2946
     2947    /* 1 */
     2948    OPVEX("vmovups %Vps,%Wps",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVUPS,      OP_PARM_Vps,    OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2949    OPVEX("vmovups %Wps,%Vps",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVUPS,      OP_PARM_Wps,    OP_PARM_Vps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2950    // vmovhlps Vq,Hq,Uq ???
     2951    OPVEX("vmovlps %Vq,%Hq,%Mq",     IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_MOVLPS,      OP_PARM_Vq,     OP_PARM_Hq,     OP_PARM_Mq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2952    OPVEX("vmovlps %Mq,%Vq",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVLPS,      OP_PARM_Mq,     OP_PARM_Vq,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2953    OPVEX("vunpcklps %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_UNPCKLPS,    OP_PARM_Vx,     OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2954    OPVEX("vunpckhps %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_UNPCKHPS,    OP_PARM_Vx,     OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2955    // vmovlhps Vdq,Hq,Uq ???
     2956    OPVEX("vmovhps %Vdq,%Hq,%Mq",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_MOVHPS,      OP_PARM_Vdq,    OP_PARM_Hq,     OP_PARM_Mq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2957    OPVEX("vmovhps %Mq,%Vq",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVHPS,      OP_PARM_Mq,     OP_PARM_Vq,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2958    INVALID_OPCODE,
     2959    INVALID_OPCODE,
     2960    INVALID_OPCODE,
     2961    INVALID_OPCODE,
     2962    INVALID_OPCODE,
     2963    INVALID_OPCODE,
     2964    INVALID_OPCODE,
     2965    INVALID_OPCODE,
     2966
     2967    /* 2 */
     2968    INVALID_OPCODE,
     2969    INVALID_OPCODE,
     2970    INVALID_OPCODE,
     2971    INVALID_OPCODE,
     2972    INVALID_OPCODE,
     2973    INVALID_OPCODE,
     2974    INVALID_OPCODE,
     2975    INVALID_OPCODE,
     2976    OPVEX("vmovaps %Vps,%Wps",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVAPS,      OP_PARM_Vps,    OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2977    OPVEX("vmovaps %Wps,%Vps",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVAPS,      OP_PARM_Wps,    OP_PARM_Vps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2978    INVALID_OPCODE,
     2979    OPVEX("vmovntps %Mps,%Vps",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVNTPS,     OP_PARM_Mps,    OP_PARM_Vps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2980    INVALID_OPCODE,
     2981    INVALID_OPCODE,
     2982    OPVEX("vucomiss %Vss,%Wss",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_UCOMISS,     OP_PARM_Vss,    OP_PARM_Wss,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2983    OPVEX("vcomiss %Vss,%Wss",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_COMISS,      OP_PARM_Vss,    OP_PARM_Wss,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2984
     2985    /* 3 */
     2986    INVALID_OPCODE_BLOCK
     2987
     2988    /* 4 */
     2989    INVALID_OPCODE_BLOCK
     2990
     2991    /* 5 */
     2992    OPVEX("vmovmskps %Gy,%Ups",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVMSKPS,    OP_PARM_Gy,      OP_PARM_Ups,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2993    OPVEX("vsqrtps %Vps,%Wps",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_SQRTPS,      OP_PARM_Vps,     OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2994    OPVEX("vrsqrtps %Vps,%Wps",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_RSQRTPS,     OP_PARM_Vps,     OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2995    OPVEX("vrcpps %Vps,%Wps",        IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_RCPPS,       OP_PARM_Vps,     OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2996    OPVEX("vandps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ANDPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2997    OPVEX("vandnps %Vps,%Hps,%Wps",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ANDNPS,      OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2998    OPVEX("vorps %Vps,%Hps,%Wps",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ORPS,        OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     2999    OPVEX("vxorps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_XORPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3000    OPVEX("vaddps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ADDPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3001    OPVEX("vmulps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MULPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3002    OPVEX("vcvtps2pd %Vpd,%Wps",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_CVTPS2PD,    OP_PARM_Vpd,     OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3003    OPVEX("vcvtdq2ps %Vps,%Wdq",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_CVTDQ2PS,    OP_PARM_Vps,     OP_PARM_Wdq,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3004    OPVEX("vsubps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_SUBPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3005    OPVEX("vminps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MINPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3006    OPVEX("vdivps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_DIVPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3007    OPVEX("vmaxps %Vps,%Hps,%Wps",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MAXPS,       OP_PARM_Vps,     OP_PARM_Hps,    OP_PARM_Wps,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3008
     3009    /* 6 */
     3010    INVALID_OPCODE_BLOCK
     3011
     3012    /* 7 */
     3013    INVALID_OPCODE,
     3014    INVALID_OPCODE,
     3015    INVALID_OPCODE,
     3016    INVALID_OPCODE,
     3017    INVALID_OPCODE,
     3018    INVALID_OPCODE,
     3019    INVALID_OPCODE,
     3020    // vzeroall ???
     3021    OPVEX("vzeroupper",     0,                  0,                  0,              0,         OP_EMMS,        OP_PARM_NONE,    OP_PARM_NONE,   OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3022    INVALID_OPCODE,
     3023    INVALID_OPCODE,
     3024    INVALID_OPCODE,
     3025    INVALID_OPCODE,
     3026    INVALID_OPCODE,
     3027    INVALID_OPCODE,
     3028    INVALID_OPCODE,
     3029    INVALID_OPCODE,
     3030
     3031    /* 8 */
     3032    INVALID_OPCODE_BLOCK
     3033
     3034    /* 9 */
     3035    INVALID_OPCODE_BLOCK
     3036
     3037    /* a */
     3038    INVALID_OPCODE_BLOCK
     3039
     3040    /* b */
     3041    INVALID_OPCODE_BLOCK
     3042
     3043    /* c */
     3044    INVALID_OPCODE,
     3045    INVALID_OPCODE,
     3046    OPVEX("vcmpss %Vps,%Hps,%Wps,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_CMPSS,   OP_PARM_Vps,  OP_PARM_Hps,  OP_PARM_Wps,   OP_PARM_Ib,     DISOPTYPE_HARMLESS),
     3047    INVALID_OPCODE,
     3048    INVALID_OPCODE,
     3049    INVALID_OPCODE,
     3050    OPVEX("vshufps %Vps,%Hps,%Wps,%Ib",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_SHUFPS,   OP_PARM_Vps,  OP_PARM_Hps,  OP_PARM_Wps,   OP_PARM_Ib,     DISOPTYPE_HARMLESS),
     3051    INVALID_OPCODE,
     3052    INVALID_OPCODE,
     3053    INVALID_OPCODE,
     3054    INVALID_OPCODE,
     3055    INVALID_OPCODE,
     3056    INVALID_OPCODE,
     3057    INVALID_OPCODE,
     3058    INVALID_OPCODE,
     3059    INVALID_OPCODE,
     3060
     3061    /* d */
     3062    INVALID_OPCODE_BLOCK
     3063
     3064    /* e */
     3065    INVALID_OPCODE_BLOCK
     3066
     3067    /* f */
     3068    INVALID_OPCODE_BLOCK
     3069};
     3070
     3071/* Vex codes for two bytes opcodes starting with 0Fh with prefix 66H*/
     3072const DISOPCODE g_aMapTwoBytesVex_66H[256] =
     3073{
     3074    /* 0 */
     3075    INVALID_OPCODE_BLOCK
     3076
     3077    /* 1 */
     3078    OPVEX("vmovupd %Vpd,%Wpd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVUPD,      OP_PARM_Vpd,    OP_PARM_Wpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3079    OPVEX("vmovupd %Wpd,%Vpd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVUPD,      OP_PARM_Wpd,    OP_PARM_Vpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3080    OPVEX("vmovlpd %Vq,%Hq,%Mq",     IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_MOVLPD,      OP_PARM_Vq,     OP_PARM_Hq,     OP_PARM_Mq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3081    OPVEX("vmovlpd %Mq,%Vq",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVLPD,      OP_PARM_Mq,     OP_PARM_Vq,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3082    OPVEX("vunpcklpd %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_UNPCKLPD,    OP_PARM_Vx,     OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3083    OPVEX("vunpckhpd %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_UNPCKHPD,    OP_PARM_Vx,     OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3084    OPVEX("vmovhpd %Vdq,%Hq,%Mq",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,          OP_MOVHPD,      OP_PARM_Vdq,    OP_PARM_Hq,     OP_PARM_Mq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3085    OPVEX("vmovhpd %Mq,%Vq",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVHPD,      OP_PARM_Mq,     OP_PARM_Vq,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3086    INVALID_OPCODE,
     3087    INVALID_OPCODE,
     3088    INVALID_OPCODE,
     3089    INVALID_OPCODE,
     3090    INVALID_OPCODE,
     3091    INVALID_OPCODE,
     3092    INVALID_OPCODE,
     3093    INVALID_OPCODE,
     3094
     3095    /* 2 */
     3096    INVALID_OPCODE,
     3097    INVALID_OPCODE,
     3098    INVALID_OPCODE,
     3099    INVALID_OPCODE,
     3100    INVALID_OPCODE,
     3101    INVALID_OPCODE,
     3102    INVALID_OPCODE,
     3103    INVALID_OPCODE,
     3104    OPVEX("vmovapd %Vpd,%Wpd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVAPD,      OP_PARM_Vpd,    OP_PARM_Wpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3105    OPVEX("vmovapd %Wpd,%Vpd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVAPD,      OP_PARM_Wpd,    OP_PARM_Vpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3106    INVALID_OPCODE,
     3107    OPVEX("vmovntpd %Mpd,%Vpd",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_MOVNTPD,     OP_PARM_Mpd,    OP_PARM_Vpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3108    INVALID_OPCODE,
     3109    INVALID_OPCODE,
     3110    OPVEX("vucomisd %Vsd,%Wsd",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_UCOMISD,     OP_PARM_Vsd,    OP_PARM_Wsd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3111    OPVEX("vcomisd %Vsd,%Wsd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,          OP_COMISD,      OP_PARM_Vsd,    OP_PARM_Wsd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3112
     3113    /* 3 */
     3114    INVALID_OPCODE_BLOCK
     3115
     3116    /* 4 */
     3117    INVALID_OPCODE_BLOCK
     3118
     3119    /* 5 */
     3120    OPVEX("vmovmskpd %Gy,%Upd",      IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVMSKPD,    OP_PARM_Gy,      OP_PARM_Upd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3121    OPVEX("vsqrtpd %Vpd,%Wpd",       IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_SQRTPD,      OP_PARM_Vpd,     OP_PARM_Wpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3122    INVALID_OPCODE,
     3123    INVALID_OPCODE,
     3124    OPVEX("vandpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ANDPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3125    OPVEX("vandnpd %Vpd,%Hpd,%Wpd",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ANDNPD,      OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3126    OPVEX("vorpd %Vpd,%Hpd,%Wpd",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ORPD,        OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3127    OPVEX("vxorpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_XORPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3128    OPVEX("vaddpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_ADDPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3129    OPVEX("vmulpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MULPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3130    OPVEX("vcvtpd2ps %Vps,%Wpd",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_CVTPD2PS,    OP_PARM_Vps,     OP_PARM_Wpd,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3131    OPVEX("vcvtps2dq %Vdq,%Wps",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_CVTPS2DQ,    OP_PARM_Vdq,     OP_PARM_Wps,    OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3132    OPVEX("vsubpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_SUBPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3133    OPVEX("vminpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MINPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3134    OPVEX("vdivpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_DIVPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3135    OPVEX("vmaxpd %Vpd,%Hpd,%Wpd",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_MAXPD,       OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3136
     3137
     3138    /* 6 */
     3139    OPVEX("vpunpcklbw %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKLBW,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3140    OPVEX("vpunpcklwd %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKLWD,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3141    OPVEX("vpunpckldq %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKLDQ,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3142    OPVEX("vpacksswb %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PACKSSWB,    OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3143    OPVEX("vpcmpgtb %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPGTB,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3144    OPVEX("vpcmpgtw %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPGTW,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3145    OPVEX("vpcmpgtd %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPGTD,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3146    OPVEX("vpackuswb %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PACKUSWB,    OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3147    OPVEX("vpunpckhbw %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKHBW,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3148    OPVEX("vpunpckhwd %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKHWD,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3149    OPVEX("vpunpckhdq %Vx,%Hx,%Wx",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKHDQ,   OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3150    OPVEX("vpackssdw %Vx,%Hx,%Wx",   IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PACKSSDW,    OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3151    OPVEX("vpunpcklqdq %Vx,%Hx,%Wx", IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKLQDQ,  OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3152    OPVEX("vpunpckhqdq %Vx,%Hx,%Wx", IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PUNPCKHQDQ,  OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3153    OPVEX("vmovd/vmovq %Vy,%Ey",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVD,        OP_PARM_Vy,      OP_PARM_Ey,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3154    OPVEX("vmovdqa %Vx,%Wx",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVDQA,      OP_PARM_Vx,      OP_PARM_Wx,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3155
     3156    /* 7 */
     3157    OPVEX("vpshufd %Vx,%Wx,%Ib",     IDX_ParseModRM,     IDX_UseModRM,    IDX_ParseImmByte,  0,         OP_PSHUFD,      OP_PARM_Vx,      OP_PARM_Wx,     OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3158    INVALID_OPCODE,
     3159    INVALID_OPCODE,
     3160    INVALID_OPCODE,
     3161    OPVEX("vpcmpeqb %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPEQB,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3162    OPVEX("vpcmpeqw %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPEQW,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3163    OPVEX("vpcmpeqd %Vx,%Hx,%Wx",    IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_PCMPEQD,     OP_PARM_Vx,      OP_PARM_Hx,     OP_PARM_Wx,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3164    INVALID_OPCODE,
     3165    INVALID_OPCODE,
     3166    INVALID_OPCODE,
     3167    INVALID_OPCODE,
     3168    INVALID_OPCODE,
     3169    OPVEX("vhaddpd %Vpd,%Hpd,%Wpd",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_HADDPD,      OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3170    OPVEX("vhsubpd %Vpd,%Hpd,%Wpd",  IDX_ParseModRM,     IDX_ParseVexDest,   IDX_UseModRM,   0,         OP_HSUBPD,      OP_PARM_Vpd,     OP_PARM_Hpd,    OP_PARM_Wpd,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3171    OPVEX("vmovd/vmovq %Ey,%Vy",     IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVD,        OP_PARM_Ey,      OP_PARM_Vy,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3172    OPVEX("vmovdqa %Wx,%Vx",         IDX_ParseModRM,     IDX_UseModRM,       0,              0,         OP_MOVDQA,      OP_PARM_Wx,      OP_PARM_Vx,     OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     3173
     3174    /* 8 */
     3175    INVALID_OPCODE_BLOCK
     3176
     3177    /* 9 */
     3178    INVALID_OPCODE_BLOCK
     3179
     3180    /* a */
     3181    INVALID_OPCODE_BLOCK
     3182
     3183    /* b */
     3184    INVALID_OPCODE_BLOCK
     3185
     3186    /* c */
     3187    INVALID_OPCODE,
     3188    INVALID_OPCODE,
     3189    OPVEX("vcmpps %Vpd,%Hpd,%Wpd,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_CMPSS,   OP_PARM_Vpd,  OP_PARM_Hpd,  OP_PARM_Wpd,  OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3190    INVALID_OPCODE,
     3191    // vpinsrw Vdq,Hdq,Ry/Mw,Ib
     3192    OPVEX("vpinsrw %Vdq,%Hdq,%Ry,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_PINSRW,  OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Ry,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3193    OPVEX("vpextrw %Gd,%Udq,%Ib",      IDX_ParseModRM,    IDX_UseModRM,       IDX_ParseImmByte,              0,  OP_PEXTRW,  OP_PARM_Gd,   OP_PARM_Udq,  OP_PARM_Ib,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3194    OPVEX("vshufpd %Vpd,%Hpd,%Wpd,%Ib",IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_SHUFPD,  OP_PARM_Vpd,  OP_PARM_Hpd,  OP_PARM_Wpd,  OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3195    INVALID_OPCODE,
     3196    INVALID_OPCODE,
     3197    INVALID_OPCODE,
     3198    INVALID_OPCODE,
     3199    INVALID_OPCODE,
     3200    INVALID_OPCODE,
     3201    INVALID_OPCODE,
     3202    INVALID_OPCODE,
     3203    INVALID_OPCODE,
     3204
     3205    /* d */
     3206    OPVEX("vaddsubpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_ADDSUBPD,  OP_PARM_Vpd,  OP_PARM_Hpd,  OP_PARM_Wpd,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3207    OPVEX("vpsrlw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRLW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3208    OPVEX("vpsrld %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRLD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3209    OPVEX("vpsrlq %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRLQ,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3210    OPVEX("vpaddq %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDQ,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3211    OPVEX("vpmullw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULLW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3212    OPVEX("vmovq %Wq,%Vq",            IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_MOVQ,      OP_PARM_Wq,   OP_PARM_Vq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3213    OPVEX("vpmovmskb %Gd,%Ux",        IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_PMOVMSKB,  OP_PARM_Gd,   OP_PARM_Ux,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3214    OPVEX("vpsubusb %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBUSB,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3215    OPVEX("vpsubusw %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBUSW,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3216    OPVEX("vpminub %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINUB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3217    OPVEX("vpand %Vx,%Hx,%Wx",        IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PAND,      OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3218    OPVEX("vpaddusb %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDUSB,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3219    OPVEX("vpaddusw %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDUSW,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3220    OPVEX("vpmaxub %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXUB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3221    OPVEX("vpandn %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PANDN,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3222
     3223    /* e */
     3224    OPVEX("vpavgb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PAVGB,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3225    OPVEX("vpsraw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRAW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3226    OPVEX("vpsrad %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRAD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3227    OPVEX("vpavgw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PAVGW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3228    OPVEX("vpmulhuw %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULHUW,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3229    OPVEX("vpmulhw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULHW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3230    OPVEX("vcvttpd2dq %Vx,%Wpd",      IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_CVTTPD2DQ, OP_PARM_Vx,   OP_PARM_Wpd,  OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3231    OPVEX("vmovntdq %Mx,%Vx",         IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_MOVNTDQ,   OP_PARM_Mx,   OP_PARM_Vx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3232    OPVEX("vpsubsb %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBSB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3233    OPVEX("vpsubsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBSW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3234    OPVEX("vpminsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINSW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3235    OPVEX("vpor %Vx,%Hx,%Wx",         IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_POR,       OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3236    OPVEX("vpaddsb %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDSB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3237    OPVEX("vpaddsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDSW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3238    OPVEX("vpmaxsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXSW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3239    OPVEX("vpxor %Vx,%Hx,%Wx",        IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PXOR,      OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3240
     3241    /* f */
     3242    INVALID_OPCODE,
     3243    OPVEX("vpsllw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSLLW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3244    OPVEX("vpslld %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSLLD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3245    OPVEX("vpsllq %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSLLQ,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3246    OPVEX("vpmuludq %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULUDQ,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3247    OPVEX("vpmaddwd %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMADDWD,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3248    OPVEX("vpsadbw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSADBW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3249    OPVEX("vmaskmovdqu %Vdq,%Udq",    IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_MASKMOVDQU,OP_PARM_Vdq,  OP_PARM_Udq,  OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3250    OPVEX("vpsubb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBB,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3251    OPVEX("vpsubw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3252    OPVEX("vpsubd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3253    OPVEX("vpsubq %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSUBQ,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3254    OPVEX("vpaddb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDB,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3255    OPVEX("vpaddw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDW,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3256    OPVEX("vpaddd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PADDD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3257    INVALID_OPCODE,
     3258};
     3259
     3260const DISOPCODE g_aMapTwoBytesVex_F2H[256] =
     3261{
     3262    /* 0 */
     3263    INVALID_OPCODE_BLOCK
     3264
     3265    /* 1 */
     3266    OPVEX("vmovsd %Vx,%Hx,%Wsd",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MOVSD,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3267    OPVEX("vmovsd %Wsd,%Hx,%Vsd",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MOVSD,     OP_PARM_Wsd,  OP_PARM_Hx,   OP_PARM_Vsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3268    OPVEX("vmovddup %Vx,%Wx",         IDX_ParseModRM,    IDX_UseModRM,                  0,                0,  OP_MOVDDUP,   OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3269    INVALID_OPCODE,
     3270    INVALID_OPCODE,
     3271    INVALID_OPCODE,
     3272    INVALID_OPCODE,
     3273    INVALID_OPCODE,
     3274    INVALID_OPCODE,
     3275    INVALID_OPCODE,
     3276    INVALID_OPCODE,
     3277    INVALID_OPCODE,
     3278    INVALID_OPCODE,
     3279    INVALID_OPCODE,
     3280    INVALID_OPCODE,
     3281    INVALID_OPCODE,
     3282
     3283    /* 2 */
     3284    INVALID_OPCODE_BLOCK
     3285
     3286    /* 3 */
     3287    INVALID_OPCODE_BLOCK
     3288
     3289    /* 4 */
     3290    INVALID_OPCODE_BLOCK
     3291
     3292    /* 5 */
     3293    INVALID_OPCODE,
     3294    OPVEX("vsqrtsd %Vsd,%Hsd,%Wsd",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SQRTSD,   OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3295    INVALID_OPCODE,
     3296    INVALID_OPCODE,
     3297    INVALID_OPCODE,
     3298    INVALID_OPCODE,
     3299    INVALID_OPCODE,
     3300    INVALID_OPCODE,
     3301    OPVEX("vaddsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_ADDSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3302    OPVEX("vmulsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MULSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3303    OPVEX("vcvtsd2ss %Vss,%Hx,%Wsd",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_CVTSD2SS, OP_PARM_Vss,   OP_PARM_Hx,    OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3304    INVALID_OPCODE,
     3305    OPVEX("vsubsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SUBSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3306    OPVEX("vminsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MINSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3307    OPVEX("vdivsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_DIVSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3308    OPVEX("vmaxsd %Vsd,%Hsd,%Wsd",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MAXSD,    OP_PARM_Vsd,   OP_PARM_Hsd,   OP_PARM_Wsd,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3309
     3310    /* 6 */
     3311    INVALID_OPCODE_BLOCK
     3312
     3313    /* 7 */
     3314    OPVEX("vpshuflw %Vx,%Wx,%Ib",     IDX_ParseModRM,    IDX_UseModRM,       IDX_ParseImmByte,            0,  OP_PSHUFLW,  OP_PARM_Vx,    OP_PARM_Wx,   OP_PARM_Ib,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3315    INVALID_OPCODE,
     3316    INVALID_OPCODE,
     3317    INVALID_OPCODE,
     3318    INVALID_OPCODE,
     3319    INVALID_OPCODE,
     3320    INVALID_OPCODE,
     3321    INVALID_OPCODE,
     3322    INVALID_OPCODE,
     3323    INVALID_OPCODE,
     3324    INVALID_OPCODE,
     3325    INVALID_OPCODE,
     3326    OPVEX("vhaddps %Vps,%Hps,%Wps",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_HADDPS,   OP_PARM_Vps,   OP_PARM_Hps,   OP_PARM_Wps,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3327    OPVEX("vhsubps %Vps,%Hps,%Wps",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_HSUBPS,   OP_PARM_Vps,   OP_PARM_Hps,   OP_PARM_Wps,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3328    INVALID_OPCODE,
     3329    INVALID_OPCODE,
     3330
     3331    /* 8 */
     3332    INVALID_OPCODE_BLOCK
     3333
     3334    /* 9 */
     3335    INVALID_OPCODE_BLOCK
     3336
     3337    /* a */
     3338    INVALID_OPCODE_BLOCK
     3339
     3340    /* b */
     3341    INVALID_OPCODE_BLOCK
     3342
     3343    /* c */
     3344    INVALID_OPCODE,
     3345    INVALID_OPCODE,
     3346    OPVEX("vcmpsd %Vsd,%Hsd,%Wsd,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_CMPSD, OP_PARM_Vsd,  OP_PARM_Hsd,  OP_PARM_Wsd,  OP_PARM_Ib,    DISOPTYPE_HARMLESS),
     3347    INVALID_OPCODE,
     3348    INVALID_OPCODE,
     3349    INVALID_OPCODE,
     3350    INVALID_OPCODE,
     3351    INVALID_OPCODE,
     3352    INVALID_OPCODE,
     3353    INVALID_OPCODE,
     3354    INVALID_OPCODE,
     3355    INVALID_OPCODE,
     3356    INVALID_OPCODE,
     3357    INVALID_OPCODE,
     3358    INVALID_OPCODE,
     3359    INVALID_OPCODE,
     3360
     3361    /* d */
     3362    OPVEX("vaddsubps %Vps,%Hps,%Wps",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_ADDSUBPS,   OP_PARM_Vps,   OP_PARM_Hps,   OP_PARM_Wps,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3363    INVALID_OPCODE,
     3364    INVALID_OPCODE,
     3365    INVALID_OPCODE,
     3366    INVALID_OPCODE,
     3367    INVALID_OPCODE,
     3368    INVALID_OPCODE,
     3369    INVALID_OPCODE,
     3370    INVALID_OPCODE,
     3371    INVALID_OPCODE,
     3372    INVALID_OPCODE,
     3373    INVALID_OPCODE,
     3374    INVALID_OPCODE,
     3375    INVALID_OPCODE,
     3376    INVALID_OPCODE,
     3377    INVALID_OPCODE,
     3378
     3379    /* e */
     3380    INVALID_OPCODE,
     3381    INVALID_OPCODE,
     3382    INVALID_OPCODE,
     3383    INVALID_OPCODE,
     3384    INVALID_OPCODE,
     3385    INVALID_OPCODE,
     3386    OPVEX("vcvtpd2dq %Vx,%Wpd",     IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_CVTPD2DQ,  OP_PARM_Vx,   OP_PARM_Wpd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3387    INVALID_OPCODE,
     3388    INVALID_OPCODE,
     3389    INVALID_OPCODE,
     3390    INVALID_OPCODE,
     3391    INVALID_OPCODE,
     3392    INVALID_OPCODE,
     3393    INVALID_OPCODE,
     3394    INVALID_OPCODE,
     3395    INVALID_OPCODE,
     3396
     3397    /* f */
     3398    OPVEX("vlddqu %Vx,%Mx",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_LDDQU,  OP_PARM_Vx,   OP_PARM_Mx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3399    INVALID_OPCODE,
     3400    INVALID_OPCODE,
     3401    INVALID_OPCODE,
     3402    INVALID_OPCODE,
     3403    INVALID_OPCODE,
     3404    INVALID_OPCODE,
     3405    INVALID_OPCODE,
     3406    INVALID_OPCODE,
     3407    INVALID_OPCODE,
     3408    INVALID_OPCODE,
     3409    INVALID_OPCODE,
     3410    INVALID_OPCODE,
     3411    INVALID_OPCODE,
     3412    INVALID_OPCODE,
     3413    INVALID_OPCODE,
     3414};
     3415
     3416/* Vex codes for two bytes opcodes starting with 0Fh with prefix F3H*/
     3417const DISOPCODE g_aMapTwoBytesVex_F3H[256] =
     3418{
     3419
     3420    /* 0 */
     3421    INVALID_OPCODE_BLOCK
     3422
     3423    /* 1 */
     3424    OPVEX("vmovss %Vx,%Hx,%Wss",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MOVSS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wss,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3425    OPVEX("vmovss %Wss,%Hx,%Vss",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MOVSS,     OP_PARM_Wss,  OP_PARM_Hx,   OP_PARM_Vss,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3426    OPVEX("vmovsldup %Vx,%Wx",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVSLDUP,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3427    INVALID_OPCODE,
     3428    INVALID_OPCODE,
     3429    INVALID_OPCODE,
     3430    OPVEX("vmovshdup %Vx,%Wx",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVSHDUP,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3431    INVALID_OPCODE,
     3432    INVALID_OPCODE,
     3433    INVALID_OPCODE,
     3434    INVALID_OPCODE,
     3435    INVALID_OPCODE,
     3436    INVALID_OPCODE,
     3437    INVALID_OPCODE,
     3438    INVALID_OPCODE,
     3439    INVALID_OPCODE,
     3440
     3441    /* 2 */
     3442    INVALID_OPCODE,
     3443    INVALID_OPCODE,
     3444    INVALID_OPCODE,
     3445    INVALID_OPCODE,
     3446    INVALID_OPCODE,
     3447    INVALID_OPCODE,
     3448    INVALID_OPCODE,
     3449    INVALID_OPCODE,
     3450    INVALID_OPCODE,
     3451    INVALID_OPCODE,
     3452    OPVEX("vcvtsi2ss %Vss,%Hss,%Ey",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_CVTSI2SS,  OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Ey,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3453    INVALID_OPCODE,
     3454    OPVEX("vcvttss2si %Gy,%Wss",       IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_CVTTSS2SI, OP_PARM_Gy,    OP_PARM_Wss,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3455    OPVEX("vcvtss2si %Gy,%Wss",        IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_CVTSS2SI,  OP_PARM_Gy,    OP_PARM_Wss,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3456    INVALID_OPCODE,
     3457    INVALID_OPCODE,
     3458
     3459    /* 3 */
     3460    INVALID_OPCODE_BLOCK
     3461
     3462    /* 4 */
     3463    INVALID_OPCODE_BLOCK
     3464
     3465    /* 5 */
     3466    INVALID_OPCODE,
     3467    OPVEX("vsqrtss %Vss,%Hss,%Wss",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SQRTSS,     OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3468    OPVEX("vrsqrtss %Vss,%Hss,%Wss",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_RSQRTSS,    OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3469    OPVEX("vrcpss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_RCPSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3470    INVALID_OPCODE,
     3471    INVALID_OPCODE,
     3472    INVALID_OPCODE,
     3473    INVALID_OPCODE,
     3474    OPVEX("vaddss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_ADDSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3475    OPVEX("vmulss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MULSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3476    OPVEX("vcvtss2sd %Vsd,%Hx,%Wss",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_CVTSS2SD,   OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3477    OPVEX("vcvttps2dq %Vdq,%Wps",     IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_CVTTPS2DQ,  OP_PARM_Vdq,   OP_PARM_Wps,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3478    OPVEX("vsubss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SUBSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3479    OPVEX("vminss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MINSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3480    OPVEX("vdivss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_DIVSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3481    OPVEX("vmaxss %Vss,%Hss,%Wss",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MAXSS,      OP_PARM_Vss,   OP_PARM_Hss,   OP_PARM_Wss,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3482
     3483    /* 6 */
     3484    INVALID_OPCODE,
     3485    INVALID_OPCODE,
     3486    INVALID_OPCODE,
     3487    INVALID_OPCODE,
     3488    INVALID_OPCODE,
     3489    INVALID_OPCODE,
     3490    INVALID_OPCODE,
     3491    INVALID_OPCODE,
     3492    INVALID_OPCODE,
     3493    INVALID_OPCODE,
     3494    INVALID_OPCODE,
     3495    INVALID_OPCODE,
     3496    INVALID_OPCODE,
     3497    INVALID_OPCODE,
     3498    INVALID_OPCODE,
     3499    OPVEX("vmovdqu %Vx,%Wx",          IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVDQU,  OP_PARM_Vx,    OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3500
     3501    /* 7 */
     3502    OPVEX("vpshufhw %Vx,%Wx,%Ib",     IDX_ParseModRM,    IDX_UseModRM,        IDX_ParseImmByte,           0,  OP_PSHUFHW, OP_PARM_Vx,    OP_PARM_Wx,   OP_PARM_Ib,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3503    INVALID_OPCODE,
     3504    INVALID_OPCODE,
     3505    INVALID_OPCODE,
     3506    INVALID_OPCODE,
     3507    INVALID_OPCODE,
     3508    INVALID_OPCODE,
     3509    INVALID_OPCODE,
     3510    INVALID_OPCODE,
     3511    INVALID_OPCODE,
     3512    INVALID_OPCODE,
     3513    INVALID_OPCODE,
     3514    INVALID_OPCODE,
     3515    INVALID_OPCODE,
     3516    OPVEX("vmovq %Vq,%Wq",            IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVQ,    OP_PARM_Vq,    OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3517    OPVEX("vmovdqu %Wx,%Vx",          IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVDQU,  OP_PARM_Wx,    OP_PARM_Vx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3518
     3519    /* 8 */
     3520    INVALID_OPCODE_BLOCK
     3521
     3522    /* 9 */
     3523    INVALID_OPCODE_BLOCK
     3524
     3525    /* a */
     3526    INVALID_OPCODE_BLOCK
     3527
     3528    /* b */
     3529    INVALID_OPCODE_BLOCK
     3530
     3531    /* c */
     3532    INVALID_OPCODE,
     3533    INVALID_OPCODE,
     3534    OPVEX("vcmpps %Vss,%Hss,%Wss,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_CMPSS, OP_PARM_Vss,  OP_PARM_Hss,  OP_PARM_Wss,  OP_PARM_Ib,    DISOPTYPE_HARMLESS),
     3535    INVALID_OPCODE,
     3536    INVALID_OPCODE,
     3537    INVALID_OPCODE,
     3538    INVALID_OPCODE,
     3539    INVALID_OPCODE,
     3540    INVALID_OPCODE,
     3541    INVALID_OPCODE,
     3542    INVALID_OPCODE,
     3543    INVALID_OPCODE,
     3544    INVALID_OPCODE,
     3545    INVALID_OPCODE,
     3546    INVALID_OPCODE,
     3547    INVALID_OPCODE,
     3548
     3549    /* d */
     3550    INVALID_OPCODE_BLOCK
     3551
     3552    /* e */
     3553    INVALID_OPCODE,
     3554    INVALID_OPCODE,
     3555    INVALID_OPCODE,
     3556    INVALID_OPCODE,
     3557    INVALID_OPCODE,
     3558    INVALID_OPCODE,
     3559    OPVEX("vcvtdq2pd %Vx,%Wpd",     IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_CVTDQ2PD,  OP_PARM_Vx,   OP_PARM_Wpd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3560    INVALID_OPCODE,
     3561    INVALID_OPCODE,
     3562    INVALID_OPCODE,
     3563    INVALID_OPCODE,
     3564    INVALID_OPCODE,
     3565    INVALID_OPCODE,
     3566    INVALID_OPCODE,
     3567    INVALID_OPCODE,
     3568    INVALID_OPCODE,
     3569
     3570    /* f */
     3571    INVALID_OPCODE_BLOCK
     3572};
     3573
     3574PCDISOPCODE const g_aVexOpcodesMap[3] =
     3575{
     3576    &g_aMapTwoBytesVex[0], // 0fh 2-byte opcodes
     3577    NULL,                  // 0f38h 3-byte opcodes
     3578    NULL,                  // 0f3ah 3-byte opcodes
     3579};
     3580
     3581PCDISOPCODE const g_aVexOpcodesMap_66H[3] =
     3582{
     3583    &g_aMapTwoBytesVex_66H[0], // 0fh 2-byte opcodes
     3584    NULL,                      // 0f38h 3-byte opcodes
     3585    NULL,                      // 0f3ah 3-byte opcodes
     3586};
     3587
     3588PCDISOPCODE const g_aVexOpcodesMap_F2H[3] =
     3589{
     3590    &g_aMapTwoBytesVex_F2H[0], // 0fh 2-byte opcodes
     3591    NULL,                      // 0f38h 3-byte opcodes
     3592    NULL,                      // 0f3ah 3-byte opcodes
     3593};
     3594
     3595PCDISOPCODE const g_aVexOpcodesMap_F3H[3] =
     3596{
     3597    &g_aMapTwoBytesVex_F3H[0], // 0fh 2-byte opcodes
     3598    NULL,                      // 0f38h 3-byte opcodes
     3599    NULL,                      // 0f3ah 3-byte opcodes
     3600};
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette