Changeset 53131 in vbox
- Timestamp:
- Oct 23, 2014 5:13:53 PM (11 years ago)
- svn:sync-xref-src-repo-rev:
- 96664
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r53094 r53131 995 995 996 996 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) 998 1002 { 999 1003 // Use YMM register if VEX.L is set. … … 1354 1358 { 1355 1359 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 } 1359 1377 return offInstr + 1; 1360 1378 } … … 2454 2472 2455 2473 // VEX.R (equivalent to REX.R) 2456 if ( !(byte & 0x80) && pDis->uCpuMode == DISCPUMODE_64BIT)2474 if (pDis->uCpuMode == DISCPUMODE_64BIT && !(byte & 0x80)) 2457 2475 { 2458 2476 /* REX prefix byte */ … … 2499 2517 NOREF(pOp); NOREF(pParam); 2500 2518 2501 PCDISOPCODE pOpCode = &g_InvalidOpcode[0];2519 PCDISOPCODE pOpCode = NULL; 2502 2520 2503 2521 uint8_t byte1 = disReadByte(pDis, offInstr++); … … 2508 2526 uint8_t implOpcode = (byte1 & 0x1f); 2509 2527 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 } 2524 2545 } 2525 2546 … … 2531 2552 pOpCode = g_aVexOpcodesMap[implOpcode - 1]; 2532 2553 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 } 2535 2566 } 2536 2567 break; … … 2542 2573 if (pOpCode != NULL) 2543 2574 pOpCode = &pOpCode[pDis->bOpCode]; 2544 else pOpCode = &g_InvalidOpcode[0];2545 2546 2575 /* TODO: check if we need to set this prefix */ 2547 2576 pDis->fPrefix |= DISPREFIX_OPSIZE; … … 2559 2588 pOpCode = g_aVexOpcodesMap_F3H[implOpcode - 1]; 2560 2589 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 2563 2603 } 2564 2604 break; … … 2570 2610 pOpCode = g_aVexOpcodesMap_F2H[implOpcode - 1]; 2571 2611 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 } 2574 2628 } 2575 2629 break; … … 2578 2632 break; 2579 2633 } 2634 2635 if (pOpCode == NULL) 2636 pOpCode = g_InvalidOpcode; 2580 2637 2581 2638 return disParseInstruction(offInstr, pOpCode, pDis); -
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r53094 r53131 625 625 break; \ 626 626 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; \ 630 651 case OP_PARM_ps: \ 631 652 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; } \ 633 654 case OP_PARM_ss: \ 634 655 case OP_PARM_sd: \ 635 656 case OP_PARM_dq: PUT_SZ("oword "); break; \ 657 case OP_PARM_qq: PUT_SZ("yword "); break; \ 636 658 case OP_PARM_p: break; /* see PUT_FAR */ \ 637 659 case OP_PARM_s: if (pParam->fUse & DISUSE_REG_FP) PUT_SZ("tword "); break; /* ?? */ \ … … 690 712 case 'P': /* ModRM byte selects MMX register (ParseModRM / UseModRM). */ 691 713 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. */ 692 715 { 693 716 pszFmt += RT_C_IS_ALPHA(pszFmt[0]) ? RT_C_IS_ALPHA(pszFmt[1]) ? 2 : 1 : 0; -
trunk/src/VBox/Disassembler/DisasmTables.cpp
r53094 r53131 3190 3190 INVALID_OPCODE, 3191 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),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), 3193 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 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), … … 3572 3572 }; 3573 3573 3574 const 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 3594 const 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 3614 const 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 3634 const 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 3882 const 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 4042 const 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 3574 4048 PCDISOPCODE const g_aVexOpcodesMap[3] = 3575 4049 { 3576 &g_aMapTwoBytesVex[0], // 0fh 2-byte opcodes3577 NULL,// 0f38h 3-byte opcodes3578 NULL, // 0f3ah 3-byte opcodes4050 &g_aMapTwoBytesVex[0], // 0fh 2-byte opcodes 4051 &g_aMapThreeBytesVex_0F38_F[0],// 0f38h 3-byte opcodes 4052 NULL, // 0f3ah 3-byte opcodes 3579 4053 }; 3580 4054 3581 4055 PCDISOPCODE const g_aVexOpcodesMap_66H[3] = 3582 4056 { 3583 &g_aMapTwoBytesVex_66H[0], // 0fh 2-byte opcodes3584 NULL,// 0f38h 3-byte opcodes3585 NULL,// 0f3ah 3-byte opcodes4057 &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 3586 4060 }; 3587 4061 3588 4062 PCDISOPCODE const g_aVexOpcodesMap_F2H[3] = 3589 4063 { 3590 &g_aMapTwoBytesVex_F2H[0], // 0fh 2-byte opcodes3591 NULL,// 0f38h 3-byte opcodes3592 NULL,// 0f3ah 3-byte opcodes4064 &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 3593 4067 }; 3594 4068 3595 4069 PCDISOPCODE const g_aVexOpcodesMap_F3H[3] = 3596 4070 { 3597 &g_aMapTwoBytesVex_F3H[0], // 0fh 2-byte opcodes3598 NULL,// 0f38h 3-byte opcodes3599 NULL, // 0f3ah 3-byte opcodes3600 }; 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 162 162 tzcnt eax, [edi] 163 163 tzcnt eax, [edi + 1000h] 164 vpmovsxbw ymm0, xmm1 164 165 %endif 165 166 … … 203 204 vlddqu xmm1, [ds:ebp+edi*8+00f000001h] 204 205 vlddqu ymm1, [ds:ebp+edi*8+00f000001h] 206 207 vpmovsxbw xmm0,qword [0x100] 208 vbroadcastf128 ymm0,oword [0x100] 205 209 206 210 ENDPROC TestProc32 … … 329 333 330 334 vpunpcklbw ymm1, ymm2, ymm3 335 vpmovsxbw ymm4,[0x100] 331 336 %endif 332 337 … … 373 378 vlddqu ymm1, [rbp+rdi*8+00f000001h] 374 379 380 vbroadcastf128 ymm0,oword [0x100] 381 vmovlps xmm0, xmm1, [100h] 382 383 vblendvpd xmm0, xmm1, [100h], xmm3 384 375 385 ret 376 386 ENDPROC TestProc64
Note:
See TracChangeset
for help on using the changeset viewer.