VirtualBox

Changeset 41863 in vbox for trunk/src/VBox/Disassembler


Ignore:
Timestamp:
Jun 21, 2012 3:46:24 PM (12 years ago)
Author:
vboxsync
Message:

Fixed g_aTwoByteMapX86_3DNow bug and relaxed assertion in Parse3DNow.

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

Legend:

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

    r41822 r41863  
    21422142static size_t Parse3DNow(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
    21432143{
    2144     /** @todo This code needs testing! */
     2144    /** @todo This code needs testing!  Esp. wrt invalid opcodes. */
    21452145
    21462146    uint8_t ModRM = disReadByte(pDis, offInstr);
     
    21562156
    21572157    size_t offStrict = disParseInstruction(offInstr, pOp, pDis);
    2158     Assert(offStrict == offRet - 1);  NOREF(offStrict);   /* the imm8_opcode */
     2158    Assert(offStrict == offRet - 1 || pOp->uOpcode == OP_INVALID);  NOREF(offStrict);   /* the imm8_opcode */
    21592159    return offRet;
    21602160}
  • trunk/src/VBox/Disassembler/DisasmTables.cpp

    r41796 r41863  
    3232
    3333#ifndef DIS_CORE_ONLY
    34 static char SZINVALID_OPCODE[] = "Invalid Opcode";
     34static char g_szInvalidOpcode[] = "Invalid Opcode";
    3535#endif
    3636
    3737#define INVALID_OPCODE  \
    38     OP(SZINVALID_OPCODE,     0,              0,          0,          OP_INVALID, OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_INVALID)
     38    OP(g_szInvalidOpcode,    0,              0,          0,          OP_INVALID, OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_INVALID)
    3939#define INVALID_OPCODE_BLOCK \
    4040    INVALID_OPCODE,\
     
    5555    INVALID_OPCODE,
    5656
    57 #define INVALID_OPCODE_MOD_RM \
    58     OP(SZINVALID_OPCODE,     IDX_ParseInvOpModRM, 0,     0,          OP_INVALID, OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_INVALID)
    59 #define INVALID_OPCODE_BLOCK_MOD_RM \
    60     INVALID_OPCODE_MOD_RM,\
    61     INVALID_OPCODE_MOD_RM,\
    62     INVALID_OPCODE_MOD_RM,\
    63     INVALID_OPCODE_MOD_RM,\
    64     INVALID_OPCODE_MOD_RM,\
    65     INVALID_OPCODE_MOD_RM,\
    66     INVALID_OPCODE_MOD_RM,\
    67     INVALID_OPCODE_MOD_RM,\
    68     INVALID_OPCODE_MOD_RM,\
    69     INVALID_OPCODE_MOD_RM,\
    70     INVALID_OPCODE_MOD_RM,\
    71     INVALID_OPCODE_MOD_RM,\
    72     INVALID_OPCODE_MOD_RM,\
    73     INVALID_OPCODE_MOD_RM,\
    74     INVALID_OPCODE_MOD_RM,\
    75     INVALID_OPCODE_MOD_RM,
     57#define INVALID_OPCODE_MOD_RM(a_Index) \
     58    OP(g_szInvalidOpcode,    IDX_ParseInvOpModRM, 0,     0,          OP_INVALID, OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_INVALID)
     59#define INVALID_OPCODE_BLOCK_MOD_RM(a_UpperDigit) \
     60    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 0),\
     61    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 1),\
     62    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 2),\
     63    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 3),\
     64    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 4),\
     65    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 5),\
     66    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 6),\
     67    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 7),\
     68    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 8),\
     69    INVALID_OPCODE_MOD_RM(a_UpperDigit ## 9),\
     70    INVALID_OPCODE_MOD_RM(a_UpperDigit ## a),\
     71    INVALID_OPCODE_MOD_RM(a_UpperDigit ## b),\
     72    INVALID_OPCODE_MOD_RM(a_UpperDigit ## c),\
     73    INVALID_OPCODE_MOD_RM(a_UpperDigit ## d),\
     74    INVALID_OPCODE_MOD_RM(a_UpperDigit ## e),\
     75    INVALID_OPCODE_MOD_RM(a_UpperDigit ## f),
     76
    7677
    7778/* Invalid opcode */
     
    14971498{
    14981499    /* 0 */
    1499     INVALID_OPCODE_MOD_RM,
    1500     INVALID_OPCODE_MOD_RM,
    1501     INVALID_OPCODE_MOD_RM,
    1502     INVALID_OPCODE_MOD_RM,
    1503     INVALID_OPCODE_MOD_RM,
    1504     INVALID_OPCODE_MOD_RM,
    1505     INVALID_OPCODE_MOD_RM,
    1506     INVALID_OPCODE_MOD_RM,
    1507     INVALID_OPCODE_MOD_RM,
    1508     INVALID_OPCODE_MOD_RM,
    1509     INVALID_OPCODE_MOD_RM,
     1500    INVALID_OPCODE_MOD_RM(0x00),
     1501    INVALID_OPCODE_MOD_RM(0x01),
     1502    INVALID_OPCODE_MOD_RM(0x02),
     1503    INVALID_OPCODE_MOD_RM(0x03),
     1504    INVALID_OPCODE_MOD_RM(0x04),
     1505    INVALID_OPCODE_MOD_RM(0x05),
     1506    INVALID_OPCODE_MOD_RM(0x06),
     1507    INVALID_OPCODE_MOD_RM(0x07),
     1508    INVALID_OPCODE_MOD_RM(0x08),
     1509    INVALID_OPCODE_MOD_RM(0x09),
     1510    INVALID_OPCODE_MOD_RM(0x0a),
     1511    INVALID_OPCODE_MOD_RM(0x0c),
    15101512    OP("pi2fw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PI2FW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    15111513    OP("pi2fd %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PI2FD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1512     INVALID_OPCODE_MOD_RM,
    1513     INVALID_OPCODE_MOD_RM,
     1514    INVALID_OPCODE_MOD_RM(0x0e),
     1515    INVALID_OPCODE_MOD_RM(0x0f),
    15141516
    15151517    /* 1 */
    1516     INVALID_OPCODE_MOD_RM,
    1517     INVALID_OPCODE_MOD_RM,
    1518     INVALID_OPCODE_MOD_RM,
    1519     INVALID_OPCODE_MOD_RM,
    1520     INVALID_OPCODE_MOD_RM,
    1521     INVALID_OPCODE_MOD_RM,
    1522     INVALID_OPCODE_MOD_RM,
    1523     INVALID_OPCODE_MOD_RM,
    1524     INVALID_OPCODE_MOD_RM,
    1525     INVALID_OPCODE_MOD_RM,
    1526     INVALID_OPCODE_MOD_RM,
     1518    INVALID_OPCODE_MOD_RM(0x10),
     1519    INVALID_OPCODE_MOD_RM(0x11),
     1520    INVALID_OPCODE_MOD_RM(0x12),
     1521    INVALID_OPCODE_MOD_RM(0x13),
     1522    INVALID_OPCODE_MOD_RM(0x14),
     1523    INVALID_OPCODE_MOD_RM(0x15),
     1524    INVALID_OPCODE_MOD_RM(0x16),
     1525    INVALID_OPCODE_MOD_RM(0x17),
     1526    INVALID_OPCODE_MOD_RM(0x18),
     1527    INVALID_OPCODE_MOD_RM(0x19),
     1528    INVALID_OPCODE_MOD_RM(0x1a),
     1529    INVALID_OPCODE_MOD_RM(0x1b),
    15271530    OP("pf2iw %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PF2IW,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    15281531    OP("pf2id %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PF2ID,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1529     INVALID_OPCODE_MOD_RM,
    1530     INVALID_OPCODE_MOD_RM,
     1532    INVALID_OPCODE_MOD_RM(0x1e),
     1533    INVALID_OPCODE_MOD_RM(0x1f),
    15311534
    15321535    /* 2 */
    1533     INVALID_OPCODE_BLOCK_MOD_RM
     1536    INVALID_OPCODE_BLOCK_MOD_RM(0x2)
    15341537
    15351538    /* 3 */
    1536     INVALID_OPCODE_BLOCK_MOD_RM
     1539    INVALID_OPCODE_BLOCK_MOD_RM(0x3)
    15371540
    15381541    /* 4 */
    1539     INVALID_OPCODE_BLOCK_MOD_RM
     1542    INVALID_OPCODE_BLOCK_MOD_RM(0x4)
    15401543
    15411544    /* 5 */
    1542     INVALID_OPCODE_BLOCK_MOD_RM
     1545    INVALID_OPCODE_BLOCK_MOD_RM(0x5)
    15431546
    15441547    /* 6 */
    1545     INVALID_OPCODE_BLOCK_MOD_RM
     1548    INVALID_OPCODE_BLOCK_MOD_RM(0x6)
    15461549
    15471550    /* 7 */
    1548     INVALID_OPCODE_BLOCK_MOD_RM
     1551    INVALID_OPCODE_BLOCK_MOD_RM(0x7)
    15491552
    15501553    /* 8 */
    1551     INVALID_OPCODE_MOD_RM,
    1552     INVALID_OPCODE_MOD_RM,
    1553     INVALID_OPCODE_MOD_RM,
    1554     INVALID_OPCODE_MOD_RM,
    1555     INVALID_OPCODE_MOD_RM,
    1556     INVALID_OPCODE_MOD_RM,
    1557     INVALID_OPCODE_MOD_RM,
    1558     INVALID_OPCODE_MOD_RM,
    1559     INVALID_OPCODE_MOD_RM,
    1560     INVALID_OPCODE_MOD_RM,
     1554    INVALID_OPCODE_MOD_RM(0x80),
     1555    INVALID_OPCODE_MOD_RM(0x81),
     1556    INVALID_OPCODE_MOD_RM(0x82),
     1557    INVALID_OPCODE_MOD_RM(0x83),
     1558    INVALID_OPCODE_MOD_RM(0x84),
     1559    INVALID_OPCODE_MOD_RM(0x85),
     1560    INVALID_OPCODE_MOD_RM(0x86),
     1561    INVALID_OPCODE_MOD_RM(0x87),
     1562    INVALID_OPCODE_MOD_RM(0x88),
     1563    INVALID_OPCODE_MOD_RM(0x89),
    15611564    OP("pfnacc %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFNACC,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1562     INVALID_OPCODE_MOD_RM,
    1563     INVALID_OPCODE_MOD_RM,
    1564     INVALID_OPCODE_MOD_RM,
     1565    INVALID_OPCODE_MOD_RM(0x8b),
     1566    INVALID_OPCODE_MOD_RM(0x8c),
     1567    INVALID_OPCODE_MOD_RM(0x8d),
    15651568    OP("pfpnacc %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFPNACC, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1566     INVALID_OPCODE_MOD_RM,
     1569    INVALID_OPCODE_MOD_RM(0x8f),
    15671570
    15681571    /* 9 */
    15691572    OP("pfcmpge %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFCMPGE, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1570     INVALID_OPCODE_MOD_RM,
    1571     INVALID_OPCODE_MOD_RM,
    1572     INVALID_OPCODE_MOD_RM,
     1573    INVALID_OPCODE_MOD_RM(0x91),
     1574    INVALID_OPCODE_MOD_RM(0x92),
     1575    INVALID_OPCODE_MOD_RM(0x93),
    15731576    OP("pfmin %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFMIN,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1574     INVALID_OPCODE_MOD_RM,
     1577    INVALID_OPCODE_MOD_RM(0x95),
    15751578    OP("pfrcp %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFRCP,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    15761579    OP("pfrsqrt %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFRSQRT, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1577     INVALID_OPCODE_MOD_RM,
    1578     INVALID_OPCODE_MOD_RM,
     1580    INVALID_OPCODE_MOD_RM(0x98),
     1581    INVALID_OPCODE_MOD_RM(0x99),
    15791582    OP("pfsub %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFSUB,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1580     INVALID_OPCODE_MOD_RM,
    1581     INVALID_OPCODE_MOD_RM,
    1582     INVALID_OPCODE_MOD_RM,
     1583    INVALID_OPCODE_MOD_RM(0x9b),
     1584    INVALID_OPCODE_MOD_RM(0x9c),
     1585    INVALID_OPCODE_MOD_RM(0x9d),
    15831586    OP("pfadd %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFADD,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1584     INVALID_OPCODE_MOD_RM,
     1587    INVALID_OPCODE_MOD_RM(0x9f),
    15851588
    15861589    /* a */
    15871590    OP("pfcmpgt %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFCMPGT, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1588     INVALID_OPCODE_MOD_RM,
    1589     INVALID_OPCODE_MOD_RM,
    1590     INVALID_OPCODE_MOD_RM,
     1591    INVALID_OPCODE_MOD_RM(0xa1),
     1592    INVALID_OPCODE_MOD_RM(0xa2),
     1593    INVALID_OPCODE_MOD_RM(0xa3),
    15911594    OP("pfmax %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFMAX,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1592     INVALID_OPCODE_MOD_RM,
     1595    INVALID_OPCODE_MOD_RM(0xa5),
    15931596    OP("pfrcpit1 %Pq,%Qq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFRCPIT1,OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    15941597    OP("pfrsqrtit1 %Pq,%Qq", IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFRSQRTIT1,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1595     INVALID_OPCODE_MOD_RM,
    1596     INVALID_OPCODE_MOD_RM,
     1598    INVALID_OPCODE_MOD_RM(0xa8),
     1599    INVALID_OPCODE_MOD_RM(0xa9),
    15971600    OP("pfsubr %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFSUBR,  OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1598     INVALID_OPCODE_MOD_RM,
    1599     INVALID_OPCODE_MOD_RM,
    1600     INVALID_OPCODE_MOD_RM,
     1601    INVALID_OPCODE_MOD_RM(0xab),
     1602    INVALID_OPCODE_MOD_RM(0xac),
     1603    INVALID_OPCODE_MOD_RM(0xad),
    16011604    OP("pfacc %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFACC,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1602     INVALID_OPCODE_MOD_RM,
     1605    INVALID_OPCODE_MOD_RM(0xaf),
    16031606
    16041607    /* b */
    16051608    OP("pfcmpeq %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFCMPEQ, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1606     INVALID_OPCODE_MOD_RM,
    1607     INVALID_OPCODE_MOD_RM,
    1608     INVALID_OPCODE_MOD_RM,
     1609    INVALID_OPCODE_MOD_RM(0xb1),
     1610    INVALID_OPCODE_MOD_RM(0xb2),
     1611    INVALID_OPCODE_MOD_RM(0xb3),
    16091612    OP("pfmul %Pq,%Qq",      IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFMUL,   OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1610     INVALID_OPCODE_MOD_RM,
     1613    INVALID_OPCODE_MOD_RM(0xb5),
    16111614    OP("pfrcpit2 %Pq,%Qq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFRCPIT2,OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    16121615    OP("pfmulhrw %Pq,%Qq",   IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFMULHRW,OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1613     INVALID_OPCODE_MOD_RM,
    1614     INVALID_OPCODE_MOD_RM,
    1615     INVALID_OPCODE_MOD_RM,
     1616    INVALID_OPCODE_MOD_RM(0xb8),
     1617    INVALID_OPCODE_MOD_RM(0xb9),
     1618    INVALID_OPCODE_MOD_RM(0xba),
    16161619    OP("pswapd %Pq,%Qq",     IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PFSWAPD, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    1617     INVALID_OPCODE_MOD_RM,
    1618     INVALID_OPCODE_MOD_RM,
    1619     INVALID_OPCODE_MOD_RM,
     1620    INVALID_OPCODE_MOD_RM(0xbc),
     1621    INVALID_OPCODE_MOD_RM(0xbd),
     1622    INVALID_OPCODE_MOD_RM(0xbe),
    16201623    OP("pavgusb %Pq,%Qq",    IDX_ParseModRM,     IDX_UseModRM,   0,          OP_PAVGUSB, OP_PARM_Pq,         OP_PARM_Qq,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    16211624
    16221625    /* c */
    1623     INVALID_OPCODE_BLOCK_MOD_RM
     1626    INVALID_OPCODE_BLOCK_MOD_RM(0xc)
    16241627
    16251628    /* d */
    1626     INVALID_OPCODE_BLOCK_MOD_RM
     1629    INVALID_OPCODE_BLOCK_MOD_RM(0xd)
    16271630
    16281631    /* e */
    1629     INVALID_OPCODE_BLOCK_MOD_RM
     1632    INVALID_OPCODE_BLOCK_MOD_RM(0xe)
    16301633
    16311634    /* f */
    1632     INVALID_OPCODE_BLOCK_MOD_RM
     1635    INVALID_OPCODE_BLOCK_MOD_RM(0xf)
    16331636};
    16341637
     
    24402443    OP("test %Eb,%Ib",       IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_TEST,   OP_PARM_Eb,         OP_PARM_Ib ,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    24412444    //AMD manual claims test??
    2442     INVALID_OPCODE_MOD_RM,
     2445    INVALID_OPCODE_MOD_RM(0xf601),
    24432446    OP("not %Eb",            IDX_ParseModRM,     0,          0,          OP_NOT,     OP_PARM_Eb,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    24442447    OP("neg %Eb",            IDX_ParseModRM,     0,          0,          OP_NEG,     OP_PARM_Eb,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    24512454    OP("test %Ev,%Iz",       IDX_ParseModRM,     IDX_ParseImmZ,  0,          OP_TEST,    OP_PARM_Ev,         OP_PARM_Iz ,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    24522455    //AMD manual claims test??
    2453     INVALID_OPCODE_MOD_RM,
     2456    INVALID_OPCODE_MOD_RM(0xf701),
    24542457    OP("not %Ev",            IDX_ParseModRM,     0,          0,          OP_NOT,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    24552458    OP("neg %Ev",            IDX_ParseModRM,     0,          0,          OP_NEG,     OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    24652468    OP("inc %Eb",            IDX_ParseModRM,     0,          0,          OP_INC,     OP_PARM_Eb,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    24662469    OP("dec %Eb",            IDX_ParseModRM,     0,          0,          OP_DEC,     OP_PARM_Eb,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2467     INVALID_OPCODE_MOD_RM,
    2468     INVALID_OPCODE_MOD_RM,
    2469     INVALID_OPCODE_MOD_RM,
    2470     INVALID_OPCODE_MOD_RM,
    2471     INVALID_OPCODE_MOD_RM,
    2472     INVALID_OPCODE_MOD_RM,
     2470    INVALID_OPCODE_MOD_RM(0xfe02),
     2471    INVALID_OPCODE_MOD_RM(0xfe03),
     2472    INVALID_OPCODE_MOD_RM(0xfe04),
     2473    INVALID_OPCODE_MOD_RM(0xfe05),
     2474    INVALID_OPCODE_MOD_RM(0xfe06),
     2475    INVALID_OPCODE_MOD_RM(0xfe07),
    24732476};
    24742477
     
    24832486    OP("jmp %Ep",            IDX_ParseModRM,     0,          0,          OP_JMP,     OP_PARM_Ep,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_CONTROLFLOW | DISOPTYPE_UNCOND_CONTROLFLOW),
    24842487    OP("push %Ev",           IDX_ParseModRM,     0,          0,          OP_PUSH,    OP_PARM_Ev,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS | DISOPTYPE_DEFAULT_64_OP_SIZE),
    2485     INVALID_OPCODE_MOD_RM,
     2488    INVALID_OPCODE_MOD_RM(0xff07),
    24862489};
    24872490
     
    24962499    OP("verr %Ew",           IDX_ParseModRM,     0,          0,          OP_VERR,    OP_PARM_Ew,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP),
    24972500    OP("verw %Ew",           IDX_ParseModRM,     0,          0,          OP_VERW,    OP_PARM_Ew,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP),
    2498     INVALID_OPCODE_MOD_RM,
    2499     INVALID_OPCODE_MOD_RM,
     2501    INVALID_OPCODE_MOD_RM(0x0f0006),
     2502    INVALID_OPCODE_MOD_RM(0x0f0007),
    25002503};
    25012504
     
    25452548{
    25462549    /* 0F BA */
    2547     INVALID_OPCODE_MOD_RM,
    2548     INVALID_OPCODE_MOD_RM,
    2549     INVALID_OPCODE_MOD_RM,
    2550     INVALID_OPCODE_MOD_RM,
     2550    INVALID_OPCODE_MOD_RM(0x),
     2551    INVALID_OPCODE_MOD_RM(0x),
     2552    INVALID_OPCODE_MOD_RM(0x),
     2553    INVALID_OPCODE_MOD_RM(0x),
    25512554    OP("bt %Ev,%Ib",         IDX_ParseModRM,     IDX_ParseImmByte,       0,          OP_BT,      OP_PARM_Ev,         OP_PARM_Ib ,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    25522555    OP("bts %Ev,%Ib",        IDX_ParseModRM,     IDX_ParseImmByte,       0,          OP_BTS,     OP_PARM_Ev,         OP_PARM_Ib ,    OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    25582561{
    25592562    /* 0F C7 */
    2560     INVALID_OPCODE_MOD_RM,
     2563    INVALID_OPCODE_MOD_RM(0x),
    25612564    OP("cmpxchg8b %Mq",      IDX_ParseModRM,     0,          0,          OP_CMPXCHG8B, OP_PARM_Mq,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2562     INVALID_OPCODE_MOD_RM,
    2563     INVALID_OPCODE_MOD_RM,
    2564     INVALID_OPCODE_MOD_RM,
    2565     INVALID_OPCODE_MOD_RM,
    2566     INVALID_OPCODE_MOD_RM,
    2567     INVALID_OPCODE_MOD_RM,
     2565    INVALID_OPCODE_MOD_RM(0x),
     2566    INVALID_OPCODE_MOD_RM(0x),
     2567    INVALID_OPCODE_MOD_RM(0x),
     2568    INVALID_OPCODE_MOD_RM(0x),
     2569    INVALID_OPCODE_MOD_RM(0x),
     2570    INVALID_OPCODE_MOD_RM(0x),
    25682571};
    25692572
     
    25712574{
    25722575    /* 0F B9 */
    2573     INVALID_OPCODE_MOD_RM,
    2574     INVALID_OPCODE_MOD_RM,
    2575     INVALID_OPCODE_MOD_RM,
    2576     INVALID_OPCODE_MOD_RM,
    2577     INVALID_OPCODE_MOD_RM,
    2578     INVALID_OPCODE_MOD_RM,
    2579     INVALID_OPCODE_MOD_RM,
    2580     INVALID_OPCODE_MOD_RM,
     2576    INVALID_OPCODE_MOD_RM(0x),
     2577    INVALID_OPCODE_MOD_RM(0x),
     2578    INVALID_OPCODE_MOD_RM(0x),
     2579    INVALID_OPCODE_MOD_RM(0x),
     2580    INVALID_OPCODE_MOD_RM(0x),
     2581    INVALID_OPCODE_MOD_RM(0x),
     2582    INVALID_OPCODE_MOD_RM(0x),
     2583    INVALID_OPCODE_MOD_RM(0x),
    25812584};
    25822585
     
    26082611const DISOPCODE g_aMapX86_Group12[8*2] =
    26092612{
    2610     INVALID_OPCODE_MOD_RM,
    2611     INVALID_OPCODE_MOD_RM,
     2613    INVALID_OPCODE_MOD_RM(0x),
     2614    INVALID_OPCODE_MOD_RM(0x),
    26122615    OP("psrlw %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLW,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2613     INVALID_OPCODE_MOD_RM,
     2616    INVALID_OPCODE_MOD_RM(0x),
    26142617    OP("psraw %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRAW,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2615     INVALID_OPCODE_MOD_RM,
     2618    INVALID_OPCODE_MOD_RM(0x),
    26162619    OP("psllw %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLW,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2617     INVALID_OPCODE_MOD_RM,
     2620    INVALID_OPCODE_MOD_RM(0x),
    26182621
    26192622    /* Group 12 with prefix 0x66 */
    2620     INVALID_OPCODE_MOD_RM,
    2621     INVALID_OPCODE_MOD_RM,
     2623    INVALID_OPCODE_MOD_RM(0x),
     2624    INVALID_OPCODE_MOD_RM(0x),
    26222625    OP("psrlw %Pdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLW,  OP_PARM_Pdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2623     INVALID_OPCODE_MOD_RM,
     2626    INVALID_OPCODE_MOD_RM(0x),
    26242627    OP("psraw %Pdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRAW,  OP_PARM_Pdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2625     INVALID_OPCODE_MOD_RM,
     2628    INVALID_OPCODE_MOD_RM(0x),
    26262629    OP("psllw %Pdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLW,  OP_PARM_Pdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2627     INVALID_OPCODE_MOD_RM,
     2630    INVALID_OPCODE_MOD_RM(0x),
    26282631};
    26292632
     
    26312634const DISOPCODE g_aMapX86_Group13[8*2] =
    26322635{
    2633     INVALID_OPCODE_MOD_RM,
    2634     INVALID_OPCODE_MOD_RM,
     2636    INVALID_OPCODE_MOD_RM(0x),
     2637    INVALID_OPCODE_MOD_RM(0x),
    26352638    OP("psrld %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLD,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2636     INVALID_OPCODE_MOD_RM,
     2639    INVALID_OPCODE_MOD_RM(0x),
    26372640    OP("psrad %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRAD,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2638     INVALID_OPCODE_MOD_RM,
     2641    INVALID_OPCODE_MOD_RM(0x),
    26392642    OP("pslld %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLD,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2640     INVALID_OPCODE_MOD_RM,
     2643    INVALID_OPCODE_MOD_RM(0x),
    26412644
    26422645    /* Group 13 with prefix 0x66 */
    2643     INVALID_OPCODE_MOD_RM,
    2644     INVALID_OPCODE_MOD_RM,
     2646    INVALID_OPCODE_MOD_RM(0x),
     2647    INVALID_OPCODE_MOD_RM(0x),
    26452648    OP("psrld %Wdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLD,  OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2646     INVALID_OPCODE_MOD_RM,
     2649    INVALID_OPCODE_MOD_RM(0x),
    26472650    OP("psrad %Wdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRAD,  OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2648     INVALID_OPCODE_MOD_RM,
     2651    INVALID_OPCODE_MOD_RM(0x),
    26492652    OP("pslld %Wdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLD,  OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2650     INVALID_OPCODE_MOD_RM,
     2653    INVALID_OPCODE_MOD_RM(0x),
    26512654};
    26522655
     
    26542657const DISOPCODE g_aMapX86_Group14[8*2] =
    26552658{
    2656     INVALID_OPCODE_MOD_RM,
    2657     INVALID_OPCODE_MOD_RM,
     2659    INVALID_OPCODE_MOD_RM(0x),
     2660    INVALID_OPCODE_MOD_RM(0x),
    26582661    OP("psrlq %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLQ,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2659     INVALID_OPCODE_MOD_RM,
    2660     INVALID_OPCODE_MOD_RM,
    2661     INVALID_OPCODE_MOD_RM,
     2662    INVALID_OPCODE_MOD_RM(0x),
     2663    INVALID_OPCODE_MOD_RM(0x),
     2664    INVALID_OPCODE_MOD_RM(0x),
    26622665    OP("psllq %Pq,%Ib",      IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLQ,  OP_PARM_Pq,         OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2663     INVALID_OPCODE_MOD_RM,
     2666    INVALID_OPCODE_MOD_RM(0x),
    26642667
    26652668    /* Group 14 with prefix 0x66 */
    2666     INVALID_OPCODE_MOD_RM,
    2667     INVALID_OPCODE_MOD_RM,
     2669    INVALID_OPCODE_MOD_RM(0x),
     2670    INVALID_OPCODE_MOD_RM(0x),
    26682671    OP("psrlq %Wdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLD,  OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    26692672    OP("psrldq %Wdq,%Ib",    IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSRLDQ, OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2670     INVALID_OPCODE_MOD_RM,
    2671     INVALID_OPCODE_MOD_RM,
     2673    INVALID_OPCODE_MOD_RM(0x),
     2674    INVALID_OPCODE_MOD_RM(0x),
    26722675    OP("psllq %Wdq,%Ib",     IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLD,  OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    26732676    OP("pslldq %Wdq,%Ib",    IDX_ParseModRM,     IDX_ParseImmByte,0,          OP_PSLLDQ, OP_PARM_Wdq,        OP_PARM_Ib,     OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    26822685    OP("ldmxcsr %M",         IDX_ParseModRM,     0,          0,          OP_LDMXCSR, OP_PARM_M,          OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    26832686    OP("stmxcsr %M",         IDX_ParseModRM,     0,          0,          OP_STMXCSR, OP_PARM_M,          OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2684     INVALID_OPCODE_MOD_RM,
    2685     INVALID_OPCODE_MOD_RM,
    2686     INVALID_OPCODE_MOD_RM,
     2687    INVALID_OPCODE_MOD_RM(0x),
     2688    INVALID_OPCODE_MOD_RM(0x),
     2689    INVALID_OPCODE_MOD_RM(0x),
    26872690    OP("clflush %Mb",        IDX_ParseModRM,     0,          0,          OP_CLFLUSH, OP_PARM_Mb,         OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    26882691};
     
    26912694const DISOPCODE g_aMapX86_Group15_mod11_rm000[8] =
    26922695{
    2693     INVALID_OPCODE_MOD_RM,
    2694     INVALID_OPCODE_MOD_RM,
    2695     INVALID_OPCODE_MOD_RM,
    2696     INVALID_OPCODE_MOD_RM,
    2697     INVALID_OPCODE_MOD_RM,
     2696    INVALID_OPCODE_MOD_RM(0x),
     2697    INVALID_OPCODE_MOD_RM(0x),
     2698    INVALID_OPCODE_MOD_RM(0x),
     2699    INVALID_OPCODE_MOD_RM(0x),
     2700    INVALID_OPCODE_MOD_RM(0x),
    26982701    OP("lfence",             IDX_ParseModFence,  0,          0,          OP_LFENCE,  OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    26992702    OP("mfence",             IDX_ParseModFence,  0,          0,          OP_MFENCE,  OP_PARM_NONE,       OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
     
    27082711    OP("prefetcht1 %Mb",   IDX_ParseModRM, 0,          0,          OP_PREFETCH,OP_PARM_Mb,        OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    27092712    OP("prefetcht2 %Mb",   IDX_ParseModRM, 0,          0,          OP_PREFETCH,OP_PARM_Mb,        OP_PARM_NONE,   OP_PARM_NONE,   DISOPTYPE_HARMLESS),
    2710     INVALID_OPCODE_MOD_RM,
    2711     INVALID_OPCODE_MOD_RM,
    2712     INVALID_OPCODE_MOD_RM,
    2713     INVALID_OPCODE_MOD_RM,
     2713    INVALID_OPCODE_MOD_RM(0x),
     2714    INVALID_OPCODE_MOD_RM(0x),
     2715    INVALID_OPCODE_MOD_RM(0x),
     2716    INVALID_OPCODE_MOD_RM(0x),
    27142717};
    27152718
  • trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm

    r41751 r41863  
    8585        pause
    8686        nop
     87        ;pfmulhrw mm0, qword [ds:ebp+edi*8+00f000001h]
     88        db 0x3e, 0xf, 0xf, 0x84, 0xfd, 0x1, 0x0, 0x0, 0xf, 0xb7
    8789ENDPROC   TestProc32
    8890
  • trunk/src/VBox/Disassembler/testcase/tstDisasm-2.cpp

    r41790 r41863  
    399399        case 'f': return 0xf;
    400400        default:
    401             RTPrintf("error: Invalid hex digig '%c'\n", ch);
     401            RTPrintf("error: Invalid hex digit '%c'\n", ch);
    402402            return -1;
    403403    }
     
    580580                /** @todo this stuff belongs in IPRT, same stuff as mac address reading. Could be reused for IPv6 with a different item size.*/
    581581                /* skip white space, and for the benefit of linux panics '<' and '>'. */
    582                 while (RT_C_IS_SPACE(ch2 = *psz) || ch2 == '<' || ch2 == '>')
     582                while (RT_C_IS_SPACE(ch2 = *psz) || ch2 == '<' || ch2 == '>' || ch2 == ',' || ch2 == ';')
    583583                {
    584584                    if (ch2 == '<')
     
    586586                    psz++;
    587587                }
     588
     589                if (ch2 == '0' && (psz[1] == 'x' || psz[1] == 'X'))
     590                {
     591                    psz += 2;
     592                    ch2 = *psz;
     593                }
     594
    588595                if (!ch2)
    589596                    break;
     
    593600                if (iNum == -1)
    594601                    return 1;
    595                 if (!RT_C_IS_SPACE(ch2 = *psz) && ch2 != '\0' && ch2 != '>')
     602                if (!RT_C_IS_SPACE(ch2 = *psz) && ch2 != '\0' && ch2 != '>' && ch2 != ',' && ch2 != ';')
    596603                {
    597604                    int iDigit = HexDigitToNum(*psz++);
Note: See TracChangeset for help on using the changeset viewer.

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