1 /*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64
4 for INTEL64(R), AMD64(R)
6 Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved.
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are met:
11 1. Redistributions of source code must retain the above copyright notice,
12 this list of conditions and the following disclaimer.
13 2. Redistributions in binary form must reproduce the above copyright
14 notice, this list of conditions and the following disclaimer in the
15 documentation and/or other materials provided with the distribution.
17 THIS SOFTWARE IS PROVIDED BY Koine Yuusuke(koinec) ``AS IS'' AND ANY
18 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 DISCLAIMED. IN NO EVENT SHALL Koine Yuusuke(koinec) OR CONTRIBUTORS BE
21 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
27 OF THE POSSIBILITY OF SUCH DAMAGE.
29 DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/
31 /* File Info -----------------------------------------------------------
32 File: drd64_intel64_dbtype.h
33 Function: Intel64 Nimonic DataBase Defines Header
35 ----------------------------------------------------------------------*/
37 #ifndef DRD64_HEADER_INTEL64_DBTYPE
38 #define DRD64_HEADER_INTEL64_DBTYPE
40 #include"drd64_intel64.h"
42 #define MAX_INSTRUCTION 20
43 #define MAX_OPERAND_METHODTYPE_LENGTH 7
44 #define MAX_OPERAND_DATASIZE_LENGTH 5
45 #define MAX_OPERAND 50
47 #define INTEL64_CODETYPE_SEGMENT 0x03
48 #define INTEL64_CODETYPE_REX 0x04
49 #define INTEL64_CODETYPE_PREFIX 0x01
50 #define INTEL64_CODETYPE_ESCAPE 0x02
51 #define INTEL64_CODETYPE_FPUBYTE1 0x05
52 #define INTEL64_CODETYPE_ESCAPE2 0x06
53 #define INTEL64_CODETYPE_ILLEGAL 0x09
54 #define INTEL64_CODETYPE_FPU_MEM 0x07
55 #define INTEL64_CODETYPE_FPU_REG 0x08
56 #define INTEL64_CODETYPE_ERROR 0xff
57 #define INTEL64_CODETYPE_NOINSTRUCTION 0xf0
59 #define INTEL64_BITFREE 86
60 #define INTEL64_BIT32ONLY 32
61 #define INTEL64_BIT64ONLY 64
63 #define INTEL64_MODTYPE_REG 3
64 #define INTEL64_MODTYPE_NONE 4
65 #define INTEL64_MODTYPE_REQUIRE 5
66 #define INTEL64_MODTYPE_MEMREG 6
67 #define INTEL64_MODTYPE_MEM 7
68 #define INTEL64_MODTYPE_FPU 8
69 #define INTEL64_MODTYPE_NONE_FPU 9
70 #define INTEL64_MODTYPE_ESCAPE 10
71 #define INTEL64_MODTYPE_ERROR 15
75 /* Opeland Type Defines */
79 Bit 13: have Immidiate Data
95 #define OPTYPE_BASE_REG 0x0000
96 #define OPTYPE_BASE_DATA 0x8000
98 #define OPTYPE_BASE_REG_TYPEMASK 0x7000|OPTYPE_BASE_REG
99 #define OPTYPE_BASE_REG_GENERIC 0x1000|OPTYPE_BASE_REG
100 #define OPTYPE_BASE_REG_SEGMENT 0x2000|OPTYPE_BASE_REG
101 #define OPTYPE_BASE_REG_CONTROL 0x3000|OPTYPE_BASE_REG
102 #define OPTYPE_BASE_REG_FPU 0x4000|OPTYPE_BASE_REG
103 #define OPTYPE_BASE_REG_DEBUG 0x5000|OPTYPE_BASE_REG
104 #define OPTYPE_BASE_REG_MMX 0x6000|OPTYPE_BASE_REG
105 #define OPTYPE_BASE_REG_SSE 0x7000|OPTYPE_BASE_REG
106 #define OPTYPE_BASE_REG_OTHER 0x0000|OPTYPE_BASE_REG
108 #define OPTYPE_BASE_REG_SIZEMASK 0x00f0
109 #define OPTYPE_BASE_REG_64BIT 0x0080
110 #define OPTYPE_BASE_REG_32BIT 0x0040
111 #define OPTYPE_BASE_REG_16BIT 0x0020
112 #define OPTYPE_BASE_REG_8BIT 0x0010
114 #define OPTYPE_BASE_REG_8BIT_HIGH 0x0002|OPTYPE_BASE_REG_8BIT
115 #define OPTYPE_BASE_REG_8BIT_LOW 0x0001|OPTYPE_BASE_REG_8BIT
117 #define OPTYPE_BASE_REG_IDMASK 0x0f00
118 #define OPTYPE_BASE_REG_GENERIC_IDMASK 0x0f00|OPTYPE_BASE_REG_GENERIC
119 #define OPTYPE_BASE_REG_GENERIC_AX 0x0000|OPTYPE_BASE_REG_GENERIC
120 #define OPTYPE_BASE_REG_GENERIC_CX 0x0100|OPTYPE_BASE_REG_GENERIC
121 #define OPTYPE_BASE_REG_GENERIC_DX 0x0200|OPTYPE_BASE_REG_GENERIC
122 #define OPTYPE_BASE_REG_GENERIC_BX 0x0300|OPTYPE_BASE_REG_GENERIC
123 #define OPTYPE_BASE_REG_GENERIC_SP 0x0400|OPTYPE_BASE_REG_GENERIC
124 #define OPTYPE_BASE_REG_GENERIC_BP 0x0500|OPTYPE_BASE_REG_GENERIC
125 #define OPTYPE_BASE_REG_GENERIC_SI 0x0600|OPTYPE_BASE_REG_GENERIC
126 #define OPTYPE_BASE_REG_GENERIC_DI 0x0700|OPTYPE_BASE_REG_GENERIC
127 #define OPTYPE_BASE_REG_GENERIC_R8 0x0800|OPTYPE_BASE_REG_GENERIC
128 #define OPTYPE_BASE_REG_GENERIC_R9 0x0900|OPTYPE_BASE_REG_GENERIC
129 #define OPTYPE_BASE_REG_GENERIC_R10 0x0a00|OPTYPE_BASE_REG_GENERIC
130 #define OPTYPE_BASE_REG_GENERIC_R11 0x0b00|OPTYPE_BASE_REG_GENERIC
131 #define OPTYPE_BASE_REG_GENERIC_R12 0x0c00|OPTYPE_BASE_REG_GENERIC
132 #define OPTYPE_BASE_REG_GENERIC_R13 0x0d00|OPTYPE_BASE_REG_GENERIC
133 #define OPTYPE_BASE_REG_GENERIC_R14 0x0e00|OPTYPE_BASE_REG_GENERIC
134 #define OPTYPE_BASE_REG_GENERIC_R15 0x0f00|OPTYPE_BASE_REG_GENERIC
137 #define OPTYPE_REG_RAX (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_64BIT)
138 #define OPTYPE_REG_EAX (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_32BIT)
139 #define OPTYPE_REG_AX (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_16BIT)
140 #define OPTYPE_REG_AH (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_8BIT_HIGH)
141 #define OPTYPE_REG_AL (OPTYPE_BASE_REG_GENERIC_AX|OPTYPE_BASE_REG_8BIT_LOW)
142 #define OPTYPE_REG_RCX (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_64BIT)
143 #define OPTYPE_REG_ECX (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_32BIT)
144 #define OPTYPE_REG_CX (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_16BIT)
145 #define OPTYPE_REG_CH (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_8BIT_HIGH)
146 #define OPTYPE_REG_CL (OPTYPE_BASE_REG_GENERIC_CX|OPTYPE_BASE_REG_8BIT_LOW)
147 #define OPTYPE_REG_RDX (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_64BIT)
148 #define OPTYPE_REG_EDX (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_32BIT)
149 #define OPTYPE_REG_DX (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_16BIT)
150 #define OPTYPE_REG_DH (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_8BIT_HIGH)
151 #define OPTYPE_REG_DL (OPTYPE_BASE_REG_GENERIC_DX|OPTYPE_BASE_REG_8BIT_LOW)
152 #define OPTYPE_REG_RBX (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_64BIT)
153 #define OPTYPE_REG_EBX (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_32BIT)
154 #define OPTYPE_REG_BX (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_16BIT)
155 #define OPTYPE_REG_BH (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_8BIT_HIGH)
156 #define OPTYPE_REG_BL (OPTYPE_BASE_REG_GENERIC_BX|OPTYPE_BASE_REG_8BIT_LOW)
157 #define OPTYPE_REG_RSP (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_64BIT)
158 #define OPTYPE_REG_ESP (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_32BIT)
159 #define OPTYPE_REG_SP (OPTYPE_BASE_REG_GENERIC_SP|OPTYPE_BASE_REG_16BIT)
160 #define OPTYPE_REG_RBP (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_64BIT)
161 #define OPTYPE_REG_EBP (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_32BIT)
162 #define OPTYPE_REG_BP (OPTYPE_BASE_REG_GENERIC_BP|OPTYPE_BASE_REG_16BIT)
163 #define OPTYPE_REG_RSI (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_64BIT)
164 #define OPTYPE_REG_ESI (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_32BIT)
165 #define OPTYPE_REG_SI (OPTYPE_BASE_REG_GENERIC_SI|OPTYPE_BASE_REG_16BIT)
166 #define OPTYPE_REG_RDI (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_64BIT)
167 #define OPTYPE_REG_EDI (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_32BIT)
168 #define OPTYPE_REG_DI (OPTYPE_BASE_REG_GENERIC_DI|OPTYPE_BASE_REG_16BIT)
169 #define OPTYPE_REG_R8B (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_8BIT_LOW)
170 #define OPTYPE_REG_R8W (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_16BIT)
171 #define OPTYPE_REG_R8D (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_32BIT)
172 #define OPTYPE_REG_R8 (OPTYPE_BASE_REG_GENERIC_R8|OPTYPE_BASE_REG_64BIT)
173 #define OPTYPE_REG_R9B (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_8BIT_LOW)
174 #define OPTYPE_REG_R9W (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_16BIT)
175 #define OPTYPE_REG_R9D (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_32BIT)
176 #define OPTYPE_REG_R9 (OPTYPE_BASE_REG_GENERIC_R9|OPTYPE_BASE_REG_64BIT)
177 #define OPTYPE_REG_R10B (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_8BIT_LOW)
178 #define OPTYPE_REG_R10W (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_16BIT)
179 #define OPTYPE_REG_R10D (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_32BIT)
180 #define OPTYPE_REG_R10 (OPTYPE_BASE_REG_GENERIC_R10|OPTYPE_BASE_REG_64BIT)
181 #define OPTYPE_REG_R11B (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_8BIT_LOW)
182 #define OPTYPE_REG_R11W (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_16BIT)
183 #define OPTYPE_REG_R11D (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_32BIT)
184 #define OPTYPE_REG_R11 (OPTYPE_BASE_REG_GENERIC_R11|OPTYPE_BASE_REG_64BIT)
185 #define OPTYPE_REG_R12B (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_8BIT_LOW)
186 #define OPTYPE_REG_R12W (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_16BIT)
187 #define OPTYPE_REG_R12D (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_32BIT)
188 #define OPTYPE_REG_R12 (OPTYPE_BASE_REG_GENERIC_R12|OPTYPE_BASE_REG_64BIT)
189 #define OPTYPE_REG_R13B (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_8BIT_LOW)
190 #define OPTYPE_REG_R13W (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_16BIT)
191 #define OPTYPE_REG_R13D (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_32BIT)
192 #define OPTYPE_REG_R13 (OPTYPE_BASE_REG_GENERIC_R13|OPTYPE_BASE_REG_64BIT)
193 #define OPTYPE_REG_R14B (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_8BIT_LOW)
194 #define OPTYPE_REG_R14W (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_16BIT)
195 #define OPTYPE_REG_R14D (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_32BIT)
196 #define OPTYPE_REG_R14 (OPTYPE_BASE_REG_GENERIC_R14|OPTYPE_BASE_REG_64BIT)
197 #define OPTYPE_REG_R15B (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_8BIT_LOW)
198 #define OPTYPE_REG_R15W (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_16BIT)
199 #define OPTYPE_REG_R15D (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_32BIT)
200 #define OPTYPE_REG_R15 (OPTYPE_BASE_REG_GENERIC_R15|OPTYPE_BASE_REG_64BIT)
202 #define OPTYPE_REG_FPU_ST0 (0x0000|OPTYPE_BASE_REG_FPU)
203 #define OPTYPE_REG_FPU_ST1 (0x0100|OPTYPE_BASE_REG_FPU)
204 #define OPTYPE_REG_FPU_ST2 (0x0200|OPTYPE_BASE_REG_FPU)
205 #define OPTYPE_REG_FPU_ST3 (0x0300|OPTYPE_BASE_REG_FPU)
206 #define OPTYPE_REG_FPU_ST4 (0x0400|OPTYPE_BASE_REG_FPU)
207 #define OPTYPE_REG_FPU_ST5 (0x0500|OPTYPE_BASE_REG_FPU)
208 #define OPTYPE_REG_FPU_ST6 (0x0600|OPTYPE_BASE_REG_FPU)
209 #define OPTYPE_REG_FPU_ST7 (0x0700|OPTYPE_BASE_REG_FPU)
211 #define OPTYPE_REG_ES (0x0000|OPTYPE_BASE_REG_SEGMENT)
212 #define OPTYPE_REG_CS (0x0100|OPTYPE_BASE_REG_SEGMENT)
213 #define OPTYPE_REG_SS (0x0200|OPTYPE_BASE_REG_SEGMENT)
214 #define OPTYPE_REG_DS (0x0300|OPTYPE_BASE_REG_SEGMENT)
215 #define OPTYPE_REG_FS (0x0400|OPTYPE_BASE_REG_SEGMENT)
216 #define OPTYPE_REG_GS (0x0500|OPTYPE_BASE_REG_SEGMENT)
218 #define OPTYPE_REG_CR0 (0x0000|OPTYPE_BASE_REG_CONTROL)
219 #define OPTYPE_REG_CR1 (0x0100|OPTYPE_BASE_REG_CONTROL)
220 #define OPTYPE_REG_CR2 (0x0200|OPTYPE_BASE_REG_CONTROL)
221 #define OPTYPE_REG_CR3 (0x0300|OPTYPE_BASE_REG_CONTROL)
222 #define OPTYPE_REG_CR4 (0x0400|OPTYPE_BASE_REG_CONTROL)
223 #define OPTYPE_REG_CR5 (0x0500|OPTYPE_BASE_REG_CONTROL)
224 #define OPTYPE_REG_CR6 (0x0600|OPTYPE_BASE_REG_CONTROL)
225 #define OPTYPE_REG_CR7 (0x0700|OPTYPE_BASE_REG_CONTROL)
226 #define OPTYPE_REG_CR8 (0x0800|OPTYPE_BASE_REG_CONTROL)
227 #define OPTYPE_REG_CR9 (0x0900|OPTYPE_BASE_REG_CONTROL)
228 #define OPTYPE_REG_CR10 (0x0a00|OPTYPE_BASE_REG_CONTROL)
229 #define OPTYPE_REG_CR11 (0x0b00|OPTYPE_BASE_REG_CONTROL)
230 #define OPTYPE_REG_CR12 (0x0c00|OPTYPE_BASE_REG_CONTROL)
231 #define OPTYPE_REG_CR13 (0x0d00|OPTYPE_BASE_REG_CONTROL)
232 #define OPTYPE_REG_CR14 (0x0e00|OPTYPE_BASE_REG_CONTROL)
233 #define OPTYPE_REG_CR15 (0x0f00|OPTYPE_BASE_REG_CONTROL)
235 #define OPTYPE_REG_DR0 (0x0000|OPTYPE_BASE_REG_DEBUG)
236 #define OPTYPE_REG_DR1 (0x0100|OPTYPE_BASE_REG_DEBUG)
237 #define OPTYPE_REG_DR2 (0x0200|OPTYPE_BASE_REG_DEBUG)
238 #define OPTYPE_REG_DR3 (0x0300|OPTYPE_BASE_REG_DEBUG)
239 #define OPTYPE_REG_DR4 (0x0400|OPTYPE_BASE_REG_DEBUG)
240 #define OPTYPE_REG_DR5 (0x0500|OPTYPE_BASE_REG_DEBUG)
241 #define OPTYPE_REG_DR6 (0x0600|OPTYPE_BASE_REG_DEBUG)
242 #define OPTYPE_REG_DR7 (0x0700|OPTYPE_BASE_REG_DEBUG)
243 #define OPTYPE_REG_DR8 (0x0800|OPTYPE_BASE_REG_DEBUG)
244 #define OPTYPE_REG_DR9 (0x0900|OPTYPE_BASE_REG_DEBUG)
245 #define OPTYPE_REG_DR10 (0x0a00|OPTYPE_BASE_REG_DEBUG)
246 #define OPTYPE_REG_DR11 (0x0b00|OPTYPE_BASE_REG_DEBUG)
247 #define OPTYPE_REG_DR12 (0x0c00|OPTYPE_BASE_REG_DEBUG)
248 #define OPTYPE_REG_DR13 (0x0d00|OPTYPE_BASE_REG_DEBUG)
249 #define OPTYPE_REG_DR14 (0x0e00|OPTYPE_BASE_REG_DEBUG)
250 #define OPTYPE_REG_DR15 (0x0f00|OPTYPE_BASE_REG_DEBUG)
252 #define OPTYPE_REG_MMX0 (0x0000|OPTYPE_BASE_REG_MMX)
253 #define OPTYPE_REG_MMX1 (0x0100|OPTYPE_BASE_REG_MMX)
254 #define OPTYPE_REG_MMX2 (0x0200|OPTYPE_BASE_REG_MMX)
255 #define OPTYPE_REG_MMX3 (0x0300|OPTYPE_BASE_REG_MMX)
256 #define OPTYPE_REG_MMX4 (0x0400|OPTYPE_BASE_REG_MMX)
257 #define OPTYPE_REG_MMX5 (0x0500|OPTYPE_BASE_REG_MMX)
258 #define OPTYPE_REG_MMX6 (0x0600|OPTYPE_BASE_REG_MMX)
259 #define OPTYPE_REG_MMX7 (0x0700|OPTYPE_BASE_REG_MMX)
261 #define OPTYPE_REG_SSE0 (0x0000|OPTYPE_BASE_REG_SSE)
262 #define OPTYPE_REG_SSE1 (0x0100|OPTYPE_BASE_REG_SSE)
263 #define OPTYPE_REG_SSE2 (0x0200|OPTYPE_BASE_REG_SSE)
264 #define OPTYPE_REG_SSE3 (0x0300|OPTYPE_BASE_REG_SSE)
265 #define OPTYPE_REG_SSE4 (0x0400|OPTYPE_BASE_REG_SSE)
266 #define OPTYPE_REG_SSE5 (0x0500|OPTYPE_BASE_REG_SSE)
267 #define OPTYPE_REG_SSE6 (0x0600|OPTYPE_BASE_REG_SSE)
268 #define OPTYPE_REG_SSE7 (0x0700|OPTYPE_BASE_REG_SSE)
269 #define OPTYPE_REG_SSE8 (0x0800|OPTYPE_BASE_REG_SSE)
270 #define OPTYPE_REG_SSE9 (0x0900|OPTYPE_BASE_REG_SSE)
271 #define OPTYPE_REG_SSE10 (0x0a00|OPTYPE_BASE_REG_SSE)
272 #define OPTYPE_REG_SSE11 (0x0b00|OPTYPE_BASE_REG_SSE)
273 #define OPTYPE_REG_SSE12 (0x0c00|OPTYPE_BASE_REG_SSE)
274 #define OPTYPE_REG_SSE13 (0x0d00|OPTYPE_BASE_REG_SSE)
275 #define OPTYPE_REG_SSE14 (0x0e00|OPTYPE_BASE_REG_SSE)
276 #define OPTYPE_REG_SSE15 (0x0f00|OPTYPE_BASE_REG_SSE)
278 #define OPTYPE_REG_RIP (0x0100|OPTYPE_BASE_REG_OTHER|OPTYPE_BASE_REG_64BIT)
279 #define OPTYPE_REG_INVAILD (0x0fff|OPTYPE_BASE_REG_OTHER)
282 Bit 14: ModR/M = 1, Immediate = 0
283 Bit 13: [ModR/M] Field Mod
284 Bit 12: [ModR/M] Field reg
285 Bit 11: [ModR/M] Field R/M
286 Bit 10: Memory Address
289 Bit 7: General Register
290 Bit 6: Segment Register
291 Bit 5: Debug Register
292 Bit 4: Control Register
293 Bit 3: Packed-QuadWord MMX Register
294 Bit 2: 128bit XMM Register
295 Bit 1: Others Register
298 #define OPTYPE_BASE_DATA_MODRM 0x4000|OPTYPE_BASE_DATA
299 #define OPTYPE_BASE_DATA_IMMEDIATE 0x0000|OPTYPE_BASE_DATA
301 #define OPTYPE_BASE_DATA_MODRM_FLD_MOD 0x2000|OPTYPE_BASE_DATA_MODRM
302 #define OPTYPE_BASE_DATA_MODRM_FLD_REG 0x1000|OPTYPE_BASE_DATA_MODRM
303 #define OPTYPE_BASE_DATA_MODRM_FLD_RM 0x0800|OPTYPE_BASE_DATA_MODRM
304 #define OPTYPE_BASE_DATA_MODRM_FLD_FULL 0x3800|OPTYPE_BASE_DATA_MODRM
305 #define OPTYPE_BASE_DATA_MODRM_MEMORY 0x0400|OPTYPE_BASE_DATA_MODRM
307 #define OPTYPE_BASE_DATA_MODRM_REG_GENERAL 0x0080
308 #define OPTYPE_BASE_DATA_MODRM_REG_SEGMENT 0x0040
309 #define OPTYPE_BASE_DATA_MODRM_REG_DEBUG 0x0020
310 #define OPTYPE_BASE_DATA_MODRM_REG_CONTROL 0x0010
311 #define OPTYPE_BASE_DATA_MODRM_REG_PQMMX 0x0008
312 #define OPTYPE_BASE_DATA_MODRM_REG_128XMM 0x0004
313 #define OPTYPE_BASE_DATA_MODRM_REG_OTHER 0x0002
314 #define OPTYPE_BASE_DATA_MODRM_REG_FULL 0x00fe
316 #define OPTYPE_REG_RAX_STR "rax"
317 #define OPTYPE_REG_EAX_STR "eax"
318 #define OPTYPE_REG_AX_STR "ax"
319 #define OPTYPE_REG_AH_STR "ah"
320 #define OPTYPE_REG_AL_STR "al"
321 #define OPTYPE_REG_RCX_STR "rcx"
322 #define OPTYPE_REG_ECX_STR "ecx"
323 #define OPTYPE_REG_CX_STR "cx"
324 #define OPTYPE_REG_CH_STR "ch"
325 #define OPTYPE_REG_CL_STR "cl"
326 #define OPTYPE_REG_RDX_STR "rdx"
327 #define OPTYPE_REG_EDX_STR "edx"
328 #define OPTYPE_REG_DX_STR "dx"
329 #define OPTYPE_REG_DH_STR "dh"
330 #define OPTYPE_REG_DL_STR "dl"
331 #define OPTYPE_REG_RBX_STR "rbx"
332 #define OPTYPE_REG_EBX_STR "ebx"
333 #define OPTYPE_REG_BX_STR "bx"
334 #define OPTYPE_REG_BH_STR "bh"
335 #define OPTYPE_REG_BL_STR "bl"
336 #define OPTYPE_REG_RSP_STR "rsp"
337 #define OPTYPE_REG_ESP_STR "esp"
338 #define OPTYPE_REG_SP_STR "sp"
339 #define OPTYPE_REG_RBP_STR "rbp"
340 #define OPTYPE_REG_EBP_STR "ebp"
341 #define OPTYPE_REG_BP_STR "bp"
342 #define OPTYPE_REG_RSI_STR "rsi"
343 #define OPTYPE_REG_ESI_STR "esi"
344 #define OPTYPE_REG_SI_STR "si"
345 #define OPTYPE_REG_RDI_STR "rdi"
346 #define OPTYPE_REG_EDI_STR "edi"
347 #define OPTYPE_REG_DI_STR "di"
348 #define OPTYPE_REG_R8B_STR "r8l"
349 #define OPTYPE_REG_R8W_STR "r8w"
350 #define OPTYPE_REG_R8D_STR "r8d"
351 #define OPTYPE_REG_R8_STR "r8"
352 #define OPTYPE_REG_R9B_STR "r9l"
353 #define OPTYPE_REG_R9W_STR "r9w"
354 #define OPTYPE_REG_R9D_STR "r9d"
355 #define OPTYPE_REG_R9_STR "r9"
356 #define OPTYPE_REG_R10B_STR "r10l"
357 #define OPTYPE_REG_R10W_STR "r10w"
358 #define OPTYPE_REG_R10D_STR "r10d"
359 #define OPTYPE_REG_R10_STR "r10"
360 #define OPTYPE_REG_R11B_STR "r11l"
361 #define OPTYPE_REG_R11W_STR "r11w"
362 #define OPTYPE_REG_R11D_STR "r11d"
363 #define OPTYPE_REG_R11_STR "r11"
364 #define OPTYPE_REG_R12B_STR "r12l"
365 #define OPTYPE_REG_R12W_STR "r12w"
366 #define OPTYPE_REG_R12D_STR "r12d"
367 #define OPTYPE_REG_R12_STR "r12"
368 #define OPTYPE_REG_R13B_STR "r13l"
369 #define OPTYPE_REG_R13W_STR "r13w"
370 #define OPTYPE_REG_R13D_STR "r13d"
371 #define OPTYPE_REG_R13_STR "r13"
372 #define OPTYPE_REG_R14B_STR "r14l"
373 #define OPTYPE_REG_R14W_STR "r14w"
374 #define OPTYPE_REG_R14D_STR "r14d"
375 #define OPTYPE_REG_R14_STR "r14"
376 #define OPTYPE_REG_R15B_STR "r15l"
377 #define OPTYPE_REG_R15W_STR "r15w"
378 #define OPTYPE_REG_R15D_STR "r15d"
379 #define OPTYPE_REG_R15_STR "r15"
380 #define OPTYPE_REG_CS_STR "cs"
381 #define OPTYPE_REG_DS_STR "ds"
382 #define OPTYPE_REG_ES_STR "es"
383 #define OPTYPE_REG_SS_STR "ss"
384 #define OPTYPE_REG_FS_STR "fs"
385 #define OPTYPE_REG_GS_STR "gs"
386 #define OPTYPE_REG_RIP_STR "rip"
388 #define OPTYPE_REG_FPU_ST0_STR "st0"
389 #define OPTYPE_REG_FPU_ST1_STR "st1"
390 #define OPTYPE_REG_FPU_ST2_STR "st2"
391 #define OPTYPE_REG_FPU_ST3_STR "st3"
392 #define OPTYPE_REG_FPU_ST4_STR "st4"
393 #define OPTYPE_REG_FPU_ST5_STR "st5"
394 #define OPTYPE_REG_FPU_ST6_STR "st6"
395 #define OPTYPE_REG_FPU_ST7_STR "st7"
397 #define OPTYPE_REG_CR0_STR "cr0"
398 #define OPTYPE_REG_CR1_STR "cr1"
399 #define OPTYPE_REG_CR2_STR "cr2"
400 #define OPTYPE_REG_CR3_STR "cr3"
401 #define OPTYPE_REG_CR4_STR "cr4"
402 #define OPTYPE_REG_CR5_STR "cr5"
403 #define OPTYPE_REG_CR6_STR "cr6"
404 #define OPTYPE_REG_CR7_STR "cr7"
405 #define OPTYPE_REG_CR8_STR "cr8"
406 #define OPTYPE_REG_CR9_STR "cr9"
407 #define OPTYPE_REG_CR10_STR "cr10"
408 #define OPTYPE_REG_CR11_STR "cr11"
409 #define OPTYPE_REG_CR12_STR "cr12"
410 #define OPTYPE_REG_CR13_STR "cr13"
411 #define OPTYPE_REG_CR14_STR "cr14"
412 #define OPTYPE_REG_CR15_STR "cr15"
414 #define OPTYPE_REG_DR0_STR "dr0"
415 #define OPTYPE_REG_DR1_STR "dr1"
416 #define OPTYPE_REG_DR2_STR "dr2"
417 #define OPTYPE_REG_DR3_STR "dr3"
418 #define OPTYPE_REG_DR4_STR "dr4"
419 #define OPTYPE_REG_DR5_STR "dr5"
420 #define OPTYPE_REG_DR6_STR "dr6"
421 #define OPTYPE_REG_DR7_STR "dr7"
422 #define OPTYPE_REG_DR8_STR "dr8"
423 #define OPTYPE_REG_DR9_STR "dr9"
424 #define OPTYPE_REG_DR10_STR "dr10"
425 #define OPTYPE_REG_DR11_STR "dr11"
426 #define OPTYPE_REG_DR12_STR "dr12"
427 #define OPTYPE_REG_DR13_STR "dr13"
428 #define OPTYPE_REG_DR14_STR "dr14"
429 #define OPTYPE_REG_DR15_STR "dr15"
431 #define OPTYPE_REG_MMX0_STR "mm0"
432 #define OPTYPE_REG_MMX1_STR "mm1"
433 #define OPTYPE_REG_MMX2_STR "mm2"
434 #define OPTYPE_REG_MMX3_STR "mm3"
435 #define OPTYPE_REG_MMX4_STR "mm4"
436 #define OPTYPE_REG_MMX5_STR "mm5"
437 #define OPTYPE_REG_MMX6_STR "mm6"
438 #define OPTYPE_REG_MMX7_STR "mm7"
440 #define OPTYPE_REG_SSE0_STR "xmm0"
441 #define OPTYPE_REG_SSE1_STR "xmm1"
442 #define OPTYPE_REG_SSE2_STR "xmm2"
443 #define OPTYPE_REG_SSE3_STR "xmm3"
444 #define OPTYPE_REG_SSE4_STR "xmm4"
445 #define OPTYPE_REG_SSE5_STR "xmm5"
446 #define OPTYPE_REG_SSE6_STR "xmm6"
447 #define OPTYPE_REG_SSE7_STR "xmm7"
448 #define OPTYPE_REG_SSE8_STR "xmm8"
449 #define OPTYPE_REG_SSE9_STR "xmm9"
450 #define OPTYPE_REG_SSE10_STR "xmm10"
451 #define OPTYPE_REG_SSE11_STR "xmm11"
452 #define OPTYPE_REG_SSE12_STR "xmm12"
453 #define OPTYPE_REG_SSE13_STR "xmm13"
454 #define OPTYPE_REG_SSE14_STR "xmm14"
455 #define OPTYPE_REG_SSE15_STR "xmm15"
457 /* C : [ModR/M:reg] Control Reg. */
458 #define OPTYPE_DATA_METHOD_C (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_CONTROL)
459 /* D : [ModR/M:reg] Debug Reg. */
460 #define OPTYPE_DATA_METHOD_D (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_DEBUG)
461 /* G : [ModR/M:reg] General Reg. */
462 #define OPTYPE_DATA_METHOD_G (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_GENERAL)
463 /* P : [ModR/M:reg] Packed-QuadWord MMX Reg. */
464 #define OPTYPE_DATA_METHOD_P (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_PQMMX)
465 /* S : [ModR/M:reg] Segment Reg. */
466 #define OPTYPE_DATA_METHOD_S (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_SEGMENT)
467 /* T : [ModR/M:reg] Test Reg. ( Reserved ) */
468 #define OPTYPE_DATA_METHOD_T (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_OTHER)
469 /* V : [ModR/M:reg] 128bit XMM Reg. */
470 #define OPTYPE_DATA_METHOD_V (OPTYPE_BASE_DATA_MODRM_FLD_REG|OPTYPE_BASE_DATA_MODRM_REG_128XMM)
471 /* N : [ModR/M:R/M] Packed-QuadWord MMX Reg. */
472 #define OPTYPE_DATA_METHOD_N (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_PQMMX)
473 /* R : [ModR/M:R/M] refer to General Reg by R/M Field */
474 #define OPTYPE_DATA_METHOD_R (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_GENERAL)
475 /* U : [ModR/M:R/M] 128bit XMM Reg. */
476 #define OPTYPE_DATA_METHOD_U (OPTYPE_BASE_DATA_MODRM_FLD_RM|OPTYPE_BASE_DATA_MODRM_REG_128XMM)
477 /* E : [ModR/M] Memory & Reg. */
478 #define OPTYPE_DATA_METHOD_E (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_FULL|OPTYPE_BASE_DATA_MODRM_MEMORY)
479 /* W : [ModR/M] 128bit XMM Reg. or Memory Address
480 ( Memory Address calculated by Seg.Reg. BaseReg. IndexReg.
481 ScalingFactor, Displacement */
482 #define OPTYPE_DATA_METHOD_W (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_128XMM|OPTYPE_BASE_DATA_MODRM_MEMORY)
483 /* Q : [ModR/M] MMX reg. or Memory Address
484 ( Memory Address calced by Seg.Reg, BaseReg. IndexReg.
485 ScalingFactor, Displacement */
486 #define OPTYPE_DATA_METHOD_Q (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_REG_PQMMX|OPTYPE_BASE_DATA_MODRM_MEMORY)
487 /* M : Memory Access (by ModR/M) (NO!!: Reg. Indicate by ModR/M) */
488 #define OPTYPE_DATA_METHOD_M (OPTYPE_BASE_DATA_MODRM_FLD_FULL|OPTYPE_BASE_DATA_MODRM_MEMORY)
490 #define OPTYPE_BASE_DATA_IMMEDIATE_MEMSIZE 0x0800|OPTYPE_BASE_DATA_IMMEDIATE
491 #define OPTYPE_BASE_DATA_IMMEDIATE_OPERATOR 0x0400|OPTYPE_BASE_DATA_IMMEDIATE
492 #define OPTYPE_BASE_DATA_IMMEDIATE_DATA 0x0200|OPTYPE_BASE_DATA_IMMEDIATE
493 #define OPTYPE_BASE_DATA_IMMEDIATE_IMM 0x0100|OPTYPE_BASE_DATA_IMMEDIATE
494 #define OPTYPE_BASE_DATA_IMMEDIATE_NONE 0x0000|OPTYPE_BASE_DATA_IMMEDIATE
496 /* A : Direct Address (NO!!: ModR/M, BaseReg, IndexReg, ScalingFactor) */
497 #define OPTYPE_DATA_METHOD_A (0x0010|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
498 /* I : Immediate Data (NO!!: ModR/M) */
499 #define OPTYPE_DATA_METHOD_I (0x0020|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
500 /* J : IP relative Address (NO!!: ModR/M) */
501 #define OPTYPE_DATA_METHOD_J (0x0030|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
502 /* O : Word of DWord Data (NO!!: ModR/M, BaseReg. IndexReg, ScalingFactor */
503 #define OPTYPE_DATA_METHOD_O (0x0040|OPTYPE_BASE_DATA_IMMEDIATE_DATA)
504 /* F : EFLAGS / RFLAGS Reg. (NO!!: ModR/M) */
505 #define OPTYPE_DATA_METHOD_F (0x0010|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
506 /* X : DS:rSI (Memory Address) */
507 #define OPTYPE_DATA_METHOD_X (0x0020|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
508 /* Y : ES:rDI (Memory Address) */
509 #define OPTYPE_DATA_METHOD_Y (0x0030|OPTYPE_BASE_DATA_IMMEDIATE_NONE)
511 /* 1 : 0x01 Data (Immediate Data) */
512 #define OPTYPE_DATA_METHOD_1 (0x0001|OPTYPE_BASE_DATA_IMMEDIATE_IMM)
513 /* - : Illegal Instruction by DrDeamon64 Assembler System */
514 #define OPTYPE_DATA_METHOD_ILLEGAL (0x00ff|OPTYPE_BASE_DATA_IMMEDIATE_IMM)
519 #define OPSIZE_BASE_SIZE_BYTE 0x0001
520 #define OPSIZE_BASE_SIZE_WORD 0x0002
521 #define OPSIZE_BASE_SIZE_DWORD 0x0004
522 #define OPSIZE_BASE_SIZE_QWORD 0x0008
523 #define OPSIZE_BASE_SIZE_DQWORD 0x0010
524 #define OPSIZE_BASE_FLOAT 0x0040
525 #define OPSIZE_BASE_DOUBLE 0x0080
526 #define OPSIZE_BASE_ILLEGAL 0x00ff
528 #define OPSIZE_BASE_ATTR_DEPENDON 0x2000
529 #define OPSIZE_BASE_ATTR_REGARDLESS 0x0000
530 #define OPSIZE_BASE_ADDRESS 0x4000
531 #define OPSIZE_BASE_SPECIAL 0x8000
532 #define OPSIZE_BASE_PACKED 0x1000
533 #define OPSIZE_BASE_SCALAR 0x0800
536 /* b : Byte (Regardless Operand Size Attribute) */
537 #define OPSIZE_B (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_BYTE)
538 /* w : Word (Regardless Operand Size Attribute) */
539 #define OPSIZE_W (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_WORD)
540 /* d : DWord (Regardless Operand Size Attribute) */
541 #define OPSIZE_D (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_DWORD)
542 /* q : QuadWord(64bit) (Regardless Operand Size Attribute) */
543 #define OPSIZE_Q (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_QWORD)
544 /* dq : Double QuadWord(128Bit) (Regardless Operand Size Attribute) */
545 #define OPSIZE_DQ (OPSIZE_BASE_ATTR_REGARDLESS|OPSIZE_BASE_SIZE_DQWORD)
546 /* h : Memory Pointer for 94/108bit */
547 #define OPSIZE_H (OPSIZE_BASE_ADDRESS)
548 /* p : Memory Pointer for 32bit or 48bit (depend on Operand Size Attribute) */
549 #define OPSIZE_P (OPSIZE_BASE_ADDRESS|OPSIZE_BASE_ATTR_DEPENDON)
550 /* r : Memory Pointer for 14bit / 28bit */
551 #define OPSIZE_R (OPSIZE_BASE_ADDRESS)
552 /* t : Memory Pointer for 80bit */
553 #define OPSIZE_T (OPSIZE_BASE_ADDRESS)
554 /* pd : 128bit Packed double-float Data */
555 #define OPSIZE_PD (OPSIZE_BASE_PACKED|OPSIZE_BASE_DOUBLE|OPSIZE_BASE_SIZE_DQWORD)
556 /* ps : 128bit Packed float Data */
557 #define OPSIZE_PS (OPSIZE_BASE_PACKED|OPSIZE_BASE_FLOAT|OPSIZE_BASE_SIZE_DQWORD)
558 /* sd : Scalar Element of 128bit Packed Double-float Data */
559 #define OPSIZE_SD (OPSIZE_BASE_PACKED|OPSIZE_BASE_SCALAR|OPSIZE_BASE_DOUBLE|OPSIZE_BASE_SIZE_DQWORD)
560 /* ss : Scalar Element of 128bit Packed float Data */
561 #define OPSIZE_SS (OPSIZE_BASE_PACKED|OPSIZE_BASE_SCALAR|OPSIZE_BASE_FLOAT|OPSIZE_BASE_SIZE_DQWORD)
562 /* s : 6Byte or 10 Byte Pseudo Descriptor */
563 #define OPSIZE_S (OPSIZE_BASE_SPECIAL|0x0001)
564 /* v : Word, DWord, QuadWord(64bit-ModeOnly) (Depend On Operand Size Attribute)*/
565 #define OPSIZE_V (OPSIZE_BASE_ATTR_DEPENDON|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD|OPSIZE_BASE_SIZE_QWORD)
566 /* z : Word(16bit Operand Size) or DWord(32/64 Operand Size) */
567 #define OPSIZE_Z (OPSIZE_BASE_ATTR_DEPENDON|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD)
568 /* a : 2 Word or 2 DWord in Memory ( for BOUND ) */
569 #define OPSIZE_A (OPSIZE_BASE_ADDRESS|OPSIZE_BASE_SIZE_WORD|OPSIZE_BASE_SIZE_DWORD)
571 #define OPSIZE_ILLEGAL (OPSIZE_BASE_ILLEGAL)
575 #define isRegType(m,n) (((Word)(((Word)(m))&(OPTYPE_BASE_REG_TYPEMASK)))==(n))
576 #define isRegID(m,n) (((Word)(((Word)(m))&(OPTYPE_BASE_REG_IDMASK)))==(n))
577 #define isRegGenericID(m,n) (((Word)(((Word)(m))&(OPTYPE_BASE_REG_GENERIC_IDMASK)))==(n))
578 #define isRegSize(m,n) (((Word)(((Word)(m))&(OPTYPE_BASE_REG_SIZEMASK)))==(n))
581 #endif /* DRD64_HEADER_INTEL64_DBTYPE */
583 /* EOF of drd64_intel64_dbtype.h ----------------------------------- */