VirtualBox

Changeset 41676 in vbox for trunk/include/VBox/dis.h


Ignore:
Timestamp:
Jun 12, 2012 8:53:40 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
78483
Message:

DIS: More scoping work.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/dis.h

    r41675 r41676  
    4848} DISCPUMODE;
    4949
    50 /** @name Prefix byte flags
     50/** @name Prefix byte flags (DISCPUSTATE::prefix_rex).
    5151 * @{
    5252 */
     
    6868/** @} */
    6969
    70 /** @name 64 bits prefix byte flags
    71  * @{
    72  */
    73 #define PREFIX_REX_OP_2_FLAGS(a)        (a - OP_PARM_REX_START)
    74 #define PREFIX_REX_FLAGS                PREFIX_REX_OP_2_FLAGS(OP_PARM_REX)
    75 #define PREFIX_REX_FLAGS_B              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_B)
    76 #define PREFIX_REX_FLAGS_X              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_X)
    77 #define PREFIX_REX_FLAGS_XB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_XB)
    78 #define PREFIX_REX_FLAGS_R              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_R)
    79 #define PREFIX_REX_FLAGS_RB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RB)
    80 #define PREFIX_REX_FLAGS_RX             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RX)
    81 #define PREFIX_REX_FLAGS_RXB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RXB)
    82 #define PREFIX_REX_FLAGS_W              PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_W)
    83 #define PREFIX_REX_FLAGS_WB             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WB)
    84 #define PREFIX_REX_FLAGS_WX             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WX)
    85 #define PREFIX_REX_FLAGS_WXB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WXB)
    86 #define PREFIX_REX_FLAGS_WR             PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WR)
    87 #define PREFIX_REX_FLAGS_WRB            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRB)
    88 #define PREFIX_REX_FLAGS_WRX            PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRX)
    89 #define PREFIX_REX_FLAGS_WRXB           PREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRXB)
     70/** @name 64 bits prefix byte flags (DISCPUSTATE::prefix_rex).
     71 * Requires VBox/disopcode.h.
     72 * @{
     73 */
     74#define DISPREFIX_REX_OP_2_FLAGS(a)     (a - OP_PARM_REX_START)
     75#define DISPREFIX_REX_FLAGS             DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX)
     76#define DISPREFIX_REX_FLAGS_B           DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_B)
     77#define DISPREFIX_REX_FLAGS_X           DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_X)
     78#define DISPREFIX_REX_FLAGS_XB          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_XB)
     79#define DISPREFIX_REX_FLAGS_R           DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_R)
     80#define DISPREFIX_REX_FLAGS_RB          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RB)
     81#define DISPREFIX_REX_FLAGS_RX          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RX)
     82#define DISPREFIX_REX_FLAGS_RXB         DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_RXB)
     83#define DISPREFIX_REX_FLAGS_W           DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_W)
     84#define DISPREFIX_REX_FLAGS_WB          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WB)
     85#define DISPREFIX_REX_FLAGS_WX          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WX)
     86#define DISPREFIX_REX_FLAGS_WXB         DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WXB)
     87#define DISPREFIX_REX_FLAGS_WR          DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WR)
     88#define DISPREFIX_REX_FLAGS_WRB         DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRB)
     89#define DISPREFIX_REX_FLAGS_WRX         DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRX)
     90#define DISPREFIX_REX_FLAGS_WRXB        DISPREFIX_REX_OP_2_FLAGS(OP_PARM_REX_WRXB)
    9091/** @} */
    9192
     
    9394 * @{
    9495 */
    95 #define OPTYPE_INVALID                  RT_BIT(0)
    96 #define OPTYPE_HARMLESS                 RT_BIT(1)
    97 #define OPTYPE_CONTROLFLOW              RT_BIT(2)
    98 #define OPTYPE_POTENTIALLY_DANGEROUS    RT_BIT(3)
    99 #define OPTYPE_DANGEROUS                RT_BIT(4)
    100 #define OPTYPE_PORTIO                   RT_BIT(5)
    101 #define OPTYPE_PRIVILEGED               RT_BIT(6)
    102 #define OPTYPE_PRIVILEGED_NOTRAP        RT_BIT(7)
    103 #define OPTYPE_UNCOND_CONTROLFLOW       RT_BIT(8)
    104 #define OPTYPE_RELATIVE_CONTROLFLOW     RT_BIT(9)
    105 #define OPTYPE_COND_CONTROLFLOW         RT_BIT(10)
    106 #define OPTYPE_INTERRUPT                RT_BIT(11)
    107 #define OPTYPE_ILLEGAL                  RT_BIT(12)
    108 #define OPTYPE_RRM_DANGEROUS            RT_BIT(14)  /**< Some additional dangerous ones when recompiling raw r0. */
    109 #define OPTYPE_RRM_DANGEROUS_16         RT_BIT(15)  /**< Some additional dangerous ones when recompiling 16-bit raw r0. */
    110 #define OPTYPE_RRM_MASK                 (OPTYPE_RRM_DANGEROUS | OPTYPE_RRM_DANGEROUS_16)
    111 #define OPTYPE_INHIBIT_IRQS             RT_BIT(16)  /**< Will or can inhibit irqs (sti, pop ss, mov ss) */
    112 #define OPTYPE_PORTIO_READ              RT_BIT(17)
    113 #define OPTYPE_PORTIO_WRITE             RT_BIT(18)
    114 #define OPTYPE_INVALID_64               RT_BIT(19)  /**< Invalid in 64 bits mode */
    115 #define OPTYPE_ONLY_64                  RT_BIT(20)  /**< Only valid in 64 bits mode */
    116 #define OPTYPE_DEFAULT_64_OP_SIZE       RT_BIT(21)  /**< Default 64 bits operand size */
    117 #define OPTYPE_FORCED_64_OP_SIZE        RT_BIT(22)  /**< Forced 64 bits operand size; regardless of prefix bytes */
    118 #define OPTYPE_REXB_EXTENDS_OPREG       RT_BIT(23)  /**< REX.B extends the register field in the opcode byte */
    119 #define OPTYPE_MOD_FIXED_11             RT_BIT(24)  /**< modrm.mod is always 11b */
    120 #define OPTYPE_FORCED_32_OP_SIZE_X86    RT_BIT(25)  /**< Forced 32 bits operand size; regardless of prefix bytes (only in 16 & 32 bits mode!) */
    121 #define OPTYPE_ALL                      UINT32_C(0xffffffff)
     96#define DISOPTYPE_INVALID                  RT_BIT_32(0)
     97#define DISOPTYPE_HARMLESS                 RT_BIT_32(1)
     98#define DISOPTYPE_CONTROLFLOW              RT_BIT_32(2)
     99#define DISOPTYPE_POTENTIALLY_DANGEROUS    RT_BIT_32(3)
     100#define DISOPTYPE_DANGEROUS                RT_BIT_32(4)
     101#define DISOPTYPE_PORTIO                   RT_BIT_32(5)
     102#define DISOPTYPE_PRIVILEGED               RT_BIT_32(6)
     103#define DISOPTYPE_PRIVILEGED_NOTRAP        RT_BIT_32(7)
     104#define DISOPTYPE_UNCOND_CONTROLFLOW       RT_BIT_32(8)
     105#define DISOPTYPE_RELATIVE_CONTROLFLOW     RT_BIT_32(9)
     106#define DISOPTYPE_COND_CONTROLFLOW         RT_BIT_32(10)
     107#define DISOPTYPE_INTERRUPT                RT_BIT_32(11)
     108#define DISOPTYPE_ILLEGAL                  RT_BIT_32(12)
     109#define DISOPTYPE_RRM_DANGEROUS            RT_BIT_32(14)  /**< Some additional dangerous ones when recompiling raw r0. */
     110#define DISOPTYPE_RRM_DANGEROUS_16         RT_BIT_32(15)  /**< Some additional dangerous ones when recompiling 16-bit raw r0. */
     111#define DISOPTYPE_RRM_MASK                 (DISOPTYPE_RRM_DANGEROUS | DISOPTYPE_RRM_DANGEROUS_16)
     112#define DISOPTYPE_INHIBIT_IRQS             RT_BIT_32(16)  /**< Will or can inhibit irqs (sti, pop ss, mov ss) */
     113#define DISOPTYPE_PORTIO_READ              RT_BIT_32(17)
     114#define DISOPTYPE_PORTIO_WRITE             RT_BIT_32(18)
     115#define DISOPTYPE_INVALID_64               RT_BIT_32(19)  /**< Invalid in 64 bits mode */
     116#define DISOPTYPE_ONLY_64                  RT_BIT_32(20)  /**< Only valid in 64 bits mode */
     117#define DISOPTYPE_DEFAULT_64_OP_SIZE       RT_BIT_32(21)  /**< Default 64 bits operand size */
     118#define DISOPTYPE_FORCED_64_OP_SIZE        RT_BIT_32(22)  /**< Forced 64 bits operand size; regardless of prefix bytes */
     119#define DISOPTYPE_REXB_EXTENDS_OPREG       RT_BIT_32(23)  /**< REX.B extends the register field in the opcode byte */
     120#define DISOPTYPE_MOD_FIXED_11             RT_BIT_32(24)  /**< modrm.mod is always 11b */
     121#define DISOPTYPE_FORCED_32_OP_SIZE_X86    RT_BIT_32(25)  /**< Forced 32 bits operand size; regardless of prefix bytes (only in 16 & 32 bits mode!) */
     122#define DISOPTYPE_ALL                      UINT32_C(0xffffffff)
    122123/** @}  */
    123124
     
    125126 * @{
    126127 */
    127 #define USE_BASE                        RT_BIT_64(0)
    128 #define USE_INDEX                       RT_BIT_64(1)
    129 #define USE_SCALE                       RT_BIT_64(2)
    130 #define USE_REG_GEN8                    RT_BIT_64(3)
    131 #define USE_REG_GEN16                   RT_BIT_64(4)
    132 #define USE_REG_GEN32                   RT_BIT_64(5)
    133 #define USE_REG_GEN64                   RT_BIT_64(6)
    134 #define USE_REG_FP                      RT_BIT_64(7)
    135 #define USE_REG_MMX                     RT_BIT_64(8)
    136 #define USE_REG_XMM                     RT_BIT_64(9)
    137 #define USE_REG_CR                      RT_BIT_64(10)
    138 #define USE_REG_DBG                     RT_BIT_64(11)
    139 #define USE_REG_SEG                     RT_BIT_64(12)
    140 #define USE_REG_TEST                    RT_BIT_64(13)
    141 #define USE_DISPLACEMENT8               RT_BIT_64(14)
    142 #define USE_DISPLACEMENT16              RT_BIT_64(15)
    143 #define USE_DISPLACEMENT32              RT_BIT_64(16)
    144 #define USE_DISPLACEMENT64              RT_BIT_64(17)
    145 #define USE_RIPDISPLACEMENT32           RT_BIT_64(18)
    146 #define USE_IMMEDIATE8                  RT_BIT_64(19)
    147 #define USE_IMMEDIATE8_REL              RT_BIT_64(20)
    148 #define USE_IMMEDIATE16                 RT_BIT_64(21)
    149 #define USE_IMMEDIATE16_REL             RT_BIT_64(22)
    150 #define USE_IMMEDIATE32                 RT_BIT_64(23)
    151 #define USE_IMMEDIATE32_REL             RT_BIT_64(24)
    152 #define USE_IMMEDIATE64                 RT_BIT_64(25)
    153 #define USE_IMMEDIATE64_REL             RT_BIT_64(26)
    154 #define USE_IMMEDIATE_ADDR_0_32         RT_BIT_64(27)
    155 #define USE_IMMEDIATE_ADDR_16_32        RT_BIT_64(28)
    156 #define USE_IMMEDIATE_ADDR_0_16         RT_BIT_64(29)
    157 #define USE_IMMEDIATE_ADDR_16_16        RT_BIT_64(30)
     128#define DISUSE_BASE                        RT_BIT_64(0)
     129#define DISUSE_INDEX                       RT_BIT_64(1)
     130#define DISUSE_SCALE                       RT_BIT_64(2)
     131#define DISUSE_REG_GEN8                    RT_BIT_64(3)
     132#define DISUSE_REG_GEN16                   RT_BIT_64(4)
     133#define DISUSE_REG_GEN32                   RT_BIT_64(5)
     134#define DISUSE_REG_GEN64                   RT_BIT_64(6)
     135#define DISUSE_REG_FP                      RT_BIT_64(7)
     136#define DISUSE_REG_MMX                     RT_BIT_64(8)
     137#define DISUSE_REG_XMM                     RT_BIT_64(9)
     138#define DISUSE_REG_CR                      RT_BIT_64(10)
     139#define DISUSE_REG_DBG                     RT_BIT_64(11)
     140#define DISUSE_REG_SEG                     RT_BIT_64(12)
     141#define DISUSE_REG_TEST                    RT_BIT_64(13)
     142#define DISUSE_DISPLACEMENT8               RT_BIT_64(14)
     143#define DISUSE_DISPLACEMENT16              RT_BIT_64(15)
     144#define DISUSE_DISPLACEMENT32              RT_BIT_64(16)
     145#define DISUSE_DISPLACEMENT64              RT_BIT_64(17)
     146#define DISUSE_RIPDISPLACEMENT32           RT_BIT_64(18)
     147#define DISUSE_IMMEDIATE8                  RT_BIT_64(19)
     148#define DISUSE_IMMEDIATE8_REL              RT_BIT_64(20)
     149#define DISUSE_IMMEDIATE16                 RT_BIT_64(21)
     150#define DISUSE_IMMEDIATE16_REL             RT_BIT_64(22)
     151#define DISUSE_IMMEDIATE32                 RT_BIT_64(23)
     152#define DISUSE_IMMEDIATE32_REL             RT_BIT_64(24)
     153#define DISUSE_IMMEDIATE64                 RT_BIT_64(25)
     154#define DISUSE_IMMEDIATE64_REL             RT_BIT_64(26)
     155#define DISUSE_IMMEDIATE_ADDR_0_32         RT_BIT_64(27)
     156#define DISUSE_IMMEDIATE_ADDR_16_32        RT_BIT_64(28)
     157#define DISUSE_IMMEDIATE_ADDR_0_16         RT_BIT_64(29)
     158#define DISUSE_IMMEDIATE_ADDR_16_16        RT_BIT_64(30)
    158159/** DS:ESI */
    159 #define USE_POINTER_DS_BASED            RT_BIT_64(31)
     160#define DISUSE_POINTER_DS_BASED            RT_BIT_64(31)
    160161/** ES:EDI */
    161 #define USE_POINTER_ES_BASED            RT_BIT_64(32)
    162 #define USE_IMMEDIATE16_SX8             RT_BIT_64(33)
    163 #define USE_IMMEDIATE32_SX8             RT_BIT_64(34)
    164 #define USE_IMMEDIATE64_SX8             RT_BIT_64(36)
    165 
    166 #define USE_IMMEDIATE                   (USE_IMMEDIATE8|USE_IMMEDIATE16|USE_IMMEDIATE32|USE_IMMEDIATE64|USE_IMMEDIATE8_REL|USE_IMMEDIATE16_REL|USE_IMMEDIATE32_REL|USE_IMMEDIATE64_REL|USE_IMMEDIATE_ADDR_0_32|USE_IMMEDIATE_ADDR_16_32|USE_IMMEDIATE_ADDR_0_16|USE_IMMEDIATE_ADDR_16_16|USE_IMMEDIATE16_SX8|USE_IMMEDIATE32_SX8|USE_IMMEDIATE64_SX8)
    167 
    168 #define DIS_IS_EFFECTIVE_ADDR(flags)    !!((flags) & (USE_BASE|USE_INDEX|USE_DISPLACEMENT32|USE_DISPLACEMENT64|USE_DISPLACEMENT16|USE_DISPLACEMENT8|USE_RIPDISPLACEMENT32))
     162#define DISUSE_POINTER_ES_BASED            RT_BIT_64(32)
     163#define DISUSE_IMMEDIATE16_SX8             RT_BIT_64(33)
     164#define DISUSE_IMMEDIATE32_SX8             RT_BIT_64(34)
     165#define DISUSE_IMMEDIATE64_SX8             RT_BIT_64(36)
     166
     167/** Mask of immediate use flags. */
     168#define DISUSE_IMMEDIATE                   ( DISUSE_IMMEDIATE8 \
     169                                           | DISUSE_IMMEDIATE16 \
     170                                           | DISUSE_IMMEDIATE32 \
     171                                           | DISUSE_IMMEDIATE64 \
     172                                           | DISUSE_IMMEDIATE8_REL \
     173                                           | DISUSE_IMMEDIATE16_REL \
     174                                           | DISUSE_IMMEDIATE32_REL \
     175                                           | DISUSE_IMMEDIATE64_REL \
     176                                           | DISUSE_IMMEDIATE_ADDR_0_32 \
     177                                           | DISUSE_IMMEDIATE_ADDR_16_32 \
     178                                           | DISUSE_IMMEDIATE_ADDR_0_16 \
     179                                           | DISUSE_IMMEDIATE_ADDR_16_16 \
     180                                           | DISUSE_IMMEDIATE16_SX8 \
     181                                           | DISUSE_IMMEDIATE32_SX8 \
     182                                           | DISUSE_IMMEDIATE64_SX8)
     183/** Check if the use flags indicates an effective address. */
     184#define DISUSE_IS_EFFECTIVE_ADDR(a_fUseFlags) (!!(  (a_fUseFlags) \
     185                                                  & (  DISUSE_BASE  \
     186                                                     | DISUSE_INDEX \
     187                                                     | DISUSE_DISPLACEMENT32 \
     188                                                     | DISUSE_DISPLACEMENT64 \
     189                                                     | DISUSE_DISPLACEMENT16 \
     190                                                     | DISUSE_DISPLACEMENT8 \
     191                                                     | DISUSE_RIPDISPLACEMENT32) ))
    169192/** @} */
    170193
     
    209232#define USE_REG_R14D                    14
    210233#define USE_REG_R15D                    15
    211 
    212 /** @} */
     234/** @} */
     235
    213236/** index in {"AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI", "R8W", "R9W", "R10W", "R11W", "R12W", "R13W", "R14W", "R15W"}
    214237 * @{
     
    316339#define USE_REG_XMM6                    6
    317340#define USE_REG_XMM7                    7
     341/** @todo missing XMM8-XMM15 */
    318342
    319343/** Used by DISQueryParamVal & EMIQueryParamVal
Note: See TracChangeset for help on using the changeset viewer.

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