Changeset 41676 in vbox for trunk/include/VBox/dis.h
- Timestamp:
- Jun 12, 2012 8:53:40 PM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78483
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/dis.h
r41675 r41676 48 48 } DISCPUMODE; 49 49 50 /** @name Prefix byte flags 50 /** @name Prefix byte flags (DISCPUSTATE::prefix_rex). 51 51 * @{ 52 52 */ … … 68 68 /** @} */ 69 69 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) 90 91 /** @} */ 91 92 … … 93 94 * @{ 94 95 */ 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) 122 123 /** @} */ 123 124 … … 125 126 * @{ 126 127 */ 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) 158 159 /** DS:ESI */ 159 #define USE_POINTER_DS_BASED RT_BIT_64(31)160 #define DISUSE_POINTER_DS_BASED RT_BIT_64(31) 160 161 /** 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) )) 169 192 /** @} */ 170 193 … … 209 232 #define USE_REG_R14D 14 210 233 #define USE_REG_R15D 15 211 212 /** @} */ 234 /** @} */ 235 213 236 /** index in {"AX", "CX", "DX", "BX", "SP", "BP", "SI", "DI", "R8W", "R9W", "R10W", "R11W", "R12W", "R13W", "R14W", "R15W"} 214 237 * @{ … … 316 339 #define USE_REG_XMM6 6 317 340 #define USE_REG_XMM7 7 341 /** @todo missing XMM8-XMM15 */ 318 342 319 343 /** Used by DISQueryParamVal & EMIQueryParamVal
Note:
See TracChangeset
for help on using the changeset viewer.