VirtualBox

Changeset 53131 in vbox


Ignore:
Timestamp:
Oct 23, 2014 5:13:53 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
96664
Message:

DIS: 6251: Added AVX/VEX 3-byte instructions support.

Location:
trunk/src/VBox/Disassembler
Files:
4 edited

Legend:

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

    r53094 r53131  
    995995
    996996            case OP_PARM_V: //XMM register
    997                 if (VEXREG_IS256B(pDis->bVexDestReg))
     997                if (VEXREG_IS256B(pDis->bVexDestReg)
     998                    && OP_PARM_VSUBTYPE(pParam->fParam) != OP_PARM_dq
     999                    && OP_PARM_VSUBTYPE(pParam->fParam) != OP_PARM_q
     1000                    && OP_PARM_VSUBTYPE(pParam->fParam) != OP_PARM_d
     1001                    && OP_PARM_VSUBTYPE(pParam->fParam) != OP_PARM_w)
    9981002                {
    9991003                    // Use YMM register if VEX.L is set.
     
    13541358{
    13551359    NOREF(pOp);
    1356     pParam->uValue = disReadByte(pDis, offInstr);
    1357     pParam->fUse  |= DISUSE_IMMEDIATE8;
    1358     pParam->cb     = sizeof(uint8_t);
     1360    uint8_t byte = disReadByte(pDis, offInstr);
     1361    if (pParam->fParam == OP_PARM_Lx)
     1362    {
     1363        pParam->fUse  |= (VEXREG_IS256B(pDis->bVexDestReg) ? DISUSE_REG_YMM : DISUSE_REG_XMM);
     1364
     1365        // Ignore MSB in 32-bit mode.
     1366        if (pDis->uCpuMode == DISCPUMODE_32BIT)
     1367            byte &= 0x7f;
     1368
     1369        pParam->Base.idxXmmReg = byte >> 4;
     1370    }
     1371    else
     1372    {
     1373        pParam->uValue = byte;
     1374        pParam->fUse  |= DISUSE_IMMEDIATE8;
     1375        pParam->cb     = sizeof(uint8_t);
     1376    }
    13591377    return offInstr + 1;
    13601378}
     
    24542472
    24552473    // VEX.R (equivalent to REX.R)
    2456     if (!(byte & 0x80) && pDis->uCpuMode == DISCPUMODE_64BIT)
     2474    if (pDis->uCpuMode == DISCPUMODE_64BIT && !(byte & 0x80))
    24572475    {
    24582476        /* REX prefix byte */
     
    24992517    NOREF(pOp); NOREF(pParam);
    25002518
    2501     PCDISOPCODE pOpCode = &g_InvalidOpcode[0];
     2519    PCDISOPCODE pOpCode = NULL;
    25022520
    25032521    uint8_t byte1 = disReadByte(pDis, offInstr++);
     
    25082526    uint8_t implOpcode = (byte1 & 0x1f);
    25092527
    2510     // REX.RXB
    2511     if (~(byte1 & 0xe0))
    2512     {
    2513         Assert(pDis->uCpuMode == DISCPUMODE_64BIT);
    2514         pDis->fPrefix |= DISPREFIX_REX;
    2515         pDis->fRexPrefix = ~(byte1 >> 5);
    2516     }
    2517 
    2518     // REX.W
    2519     if (!(byte2 & 0x80))
    2520     {
    2521         Assert(pDis->uCpuMode == DISCPUMODE_64BIT);
    2522         pDis->fPrefix   |= DISPREFIX_REX;
    2523         pDis->fRexPrefix |= DISPREFIX_REX_FLAGS_W;
     2528    if (pDis->uCpuMode == DISCPUMODE_64BIT)
     2529    {
     2530        // REX.RXB
     2531        if (~(byte1 & 0xe0))
     2532        {
     2533            pDis->fRexPrefix = (byte1 >> 5) ^ 7;
     2534            if (pDis->fRexPrefix)
     2535                pDis->fPrefix |= DISPREFIX_REX;
     2536        }
     2537
     2538        // REX.W
     2539        if (!(byte2 & 0x80))
     2540        {
     2541            pDis->fRexPrefix |= DISPREFIX_REX_FLAGS_W;
     2542            if (pDis->fRexPrefix)
     2543                 pDis->fPrefix |= DISPREFIX_REX;
     2544        }
    25242545    }
    25252546
     
    25312552                pOpCode = g_aVexOpcodesMap[implOpcode - 1];
    25322553                if (pOpCode != NULL)
    2533                     pOpCode = &pOpCode[pDis->bOpCode];
    2534                 else pOpCode = &g_InvalidOpcode[0];
     2554                {
     2555                    switch (implOpcode)
     2556                    {
     2557                        case 2:
     2558                            if (pDis->bOpCode >= 0xf0)
     2559                                pOpCode = &pOpCode[pDis->bOpCode - 0xf0];
     2560                            else pOpCode = g_InvalidOpcode;
     2561                            break;
     2562                        default:
     2563                        pOpCode = &pOpCode[pDis->bOpCode];
     2564                    }
     2565                }
    25352566            }
    25362567        break;
     
    25422573                if (pOpCode != NULL)
    25432574                    pOpCode = &pOpCode[pDis->bOpCode];
    2544                 else pOpCode = &g_InvalidOpcode[0];
    2545 
    25462575                /* TODO: check if we need to set this prefix */
    25472576                pDis->fPrefix |= DISPREFIX_OPSIZE;
     
    25592588                pOpCode = g_aVexOpcodesMap_F3H[implOpcode - 1];
    25602589                if (pOpCode != NULL)
    2561                     pOpCode = &pOpCode[pDis->bOpCode];
    2562                 else pOpCode = &g_InvalidOpcode[0];
     2590                {
     2591                    switch (implOpcode)
     2592                    {
     2593                        case 2:
     2594                            if (pDis->bOpCode >= 0xf0)
     2595                                pOpCode = &pOpCode[pDis->bOpCode - 0xf0];
     2596                            else pOpCode = g_InvalidOpcode;
     2597                            break;
     2598                        default:
     2599                        pOpCode = &pOpCode[pDis->bOpCode];
     2600                    }
     2601                }
     2602
    25632603            }
    25642604        break;
     
    25702610                pOpCode = g_aVexOpcodesMap_F2H[implOpcode - 1];
    25712611                if (pOpCode != NULL)
    2572                     pOpCode = &pOpCode[pDis->bOpCode];
    2573                 else pOpCode = &g_InvalidOpcode[0];
     2612                {
     2613                    switch (implOpcode)
     2614                    {
     2615                        case 2:
     2616                            if (pDis->bOpCode >= 0xf0)
     2617                                pOpCode = &pOpCode[pDis->bOpCode - 0xf0];
     2618                            else pOpCode = g_InvalidOpcode;
     2619                            break;
     2620                        case 3:
     2621                            if (pDis->bOpCode != 0xf0)
     2622                                pOpCode = g_InvalidOpcode;
     2623                            break;
     2624                        default:
     2625                        pOpCode = &pOpCode[pDis->bOpCode];
     2626                    }
     2627                }
    25742628            }
    25752629        break;
     
    25782632        break;
    25792633    }
     2634
     2635    if (pOpCode == NULL)
     2636        pOpCode = g_InvalidOpcode;
    25802637
    25812638    return disParseInstruction(offInstr, pOpCode, pDis);
  • trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp

    r53094 r53131  
    625625                        break; \
    626626                    case OP_PARM_b: PUT_SZ("byte "); break; \
    627                     case OP_PARM_w: PUT_SZ("word "); break; \
    628                     case OP_PARM_d: PUT_SZ("dword "); break; \
    629                     case OP_PARM_q: PUT_SZ("qword "); break; \
     627                    case OP_PARM_w: \
     628                        if (OP_PARM_VTYPE(pParam->fParam) == OP_PARM_W || \
     629                            OP_PARM_VTYPE(pParam->fParam) == OP_PARM_M) \
     630                        { \
     631                            if (VEXREG_IS256B(pDis->bVexDestReg)) PUT_SZ("dword "); \
     632                                else PUT_SZ("word "); \
     633                        } \
     634                        break; \
     635                    case OP_PARM_d: \
     636                        if (OP_PARM_VTYPE(pParam->fParam) == OP_PARM_W || \
     637                            OP_PARM_VTYPE(pParam->fParam) == OP_PARM_M) \
     638                        { \
     639                            if (VEXREG_IS256B(pDis->bVexDestReg)) PUT_SZ("qword "); \
     640                                else PUT_SZ("dword "); \
     641                        } \
     642                        break; \
     643                    case OP_PARM_q: \
     644                        if (OP_PARM_VTYPE(pParam->fParam) == OP_PARM_W || \
     645                            OP_PARM_VTYPE(pParam->fParam) == OP_PARM_M) \
     646                        { \
     647                            if (VEXREG_IS256B(pDis->bVexDestReg)) PUT_SZ("oword "); \
     648                                else PUT_SZ("qword "); \
     649                        } \
     650                       break; \
    630651                    case OP_PARM_ps: \
    631652                    case OP_PARM_pd: \
    632                     case OP_PARM_x: if (VEXREG_IS256B(pDis->bVexDestReg)) { PUT_SZ("yword"); break; } \
     653                    case OP_PARM_x: if (VEXREG_IS256B(pDis->bVexDestReg)) { PUT_SZ("yword "); break; } \
    633654                    case OP_PARM_ss: \
    634655                    case OP_PARM_sd: \
    635656                    case OP_PARM_dq: PUT_SZ("oword "); break; \
     657                    case OP_PARM_qq: PUT_SZ("yword "); break; \
    636658                    case OP_PARM_p: break; /* see PUT_FAR */ \
    637659                    case OP_PARM_s: if (pParam->fUse & DISUSE_REG_FP) PUT_SZ("tword "); break; /* ?? */ \
     
    690712                    case 'P': /* ModRM byte selects MMX register (ParseModRM / UseModRM). */
    691713                    case 'H': /* The VEX.vvvv field of the VEX prefix selects a XMM/YMM register. */
     714                    case 'L': /* The upper 4 bits of the 8-bit immediate selects a XMM/YMM register. */
    692715                    {
    693716                        pszFmt += RT_C_IS_ALPHA(pszFmt[0]) ? RT_C_IS_ALPHA(pszFmt[1]) ? 2 : 1 : 0;
  • trunk/src/VBox/Disassembler/DisasmTables.cpp

    r53094 r53131  
    31903190    INVALID_OPCODE,
    31913191    // 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),
     3192    OPVEX("vpinsrw %Vdq,%Hdq,%Ey,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_PINSRW,  OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Ey,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
    31933193    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),
    31943194    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),
     
    35723572};
    35733573
     3574const DISOPCODE g_aMapThreeBytesVex_0F38_F[16] =
     3575{
     3576    INVALID_OPCODE,
     3577    INVALID_OPCODE,
     3578    OPVEX("andn %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_ANDN,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3579    INVALID_OPCODE,
     3580    INVALID_OPCODE,
     3581    OPVEX("bzhi %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_BZHI,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3582    INVALID_OPCODE,
     3583    OPVEX("bextr %Gy,%By,%Ey",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_BEXTR,     OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3584    INVALID_OPCODE,
     3585    INVALID_OPCODE,
     3586    INVALID_OPCODE,
     3587    INVALID_OPCODE,
     3588    INVALID_OPCODE,
     3589    INVALID_OPCODE,
     3590    INVALID_OPCODE,
     3591    INVALID_OPCODE
     3592};
     3593
     3594const DISOPCODE g_aMapThreeBytesVex_F30F38_F[16] =
     3595{
     3596    INVALID_OPCODE,
     3597    INVALID_OPCODE,
     3598    INVALID_OPCODE,
     3599    INVALID_OPCODE,
     3600    INVALID_OPCODE,
     3601    OPVEX("pext %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PEXT,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3602    INVALID_OPCODE,
     3603    OPVEX("sarx %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SARX,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3604    INVALID_OPCODE,
     3605    INVALID_OPCODE,
     3606    INVALID_OPCODE,
     3607    INVALID_OPCODE,
     3608    INVALID_OPCODE,
     3609    INVALID_OPCODE,
     3610    INVALID_OPCODE,
     3611    INVALID_OPCODE
     3612};
     3613
     3614const DISOPCODE g_aMapThreeBytesVex_F20F38_F[16] =
     3615{
     3616    INVALID_OPCODE,
     3617    INVALID_OPCODE,
     3618    INVALID_OPCODE,
     3619    INVALID_OPCODE,
     3620    INVALID_OPCODE,
     3621    OPVEX("pdep %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PDEP,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3622    OPVEX("mulx %By,%Gy,%Ey",    IDX_ParseVexDest,    IDX_ParseModRM,   IDX_UseModRM,                0,  OP_MULX,      OP_PARM_By,   OP_PARM_Gy,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3623    OPVEX("shrx %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_SHRX,      OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3624    INVALID_OPCODE,
     3625    INVALID_OPCODE,
     3626    INVALID_OPCODE,
     3627    INVALID_OPCODE,
     3628    INVALID_OPCODE,
     3629    INVALID_OPCODE,
     3630    INVALID_OPCODE,
     3631    INVALID_OPCODE
     3632};
     3633
     3634const DISOPCODE g_aMapThreeBytesVex_660F38[256] =
     3635{
     3636
     3637    /* 0 */
     3638    OPVEX("vpshufb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSHUFB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3639    OPVEX("vphaddw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHADDW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3640    OPVEX("vphaddd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHADDD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3641    OPVEX("vphaddsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHADDSW,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3642    OPVEX("vpmaddubsw %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMADDUBSW, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3643    OPVEX("vphsubw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHSUBW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3644    OPVEX("vphsubd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHSUBD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3645    OPVEX("vphsubsw %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PHSUBSW,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3646    OPVEX("vpsignb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSIGNB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3647    OPVEX("vpsignw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSIGNW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3648    OPVEX("vpsignd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSIGND,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3649    OPVEX("vpmulhrsw %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULHRSW,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3650    OPVEX("vpermilps %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PERMILPS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3651    OPVEX("vpermilpd %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PERMILPD,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3652    OPVEX("vtestps %Vx,%Wx",           IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_TESTPS,    OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3653    OPVEX("vtestpd %Vx,%Wx",           IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_TESTPD,    OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3654
     3655    /* 1 */
     3656    INVALID_OPCODE,
     3657    INVALID_OPCODE,
     3658    INVALID_OPCODE,
     3659    OPVEX("vcvtph2ps %Vx,%Wx,%Ib",     IDX_ParseModRM,    IDX_UseModRM,       IDX_ParseImmByte,            0,  OP_CVTPH2PS,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_Ib,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3660    INVALID_OPCODE,
     3661    INVALID_OPCODE,
     3662    OPVEX("vpermps %Vqq,%Hqq,%Wqq",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PERMPS,    OP_PARM_Vqq,  OP_PARM_Hqq,  OP_PARM_Wqq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3663    OPVEX("vptest %Vx,%Wx",            IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PTEST,     OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3664    OPVEX("vbroadcastss %Vx,%Wd",      IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_BROADCASTSS, OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3665    OPVEX("vbroadcastsd %Vqq,%Wq",     IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_BROADCASTSD, OP_PARM_Vqq,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3666    OPVEX("vbroadcastf128 %Vqq,%Mdq",  IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_BROADCASTF128, OP_PARM_Vqq,   OP_PARM_Wdq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3667    INVALID_OPCODE,
     3668    OPVEX("vpabsb %Vx,%Wx",            IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PABSB,     OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3669    OPVEX("vpabsw %Vx,%Wx",            IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PABSW,     OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3670    OPVEX("vpabsd %Vx,%Wx",            IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PABSD,     OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3671    INVALID_OPCODE,
     3672
     3673    /* 2 */
     3674    OPVEX("vpmovsxbw %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3675    OPVEX("vpmovsxbd %Vx,%Wd",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3676    OPVEX("vpmovsxbq %Vx,%Ww",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Ww,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3677    OPVEX("vpmovsxwd %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3678    OPVEX("vpmovsxwq %Vx,%Wd",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3679    OPVEX("vpmovsxdq %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVSX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3680    INVALID_OPCODE,
     3681    INVALID_OPCODE,
     3682    OPVEX("vpmuldq %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULDQ,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3683    OPVEX("vpcmpeqq %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PCMPEQQ,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3684    OPVEX("vmovntdqa %Vx,%Wx",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_MOVNTDQA,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3685    OPVEX("vpackusdw %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PACKUSDW,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3686    OPVEX("vmaskmovps %Vx,%Hx,%Mx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MASKMOVPS, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Mx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3687    OPVEX("vmaskmovpd %Vx,%Hx,%Mx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MASKMOVPD, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Mx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3688    OPVEX("vmaskmovps %Mx,%Hx,%Vx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MASKMOVPS, OP_PARM_Mx,   OP_PARM_Hx,   OP_PARM_Vx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3689    OPVEX("vmaskmovpd %Mx,%Hx,%Vx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_MASKMOVPD, OP_PARM_Mx,   OP_PARM_Hx,   OP_PARM_Vx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3690
     3691    /* 3 */
     3692    OPVEX("vpmovzxbw %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3693    OPVEX("vpmovzxbd %Vx,%Wd",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3694    OPVEX("vpmovzxbq %Vx,%Ww",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Ww,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3695    OPVEX("vpmovzxwd %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3696    OPVEX("vpmovzxwq %Vx,%Wd",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Wd,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3697    OPVEX("vpmovzxdq %Vx,%Wq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PMOVZX,    OP_PARM_Vx,   OP_PARM_Wq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3698    OPVEX("vpermd %Vqq,%Hqq,%Wqq",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PERMD,     OP_PARM_Vqq,  OP_PARM_Hqq,  OP_PARM_Wqq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3699    OPVEX("vpcmpgtq %Vx,%Hx,%Wx",      IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PCMPGTQ,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3700    OPVEX("vpminsb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINSB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3701    OPVEX("vpminsd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINSB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3702    OPVEX("vpminuw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINUW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3703    OPVEX("vpminud %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMINUD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3704    OPVEX("vpmaxsb %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXSB,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3705    OPVEX("vpmaxsd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXSD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3706    OPVEX("vpmaxuw %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXUW,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3707    OPVEX("vpmaxud %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMAXUD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3708
     3709    /* 4 */
     3710    OPVEX("vpmulld %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMULLD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3711    OPVEX("vphminposuw %Vdq,%Wdq",     IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PHMINPOSUW,OP_PARM_Vdq,  OP_PARM_Wdq,  OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3712    INVALID_OPCODE,
     3713    INVALID_OPCODE,
     3714    INVALID_OPCODE,
     3715    OPVEX("vpsrlvd/q %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRLVD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3716    OPVEX("vpsravd %Vx,%Hx,%Wx",       IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSRAVD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3717    OPVEX("vpsllvd/q %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PSLLVD,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3718    INVALID_OPCODE,
     3719    INVALID_OPCODE,
     3720    INVALID_OPCODE,
     3721    INVALID_OPCODE,
     3722    INVALID_OPCODE,
     3723    INVALID_OPCODE,
     3724    INVALID_OPCODE,
     3725    INVALID_OPCODE,
     3726
     3727    /* 5 */
     3728    INVALID_OPCODE,
     3729    INVALID_OPCODE,
     3730    INVALID_OPCODE,
     3731    INVALID_OPCODE,
     3732    INVALID_OPCODE,
     3733    INVALID_OPCODE,
     3734    INVALID_OPCODE,
     3735    INVALID_OPCODE,
     3736    OPVEX("vpbroadcastd %Vx,%Wx",      IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PBROADCASTD, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3737    OPVEX("vpbroadcastq %Vx,%Wx",      IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PBROADCASTQ, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3738    OPVEX("vpbroadcasti128 %Vqq,%Mdq", IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PBROADCASTI128, OP_PARM_Vqq,   OP_PARM_Mdq,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3739    INVALID_OPCODE,
     3740    INVALID_OPCODE,
     3741    INVALID_OPCODE,
     3742    INVALID_OPCODE,
     3743    INVALID_OPCODE,
     3744
     3745    /* 6 */
     3746    INVALID_OPCODE_BLOCK
     3747
     3748    /* 7 */
     3749    INVALID_OPCODE,
     3750    INVALID_OPCODE,
     3751    INVALID_OPCODE,
     3752    INVALID_OPCODE,
     3753    INVALID_OPCODE,
     3754    INVALID_OPCODE,
     3755    INVALID_OPCODE,
     3756    INVALID_OPCODE,
     3757    OPVEX("vpbroadcastb %Vx,%Wx",      IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PBROADCASTB, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3758    OPVEX("vpbroadcastw %Vx,%Wx",      IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_PBROADCASTW, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3759    INVALID_OPCODE,
     3760    INVALID_OPCODE,
     3761    INVALID_OPCODE,
     3762    INVALID_OPCODE,
     3763    INVALID_OPCODE,
     3764    INVALID_OPCODE,
     3765
     3766    /* 8 */
     3767    INVALID_OPCODE,
     3768    INVALID_OPCODE,
     3769    INVALID_OPCODE,
     3770    INVALID_OPCODE,
     3771    INVALID_OPCODE,
     3772    INVALID_OPCODE,
     3773    INVALID_OPCODE,
     3774    INVALID_OPCODE,
     3775    INVALID_OPCODE,
     3776    INVALID_OPCODE,
     3777    INVALID_OPCODE,
     3778    INVALID_OPCODE,
     3779    OPVEX("vpmaskmovd/q %Vx,%Hx,%Mx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PMASKMOVD, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Mx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3780    INVALID_OPCODE,
     3781    OPVEX("vpmaskmovd/q %Mx,%Vx,%Hx",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseVexDest,                0,  OP_PMASKMOVD, OP_PARM_Mx,   OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3782    INVALID_OPCODE,
     3783
     3784    /* 9 */
     3785    // TODO: Instructions vpgather/vgather parsed incorrectly. Need to add VSIB support.
     3786    OPVEX("vpgatherdd/q %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PGATHERDD,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3787    OPVEX("vpgatherqd/q %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_PGATHERQD,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3788    OPVEX("vgatherdps/d %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_GATHERDPS, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3789    OPVEX("vgatherqps/d %Vx,%Hx,%Wx",     IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_GATHERQPS, OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3790    INVALID_OPCODE,
     3791    INVALID_OPCODE,
     3792    OPVEX("vfmaddsub132ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADDSUB132PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3793    OPVEX("vfmsubadd132ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUBADD132PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3794    OPVEX("vfmadd132ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD132PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3795    OPVEX("vfmadd132ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD132SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3796    OPVEX("vfmsub132ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB132PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3797    OPVEX("vfmsub132ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB132SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3798    OPVEX("vfnmadd132ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD132PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3799    OPVEX("vfnmadd132ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD132SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3800    OPVEX("vfnmsub132ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB132PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3801    OPVEX("vfnmsub132ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB132SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3802
     3803    /* a */
     3804    INVALID_OPCODE,
     3805    INVALID_OPCODE,
     3806    INVALID_OPCODE,
     3807    INVALID_OPCODE,
     3808    INVALID_OPCODE,
     3809    INVALID_OPCODE,
     3810    OPVEX("vfmaddsub213ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADDSUB213PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3811    OPVEX("vfmsubadd213ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUBADD213PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3812    OPVEX("vfmadd213ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD213PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3813    OPVEX("vfmadd213ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD213SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3814    OPVEX("vfmsub213ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB213PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3815    OPVEX("vfmsub213ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB213SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3816    OPVEX("vfnmadd213ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD213PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3817    OPVEX("vfnmadd213ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD213SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3818    OPVEX("vfnmsub213ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB213PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3819    OPVEX("vfnmsub213ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB213SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3820
     3821    /* b */
     3822    INVALID_OPCODE,
     3823    INVALID_OPCODE,
     3824    INVALID_OPCODE,
     3825    INVALID_OPCODE,
     3826    INVALID_OPCODE,
     3827    INVALID_OPCODE,
     3828    OPVEX("vfmaddsub231ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADDSUB231PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3829    OPVEX("vfmsubadd231ps/d %Vx,%Hx,%Wx", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUBADD231PS,  OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3830    OPVEX("vfmadd231ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD231PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3831    OPVEX("vfmadd231ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMADD231SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3832    OPVEX("vfmsub231ps/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB231PS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3833    OPVEX("vfmsub231ss/d %Vx,%Hx,%Wx",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FMSUB231SS,     OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3834    OPVEX("vfnmadd231ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD231PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3835    OPVEX("vfnmadd231ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMADD231SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3836    OPVEX("vfnmsub231ps/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB231PS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3837    OPVEX("vfnmsub231ss/d %Vx,%Hx,%Wx",   IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  0,  OP_FNMSUB231SS,    OP_PARM_Vx,   OP_PARM_Hx,   OP_PARM_Wx,   OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3838
     3839    /* c */
     3840    INVALID_OPCODE_BLOCK
     3841
     3842    /* d */
     3843    INVALID_OPCODE,
     3844    INVALID_OPCODE,
     3845    INVALID_OPCODE,
     3846    INVALID_OPCODE,
     3847    INVALID_OPCODE,
     3848    INVALID_OPCODE,
     3849    INVALID_OPCODE,
     3850    INVALID_OPCODE,
     3851    INVALID_OPCODE,
     3852    INVALID_OPCODE,
     3853    INVALID_OPCODE,
     3854    OPVEX("vaesimc %Vdq,%Wdq",         IDX_ParseModRM,    IDX_UseModRM,       0,                           0,  OP_AESIMC,    OP_PARM_Vdq,  OP_PARM_Wdq,  OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3855    OPVEX("vaesenc %Vdq,%Hdq,%Wdq",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_AESENC,    OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Wdq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3856    OPVEX("vaesenclast %Vdq,%Hdq,%Wdq",IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_AESENCLAST,OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Wdq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3857    OPVEX("vaesdec %Vdq,%Hdq,%Wdq",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_AESDEC,    OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Wdq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3858    OPVEX("vaesdeclast %Vdq,%Hdq,%Wdq",IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,                0,  OP_AESDECLAST,OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Wdq,  OP_PARM_NONE, DISOPTYPE_HARMLESS),
     3859
     3860    /* e */
     3861    INVALID_OPCODE_BLOCK
     3862
     3863    /* f */
     3864    INVALID_OPCODE,
     3865    INVALID_OPCODE,
     3866    INVALID_OPCODE,
     3867    INVALID_OPCODE,
     3868    INVALID_OPCODE,
     3869    INVALID_OPCODE,
     3870    INVALID_OPCODE,
     3871    OP("shlx %Gy,%By,%Ey",    IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,  OP_BEXTR,   OP_PARM_Gy,   OP_PARM_By,   OP_PARM_Ey, DISOPTYPE_HARMLESS),
     3872    INVALID_OPCODE,
     3873    INVALID_OPCODE,
     3874    INVALID_OPCODE,
     3875    INVALID_OPCODE,
     3876    INVALID_OPCODE,
     3877    INVALID_OPCODE,
     3878    INVALID_OPCODE,
     3879    INVALID_OPCODE,
     3880};
     3881
     3882const DISOPCODE g_aMapThreeBytesVex_660F3A[256] =
     3883{
     3884    /* 0 */
     3885    OP("vpermq %Vqq,%Wqq,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERMQ,    OP_PARM_Vqq,  OP_PARM_Wqq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3886    OP("vpermpd %Vqq,%Wqq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERMPD,   OP_PARM_Vqq,  OP_PARM_Wqq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3887    OPVEX("vpblendd %Vx,%Hx,%Wx,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PBLENDD,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3888    INVALID_OPCODE,
     3889    OP("vpermilps %Vx,%Wx,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERMILPS, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3890    OP("vpermilpd %Vx,%Wx,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERMILPD, OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3891    OPVEX("vperm2f128 %Vqq,%Hqq,%Wqq,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERM2F128,   OP_PARM_Vqq,  OP_PARM_Hqq,  OP_PARM_Wqq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3892    INVALID_OPCODE,
     3893    OP("vroundps %Vx,%Wx,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_ROUNDPS,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3894    OP("vroundpd %Vx,%Wx,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_ROUNDPD,  OP_PARM_Vx,   OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3895    OP("vroundss %Vss,%Wss,%Ib",  IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_ROUNDSS,  OP_PARM_Vss,  OP_PARM_Wss,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3896    OP("vroundsd %Vsd,%Wsd,%Ib",  IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_ROUNDSD,  OP_PARM_Vsd,  OP_PARM_Wsd,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3897    OPVEX("vblendps %Vx,%Hx,%Wx,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_BLENDPS,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3898    OPVEX("vblendpd %Vx,%Hx,%Wx,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_BLENDPD,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3899    OPVEX("vblendw %Vx,%Hx,%Wx,%Ib",    IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_BLENDW,    OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3900    OPVEX("vpalignr %Vx,%Hx,%Wx,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_ALIGNR,    OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3901
     3902    /* 1 */
     3903    INVALID_OPCODE,
     3904    INVALID_OPCODE,
     3905    INVALID_OPCODE,
     3906    INVALID_OPCODE,
     3907    // vpextrb %Rd/Mb,%Vdq,%Ib
     3908    OP("vpextrb %Eb,%Vdq,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PEXTRB,    OP_PARM_Eb,  OP_PARM_Vdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3909    // vpextrw %Rd/Mw,%Vdq,%Ib
     3910    OP("vpextrw %Ew,%Vdq,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PEXTRW,    OP_PARM_Ew,  OP_PARM_Vdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3911    OP("vpextrd/q %Ey,%Vdq,%Ib",  IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PEXTRD,    OP_PARM_Ey,  OP_PARM_Vdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3912    OP("vextractps %Ed,%Vdq,%Ib", IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_EXTRACTPS, OP_PARM_Ed,  OP_PARM_Vdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3913    OPVEX("vinsertf128 %Vqq,%Hqq,%Wqq,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_INSERTF128,   OP_PARM_Vqq,  OP_PARM_Hqq,  OP_PARM_Wqq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3914    OP("vextractf128 %Wdq,%Vqq,%Ib",IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_EXTRACTF128,    OP_PARM_Eb,  OP_PARM_Vdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3915    INVALID_OPCODE,
     3916    INVALID_OPCODE,
     3917    INVALID_OPCODE,
     3918    OP("vcvtps2ph %Wx,%Vx,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_CVTPS2PH, OP_PARM_Wx,   OP_PARM_Vx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3919    INVALID_OPCODE,
     3920    INVALID_OPCODE,
     3921
     3922    /* 2 */
     3923    // vpinsrb %Vdq,%Hdq,%Ry/Mb,%Ib
     3924    OPVEX("vpinsrb %Vdq,%Hdq,%Ey,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_PINSRB,  OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Ey,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3925    // vinsertps %Vdq,%Hdq,%Udq/Md,%Ib
     3926    OPVEX("vinsertps %Vdq,%Hdq,%Wdq,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_INSERTPS,  OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Wdq,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3927    OPVEX("vpinsrd/q %Vdq,%Hdq,%Ey,%Ib",  IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_PINSRD,  OP_PARM_Vdq,  OP_PARM_Hdq,  OP_PARM_Ey,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3928    INVALID_OPCODE,
     3929    INVALID_OPCODE,
     3930    INVALID_OPCODE,
     3931    INVALID_OPCODE,
     3932    INVALID_OPCODE,
     3933    INVALID_OPCODE,
     3934    INVALID_OPCODE,
     3935    INVALID_OPCODE,
     3936    INVALID_OPCODE,
     3937    INVALID_OPCODE,
     3938    INVALID_OPCODE,
     3939    INVALID_OPCODE,
     3940    INVALID_OPCODE,
     3941
     3942    /* 3 */
     3943    INVALID_OPCODE,
     3944    INVALID_OPCODE,
     3945    INVALID_OPCODE,
     3946    INVALID_OPCODE,
     3947    INVALID_OPCODE,
     3948    INVALID_OPCODE,
     3949    INVALID_OPCODE,
     3950    INVALID_OPCODE,
     3951    OPVEX("vinserti128 %Vqq,%Hqq,%Wqq,%Ib", IDX_ParseModRM,    IDX_ParseVexDest,   IDX_UseModRM,   IDX_ParseImmByte,  OP_INSERTI128,  OP_PARM_Vqq,  OP_PARM_Hqq,  OP_PARM_Wqq,   OP_PARM_Ib,   DISOPTYPE_HARMLESS),
     3952    OP("vextracti128 %Wdq,%Vqq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_EXTRACTI128, OP_PARM_Wdq,   OP_PARM_Vqq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3953    INVALID_OPCODE,
     3954    INVALID_OPCODE,
     3955    INVALID_OPCODE,
     3956    INVALID_OPCODE,
     3957    INVALID_OPCODE,
     3958    INVALID_OPCODE,
     3959
     3960    /* 4 */
     3961    OPVEX("vdpps %Vx,%Hx,%Wx,%Ib",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_DPPS,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3962    OPVEX("vdppd %Vdq,%Hdq,%Wdq,%Ib",IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_DPPD,   OP_PARM_Vdq, OP_PARM_Hdq, OP_PARM_Wdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3963    OPVEX("vmpsadbw %Vx,%Hx,%Wx,%Ib",IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_MPSADBW,OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3964    INVALID_OPCODE,
     3965    OPVEX("vpclmulqdq %Vdq,%Hdq,%Wdq,%Ib",IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PCLMULQDQ,   OP_PARM_Vdq, OP_PARM_Hdq, OP_PARM_Wdq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3966    INVALID_OPCODE,
     3967    OPVEX("vperm2i128 %Vqq,%Hqq,%Wqq,%Ib",IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PERM2I128,   OP_PARM_Vqq, OP_PARM_Hqq, OP_PARM_Wqq,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3968    INVALID_OPCODE,
     3969    INVALID_OPCODE,
     3970    INVALID_OPCODE,
     3971    OPVEX("vpblendvps %Vx,%Hx,%Wx,%Lx",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PBLENDVPS,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Lx, DISOPTYPE_HARMLESS),
     3972    OPVEX("vpblendvpd %Vx,%Hx,%Wx,%Lx",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PBLENDVPD,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Lx, DISOPTYPE_HARMLESS),
     3973    OPVEX("vpblendvpb %Vx,%Hx,%Wx,%Lx",   IDX_ParseModRM,    IDX_ParseVexDest,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PBLENDVPB,   OP_PARM_Vx,  OP_PARM_Hx,  OP_PARM_Wx,   OP_PARM_Lx, DISOPTYPE_HARMLESS),
     3974    INVALID_OPCODE,
     3975    INVALID_OPCODE,
     3976    INVALID_OPCODE,
     3977
     3978    /* 5 */
     3979    INVALID_OPCODE_BLOCK
     3980
     3981    /* 6 */
     3982    OP("vpcmpestrm %Vdq,%Wdq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PCMPESTRM, OP_PARM_Vdq,   OP_PARM_Wdq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3983    OP("vpcmpestri %Vdq,%Wdq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PCMPESTRI, OP_PARM_Vdq,   OP_PARM_Wdq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3984    OP("vpcmpistrm %Vdq,%Wdq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PCMPISTRM, OP_PARM_Vdq,   OP_PARM_Wdq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3985    OP("vpcmpistri %Vdq,%Wdq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_PCMPISTRI, OP_PARM_Vdq,   OP_PARM_Wdq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     3986    INVALID_OPCODE,
     3987    INVALID_OPCODE,
     3988    INVALID_OPCODE,
     3989    INVALID_OPCODE,
     3990    INVALID_OPCODE,
     3991    INVALID_OPCODE,
     3992    INVALID_OPCODE,
     3993    INVALID_OPCODE,
     3994    INVALID_OPCODE,
     3995    INVALID_OPCODE,
     3996    INVALID_OPCODE,
     3997    INVALID_OPCODE,
     3998
     3999    /* 7 */
     4000    INVALID_OPCODE_BLOCK
     4001
     4002    /* 8 */
     4003    INVALID_OPCODE_BLOCK
     4004
     4005    /* 9 */
     4006    INVALID_OPCODE_BLOCK
     4007
     4008    /* a */
     4009    INVALID_OPCODE_BLOCK
     4010
     4011    /* b */
     4012    INVALID_OPCODE_BLOCK
     4013
     4014    /* c */
     4015    INVALID_OPCODE_BLOCK
     4016
     4017    /* d */
     4018    INVALID_OPCODE,
     4019    INVALID_OPCODE,
     4020    INVALID_OPCODE,
     4021    INVALID_OPCODE,
     4022    INVALID_OPCODE,
     4023    INVALID_OPCODE,
     4024    INVALID_OPCODE,
     4025    INVALID_OPCODE,
     4026    INVALID_OPCODE,
     4027    INVALID_OPCODE,
     4028    INVALID_OPCODE,
     4029    INVALID_OPCODE,
     4030    INVALID_OPCODE,
     4031    INVALID_OPCODE,
     4032    INVALID_OPCODE,
     4033    OP("vaeskeygen %Vdq,%Wdq,%Ib",   IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_AESKEYGEN, OP_PARM_Vdq,   OP_PARM_Wdq,   OP_PARM_Ib, DISOPTYPE_HARMLESS),
     4034
     4035    /* e */
     4036    INVALID_OPCODE_BLOCK
     4037
     4038    /* f */
     4039    INVALID_OPCODE_BLOCK
     4040};
     4041
     4042const DISOPCODE g_aMapThreeBytesVex_F20F3A_F0[1] =
     4043{
     4044    OP("rorx %Gy,%Ey,%Ib",    IDX_ParseModRM,    IDX_UseModRM,   IDX_ParseImmByte,   OP_RORX,    OP_PARM_Gy,  OP_PARM_Ey,  OP_PARM_Ib, DISOPTYPE_HARMLESS),
     4045};
     4046
     4047
    35744048PCDISOPCODE const g_aVexOpcodesMap[3] =
    35754049{
    3576     &g_aMapTwoBytesVex[0], // 0fh 2-byte opcodes
    3577     NULL,                  // 0f38h 3-byte opcodes
    3578     NULL,                  // 0f3ah 3-byte opcodes
     4050    &g_aMapTwoBytesVex[0],         // 0fh 2-byte opcodes
     4051    &g_aMapThreeBytesVex_0F38_F[0],// 0f38h 3-byte opcodes
     4052    NULL,                          // 0f3ah 3-byte opcodes
    35794053};
    35804054
    35814055PCDISOPCODE const g_aVexOpcodesMap_66H[3] =
    35824056{
    3583     &g_aMapTwoBytesVex_66H[0], // 0fh 2-byte opcodes
    3584     NULL,                      // 0f38h 3-byte opcodes
    3585     NULL,                      // 0f3ah 3-byte opcodes
     4057    &g_aMapTwoBytesVex_66H[0],     // 0fh 2-byte opcodes
     4058    &g_aMapThreeBytesVex_660F38[0],// 0f38h 3-byte opcodes
     4059    &g_aMapThreeBytesVex_660F3A[0],// 0f3ah 3-byte opcodes
    35864060};
    35874061
    35884062PCDISOPCODE const g_aVexOpcodesMap_F2H[3] =
    35894063{
    3590     &g_aMapTwoBytesVex_F2H[0], // 0fh 2-byte opcodes
    3591     NULL,                      // 0f38h 3-byte opcodes
    3592     NULL,                      // 0f3ah 3-byte opcodes
     4064    &g_aMapTwoBytesVex_F2H[0],       // 0fh 2-byte opcodes
     4065    &g_aMapThreeBytesVex_F20F38_F[0],// 0f38h 3-byte opcodes
     4066    &g_aMapThreeBytesVex_F20F3A_F0[0],// 0f3ah 3-byte opcodes
    35934067};
    35944068
    35954069PCDISOPCODE const g_aVexOpcodesMap_F3H[3] =
    35964070{
    3597     &g_aMapTwoBytesVex_F3H[0], // 0fh 2-byte opcodes
    3598     NULL,                      // 0f38h 3-byte opcodes
    3599     NULL,                      // 0f3ah 3-byte opcodes
    3600 };
     4071    &g_aMapTwoBytesVex_F3H[0],       // 0fh 2-byte opcodes
     4072    &g_aMapThreeBytesVex_F30F38_F[0],// 0f38h 3-byte opcodes
     4073    NULL,                            // 0f3ah 3-byte opcodes
     4074};
  • trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm

    r53094 r53131  
    162162        tzcnt      eax, [edi]
    163163        tzcnt      eax, [edi + 1000h]
     164        vpmovsxbw  ymm0, xmm1
    164165%endif
    165166
     
    203204        vlddqu     xmm1, [ds:ebp+edi*8+00f000001h]
    204205        vlddqu      ymm1, [ds:ebp+edi*8+00f000001h]
     206
     207        vpmovsxbw xmm0,qword [0x100]
     208        vbroadcastf128 ymm0,oword [0x100]
    205209
    206210ENDPROC   TestProc32
     
    329333
    330334        vpunpcklbw ymm1, ymm2, ymm3
     335        vpmovsxbw  ymm4,[0x100]
    331336%endif
    332337
     
    373378        vlddqu     ymm1, [rbp+rdi*8+00f000001h]
    374379
     380        vbroadcastf128 ymm0,oword [0x100]
     381        vmovlps   xmm0, xmm1, [100h]
     382
     383        vblendvpd xmm0, xmm1, [100h], xmm3
     384
    375385        ret
    376386ENDPROC   TestProc64
Note: See TracChangeset for help on using the changeset viewer.

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