Changeset 53164 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Oct 29, 2014 2:45:01 PM (10 years ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmTables.cpp
r53155 r53164 1409 1409 }; 1410 1410 1411 /** @todo remainder missing (too lazy now) */ 1411 /** Three byte opcode map (0x66 0x0F 0x38 0x2x) */ 1412 const DISOPCODE g_aThreeByteMapX86_660F38_2[16] = 1413 { 1414 /* 2 */ 1415 OP("pmovsxbw %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1416 OP("pmovsxbd %Vdq,%Wd", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Wd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1417 OP("pmovsxbq %Vdq,%Ww", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Ww, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1418 OP("pmovsxwd %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1419 OP("pmovsxwq %Vdq,%Wd", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Wd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1420 OP("pmovsxdq %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVSX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1421 INVALID_OPCODE, 1422 INVALID_OPCODE, 1423 OP("pmuldq %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULDQ, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1424 OP("pcmpeqq %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PCMPEQQ, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1425 OP("movntdqa %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVNTDQA, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1426 OP("packusdw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PACKUSDW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1427 INVALID_OPCODE, 1428 INVALID_OPCODE, 1429 INVALID_OPCODE, 1430 INVALID_OPCODE, 1431 }; 1432 1433 /** Three byte opcode map (0x66 0x0F 0x38 0x3x) */ 1434 const DISOPCODE g_aThreeByteMapX86_660F38_3[16] = 1435 { 1436 /* 3 */ 1437 OP("pmovzxbw %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1438 OP("pmovzxbd %Vdq,%Wd", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Wd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1439 OP("pmovzxbq %Vdq,%Ww", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Ww, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1440 OP("pmovzxwd %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1441 OP("pmovzxwq %Vdq,%Wd", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Wd, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1442 OP("pmovzxdq %Vdq,%Wq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMOVZX, OP_PARM_Vdq, OP_PARM_Wq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1443 INVALID_OPCODE, 1444 OP("pcmpgtq %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PCMPGTQ, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1445 OP("pminsb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMINSB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1446 OP("pminsd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMINSB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1447 OP("pminuw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMINUW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1448 OP("pminud %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMINUD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1449 OP("pmaxsb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMAXSB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1450 OP("pmaxsd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMAXSD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1451 OP("pmaxuw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMAXUW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1452 OP("pmaxud %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMAXUD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1453 }; 1454 1455 /** Three byte opcode map (0x66 0x0F 0x38 0x4x) */ 1456 const DISOPCODE g_aThreeByteMapX86_660F38_4[16] = 1457 { 1458 /* 4 */ 1459 OP("pmulld %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULLD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1460 OP("phminposuw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHMINPOSUW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1461 INVALID_OPCODE, 1462 INVALID_OPCODE, 1463 INVALID_OPCODE, 1464 INVALID_OPCODE, 1465 INVALID_OPCODE, 1466 INVALID_OPCODE, 1467 INVALID_OPCODE, 1468 INVALID_OPCODE, 1469 INVALID_OPCODE, 1470 INVALID_OPCODE, 1471 INVALID_OPCODE, 1472 INVALID_OPCODE, 1473 INVALID_OPCODE, 1474 INVALID_OPCODE, 1475 }; 1412 1476 1413 1477 /** Three byte opcode map (0x66 0x0F 0x38 0x8x) */ … … 1415 1479 { 1416 1480 /* 8 */ 1417 OP("invept %Gd,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVEPT, OP_PARM_Gd, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1418 OP("invvpid %Gd,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVEPT, OP_PARM_Gd, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1419 INVALID_OPCODE, 1420 INVALID_OPCODE, 1421 INVALID_OPCODE, 1422 INVALID_OPCODE, 1423 INVALID_OPCODE, 1424 INVALID_OPCODE, 1425 INVALID_OPCODE, 1426 INVALID_OPCODE, 1427 INVALID_OPCODE, 1428 INVALID_OPCODE, 1429 INVALID_OPCODE, 1430 INVALID_OPCODE, 1431 INVALID_OPCODE, 1432 INVALID_OPCODE, 1481 OP("invept %Gy,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVEPT, OP_PARM_Gy, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_FORCED_64_OP_SIZE), 1482 OP("invvpid %Gy,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVVPID, OP_PARM_Gy, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_FORCED_64_OP_SIZE), 1483 OP("invpcid %Gy,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVPCID, OP_PARM_Gy, OP_PARM_Mdq, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_FORCED_64_OP_SIZE), 1484 INVALID_OPCODE, 1485 INVALID_OPCODE, 1486 INVALID_OPCODE, 1487 INVALID_OPCODE, 1488 INVALID_OPCODE, 1489 INVALID_OPCODE, 1490 INVALID_OPCODE, 1491 INVALID_OPCODE, 1492 INVALID_OPCODE, 1493 INVALID_OPCODE, 1494 INVALID_OPCODE, 1495 INVALID_OPCODE, 1496 INVALID_OPCODE, 1497 }; 1498 1499 /** Three byte opcode map (0x66 0x0F 0x38 0xDx) */ 1500 const DISOPCODE g_aThreeByteMapX86_660F38_D[16] = 1501 { 1502 /* D */ 1503 INVALID_OPCODE, 1504 INVALID_OPCODE, 1505 INVALID_OPCODE, 1506 INVALID_OPCODE, 1507 INVALID_OPCODE, 1508 INVALID_OPCODE, 1509 INVALID_OPCODE, 1510 INVALID_OPCODE, 1511 INVALID_OPCODE, 1512 INVALID_OPCODE, 1513 INVALID_OPCODE, 1514 OP("aesimc %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_AESIMC, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1515 OP("aesenc %Vdq,%Hdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_AESENC, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1516 OP("aesenclast %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_AESENCLAST, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1517 OP("aesdec %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_AESDEC, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1518 OP("aesdeclast %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_AESDECLAST, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1433 1519 }; 1434 1520 1435 1521 const DISOPCODE g_aThreeByteMapX86_660F38_F[16] = 1436 1522 { 1437 /* 8*/1523 /* F */ 1438 1524 OP("movbe %Gw,%Mw", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVBEGM, OP_PARM_Gw, OP_PARM_Mw, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1439 1525 OP("movbe %Mw,%Gw", IDX_ParseModRM, IDX_UseModRM, 0, OP_MOVBEMG, OP_PARM_Mw, OP_PARM_Gw, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 1462 1548 &g_aThreeByteMapX86_660F38_1[0], 1463 1549 /* 2 */ 1464 NULL,1550 &g_aThreeByteMapX86_660F38_2[0], 1465 1551 /* 3 */ 1466 NULL,1552 &g_aThreeByteMapX86_660F38_3[0], 1467 1553 /* 4 */ 1468 NULL,1554 &g_aThreeByteMapX86_660F38_4[0], 1469 1555 /* 5 */ 1470 1556 NULL, … … 1484 1570 NULL, 1485 1571 /* d */ 1486 NULL,1572 &g_aThreeByteMapX86_660F38_D[0], 1487 1573 /* e */ 1488 1574 NULL, -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm
r53155 r53164 163 163 tzcnt eax, [edi + 1000h] 164 164 vpmovsxbw ymm0, xmm1 165 vpmovzxbq ymm1, [100h] 165 166 %endif 166 167 … … 216 217 vblendvps xmm0, xmm1, xmm2, xmm3 217 218 vblendvps ymm0, ymm1, ymm2, ymm3 219 220 aesimc xmm0, xmm1 221 222 pmovzxbq xmm0, xmm1 223 pmovzxbq xmm1, [100h] 218 224 219 225 ENDPROC TestProc32
Note:
See TracChangeset
for help on using the changeset viewer.