Changeset 53094 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Oct 20, 2014 4:04:09 PM (10 years ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r53032 r53094 101 101 static FNDISPARSE ParseModFence; 102 102 static FNDISPARSE ParseNopPause; 103 static FNDISPARSE ParseVex2b; 104 static FNDISPARSE ParseVex3b; 105 static FNDISPARSE ParseVexDest; 103 106 104 107 static FNDISPARSE ParseYv; … … 159 162 ParseThreeByteEsc5, 160 163 ParseImmAddrF, 161 ParseInvOpModRm 164 ParseInvOpModRm, 165 ParseVex2b, 166 ParseVex3b, 167 ParseVexDest 162 168 }; 163 169 … … 206 212 ParseThreeByteEsc5, 207 213 ParseImmAddrF_SizeOnly, 208 ParseInvOpModRm 214 ParseInvOpModRm, 215 ParseVex2b, 216 ParseVex3b, 217 ParseVexDest 209 218 }; 210 219 … … 577 586 pDis->Param2.fParam = pOp->fParam2; 578 587 pDis->Param3.fParam = pOp->fParam3; 588 pDis->Param4.fParam = pOp->fParam4; 579 589 580 590 /* Correct the operand size if the instruction is marked as forced or default 64 bits */ … … 612 622 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse3](offInstr, pOp, pDis, &pDis->Param3); 613 623 if (fFiltered == false) pDis->Param3.cb = DISGetParamSize(pDis, &pDis->Param3); 624 } 625 626 if (pOp->idxParse4 != IDX_ParseNop) 627 { 628 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse4](offInstr, pOp, pDis, &pDis->Param4); 629 if (fFiltered == false) pDis->Param4.cb = DISGetParamSize(pDis, &pDis->Param4); 614 630 } 615 631 // else simple one byte instruction … … 974 990 if (mod != 3) 975 991 break; /* memory operand */ 992 case OP_PARM_U: // XMM/YMM register 976 993 reg = rm; /* the RM field specifies the xmm register */ 977 994 /* else no break */ 978 995 979 996 case OP_PARM_V: //XMM register 980 pParam->fUse |= DISUSE_REG_XMM; 981 pParam->Base.idxXmmReg = reg; 997 if (VEXREG_IS256B(pDis->bVexDestReg)) 998 { 999 // Use YMM register if VEX.L is set. 1000 pParam->fUse |= DISUSE_REG_YMM; 1001 pParam->Base.idxYmmReg = reg; 1002 } 1003 else 1004 { 1005 pParam->fUse |= DISUSE_REG_XMM; 1006 pParam->Base.idxXmmReg = reg; 1007 } 982 1008 return offInstr; 983 1009 } … … 1891 1917 //***************************************************************************** 1892 1918 //***************************************************************************** 1919 static size_t ParseVexDest(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 1920 { 1921 NOREF(pOp); 1922 1923 unsigned type = OP_PARM_VTYPE(pParam->fParam); 1924 1925 switch (type) 1926 { 1927 case OP_PARM_H: //XMM or YMM register 1928 if (VEXREG_IS256B(pDis->bVexDestReg)) 1929 { 1930 pParam->fUse |= DISUSE_REG_YMM; 1931 pParam->Base.idxYmmReg = (pDis->bVexDestReg >> 1) ^ 0xf; 1932 } 1933 else 1934 { 1935 pParam->fUse |= DISUSE_REG_XMM; 1936 pParam->Base.idxXmmReg = (pDis->bVexDestReg >> 1) ^ 0xf; 1937 } 1938 break; 1939 case OP_PARM_B: // Always OP_PARM_By. Change if it is not so. 1940 if ((pDis->fPrefix & DISPREFIX_REX) && (pDis->fRexPrefix & DISPREFIX_REX_FLAGS_W)) 1941 pParam->fUse |= DISUSE_REG_GEN64; 1942 else 1943 pParam->fUse |= DISUSE_REG_GEN32; 1944 // TODO: Check if the register number is correct 1945 pParam->Base.idxGenReg = (pDis->bVexDestReg >> 1) ^ 0xf; 1946 break; 1947 } 1948 1949 return offInstr; 1950 } 1951 //***************************************************************************** 1952 //***************************************************************************** 1893 1953 static size_t ParseTwoByteEsc(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 1894 1954 { … … 2380 2440 return disParseInstruction(offInstr, pOp, pDis); 2381 2441 } 2382 2442 //***************************************************************************** 2443 //***************************************************************************** 2444 static size_t ParseVex2b(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 2445 { 2446 NOREF(pOp); NOREF(pParam); 2447 2448 PCDISOPCODE pOpCode = &g_InvalidOpcode[0]; 2449 2450 uint8_t byte = disReadByte(pDis, offInstr++); 2451 pDis->bOpCode = disReadByte(pDis, offInstr++); 2452 2453 pDis->bVexDestReg = VEX_2B2INT(byte); 2454 2455 // VEX.R (equivalent to REX.R) 2456 if (!(byte & 0x80) && pDis->uCpuMode == DISCPUMODE_64BIT) 2457 { 2458 /* REX prefix byte */ 2459 pDis->fPrefix |= DISPREFIX_REX; 2460 pDis->fRexPrefix = DISPREFIX_REX_FLAGS_R; 2461 } 2462 2463 switch(byte & 3) 2464 { 2465 case 0: 2466 pOpCode = g_aVexOpcodesMap[0] + pDis->bOpCode; 2467 break; 2468 // OPSIZE 0x66 prefix 2469 case 1: 2470 pOpCode = g_aVexOpcodesMap_66H[0] + pDis->bOpCode; 2471 2472 /* TODO: Check if we need to set this prefix */ 2473 pDis->fPrefix |= DISPREFIX_OPSIZE; 2474 if (pDis->uCpuMode == DISCPUMODE_16BIT) 2475 pDis->uOpMode = DISCPUMODE_32BIT; 2476 else 2477 pDis->uOpMode = DISCPUMODE_16BIT; /* for 32 and 64 bits mode (there is no 32 bits operand size override prefix) */ 2478 break; 2479 2480 // REPE 0xF3 prefix 2481 case 2: 2482 pOpCode = g_aVexOpcodesMap_F3H[0] + pDis->bOpCode; 2483 break; 2484 2485 // REPNE 0xF2 prefix 2486 case 3: 2487 pOpCode = g_aVexOpcodesMap_F2H[0] + pDis->bOpCode; 2488 break; 2489 default: 2490 break; 2491 } 2492 2493 return disParseInstruction(offInstr, pOpCode, pDis); 2494 } 2495 //***************************************************************************** 2496 //***************************************************************************** 2497 static size_t ParseVex3b(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 2498 { 2499 NOREF(pOp); NOREF(pParam); 2500 2501 PCDISOPCODE pOpCode = &g_InvalidOpcode[0]; 2502 2503 uint8_t byte1 = disReadByte(pDis, offInstr++); 2504 uint8_t byte2 = disReadByte(pDis, offInstr++); 2505 pDis->bOpCode = disReadByte(pDis, offInstr++); 2506 2507 pDis->bVexDestReg = VEX_2B2INT(byte2); 2508 uint8_t implOpcode = (byte1 & 0x1f); 2509 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; 2524 } 2525 2526 switch(byte2 & 3) 2527 { 2528 case 0: 2529 if (implOpcode >= 1 && implOpcode <= 3) // Other values are #UD. 2530 { 2531 pOpCode = g_aVexOpcodesMap[implOpcode - 1]; 2532 if (pOpCode != NULL) 2533 pOpCode = &pOpCode[pDis->bOpCode]; 2534 else pOpCode = &g_InvalidOpcode[0]; 2535 } 2536 break; 2537 // OPSIZE 0x66 prefix 2538 case 1: 2539 if (implOpcode >= 1 && implOpcode <= 3) // Other values are #UD. 2540 { 2541 pOpCode = g_aVexOpcodesMap_66H[implOpcode - 1]; 2542 if (pOpCode != NULL) 2543 pOpCode = &pOpCode[pDis->bOpCode]; 2544 else pOpCode = &g_InvalidOpcode[0]; 2545 2546 /* TODO: check if we need to set this prefix */ 2547 pDis->fPrefix |= DISPREFIX_OPSIZE; 2548 if (pDis->uCpuMode == DISCPUMODE_16BIT) 2549 pDis->uOpMode = DISCPUMODE_32BIT; 2550 else 2551 pDis->uOpMode = DISCPUMODE_16BIT; /* for 32 and 64 bits mode (there is no 32 bits operand size override prefix) */ 2552 } 2553 break; 2554 2555 // REPE 0xF3 prefix 2556 case 2: 2557 if (implOpcode >= 1 && implOpcode <= 3) // Other values are #UD. 2558 { 2559 pOpCode = g_aVexOpcodesMap_F3H[implOpcode - 1]; 2560 if (pOpCode != NULL) 2561 pOpCode = &pOpCode[pDis->bOpCode]; 2562 else pOpCode = &g_InvalidOpcode[0]; 2563 } 2564 break; 2565 2566 // REPNE 0xF2 prefix 2567 case 3: 2568 if (implOpcode >= 1 && implOpcode <= 3) // Other values are #UD. 2569 { 2570 pOpCode = g_aVexOpcodesMap_F2H[implOpcode - 1]; 2571 if (pOpCode != NULL) 2572 pOpCode = &pOpCode[pDis->bOpCode]; 2573 else pOpCode = &g_InvalidOpcode[0]; 2574 } 2575 break; 2576 2577 default: 2578 break; 2579 } 2580 2581 return disParseInstruction(offInstr, pOpCode, pDis); 2582 } 2383 2583 2384 2584 … … 2464 2664 } 2465 2665 2466 2467 2666 /** 2468 2667 * Internal worker for DISInstrEx and DISInstrWithPrefetchedBytes. … … 2558 2757 pDis->uOpMode = DISCPUMODE_64BIT; /* overrides size prefix byte */ 2559 2758 continue; //fetch the next byte 2759 default: 2760 break; 2560 2761 } 2762 } 2763 2764 /* Check if this is a VEX prefix. Not for 32-bit mode. */ 2765 if ((opcode == OP_LES || opcode == OP_LDS) 2766 && (disReadByte(pDis, offInstr) & 0xc0) == 0xc0 2767 && (opcode != OP_LES || pDis->uCpuMode == DISCPUMODE_64BIT || !(disReadByte(pDis, offInstr + 1) & 0x80))) 2768 { 2769 paOneByteMap = g_aOneByteMapX64; 2561 2770 } 2562 2771 … … 2564 2773 pDis->bOpCode = codebyte; 2565 2774 pDis->cbPrefix = (uint8_t)offInstr - 1; 2775 2566 2776 offInstr = disParseInstruction(offInstr, &paOneByteMap[pDis->bOpCode], pDis); 2567 2777 break; -
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r53007 r53094 68 68 "xmm0\0", "xmm1\0", "xmm2\0", "xmm3\0", "xmm4\0", "xmm5\0", "xmm6\0", "xmm7\0", "xmm8\0", "xmm9\0", "xmm10", "xmm11", "xmm12", "xmm13", "xmm14", "xmm15" 69 69 }; 70 static const char g_aszYasmRegYMM[16][6] = 71 { 72 "ymm0\0", "ymm1\0", "ymm2\0", "ymm3\0", "ymm4\0", "ymm5\0", "ymm6\0", "ymm7\0", "ymm8\0", "ymm9\0", "ymm10", "ymm11", "ymm12", "ymm13", "ymm14", "ymm15" 73 }; 70 74 static const char g_aszYasmRegCRx[16][5] = 71 75 { … … 94 98 { 95 99 switch (pParam->fUse & ( DISUSE_REG_GEN8 | DISUSE_REG_GEN16 | DISUSE_REG_GEN32 | DISUSE_REG_GEN64 96 | DISUSE_REG_FP | DISUSE_REG_MMX | DISUSE_REG_XMM | DISUSE_REG_ CR97 | DISUSE_REG_ DBG| DISUSE_REG_SEG | DISUSE_REG_TEST))100 | DISUSE_REG_FP | DISUSE_REG_MMX | DISUSE_REG_XMM | DISUSE_REG_YMM 101 | DISUSE_REG_CR | DISUSE_REG_DBG | DISUSE_REG_SEG | DISUSE_REG_TEST)) 98 102 99 103 { … … 149 153 { 150 154 Assert(pParam->Base.idxXmmReg < RT_ELEMENTS(g_aszYasmRegXMM)); 151 const char *psz = g_aszYasmRegXMM[pParam->Base.idxMmxReg]; 155 const char *psz = g_aszYasmRegXMM[pParam->Base.idxXmmReg]; 156 *pcchReg = 4 + !!psz[4]; 157 return psz; 158 } 159 160 case DISUSE_REG_YMM: 161 { 162 Assert(pParam->Base.idxYmmReg < RT_ELEMENTS(g_aszYasmRegYMM)); 163 const char *psz = g_aszYasmRegYMM[pParam->Base.idxYmmReg]; 152 164 *pcchReg = 4 + !!psz[4]; 153 165 return psz; … … 616 628 case OP_PARM_d: PUT_SZ("dword "); break; \ 617 629 case OP_PARM_q: PUT_SZ("qword "); break; \ 618 case OP_PARM_dq: \ 619 if (OP_PARM_VTYPE(pParam->fParam) != OP_PARM_W) /* these are 128 bit, pray they are all unambiguous.. */ \ 620 PUT_SZ("dqword "); \ 621 break; \ 630 case OP_PARM_ps: \ 631 case OP_PARM_pd: \ 632 case OP_PARM_x: if (VEXREG_IS256B(pDis->bVexDestReg)) { PUT_SZ("yword"); break; } \ 633 case OP_PARM_ss: \ 634 case OP_PARM_sd: \ 635 case OP_PARM_dq: PUT_SZ("oword "); break; \ 622 636 case OP_PARM_p: break; /* see PUT_FAR */ \ 623 637 case OP_PARM_s: if (pParam->fUse & DISUSE_REG_FP) PUT_SZ("tword "); break; /* ?? */ \ … … 675 689 case 'V': /* ModRM byte selects an XMM/SSE register (ParseModRM / UseModRM). */ 676 690 case 'P': /* ModRM byte selects MMX register (ParseModRM / UseModRM). */ 691 case 'H': /* The VEX.vvvv field of the VEX prefix selects a XMM/YMM register. */ 677 692 { 678 693 pszFmt += RT_C_IS_ALPHA(pszFmt[0]) ? RT_C_IS_ALPHA(pszFmt[1]) ? 2 : 1 : 0; … … 738 753 | DISUSE_REG_MMX 739 754 | DISUSE_REG_XMM 755 | DISUSE_REG_YMM 740 756 | DISUSE_REG_CR 741 757 | DISUSE_REG_DBG … … 1123 1139 case 2: pParam = &pDis->Param2; break; 1124 1140 case 3: pParam = &pDis->Param3; break; 1141 case 4: pParam = &pDis->Param4; break; 1125 1142 default: pParam = NULL; break; 1126 1143 } -
trunk/src/VBox/Disassembler/DisasmInternal.h
r53032 r53094 74 74 IDX_ParseImmAddrF, 75 75 IDX_ParseInvOpModRM, 76 IDX_ParseVex2b, 77 IDX_ParseVex3b, 78 IDX_ParseVexDest, 76 79 IDX_ParseMax 77 80 }; … … 113 116 /** Three byte opcode map with prefixes 0x66 0xF2 (0xF 0x38) */ 114 117 extern PCDISOPCODE const g_apThreeByteMapX86_66F20F38[16]; 118 119 /** VEX opcodes table defined by [VEX.m-mmmm - 1]. 120 * 0Fh, 0F38h, 0F3Ah correspondingly, VEX.pp = 00b */ 121 extern PCDISOPCODE const g_aVexOpcodesMap[3]; 122 123 /** VEX opcodes table defined by [VEX.m-mmmm - 1]. 124 * 0Fh, 0F38h, 0F3Ah correspondingly, VEX.pp = 01b (66h) */ 125 extern PCDISOPCODE const g_aVexOpcodesMap_66H[3]; 126 127 /** 0Fh, 0F38h, 0F3Ah correspondingly, VEX.pp = 10b (F3h) */ 128 extern PCDISOPCODE const g_aVexOpcodesMap_F3H[3]; 129 130 /** 0Fh, 0F38h, 0F3Ah correspondingly, VEX.pp = 11b (F2h) */ 131 extern PCDISOPCODE const g_aVexOpcodesMap_F2H[3]; 115 132 /** @} */ 116 133 … … 174 191 #ifndef DIS_CORE_ONLY 175 192 # define OP(pszOpcode, idxParse1, idxParse2, idxParse3, opcode, param1, param2, param3, optype) \ 176 { pszOpcode, idxParse1, idxParse2, idxParse3, 0, opcode, param1, param2, param3, optype } 193 { pszOpcode, idxParse1, idxParse2, idxParse3, 0, opcode, param1, param2, param3, 0, 0, optype } 194 # define OPVEX(pszOpcode, idxParse1, idxParse2, idxParse3, idxParse4, opcode, param1, param2, param3, param4, optype) \ 195 { pszOpcode, idxParse1, idxParse2, idxParse3, idxParse4, opcode, param1, param2, param3, param4, 0, optype } 177 196 #else 178 197 # define OP(pszOpcode, idxParse1, idxParse2, idxParse3, opcode, param1, param2, param3, optype) \ 179 { idxParse1, idxParse2, idxParse3, 0, opcode, param1, param2, param3, optype } 198 { idxParse1, idxParse2, idxParse3, 0, opcode, param1, param2, param3, 0, 0, optype } 199 # define OPVEX(pszOpcode, idxParse1, idxParse2, idxParse3, idxParse4, opcode, param1, param2, param3, param4, optype) \ 200 { idxParse1, idxParse2, idxParse3, idxParse4, opcode, param1, param2, param3, param4, 0, optype } 180 201 #endif 181 202 -
trunk/src/VBox/Disassembler/DisasmTables.cpp
r53052 r53094 648 648 649 649 /* e */ 650 OP("pavg n %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PAVGN, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS),650 OP("pavgb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PAVGB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 651 651 OP("psraw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSRAW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 652 652 OP("psrad %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSRAD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 654 654 OP("pmulhuw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULHUW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 655 655 OP("pmulhw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULHW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 656 INVALID_OPCODE, /** @todo 0x0f 0xe6 cvtpd2dq// */656 INVALID_OPCODE, 657 657 OP("movntq %Wq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVNTQ, OP_PARM_Wq, OP_PARM_Vq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 658 658 OP("psubsb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBSB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 666 666 667 667 /* f */ 668 INVALID_OPCODE, /** @todo 0x0f 0xf0 lddqu */668 INVALID_OPCODE, 669 669 OP("psllw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSLLW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 670 670 OP("pslld %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSLLD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 671 671 OP("psllq %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSSQ, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 672 672 OP("pmuludq %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULUDQ, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 673 OP("p addwd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PADDWD,OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS),674 OP("psadbw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_P ADBW,OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS),675 OP("maskmovq %Ppi,%Qpi", IDX_ParseModRM, IDX_UseModRM, 0, OP_ PMASKMOVQ, OP_PARM_Ppi,OP_PARM_Qpi, OP_PARM_NONE, DISOPTYPE_HARMLESS),673 OP("pmaddwd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMADDWD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 674 OP("psadbw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSADBW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 675 OP("maskmovq %Ppi,%Qpi", IDX_ParseModRM, IDX_UseModRM, 0, OP_MASKMOVQ,OP_PARM_Ppi, OP_PARM_Qpi, OP_PARM_NONE, DISOPTYPE_HARMLESS), 676 676 OP("psubb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 677 677 OP("psubw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 678 678 OP("psubd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 679 OP("psubq %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUB D, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS),679 OP("psubq %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBQ, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 680 680 OP("paddb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PADDB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 681 681 OP("paddw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PADDW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 779 779 OP("packssdw %Pdq,%Qdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PACKSSDW,OP_PARM_Pdq, OP_PARM_Qdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 780 780 OP("punpcklqdq %Vdq,%Wdq",IDX_ParseModRM, IDX_UseModRM, 0, OP_PUNPCKLQDQ,OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 781 OP("punpckhqd %Vdq,%Wdq",IDX_ParseModRM, IDX_UseModRM, 0, OP_PUNPCKHQD,OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS),781 OP("punpckhqdq %Vdq,%Wdq",IDX_ParseModRM, IDX_UseModRM, 0, OP_PUNPCKHQDQ,OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 782 782 OP("movd %Vdq,%Ed", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVD, OP_PARM_Vdq, OP_PARM_Ed, OP_PARM_NONE, DISOPTYPE_HARMLESS), 783 783 OP("movdqa %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVDQA, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 850 850 851 851 /* e */ 852 OP("pavg n %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PAVGN, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS),852 OP("pavgb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PAVGB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 853 853 OP("psraw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSRAW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 854 854 OP("psrad %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSRAD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 873 873 OP("psllq %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSSQ, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 874 874 OP("pmuludq %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULUDQ, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 875 OP("p addwd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PADDWD,OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS),876 OP("psadbw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_P ADBW,OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS),877 OP("maskmovdqu %Vdq,%Wdq",IDX_ParseModRM, IDX_UseModRM, 0, OP_ PMASKMOVDQU, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS),875 OP("pmaddwd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMADDWD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 876 OP("psadbw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSADBW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 877 OP("maskmovdqu %Vdq,%Wdq",IDX_ParseModRM, IDX_UseModRM, 0, OP_MASKMOVDQU, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 878 878 OP("psubb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 879 879 OP("psubw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSUBW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 1055 1055 1056 1056 /* f */ 1057 INVALID_OPCODE_BLOCK 1057 OP("lddqu %Vdq,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_LDDQU, OP_PARM_Vdq, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1058 INVALID_OPCODE, 1059 INVALID_OPCODE, 1060 INVALID_OPCODE, 1061 INVALID_OPCODE, 1062 INVALID_OPCODE, 1063 INVALID_OPCODE, 1064 INVALID_OPCODE, 1065 INVALID_OPCODE, 1066 INVALID_OPCODE, 1067 INVALID_OPCODE, 1068 INVALID_OPCODE, 1069 INVALID_OPCODE, 1070 INVALID_OPCODE, 1071 INVALID_OPCODE, 1072 INVALID_OPCODE 1058 1073 }; 1059 1074 … … 2924 2939 }; 2925 2940 2941 /* Vex codes for two bytes opcodes starting with 0Fh */ 2942 const DISOPCODE g_aMapTwoBytesVex[256] = 2943 { 2944 /* 0 */ 2945 INVALID_OPCODE_BLOCK 2946 2947 /* 1 */ 2948 OPVEX("vmovups %Vps,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVUPS, OP_PARM_Vps, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2949 OPVEX("vmovups %Wps,%Vps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVUPS, OP_PARM_Wps, OP_PARM_Vps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2950 // vmovhlps Vq,Hq,Uq ??? 2951 OPVEX("vmovlps %Vq,%Hq,%Mq", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVLPS, OP_PARM_Vq, OP_PARM_Hq, OP_PARM_Mq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2952 OPVEX("vmovlps %Mq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVLPS, OP_PARM_Mq, OP_PARM_Vq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2953 OPVEX("vunpcklps %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_UNPCKLPS, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2954 OPVEX("vunpckhps %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_UNPCKHPS, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2955 // vmovlhps Vdq,Hq,Uq ??? 2956 OPVEX("vmovhps %Vdq,%Hq,%Mq", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVHPS, OP_PARM_Vdq, OP_PARM_Hq, OP_PARM_Mq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2957 OPVEX("vmovhps %Mq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVHPS, OP_PARM_Mq, OP_PARM_Vq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2958 INVALID_OPCODE, 2959 INVALID_OPCODE, 2960 INVALID_OPCODE, 2961 INVALID_OPCODE, 2962 INVALID_OPCODE, 2963 INVALID_OPCODE, 2964 INVALID_OPCODE, 2965 INVALID_OPCODE, 2966 2967 /* 2 */ 2968 INVALID_OPCODE, 2969 INVALID_OPCODE, 2970 INVALID_OPCODE, 2971 INVALID_OPCODE, 2972 INVALID_OPCODE, 2973 INVALID_OPCODE, 2974 INVALID_OPCODE, 2975 INVALID_OPCODE, 2976 OPVEX("vmovaps %Vps,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVAPS, OP_PARM_Vps, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2977 OPVEX("vmovaps %Wps,%Vps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVAPS, OP_PARM_Wps, OP_PARM_Vps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2978 INVALID_OPCODE, 2979 OPVEX("vmovntps %Mps,%Vps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVNTPS, OP_PARM_Mps, OP_PARM_Vps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2980 INVALID_OPCODE, 2981 INVALID_OPCODE, 2982 OPVEX("vucomiss %Vss,%Wss", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_UCOMISS, OP_PARM_Vss, OP_PARM_Wss, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2983 OPVEX("vcomiss %Vss,%Wss", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_COMISS, OP_PARM_Vss, OP_PARM_Wss, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2984 2985 /* 3 */ 2986 INVALID_OPCODE_BLOCK 2987 2988 /* 4 */ 2989 INVALID_OPCODE_BLOCK 2990 2991 /* 5 */ 2992 OPVEX("vmovmskps %Gy,%Ups", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVMSKPS, OP_PARM_Gy, OP_PARM_Ups, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2993 OPVEX("vsqrtps %Vps,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_SQRTPS, OP_PARM_Vps, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2994 OPVEX("vrsqrtps %Vps,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_RSQRTPS, OP_PARM_Vps, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2995 OPVEX("vrcpps %Vps,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_RCPPS, OP_PARM_Vps, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2996 OPVEX("vandps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ANDPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2997 OPVEX("vandnps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ANDNPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2998 OPVEX("vorps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ORPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2999 OPVEX("vxorps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_XORPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3000 OPVEX("vaddps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3001 OPVEX("vmulps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MULPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3002 OPVEX("vcvtps2pd %Vpd,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTPS2PD, OP_PARM_Vpd, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3003 OPVEX("vcvtdq2ps %Vps,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTDQ2PS, OP_PARM_Vps, OP_PARM_Wdq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3004 OPVEX("vsubps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SUBPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3005 OPVEX("vminps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MINPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3006 OPVEX("vdivps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_DIVPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3007 OPVEX("vmaxps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MAXPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3008 3009 /* 6 */ 3010 INVALID_OPCODE_BLOCK 3011 3012 /* 7 */ 3013 INVALID_OPCODE, 3014 INVALID_OPCODE, 3015 INVALID_OPCODE, 3016 INVALID_OPCODE, 3017 INVALID_OPCODE, 3018 INVALID_OPCODE, 3019 INVALID_OPCODE, 3020 // vzeroall ??? 3021 OPVEX("vzeroupper", 0, 0, 0, 0, OP_EMMS, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3022 INVALID_OPCODE, 3023 INVALID_OPCODE, 3024 INVALID_OPCODE, 3025 INVALID_OPCODE, 3026 INVALID_OPCODE, 3027 INVALID_OPCODE, 3028 INVALID_OPCODE, 3029 INVALID_OPCODE, 3030 3031 /* 8 */ 3032 INVALID_OPCODE_BLOCK 3033 3034 /* 9 */ 3035 INVALID_OPCODE_BLOCK 3036 3037 /* a */ 3038 INVALID_OPCODE_BLOCK 3039 3040 /* b */ 3041 INVALID_OPCODE_BLOCK 3042 3043 /* c */ 3044 INVALID_OPCODE, 3045 INVALID_OPCODE, 3046 OPVEX("vcmpss %Vps,%Hps,%Wps,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_CMPSS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3047 INVALID_OPCODE, 3048 INVALID_OPCODE, 3049 INVALID_OPCODE, 3050 OPVEX("vshufps %Vps,%Hps,%Wps,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_SHUFPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3051 INVALID_OPCODE, 3052 INVALID_OPCODE, 3053 INVALID_OPCODE, 3054 INVALID_OPCODE, 3055 INVALID_OPCODE, 3056 INVALID_OPCODE, 3057 INVALID_OPCODE, 3058 INVALID_OPCODE, 3059 INVALID_OPCODE, 3060 3061 /* d */ 3062 INVALID_OPCODE_BLOCK 3063 3064 /* e */ 3065 INVALID_OPCODE_BLOCK 3066 3067 /* f */ 3068 INVALID_OPCODE_BLOCK 3069 }; 3070 3071 /* Vex codes for two bytes opcodes starting with 0Fh with prefix 66H*/ 3072 const DISOPCODE g_aMapTwoBytesVex_66H[256] = 3073 { 3074 /* 0 */ 3075 INVALID_OPCODE_BLOCK 3076 3077 /* 1 */ 3078 OPVEX("vmovupd %Vpd,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVUPD, OP_PARM_Vpd, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3079 OPVEX("vmovupd %Wpd,%Vpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVUPD, OP_PARM_Wpd, OP_PARM_Vpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3080 OPVEX("vmovlpd %Vq,%Hq,%Mq", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVLPD, OP_PARM_Vq, OP_PARM_Hq, OP_PARM_Mq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3081 OPVEX("vmovlpd %Mq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVLPD, OP_PARM_Mq, OP_PARM_Vq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3082 OPVEX("vunpcklpd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_UNPCKLPD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3083 OPVEX("vunpckhpd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_UNPCKHPD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3084 OPVEX("vmovhpd %Vdq,%Hq,%Mq", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVHPD, OP_PARM_Vdq, OP_PARM_Hq, OP_PARM_Mq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3085 OPVEX("vmovhpd %Mq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVHPD, OP_PARM_Mq, OP_PARM_Vq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3086 INVALID_OPCODE, 3087 INVALID_OPCODE, 3088 INVALID_OPCODE, 3089 INVALID_OPCODE, 3090 INVALID_OPCODE, 3091 INVALID_OPCODE, 3092 INVALID_OPCODE, 3093 INVALID_OPCODE, 3094 3095 /* 2 */ 3096 INVALID_OPCODE, 3097 INVALID_OPCODE, 3098 INVALID_OPCODE, 3099 INVALID_OPCODE, 3100 INVALID_OPCODE, 3101 INVALID_OPCODE, 3102 INVALID_OPCODE, 3103 INVALID_OPCODE, 3104 OPVEX("vmovapd %Vpd,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVAPD, OP_PARM_Vpd, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3105 OPVEX("vmovapd %Wpd,%Vpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVAPD, OP_PARM_Wpd, OP_PARM_Vpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3106 INVALID_OPCODE, 3107 OPVEX("vmovntpd %Mpd,%Vpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVNTPD, OP_PARM_Mpd, OP_PARM_Vpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3108 INVALID_OPCODE, 3109 INVALID_OPCODE, 3110 OPVEX("vucomisd %Vsd,%Wsd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_UCOMISD, OP_PARM_Vsd, OP_PARM_Wsd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3111 OPVEX("vcomisd %Vsd,%Wsd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_COMISD, OP_PARM_Vsd, OP_PARM_Wsd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3112 3113 /* 3 */ 3114 INVALID_OPCODE_BLOCK 3115 3116 /* 4 */ 3117 INVALID_OPCODE_BLOCK 3118 3119 /* 5 */ 3120 OPVEX("vmovmskpd %Gy,%Upd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVMSKPD, OP_PARM_Gy, OP_PARM_Upd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3121 OPVEX("vsqrtpd %Vpd,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_SQRTPD, OP_PARM_Vpd, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3122 INVALID_OPCODE, 3123 INVALID_OPCODE, 3124 OPVEX("vandpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ANDPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3125 OPVEX("vandnpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ANDNPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3126 OPVEX("vorpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ORPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3127 OPVEX("vxorpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_XORPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3128 OPVEX("vaddpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3129 OPVEX("vmulpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MULPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3130 OPVEX("vcvtpd2ps %Vps,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTPD2PS, OP_PARM_Vps, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3131 OPVEX("vcvtps2dq %Vdq,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTPS2DQ, OP_PARM_Vdq, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3132 OPVEX("vsubpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SUBPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3133 OPVEX("vminpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MINPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3134 OPVEX("vdivpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_DIVPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3135 OPVEX("vmaxpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MAXPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3136 3137 3138 /* 6 */ 3139 OPVEX("vpunpcklbw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKLBW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3140 OPVEX("vpunpcklwd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKLWD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3141 OPVEX("vpunpckldq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKLDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3142 OPVEX("vpacksswb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PACKSSWB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3143 OPVEX("vpcmpgtb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPGTB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3144 OPVEX("vpcmpgtw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPGTW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3145 OPVEX("vpcmpgtd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPGTD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3146 OPVEX("vpackuswb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PACKUSWB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3147 OPVEX("vpunpckhbw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKHBW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3148 OPVEX("vpunpckhwd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKHWD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3149 OPVEX("vpunpckhdq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKHDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3150 OPVEX("vpackssdw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PACKSSDW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3151 OPVEX("vpunpcklqdq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKLQDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3152 OPVEX("vpunpckhqdq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PUNPCKHQDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3153 OPVEX("vmovd/vmovq %Vy,%Ey", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVD, OP_PARM_Vy, OP_PARM_Ey, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3154 OPVEX("vmovdqa %Vx,%Wx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVDQA, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3155 3156 /* 7 */ 3157 OPVEX("vpshufd %Vx,%Wx,%Ib", IDX_ParseModRM, IDX_UseModRM, IDX_ParseImmByte, 0, OP_PSHUFD, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3158 INVALID_OPCODE, 3159 INVALID_OPCODE, 3160 INVALID_OPCODE, 3161 OPVEX("vpcmpeqb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPEQB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3162 OPVEX("vpcmpeqw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPEQW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3163 OPVEX("vpcmpeqd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PCMPEQD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3164 INVALID_OPCODE, 3165 INVALID_OPCODE, 3166 INVALID_OPCODE, 3167 INVALID_OPCODE, 3168 INVALID_OPCODE, 3169 OPVEX("vhaddpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_HADDPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3170 OPVEX("vhsubpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_HSUBPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3171 OPVEX("vmovd/vmovq %Ey,%Vy", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVD, OP_PARM_Ey, OP_PARM_Vy, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3172 OPVEX("vmovdqa %Wx,%Vx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVDQA, OP_PARM_Wx, OP_PARM_Vx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3173 3174 /* 8 */ 3175 INVALID_OPCODE_BLOCK 3176 3177 /* 9 */ 3178 INVALID_OPCODE_BLOCK 3179 3180 /* a */ 3181 INVALID_OPCODE_BLOCK 3182 3183 /* b */ 3184 INVALID_OPCODE_BLOCK 3185 3186 /* c */ 3187 INVALID_OPCODE, 3188 INVALID_OPCODE, 3189 OPVEX("vcmpps %Vpd,%Hpd,%Wpd,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_CMPSS, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3190 INVALID_OPCODE, 3191 // vpinsrw Vdq,Hdq,Ry/Mw,Ib 3192 OPVEX("vpinsrw %Vdq,%Hdq,%Ry,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_PINSRW, OP_PARM_Vdq, OP_PARM_Hdq, OP_PARM_Ry, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3193 OPVEX("vpextrw %Gd,%Udq,%Ib", IDX_ParseModRM, IDX_UseModRM, IDX_ParseImmByte, 0, OP_PEXTRW, OP_PARM_Gd, OP_PARM_Udq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3194 OPVEX("vshufpd %Vpd,%Hpd,%Wpd,%Ib",IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_SHUFPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3195 INVALID_OPCODE, 3196 INVALID_OPCODE, 3197 INVALID_OPCODE, 3198 INVALID_OPCODE, 3199 INVALID_OPCODE, 3200 INVALID_OPCODE, 3201 INVALID_OPCODE, 3202 INVALID_OPCODE, 3203 INVALID_OPCODE, 3204 3205 /* d */ 3206 OPVEX("vaddsubpd %Vpd,%Hpd,%Wpd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDSUBPD, OP_PARM_Vpd, OP_PARM_Hpd, OP_PARM_Wpd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3207 OPVEX("vpsrlw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSRLW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3208 OPVEX("vpsrld %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSRLD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3209 OPVEX("vpsrlq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSRLQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3210 OPVEX("vpaddq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3211 OPVEX("vpmullw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMULLW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3212 OPVEX("vmovq %Wq,%Vq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVQ, OP_PARM_Wq, OP_PARM_Vq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3213 OPVEX("vpmovmskb %Gd,%Ux", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_PMOVMSKB, OP_PARM_Gd, OP_PARM_Ux, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3214 OPVEX("vpsubusb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBUSB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3215 OPVEX("vpsubusw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBUSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3216 OPVEX("vpminub %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMINUB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3217 OPVEX("vpand %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PAND, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3218 OPVEX("vpaddusb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDUSB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3219 OPVEX("vpaddusw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDUSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3220 OPVEX("vpmaxub %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMAXUB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3221 OPVEX("vpandn %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PANDN, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3222 3223 /* e */ 3224 OPVEX("vpavgb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PAVGB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3225 OPVEX("vpsraw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSRAW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3226 OPVEX("vpsrad %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSRAD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3227 OPVEX("vpavgw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PAVGW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3228 OPVEX("vpmulhuw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMULHUW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3229 OPVEX("vpmulhw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMULHW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3230 OPVEX("vcvttpd2dq %Vx,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTTPD2DQ, OP_PARM_Vx, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3231 OPVEX("vmovntdq %Mx,%Vx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVNTDQ, OP_PARM_Mx, OP_PARM_Vx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3232 OPVEX("vpsubsb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBSB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3233 OPVEX("vpsubsw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3234 OPVEX("vpminsw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMINSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3235 OPVEX("vpor %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_POR, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3236 OPVEX("vpaddsb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDSB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3237 OPVEX("vpaddsw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3238 OPVEX("vpmaxsw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMAXSW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3239 OPVEX("vpxor %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PXOR, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3240 3241 /* f */ 3242 INVALID_OPCODE, 3243 OPVEX("vpsllw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSLLW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3244 OPVEX("vpslld %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSLLD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3245 OPVEX("vpsllq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSLLQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3246 OPVEX("vpmuludq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMULUDQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3247 OPVEX("vpmaddwd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PMADDWD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3248 OPVEX("vpsadbw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSADBW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3249 OPVEX("vmaskmovdqu %Vdq,%Udq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MASKMOVDQU,OP_PARM_Vdq, OP_PARM_Udq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3250 OPVEX("vpsubb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3251 OPVEX("vpsubw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3252 OPVEX("vpsubd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3253 OPVEX("vpsubq %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PSUBQ, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3254 OPVEX("vpaddb %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDB, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3255 OPVEX("vpaddw %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDW, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3256 OPVEX("vpaddd %Vx,%Hx,%Wx", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_PADDD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wx, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3257 INVALID_OPCODE, 3258 }; 3259 3260 const DISOPCODE g_aMapTwoBytesVex_F2H[256] = 3261 { 3262 /* 0 */ 3263 INVALID_OPCODE_BLOCK 3264 3265 /* 1 */ 3266 OPVEX("vmovsd %Vx,%Hx,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVSD, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3267 OPVEX("vmovsd %Wsd,%Hx,%Vsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVSD, OP_PARM_Wsd, OP_PARM_Hx, OP_PARM_Vsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3268 OPVEX("vmovddup %Vx,%Wx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVDDUP, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3269 INVALID_OPCODE, 3270 INVALID_OPCODE, 3271 INVALID_OPCODE, 3272 INVALID_OPCODE, 3273 INVALID_OPCODE, 3274 INVALID_OPCODE, 3275 INVALID_OPCODE, 3276 INVALID_OPCODE, 3277 INVALID_OPCODE, 3278 INVALID_OPCODE, 3279 INVALID_OPCODE, 3280 INVALID_OPCODE, 3281 INVALID_OPCODE, 3282 3283 /* 2 */ 3284 INVALID_OPCODE_BLOCK 3285 3286 /* 3 */ 3287 INVALID_OPCODE_BLOCK 3288 3289 /* 4 */ 3290 INVALID_OPCODE_BLOCK 3291 3292 /* 5 */ 3293 INVALID_OPCODE, 3294 OPVEX("vsqrtsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SQRTSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3295 INVALID_OPCODE, 3296 INVALID_OPCODE, 3297 INVALID_OPCODE, 3298 INVALID_OPCODE, 3299 INVALID_OPCODE, 3300 INVALID_OPCODE, 3301 OPVEX("vaddsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3302 OPVEX("vmulsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MULSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3303 OPVEX("vcvtsd2ss %Vss,%Hx,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_CVTSD2SS, OP_PARM_Vss, OP_PARM_Hx, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3304 INVALID_OPCODE, 3305 OPVEX("vsubsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SUBSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3306 OPVEX("vminsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MINSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3307 OPVEX("vdivsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_DIVSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3308 OPVEX("vmaxsd %Vsd,%Hsd,%Wsd", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MAXSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3309 3310 /* 6 */ 3311 INVALID_OPCODE_BLOCK 3312 3313 /* 7 */ 3314 OPVEX("vpshuflw %Vx,%Wx,%Ib", IDX_ParseModRM, IDX_UseModRM, IDX_ParseImmByte, 0, OP_PSHUFLW, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3315 INVALID_OPCODE, 3316 INVALID_OPCODE, 3317 INVALID_OPCODE, 3318 INVALID_OPCODE, 3319 INVALID_OPCODE, 3320 INVALID_OPCODE, 3321 INVALID_OPCODE, 3322 INVALID_OPCODE, 3323 INVALID_OPCODE, 3324 INVALID_OPCODE, 3325 INVALID_OPCODE, 3326 OPVEX("vhaddps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_HADDPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3327 OPVEX("vhsubps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_HSUBPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3328 INVALID_OPCODE, 3329 INVALID_OPCODE, 3330 3331 /* 8 */ 3332 INVALID_OPCODE_BLOCK 3333 3334 /* 9 */ 3335 INVALID_OPCODE_BLOCK 3336 3337 /* a */ 3338 INVALID_OPCODE_BLOCK 3339 3340 /* b */ 3341 INVALID_OPCODE_BLOCK 3342 3343 /* c */ 3344 INVALID_OPCODE, 3345 INVALID_OPCODE, 3346 OPVEX("vcmpsd %Vsd,%Hsd,%Wsd,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_CMPSD, OP_PARM_Vsd, OP_PARM_Hsd, OP_PARM_Wsd, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3347 INVALID_OPCODE, 3348 INVALID_OPCODE, 3349 INVALID_OPCODE, 3350 INVALID_OPCODE, 3351 INVALID_OPCODE, 3352 INVALID_OPCODE, 3353 INVALID_OPCODE, 3354 INVALID_OPCODE, 3355 INVALID_OPCODE, 3356 INVALID_OPCODE, 3357 INVALID_OPCODE, 3358 INVALID_OPCODE, 3359 INVALID_OPCODE, 3360 3361 /* d */ 3362 OPVEX("vaddsubps %Vps,%Hps,%Wps", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDSUBPS, OP_PARM_Vps, OP_PARM_Hps, OP_PARM_Wps, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3363 INVALID_OPCODE, 3364 INVALID_OPCODE, 3365 INVALID_OPCODE, 3366 INVALID_OPCODE, 3367 INVALID_OPCODE, 3368 INVALID_OPCODE, 3369 INVALID_OPCODE, 3370 INVALID_OPCODE, 3371 INVALID_OPCODE, 3372 INVALID_OPCODE, 3373 INVALID_OPCODE, 3374 INVALID_OPCODE, 3375 INVALID_OPCODE, 3376 INVALID_OPCODE, 3377 INVALID_OPCODE, 3378 3379 /* e */ 3380 INVALID_OPCODE, 3381 INVALID_OPCODE, 3382 INVALID_OPCODE, 3383 INVALID_OPCODE, 3384 INVALID_OPCODE, 3385 INVALID_OPCODE, 3386 OPVEX("vcvtpd2dq %Vx,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTPD2DQ, OP_PARM_Vx, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3387 INVALID_OPCODE, 3388 INVALID_OPCODE, 3389 INVALID_OPCODE, 3390 INVALID_OPCODE, 3391 INVALID_OPCODE, 3392 INVALID_OPCODE, 3393 INVALID_OPCODE, 3394 INVALID_OPCODE, 3395 INVALID_OPCODE, 3396 3397 /* f */ 3398 OPVEX("vlddqu %Vx,%Mx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_LDDQU, OP_PARM_Vx, OP_PARM_Mx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3399 INVALID_OPCODE, 3400 INVALID_OPCODE, 3401 INVALID_OPCODE, 3402 INVALID_OPCODE, 3403 INVALID_OPCODE, 3404 INVALID_OPCODE, 3405 INVALID_OPCODE, 3406 INVALID_OPCODE, 3407 INVALID_OPCODE, 3408 INVALID_OPCODE, 3409 INVALID_OPCODE, 3410 INVALID_OPCODE, 3411 INVALID_OPCODE, 3412 INVALID_OPCODE, 3413 INVALID_OPCODE, 3414 }; 3415 3416 /* Vex codes for two bytes opcodes starting with 0Fh with prefix F3H*/ 3417 const DISOPCODE g_aMapTwoBytesVex_F3H[256] = 3418 { 3419 3420 /* 0 */ 3421 INVALID_OPCODE_BLOCK 3422 3423 /* 1 */ 3424 OPVEX("vmovss %Vx,%Hx,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVSS, OP_PARM_Vx, OP_PARM_Hx, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3425 OPVEX("vmovss %Wss,%Hx,%Vss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MOVSS, OP_PARM_Wss, OP_PARM_Hx, OP_PARM_Vss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3426 OPVEX("vmovsldup %Vx,%Wx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVSLDUP, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3427 INVALID_OPCODE, 3428 INVALID_OPCODE, 3429 INVALID_OPCODE, 3430 OPVEX("vmovshdup %Vx,%Wx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVSHDUP, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3431 INVALID_OPCODE, 3432 INVALID_OPCODE, 3433 INVALID_OPCODE, 3434 INVALID_OPCODE, 3435 INVALID_OPCODE, 3436 INVALID_OPCODE, 3437 INVALID_OPCODE, 3438 INVALID_OPCODE, 3439 INVALID_OPCODE, 3440 3441 /* 2 */ 3442 INVALID_OPCODE, 3443 INVALID_OPCODE, 3444 INVALID_OPCODE, 3445 INVALID_OPCODE, 3446 INVALID_OPCODE, 3447 INVALID_OPCODE, 3448 INVALID_OPCODE, 3449 INVALID_OPCODE, 3450 INVALID_OPCODE, 3451 INVALID_OPCODE, 3452 OPVEX("vcvtsi2ss %Vss,%Hss,%Ey", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_CVTSI2SS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Ey, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3453 INVALID_OPCODE, 3454 OPVEX("vcvttss2si %Gy,%Wss", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTTSS2SI, OP_PARM_Gy, OP_PARM_Wss, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3455 OPVEX("vcvtss2si %Gy,%Wss", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTSS2SI, OP_PARM_Gy, OP_PARM_Wss, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3456 INVALID_OPCODE, 3457 INVALID_OPCODE, 3458 3459 /* 3 */ 3460 INVALID_OPCODE_BLOCK 3461 3462 /* 4 */ 3463 INVALID_OPCODE_BLOCK 3464 3465 /* 5 */ 3466 INVALID_OPCODE, 3467 OPVEX("vsqrtss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SQRTSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3468 OPVEX("vrsqrtss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_RSQRTSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3469 OPVEX("vrcpss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_RCPSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3470 INVALID_OPCODE, 3471 INVALID_OPCODE, 3472 INVALID_OPCODE, 3473 INVALID_OPCODE, 3474 OPVEX("vaddss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_ADDSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3475 OPVEX("vmulss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MULSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3476 OPVEX("vcvtss2sd %Vsd,%Hx,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_CVTSS2SD, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3477 OPVEX("vcvttps2dq %Vdq,%Wps", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTTPS2DQ, OP_PARM_Vdq, OP_PARM_Wps, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3478 OPVEX("vsubss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_SUBSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3479 OPVEX("vminss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MINSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3480 OPVEX("vdivss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_DIVSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3481 OPVEX("vmaxss %Vss,%Hss,%Wss", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, 0, OP_MAXSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3482 3483 /* 6 */ 3484 INVALID_OPCODE, 3485 INVALID_OPCODE, 3486 INVALID_OPCODE, 3487 INVALID_OPCODE, 3488 INVALID_OPCODE, 3489 INVALID_OPCODE, 3490 INVALID_OPCODE, 3491 INVALID_OPCODE, 3492 INVALID_OPCODE, 3493 INVALID_OPCODE, 3494 INVALID_OPCODE, 3495 INVALID_OPCODE, 3496 INVALID_OPCODE, 3497 INVALID_OPCODE, 3498 INVALID_OPCODE, 3499 OPVEX("vmovdqu %Vx,%Wx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVDQU, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3500 3501 /* 7 */ 3502 OPVEX("vpshufhw %Vx,%Wx,%Ib", IDX_ParseModRM, IDX_UseModRM, IDX_ParseImmByte, 0, OP_PSHUFHW, OP_PARM_Vx, OP_PARM_Wx, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3503 INVALID_OPCODE, 3504 INVALID_OPCODE, 3505 INVALID_OPCODE, 3506 INVALID_OPCODE, 3507 INVALID_OPCODE, 3508 INVALID_OPCODE, 3509 INVALID_OPCODE, 3510 INVALID_OPCODE, 3511 INVALID_OPCODE, 3512 INVALID_OPCODE, 3513 INVALID_OPCODE, 3514 INVALID_OPCODE, 3515 INVALID_OPCODE, 3516 OPVEX("vmovq %Vq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVQ, OP_PARM_Vq, OP_PARM_Wq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3517 OPVEX("vmovdqu %Wx,%Vx", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_MOVDQU, OP_PARM_Wx, OP_PARM_Vx, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3518 3519 /* 8 */ 3520 INVALID_OPCODE_BLOCK 3521 3522 /* 9 */ 3523 INVALID_OPCODE_BLOCK 3524 3525 /* a */ 3526 INVALID_OPCODE_BLOCK 3527 3528 /* b */ 3529 INVALID_OPCODE_BLOCK 3530 3531 /* c */ 3532 INVALID_OPCODE, 3533 INVALID_OPCODE, 3534 OPVEX("vcmpps %Vss,%Hss,%Wss,%Ib", IDX_ParseModRM, IDX_ParseVexDest, IDX_UseModRM, IDX_ParseImmByte, OP_CMPSS, OP_PARM_Vss, OP_PARM_Hss, OP_PARM_Wss, OP_PARM_Ib, DISOPTYPE_HARMLESS), 3535 INVALID_OPCODE, 3536 INVALID_OPCODE, 3537 INVALID_OPCODE, 3538 INVALID_OPCODE, 3539 INVALID_OPCODE, 3540 INVALID_OPCODE, 3541 INVALID_OPCODE, 3542 INVALID_OPCODE, 3543 INVALID_OPCODE, 3544 INVALID_OPCODE, 3545 INVALID_OPCODE, 3546 INVALID_OPCODE, 3547 INVALID_OPCODE, 3548 3549 /* d */ 3550 INVALID_OPCODE_BLOCK 3551 3552 /* e */ 3553 INVALID_OPCODE, 3554 INVALID_OPCODE, 3555 INVALID_OPCODE, 3556 INVALID_OPCODE, 3557 INVALID_OPCODE, 3558 INVALID_OPCODE, 3559 OPVEX("vcvtdq2pd %Vx,%Wpd", IDX_ParseModRM, IDX_UseModRM, 0, 0, OP_CVTDQ2PD, OP_PARM_Vx, OP_PARM_Wpd, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 3560 INVALID_OPCODE, 3561 INVALID_OPCODE, 3562 INVALID_OPCODE, 3563 INVALID_OPCODE, 3564 INVALID_OPCODE, 3565 INVALID_OPCODE, 3566 INVALID_OPCODE, 3567 INVALID_OPCODE, 3568 INVALID_OPCODE, 3569 3570 /* f */ 3571 INVALID_OPCODE_BLOCK 3572 }; 3573 3574 PCDISOPCODE const g_aVexOpcodesMap[3] = 3575 { 3576 &g_aMapTwoBytesVex[0], // 0fh 2-byte opcodes 3577 NULL, // 0f38h 3-byte opcodes 3578 NULL, // 0f3ah 3-byte opcodes 3579 }; 3580 3581 PCDISOPCODE const g_aVexOpcodesMap_66H[3] = 3582 { 3583 &g_aMapTwoBytesVex_66H[0], // 0fh 2-byte opcodes 3584 NULL, // 0f38h 3-byte opcodes 3585 NULL, // 0f3ah 3-byte opcodes 3586 }; 3587 3588 PCDISOPCODE const g_aVexOpcodesMap_F2H[3] = 3589 { 3590 &g_aMapTwoBytesVex_F2H[0], // 0fh 2-byte opcodes 3591 NULL, // 0f38h 3-byte opcodes 3592 NULL, // 0f3ah 3-byte opcodes 3593 }; 3594 3595 PCDISOPCODE const g_aVexOpcodesMap_F3H[3] = 3596 { 3597 &g_aMapTwoBytesVex_F3H[0], // 0fh 2-byte opcodes 3598 NULL, // 0f38h 3-byte opcodes 3599 NULL, // 0f3ah 3-byte opcodes 3600 }; -
trunk/src/VBox/Disassembler/DisasmTablesX64.cpp
r46949 r53094 285 285 OP("retn %Iw", IDX_ParseImmUshort, 0, 0, OP_RETN, OP_PARM_Iw, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_CONTROLFLOW | DISOPTYPE_UNCOND_CONTROLFLOW | DISOPTYPE_FORCED_64_OP_SIZE), 286 286 OP("retn", 0, 0, 0, OP_RETN, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_CONTROLFLOW | DISOPTYPE_UNCOND_CONTROLFLOW | DISOPTYPE_FORCED_64_OP_SIZE), 287 INVALID_OPCODE,288 INVALID_OPCODE,287 OP("VEX 3-byte", IDX_ParseVex3b, 0, 0, OP_VEX3B, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 288 OP("VEX 2-byte", IDX_ParseVex2b, 0, 0, OP_VEX2B, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 289 289 /* @todo these two are actually group11 */ 290 290 OP("mov %Eb,%Ib", IDX_ParseModRM, IDX_ParseImmByte, 0, OP_MOV, OP_PARM_Eb, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm
r53032 r53094 190 190 vmread eax, ebx 191 191 vmwrite eax, ebx 192 193 movd mm0, [edi] 194 movq mm0, [edi] 195 movq mm0, mm1 196 197 vmovups xmm0, xmm1 198 vmovaps ymm0, ymm1 199 vunpcklps xmm0, xmm1, xmm2 200 vunpcklps ymm0, ymm1, ymm2 201 202 lddqu xmm1, [ds:ebp+edi*8+00f000001h] 203 vlddqu xmm1, [ds:ebp+edi*8+00f000001h] 204 vlddqu ymm1, [ds:ebp+edi*8+00f000001h] 192 205 193 206 ENDPROC TestProc32 … … 314 327 tzcnt eax, [edi] 315 328 tzcnt eax, [edi + 1000h] 329 330 vpunpcklbw ymm1, ymm2, ymm3 316 331 %endif 317 332 … … 338 353 vmwrite rax, rbx 339 354 355 getsec 356 357 movd mm0, [rdi] 358 movq mm0, [edi] 359 movq mm0, mm1 360 361 vmovups xmm0, xmm1 362 vmovaps ymm0, ymm1 363 vunpcklps xmm0, xmm1, xmm2 364 vunpcklps ymm0, ymm1, ymm2 365 vunpcklps ymm0, ymm10, ymm2 366 367 vmovups xmm5, xmm9 368 369 vcmpps xmm1, xmm2, xmm3, 12 370 371 lddqu xmm1, [ebp+edi*8+00f000001h] 372 vlddqu xmm1, [rbp+rdi*8+00f000001h] 373 vlddqu ymm1, [rbp+rdi*8+00f000001h] 374 340 375 ret 341 376 ENDPROC TestProc64
Note:
See TracChangeset
for help on using the changeset viewer.