VirtualBox

source: vbox/trunk/include/VBox/disopcode-x86-amd64.h@ 106061

Last change on this file since 106061 was 106061, checked in by vboxsync, 2 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 35.8 KB
Line 
1/** @file
2 * Disassembler - Opcodes
3 */
4
5/*
6 * Copyright (C) 2006-2024 Oracle and/or its affiliates.
7 *
8 * This file is part of VirtualBox base platform packages, as
9 * available from https://www.virtualbox.org.
10 *
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation, in version 3 of the
14 * License.
15 *
16 * This program is distributed in the hope that it will be useful, but
17 * WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses>.
23 *
24 * The contents of this file may alternatively be used under the terms
25 * of the Common Development and Distribution License Version 1.0
26 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
27 * in the VirtualBox distribution, in which case the provisions of the
28 * CDDL are applicable instead of those of the GPL.
29 *
30 * You may elect to license modified versions of this file under the
31 * terms and conditions of either the GPL or the CDDL or both.
32 *
33 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
34 */
35
36#ifndef VBOX_INCLUDED_disopcode_x86_amd64_h
37#define VBOX_INCLUDED_disopcode_x86_amd64_h
38#ifndef RT_WITHOUT_PRAGMA_ONCE
39# pragma once
40#endif
41
42#include <iprt/assert.h>
43
44#define MODRM_MOD(a) (a>>6)
45#define MODRM_REG(a) ((a>>3)&0x7)
46#define MODRM_RM(a) (a&0x7)
47#define MAKE_MODRM(mod, reg, rm) (((mod&3) << 6) | ((reg&7) << 3) | (rm&7))
48
49#define SIB_SCALE(a) (a>>6)
50#define SIB_INDEX(a) ((a>>3)&0x7)
51#define SIB_BASE(a) (a&0x7)
52
53
54/** @defgroup grp_dis_opcodes Opcodes (DISOPCODEX86::uOpCode)
55 * @ingroup grp_dis
56 * @{
57 */
58enum OPCODESX86
59{
60/** @name Full Intel X86 opcode list
61 * @{ */
62 OP_INVALID = 0,
63 OP_OPSIZE,
64 OP_ADDRSIZE,
65 OP_SEG,
66 OP_REPNE,
67 OP_REPE,
68 OP_REX,
69 OP_LOCK,
70#ifndef IN_SLICKEDIT
71 OP_LAST_PREFIX = OP_LOCK, /**< Last prefix for disassembler. */
72#else
73 OP_LAST_PREFIX = 7, /**< Last prefix for disassembler. */
74#endif
75 OP_AND,
76 OP_OR,
77 OP_DAA,
78 OP_SUB,
79 OP_DAS,
80 OP_XOR,
81 OP_AAA,
82 OP_CMP,
83 OP_IMM_GRP1,
84 OP_AAS,
85 OP_INC,
86 OP_DEC,
87 OP_PUSHA,
88 OP_POPA,
89 OP_BOUND,
90 OP_ARPL,
91 OP_PUSH,
92 OP_POP,
93 OP_IMUL,
94 OP_INSB,
95 OP_INSWD,
96 OP_OUTSB,
97 OP_OUTSWD,
98 OP_JO,
99 OP_JNO,
100 OP_JC,
101 OP_JNC,
102 OP_JE,
103 OP_JNE,
104 OP_JBE,
105 OP_JNBE,
106 OP_JS,
107 OP_JNS,
108 OP_JP,
109 OP_JNP,
110 OP_JL,
111 OP_JNL,
112 OP_JLE,
113 OP_JNLE,
114 OP_ADD,
115 OP_TEST,
116 OP_XCHG,
117 OP_MOV,
118 OP_LEA,
119 OP_NOP,
120 OP_CBW,
121 OP_CWD,
122 OP_CALL,
123 OP_WAIT,
124 OP_PUSHF,
125 OP_POPF,
126 OP_SAHF,
127 OP_LAHF,
128 OP_MOVSB,
129 OP_MOVSWD,
130 OP_CMPSB,
131 OP_CMPWD,
132 OP_STOSB,
133 OP_STOSWD,
134 OP_LODSB,
135 OP_LODSWD,
136 OP_SCASB,
137 OP_SCASWD,
138 OP_SHIFT_GRP2,
139 OP_RETN,
140 OP_LES,
141 OP_LDS,
142 OP_ENTER,
143 OP_LEAVE,
144 OP_RETF,
145 OP_INT1,
146 OP_INT3,
147 OP_INT,
148 OP_INTO,
149 OP_IRET,
150 OP_AAM,
151 OP_AAD,
152 OP_SALC,
153 OP_XLAT,
154 OP_ESCF0,
155 OP_ESCF1,
156 OP_ESCF2,
157 OP_ESCF3,
158 OP_ESCF4,
159 OP_ESCF5,
160 OP_ESCF6,
161 OP_ESCF7,
162 OP_LOOPNE,
163 OP_LOOPE,
164 OP_LOOP,
165 OP_JECXZ,
166 OP_IN,
167 OP_OUT,
168 OP_JMP,
169 OP_2B_ESC,
170 OP_ADC,
171 OP_SBB,
172 OP_HLT,
173 OP_CMC,
174 OP_UNARY_GRP3,
175 OP_CLC,
176 OP_STC,
177 OP_CLI,
178 OP_STI,
179 OP_CLD,
180 OP_STD,
181 OP_CLAC,
182 OP_STAC,
183 OP_INC_GRP4,
184 OP_IND_GRP5,
185 OP_GRP6,
186 OP_GRP7,
187 OP_LAR,
188 OP_LSL,
189 OP_SYSCALL,
190 OP_CLTS,
191 OP_SYSRET,
192 OP_INVD,
193 OP_WBINVD,
194 OP_ILLUD2,
195 OP_FEMMS,
196 OP_3DNOW,
197 OP_MOVUPS,
198 OP_MOVLPS,
199 OP_MOVHLPS = OP_MOVLPS, /**< @todo OP_MOVHLPS */
200 OP_UNPCKLPS,
201 OP_MOVHPS,
202 OP_MOVLHPS = OP_MOVHPS, /**< @todo OP_MOVLHPS */
203 OP_UNPCKHPS,
204 OP_PREFETCH_GRP16,
205 OP_MOV_CR,
206 OP_MOVAPS,
207 OP_CVTPI2PS,
208 OP_MOVNTPS,
209 OP_CVTTPS2PI,
210 OP_CVTPS2PI,
211 OP_UCOMISS,
212 OP_COMISS,
213 OP_WRMSR,
214 OP_RDTSC,
215 OP_RDTSCP,
216 OP_RDMSR,
217 OP_RDPMC,
218 OP_SYSENTER,
219 OP_SYSEXIT,
220 OP_GETSEC,
221 OP_PAUSE,
222 OP_CMOVO,
223 OP_CMOVNO,
224 OP_CMOVC,
225 OP_CMOVNC,
226 OP_CMOVZ,
227 OP_CMOVNZ,
228 OP_CMOVBE,
229 OP_CMOVNBE,
230 OP_CMOVS,
231 OP_CMOVNS,
232 OP_CMOVP,
233 OP_CMOVNP,
234 OP_CMOVL,
235 OP_CMOVNL,
236 OP_CMOVLE,
237 OP_CMOVNLE,
238 OP_MOVMSKPS,
239 OP_SQRTPS,
240 OP_RSQRTPS,
241 OP_RCPPS,
242 OP_ANDPS,
243 OP_ANDNPS,
244 OP_ORPS,
245 OP_XORPS,
246 OP_ADDPS,
247 OP_MULPS,
248 OP_CVTPS2PD,
249 OP_CVTDQ2PS,
250 OP_SUBPS,
251 OP_MINPS,
252 OP_DIVPS,
253 OP_MAXPS,
254 OP_PUNPCKLBW,
255 OP_PUNPCKLWD,
256 OP_PUNPCKLDQ,
257 OP_PACKSSWB,
258 OP_PCMPGTB,
259 OP_PCMPGTW,
260 OP_PCMPGTD,
261 OP_PCMPGTQ,
262 OP_PACKUSWB,
263 OP_PUNPCKHBW,
264 OP_PUNPCKHWD,
265 OP_PUNPCKHDQ,
266 OP_PACKSSDW,
267 OP_MOVD,
268 OP_MOVQ,
269 OP_PSHUFW,
270 OP_3B_ESC4,
271 OP_3B_ESC5,
272 OP_PCMPEQB,
273 OP_PCMPEQW,
274 OP_PCMPEQD,
275 OP_PCMPEQQ,
276 OP_SETO,
277 OP_SETNO,
278 OP_SETC,
279 OP_SETNC,
280 OP_SETE,
281 OP_SETNE,
282 OP_SETBE,
283 OP_SETNBE,
284 OP_SETS,
285 OP_SETNS,
286 OP_SETP,
287 OP_SETNP,
288 OP_SETL,
289 OP_SETNL,
290 OP_SETLE,
291 OP_SETNLE,
292 OP_CPUID,
293 OP_BT,
294 OP_SHLD,
295 OP_RSM,
296 OP_BTS,
297 OP_SHRD,
298 OP_GRP15,
299 OP_CMPXCHG,
300 OP_LSS,
301 OP_BTR,
302 OP_LFS,
303 OP_LGS,
304 OP_MOVZX,
305 OP_GRP10_INV,
306 OP_GRP8,
307 OP_BTC,
308 OP_BSF,
309 OP_BSR,
310 OP_MOVSX,
311 OP_XADD,
312 OP_CMPPS,
313 OP_MOVNTI,
314 OP_PINSRW,
315 OP_PEXTRW,
316 OP_SHUFPS,
317 OP_GRP9,
318 OP_BSWAP,
319 OP_ADDSUBPS,
320 OP_ADDSUBPD,
321 OP_PSRLW,
322 OP_PSRLD,
323 OP_PSRLQ,
324 OP_PADDQ,
325 OP_PMULLW,
326 OP_PMOVMSKB,
327 OP_PSUBUSB,
328 OP_PSUBUSW,
329 OP_PMINUB,
330 OP_PAND,
331 OP_PADDUSB,
332 OP_PADDUSW,
333 OP_PMAXUB,
334 OP_PANDN,
335 OP_PAVGB,
336 OP_PSRAW,
337 OP_PSRAD,
338 OP_PAVGW,
339 OP_PMULHUW,
340 OP_PMULHW,
341 OP_MOVNTQ,
342 OP_PSUBSB,
343 OP_PSUBSW,
344 OP_PMINSW,
345 OP_POR,
346 OP_PADDSB,
347 OP_PADDSW,
348 OP_PMAXSW,
349 OP_PXOR,
350 OP_LDDQU,
351 OP_PSLLW,
352 OP_PSLLD,
353 OP_PSSQ,
354 OP_PMULUDQ,
355 OP_PMADDWD,
356 OP_PSADBW,
357 OP_MASKMOVQ,
358 OP_PSUBB,
359 OP_PSUBW,
360 OP_PSUBD,
361 OP_PSUBQ,
362 OP_PADDB,
363 OP_PADDW,
364 OP_PADDD,
365 OP_MOVUPD,
366 OP_MOVLPD,
367 OP_UNPCKLPD,
368 OP_UNPCKHPD,
369 OP_MOVHPD,
370 OP_MOVAPD,
371 OP_CVTPI2PD,
372 OP_MOVNTPD,
373 OP_CVTTPD2PI,
374 OP_CVTPD2PI,
375 OP_UCOMISD,
376 OP_COMISD,
377 OP_MOVMSKPD,
378 OP_SQRTPD,
379 OP_ANDPD,
380 OP_ANDNPD,
381 OP_ORPD,
382 OP_XORPD,
383 OP_ADDPD,
384 OP_MULPD,
385 OP_CVTPD2PS,
386 OP_CVTPS2DQ,
387 OP_SUBPD,
388 OP_MINPD,
389 OP_DIVPD,
390 OP_MAXPD,
391 OP_GRP12,
392 OP_GRP13,
393 OP_GRP14,
394 OP_GRP17,
395 OP_EMMS,
396 OP_MMX_UD78,
397 OP_MMX_UD79,
398 OP_MMX_UD7A,
399 OP_MMX_UD7B,
400 OP_MMX_UD7C,
401 OP_MMX_UD7D,
402 OP_PUNPCKLQDQ,
403 OP_PUNPCKHQDQ,
404 OP_MOVDQA,
405 OP_PSHUFD,
406 OP_CMPPD,
407 OP_SHUFPD,
408 OP_CVTTPD2DQ,
409 OP_MOVNTDQ,
410 OP_MOVNTDQA,
411 OP_PACKUSDW,
412 OP_PSHUFB,
413 OP_PHADDW,
414 OP_PHADDD,
415 OP_PHADDSW,
416 OP_HADDPS,
417 OP_HADDPD,
418 OP_PMADDUBSW,
419 OP_PHSUBW,
420 OP_PHSUBD,
421 OP_PHSUBSW,
422 OP_HSUBPS,
423 OP_HSUBPD,
424 OP_PSIGNB,
425 OP_PSIGNW,
426 OP_PSIGND,
427 OP_PMULHRSW,
428 OP_PERMILPS,
429 OP_PERMILPD,
430 OP_TESTPS,
431 OP_TESTPD,
432 OP_PBLENDVB,
433 OP_CVTPH2PS,
434 OP_BLENDVPS,
435 OP_BLENDVPD,
436 OP_PERMPS,
437 OP_PERMD,
438 OP_PTEST,
439 OP_BROADCASTSS,
440 OP_BROADCASTSD,
441 OP_BROADCASTF128,
442 OP_PABSB,
443 OP_PABSW,
444 OP_PABSD,
445 OP_PMOVSXBW,
446 OP_PMOVSXBD,
447 OP_PMOVSXBQ,
448 OP_PMOVSXWD,
449 OP_PMOVSXWQ,
450 OP_PMOVSXDQ,
451 OP_PMOVZXBW,
452 OP_PMOVZXBD,
453 OP_PMOVZXBQ,
454 OP_PMOVZXWD,
455 OP_PMOVZXWQ,
456 OP_PMOVZXDQ,
457 OP_PMULDQ,
458 OP_PMINSB,
459 OP_PMINSD,
460 OP_PMINUW,
461 OP_PMINUD,
462 OP_PMAXSB,
463 OP_PMAXSD,
464 OP_PMAXUW,
465 OP_PMAXUD,
466 OP_PMULLD,
467 OP_PHMINPOSUW,
468 OP_PSRLVD,
469 OP_PSRAVD,
470 OP_PSLLVD,
471 OP_PBROADCASTD,
472 OP_PBROADCASTQ,
473 OP_PBROADCASTI128,
474 OP_PBROADCASTB,
475 OP_PBROADCASTW,
476 OP_PMASKMOVD,
477 OP_GATHER,
478 OP_FMADDSUB132PS,
479 OP_FMSUBADD132PS,
480 OP_FMADD132PS,
481 OP_FMADD132SS,
482 OP_FMSUB132PS,
483 OP_FMSUB132SS,
484 OP_FNMADD132PS,
485 OP_FNMADD132SS,
486 OP_FNMSUB132PS,
487 OP_FNMSUB132SS,
488 OP_FMADDSUB213PS,
489 OP_FMSUBADD213PS,
490 OP_FMADD213PS,
491 OP_FMADD213SS,
492 OP_FMSUB213PS,
493 OP_FMSUB213SS,
494 OP_FNMADD213PS,
495 OP_FNMADD213SS,
496 OP_FNMSUB213PS,
497 OP_FNMSUB213SS,
498 OP_FMADDSUB231PS,
499 OP_FMSUBADD231PS,
500 OP_FMADD231PS,
501 OP_FMADD231SS,
502 OP_FMSUB231PS,
503 OP_FMSUB231SS,
504 OP_FNMADD231PS,
505 OP_FNMADD231SS,
506 OP_FNMSUB231PS,
507 OP_FNMSUB231SS,
508 OP_AESIMC,
509 OP_AESENC,
510 OP_AESENCLAST,
511 OP_AESDEC,
512 OP_AESDECLAST,
513 OP_MOVBEGM,
514 OP_MOVBEMG,
515 OP_CRC32,
516 OP_POPCNT,
517 OP_TZCNT,
518 OP_LZCNT,
519 OP_ADCX,
520 OP_ADOX,
521 OP_ANDN,
522 OP_BZHI,
523 OP_BEXTR,
524 OP_BLSR,
525 OP_BLSMSK,
526 OP_BLSI,
527 OP_PEXT,
528 OP_PDEP,
529 OP_SHLX,
530 OP_SHRX,
531 OP_SARX,
532 OP_MULX,
533 OP_MASKMOVDQU,
534 OP_MASKMOVPS,
535 OP_MASKMOVPD,
536 OP_MOVSD,
537 OP_CVTSI2SD,
538 OP_CVTTSD2SI,
539 OP_CVTSD2SI,
540 OP_SQRTSD,
541 OP_ADDSD,
542 OP_MULSD,
543 OP_CVTSD2SS,
544 OP_SUBSD,
545 OP_MINSD,
546 OP_DIVSD,
547 OP_MAXSD,
548 OP_PSHUFLW,
549 OP_CMPSD,
550 OP_MOVDQ2Q,
551 OP_CVTPD2DQ,
552 OP_MOVSS,
553 OP_MOVSLDUP,
554 OP_MOVDDUP,
555 OP_MOVSHDUP,
556 OP_CVTSI2SS,
557 OP_CVTTSS2SI,
558 OP_CVTSS2SI,
559 OP_CVTSS2SD,
560 OP_SQRTSS,
561 OP_RSQRTSS,
562 OP_RCPSS,
563 OP_ADDSS,
564 OP_MULSS,
565 OP_CVTTPS2DQ,
566 OP_SUBSS,
567 OP_MINSS,
568 OP_DIVSS,
569 OP_MAXSS,
570 OP_MOVDQU,
571 OP_PSHUFHW,
572 OP_CMPSS,
573 OP_MOVQ2DQ,
574 OP_CVTDQ2PD,
575 OP_PERMQ,
576 OP_PERMPD,
577 OP_PBLENDD,
578 OP_PERM2F128,
579 OP_ROUNDPS,
580 OP_ROUNDPD,
581 OP_ROUNDSS,
582 OP_ROUNDSD,
583 OP_BLENDPS,
584 OP_BLENDPD,
585 OP_PBLENDW,
586 OP_PALIGNR,
587 OP_PEXTRB,
588 OP_PEXTRD,
589 OP_PEXTRQ,
590 OP_EXTRACTPS,
591 OP_INSERTF128,
592 OP_EXTRACTF128,
593 OP_CVTPS2PH,
594 OP_PINSRB,
595 OP_PINSRD,
596 OP_PINSRQ,
597 OP_INSERTPS,
598 OP_INSERTI128,
599 OP_EXTRACTI128,
600 OP_DPPS,
601 OP_DPPD,
602 OP_MPSADBW,
603 OP_PCLMULQDQ,
604 OP_PERM2I128,
605 OP_PCMPESTRM,
606 OP_PCMPESTRI,
607 OP_PCMPISTRM,
608 OP_PCMPISTRI,
609 OP_AESKEYGEN,
610 OP_RORX,
611 OP_RDPID,
612 OP_RDRAND,
613 OP_RDSEED,
614 OP_MOVBE,
615 OP_SHA1NEXTE,
616 OP_SHA1MSG1,
617 OP_SHA1MSG2,
618 OP_SHA256RNDS2,
619 OP_SHA256MSG1,
620 OP_SHA256MSG2,
621 OP_SHA1RNDS4,
622 OP_VEX3B,
623 OP_VEX2B,
624 OP_ENCLS,
625 OP_ENCLU,
626 OP_ENCLV,
627 OP_XEND,
628 OP_XTEST,
629/** @} */
630
631/** @name Floating point ops
632 * @{ */
633 OP_FADD,
634 OP_FMUL,
635 OP_FCOM,
636 OP_FCOMP,
637 OP_FSUB,
638 OP_FSUBR,
639 OP_FDIV,
640 OP_FDIVR,
641 OP_FLD,
642 OP_FST,
643 OP_FSTP,
644 OP_FLDENV,
645 OP_FSTENV,
646 OP_FSTCW,
647 OP_FXCH,
648 OP_FNOP,
649 OP_FCHS,
650 OP_FABS,
651 OP_FLD1,
652 OP_FLDL2T,
653 OP_FLDL2E,
654 OP_FLDPI,
655 OP_FLDLG2,
656 OP_FLDLN2,
657 OP_FLDZ,
658 OP_F2XM1,
659 OP_FYL2X,
660 OP_FPTAN,
661 OP_FPATAN,
662 OP_FXTRACT,
663 OP_FREM1,
664 OP_FDECSTP,
665 OP_FINCSTP,
666 OP_FPREM,
667 OP_FYL2XP1,
668 OP_FSQRT,
669 OP_FSINCOS,
670 OP_FRNDINT,
671 OP_FSCALE,
672 OP_FSIN,
673 OP_FCOS,
674 OP_FIADD,
675 OP_FIMUL,
676 OP_FISUB,
677 OP_FISUBR,
678 OP_FIDIV,
679 OP_FIDIVR,
680 OP_FCMOVB,
681 OP_FCMOVE,
682 OP_FCMOVBE,
683 OP_FCMOVU,
684 OP_FUCOMPP,
685 OP_FILD,
686 OP_FIST,
687 OP_FISTP,
688 OP_FCMOVNB,
689 OP_FCMOVNE,
690 OP_FCMOVNBE,
691 OP_FCMOVNU,
692 OP_FCLEX,
693 OP_FINIT,
694 OP_FUCOMI,
695 OP_FCOMI,
696 OP_FRSTOR,
697 OP_FSAVE,
698 OP_FNSTSW,
699 OP_FFREE,
700 OP_FUCOM,
701 OP_FUCOMP,
702 OP_FICOM,
703 OP_FICOMP,
704 OP_FADDP,
705 OP_FMULP,
706 OP_FCOMPP,
707 OP_FSUBRP,
708 OP_FSUBP,
709 OP_FDIVRP,
710 OP_FDIVP,
711 OP_FBLD,
712 OP_FBSTP,
713 OP_FCOMIP,
714 OP_FUCOMIP,
715/** @} */
716
717/** @name 3DNow!
718 * @{ */
719 OP_PI2FW,
720 OP_PI2FD,
721 OP_PF2IW,
722 OP_PF2ID,
723 OP_PFPNACC,
724 OP_PFCMPGE,
725 OP_PFMIN,
726 OP_PFRCP,
727 OP_PFRSQRT,
728 OP_PFSUB,
729 OP_PFADD,
730 OP_PFCMPGT,
731 OP_PFMAX,
732 OP_PFRCPIT1,
733 OP_PFRSQRTIT1,
734 OP_PFSUBR,
735 OP_PFACC,
736 OP_PFCMPEQ,
737 OP_PFMUL,
738 OP_PFRCPIT2,
739 OP_PFMULHRW,
740 OP_PFSWAPD,
741 OP_PAVGUSB,
742 OP_PFNACC,
743/** @} */
744 OP_ROL,
745 OP_ROR,
746 OP_RCL,
747 OP_RCR,
748 OP_SHL,
749 OP_SHR,
750 OP_SAR,
751 OP_NOT,
752 OP_NEG,
753 OP_MUL,
754 OP_DIV,
755 OP_IDIV,
756 OP_SLDT,
757 OP_STR,
758 OP_LLDT,
759 OP_LTR,
760 OP_VERR,
761 OP_VERW,
762 OP_SGDT,
763 OP_LGDT,
764 OP_SIDT,
765 OP_LIDT,
766 OP_SMSW,
767 OP_LMSW,
768 OP_INVLPG,
769 OP_CMPXCHG8B,
770 OP_CMPXCHG16B,
771 OP_PSLLQ,
772 OP_PSRLDQ,
773 OP_PSLLDQ,
774 OP_FXSAVE,
775 OP_FXRSTOR,
776 OP_LDMXCSR,
777 OP_STMXCSR,
778 OP_XSAVE,
779 OP_XSAVEOPT,
780 OP_XRSTOR,
781 OP_XGETBV,
782 OP_XSETBV,
783 OP_RDFSBASE,
784 OP_RDGSBASE,
785 OP_WRFSBASE,
786 OP_WRGSBASE,
787 OP_LFENCE,
788 OP_MFENCE,
789 OP_SFENCE,
790 OP_PREFETCH,
791 OP_MONITOR,
792 OP_MWAIT,
793 OP_CLFLUSH,
794 OP_CLFLUSHOPT,
795 OP_MOV_DR,
796 OP_MOV_TR,
797 OP_SWAPGS,
798 OP_UD1,
799 OP_UD2,
800/** @name VT-x instructions
801 * @{ */
802 OP_VMREAD,
803 OP_VMWRITE,
804 OP_VMCALL,
805 OP_VMXON,
806 OP_VMXOFF,
807 OP_VMCLEAR,
808 OP_VMLAUNCH,
809 OP_VMRESUME,
810 OP_VMPTRLD,
811 OP_VMPTRST,
812 OP_INVEPT,
813 OP_INVVPID,
814 OP_INVPCID,
815 OP_VMFUNC,
816/** @} */
817/** @name AMD-V instructions
818 * @{ */
819 OP_VMMCALL,
820 OP_VMRUN,
821 OP_VMLOAD,
822 OP_VMSAVE,
823 OP_CLGI,
824 OP_STGI,
825 OP_INVLPGA,
826 OP_SKINIT,
827/** @} */
828/** @name 64 bits instruction
829 * @{ */
830 OP_MOVSXD,
831/** @} */
832/** @name AVX instructions
833 * @{ */
834 /* Manual */
835 OP_VSTMXCSR,
836 OP_VLDMXCSR,
837 OP_VPACKUSDW,
838
839 /* Generated from tables: */
840 OP_VADDPD,
841 OP_VADDPS,
842 OP_VADDSD,
843 OP_VADDSS,
844 OP_VADDSUBPD,
845 OP_VADDSUBPS,
846 OP_VAESDEC,
847 OP_VAESDECLAST,
848 OP_VAESENC,
849 OP_VAESENCLAST,
850 OP_VAESIMC,
851 OP_VAESKEYGEN,
852 OP_VANDNPD,
853 OP_VANDNPS,
854 OP_VANDPD,
855 OP_VANDPS,
856 OP_VBLENDPD,
857 OP_VBLENDPS,
858 OP_VBLENDVPD,
859 OP_VBLENDVPS,
860 OP_VBROADCASTF128,
861 OP_VBROADCASTSD,
862 OP_VBROADCASTSS,
863 OP_VCMPPD,
864 OP_VCMPPS,
865 OP_VCMPSD,
866 OP_VCMPSS,
867 OP_VCOMISD,
868 OP_VCOMISS,
869 OP_VCVTDQ2PD,
870 OP_VCVTDQ2PS,
871 OP_VCVTPD2DQ,
872 OP_VCVTPD2PS,
873 OP_VCVTPH2PS,
874 OP_VCVTPS2DQ,
875 OP_VCVTPS2PD,
876 OP_VCVTPS2PH,
877 OP_VCVTSD2SI,
878 OP_VCVTSD2SS,
879 OP_VCVTSI2SS,
880 OP_VCVTSI2SD,
881 OP_VCVTSS2SD,
882 OP_VCVTSS2SI,
883 OP_VCVTTPD2DQ,
884 OP_VCVTTPS2DQ,
885 OP_VCVTTSD2SI,
886 OP_VCVTTSS2SI,
887 OP_VDIVPD,
888 OP_VDIVPS,
889 OP_VDIVSD,
890 OP_VDIVSS,
891 OP_VDPPD,
892 OP_VDPPS,
893 OP_VEXTRACTF128,
894 OP_VEXTRACTI128,
895 OP_VEXTRACTPS,
896 OP_VFMADD132PS,
897 OP_VFMADD132SS,
898 OP_VFMADD213PS,
899 OP_VFMADD213SS,
900 OP_VFMADD231PS,
901 OP_VFMADD231SS,
902 OP_VFMADDSUB132PS,
903 OP_VFMADDSUB213PS,
904 OP_VFMADDSUB231PS,
905 OP_VFMSUB132PS,
906 OP_VFMSUB132SS,
907 OP_VFMSUB213PS,
908 OP_VFMSUB213SS,
909 OP_VFMSUB231PS,
910 OP_VFMSUB231SS,
911 OP_VFMSUBADD132PS,
912 OP_VFMSUBADD213PS,
913 OP_VFMSUBADD231PS,
914 OP_VFNMADD132PS,
915 OP_VFNMADD132SS,
916 OP_VFNMADD213PS,
917 OP_VFNMADD213SS,
918 OP_VFNMADD231PS,
919 OP_VFNMADD231SS,
920 OP_VFNMSUB132PS,
921 OP_VFNMSUB132SS,
922 OP_VFNMSUB213PS,
923 OP_VFNMSUB213SS,
924 OP_VFNMSUB231PS,
925 OP_VFNMSUB231SS,
926 OP_VGATHER,
927 OP_VGATHERDPS,
928 OP_VGATHERDPD,
929 OP_VGATHERQPS,
930 OP_VGATHERQPD,
931 OP_VHADDPD,
932 OP_VHADDPS,
933 OP_VHSUBPD,
934 OP_VHSUBPS,
935 OP_VINSERTF128,
936 OP_VINSERTI128,
937 OP_VINSERTPS,
938 OP_VLDDQU,
939 OP_VMASKMOVDQU,
940 OP_VMASKMOVPD,
941 OP_VMASKMOVPS,
942 OP_VMAXPD,
943 OP_VMAXPS,
944 OP_VMAXSD,
945 OP_VMAXSS,
946 OP_VMINPD,
947 OP_VMINPS,
948 OP_VMINSD,
949 OP_VMINSS,
950 OP_VMOVAPD,
951 OP_VMOVAPS,
952 OP_VMOVD,
953 OP_VMOVDDUP,
954 OP_VMOVDQA,
955 OP_VMOVDQU,
956 OP_VMOVHPD,
957 OP_VMOVHPS,
958 OP_VMOVLHPS = OP_VMOVHPS, /**< @todo OP_VMOVHPS */
959 OP_VMOVLPD,
960 OP_VMOVLPS,
961 OP_VMOVHLPS = OP_VMOVLPS, /**< @todo OP_VMOVLPS */
962 OP_VMOVMSKPD,
963 OP_VMOVMSKPS,
964 OP_VMOVNTDQ,
965 OP_VMOVNTDQA,
966 OP_VMOVNTPD,
967 OP_VMOVNTPS,
968 OP_VMOVQ,
969 OP_VMOVSD,
970 OP_VMOVSHDUP,
971 OP_VMOVSLDUP,
972 OP_VMOVSS,
973 OP_VMOVUPD,
974 OP_VMOVUPS,
975 OP_VMPSADBW,
976 OP_VMULPD,
977 OP_VMULPS,
978 OP_VMULSD,
979 OP_VMULSS,
980 OP_VORPD,
981 OP_VORPS,
982 OP_VPABSB,
983 OP_VPABSD,
984 OP_VPABSW,
985 OP_VPACKSSDW,
986 OP_VPACKSSWB,
987 OP_VPACKUSWB,
988 OP_VPADDB,
989 OP_VPADDD,
990 OP_VPADDQ,
991 OP_VPADDSB,
992 OP_VPADDSW,
993 OP_VPADDUSB,
994 OP_VPADDUSW,
995 OP_VPADDW,
996 OP_VPALIGNR,
997 OP_VPAND,
998 OP_VPANDN,
999 OP_VPAVGB,
1000 OP_VPAVGW,
1001 OP_VPBLENDD,
1002 OP_VPBLENDVB,
1003 OP_VPBLENDW,
1004 OP_VPBROADCASTB,
1005 OP_VPBROADCASTD,
1006 OP_VBROADCASTI128,
1007 OP_VPBROADCASTQ,
1008 OP_VPBROADCASTW,
1009 OP_VPCLMULQDQ,
1010 OP_VPCMPEQB,
1011 OP_VPCMPEQD,
1012 OP_VPCMPEQQ,
1013 OP_VPCMPEQW,
1014 OP_VPCMPESTRI,
1015 OP_VPCMPESTRM,
1016 OP_VPCMPGTB,
1017 OP_VPCMPGTD,
1018 OP_VPCMPGTQ,
1019 OP_VPCMPGTW,
1020 OP_VPCMPISTRI,
1021 OP_VPCMPISTRM,
1022 OP_VPERM2F128,
1023 OP_VPERM2I128,
1024 OP_VPERMD,
1025 OP_VPERMILPD,
1026 OP_VPERMILPS,
1027 OP_VPERMPD,
1028 OP_VPERMPS,
1029 OP_VPERMQ,
1030 OP_VPEXTRB,
1031 OP_VPEXTRD,
1032 OP_VPEXTRW,
1033 OP_VPEXTRQ,
1034 OP_VPGATHERDD,
1035 OP_VPGATHERDQ,
1036 OP_VPGATHERQD,
1037 OP_VPGATHERQQ,
1038 OP_VPHADDD,
1039 OP_VPHADDSW,
1040 OP_VPHADDW,
1041 OP_VPHMINPOSUW,
1042 OP_VPHSUBD,
1043 OP_VPHSUBSW,
1044 OP_VPHSUBW,
1045 OP_VPINSRB,
1046 OP_VPINSRD,
1047 OP_VPINSRW,
1048 OP_VPINSRQ,
1049 OP_VPMADDUBSW,
1050 OP_VPMADDWD,
1051 OP_VPMASKMOVD,
1052 OP_VPMAXSB,
1053 OP_VPMAXSD,
1054 OP_VPMAXSW,
1055 OP_VPMAXUB,
1056 OP_VPMAXUD,
1057 OP_VPMAXUW,
1058 OP_VPMINSB,
1059 OP_VPMINSD,
1060 OP_VPMINSW,
1061 OP_VPMINUB,
1062 OP_VPMINUD,
1063 OP_VPMINUW,
1064 OP_VPMOVMSKB,
1065 OP_VPMOVSXBW,
1066 OP_VPMOVSXBD,
1067 OP_VPMOVSXBQ,
1068 OP_VPMOVSXWD,
1069 OP_VPMOVSXWQ,
1070 OP_VPMOVSXDQ,
1071 OP_VPMOVZXBW,
1072 OP_VPMOVZXBD,
1073 OP_VPMOVZXBQ,
1074 OP_VPMOVZXWD,
1075 OP_VPMOVZXWQ,
1076 OP_VPMOVZXDQ,
1077 OP_VPMULDQ,
1078 OP_VPMULHRSW,
1079 OP_VPMULHUW,
1080 OP_VPMULHW,
1081 OP_VPMULLD,
1082 OP_VPMULLW,
1083 OP_VPMULUDQ,
1084 OP_VPOR,
1085 OP_VPSADBW,
1086 OP_VPSHUFB,
1087 OP_VPSHUFD,
1088 OP_VPSHUFHW,
1089 OP_VPSHUFLW,
1090 OP_VPSIGNB,
1091 OP_VPSIGND,
1092 OP_VPSIGNW,
1093 OP_VPSLLD,
1094 OP_VPSLLQ,
1095 OP_VPSLLDQ,
1096 OP_VPSLLVD,
1097 OP_VPSLLVQ,
1098 OP_VPSLLW,
1099 OP_VPSRAD,
1100 OP_VPSRAVD,
1101 OP_VPSRAW,
1102 OP_VPSRLD,
1103 OP_VPSRLDQ,
1104 OP_VPSRLQ,
1105 OP_VPSRLVD,
1106 OP_VPSRLVQ,
1107 OP_VPSRLW,
1108 OP_VPSUBB,
1109 OP_VPSUBD,
1110 OP_VPSUBQ,
1111 OP_VPSUBSB,
1112 OP_VPSUBSW,
1113 OP_VPSUBUSB,
1114 OP_VPSUBUSW,
1115 OP_VPSUBW,
1116 OP_VPTEST,
1117 OP_VPUNPCKHBW,
1118 OP_VPUNPCKHDQ,
1119 OP_VPUNPCKHQDQ,
1120 OP_VPUNPCKHWD,
1121 OP_VPUNPCKLBW,
1122 OP_VPUNPCKLDQ,
1123 OP_VPUNPCKLQDQ,
1124 OP_VPUNPCKLWD,
1125 OP_VPXOR,
1126 OP_VRCPPS,
1127 OP_VRCPSS,
1128 OP_VROUNDPD,
1129 OP_VROUNDPS,
1130 OP_VROUNDSD,
1131 OP_VROUNDSS,
1132 OP_VRSQRTPS,
1133 OP_VRSQRTSS,
1134 OP_VSHUFPD,
1135 OP_VSHUFPS,
1136 OP_VSQRTPD,
1137 OP_VSQRTPS,
1138 OP_VSQRTSD,
1139 OP_VSQRTSS,
1140 OP_VSUBPD,
1141 OP_VSUBPS,
1142 OP_VSUBSD,
1143 OP_VSUBSS,
1144 OP_VTESTPD,
1145 OP_VTESTPS,
1146 OP_VUCOMISD,
1147 OP_VUCOMISS,
1148 OP_VUNPCKHPD,
1149 OP_VUNPCKHPS,
1150 OP_VUNPCKLPD,
1151 OP_VUNPCKLPS,
1152 OP_VVPACKUSDW,
1153 OP_VXORPD,
1154 OP_VXORPS,
1155 OP_VZEROALL,
1156
1157/** @} */
1158 OP_END_OF_OPCODES
1159};
1160AssertCompile(OP_LOCK == 7);
1161#if 0
1162AssertCompile(OP_END_OF_OPCODES < 1024 /* see 15 byte DISOPCODE variant */);
1163#endif
1164/** @} */
1165
1166
1167/** @defgroup grp_dis_opparam Opcode parameters (DISOPCODE::fParam1,
1168 * DISOPCODE::fParam2, DISOPCODE::fParam3)
1169 * @ingroup grp_dis
1170 * @{
1171 */
1172
1173/**
1174 * @remarks Register order is important for translations!!
1175 */
1176enum OP_PARM
1177{
1178 OP_PARM_NONE,
1179
1180 OP_PARM_REG_EAX,
1181 OP_PARM_REG_GEN32_START = OP_PARM_REG_EAX,
1182 OP_PARM_REG_ECX,
1183 OP_PARM_REG_EDX,
1184 OP_PARM_REG_EBX,
1185 OP_PARM_REG_ESP,
1186 OP_PARM_REG_EBP,
1187 OP_PARM_REG_ESI,
1188 OP_PARM_REG_EDI,
1189 OP_PARM_REG_GEN32_END = OP_PARM_REG_EDI,
1190
1191 OP_PARM_REG_ES,
1192 OP_PARM_REG_SEG_START = OP_PARM_REG_ES,
1193 OP_PARM_REG_CS,
1194 OP_PARM_REG_SS,
1195 OP_PARM_REG_DS,
1196 OP_PARM_REG_FS,
1197 OP_PARM_REG_GS,
1198 OP_PARM_REG_SEG_END = OP_PARM_REG_GS,
1199
1200 OP_PARM_REG_AX,
1201 OP_PARM_REG_GEN16_START = OP_PARM_REG_AX,
1202 OP_PARM_REG_CX,
1203 OP_PARM_REG_DX,
1204 OP_PARM_REG_BX,
1205 OP_PARM_REG_SP,
1206 OP_PARM_REG_BP,
1207 OP_PARM_REG_SI,
1208 OP_PARM_REG_DI,
1209 OP_PARM_REG_GEN16_END = OP_PARM_REG_DI,
1210
1211 OP_PARM_REG_AL,
1212 OP_PARM_REG_GEN8_START = OP_PARM_REG_AL,
1213 OP_PARM_REG_CL,
1214 OP_PARM_REG_DL,
1215 OP_PARM_REG_BL,
1216 OP_PARM_REG_AH,
1217 OP_PARM_REG_CH,
1218 OP_PARM_REG_DH,
1219 OP_PARM_REG_BH,
1220 OP_PARM_REG_GEN8_END = OP_PARM_REG_BH,
1221
1222 OP_PARM_REGFP_0,
1223 OP_PARM_REG_FP_START = OP_PARM_REGFP_0,
1224 OP_PARM_REGFP_1,
1225 OP_PARM_REGFP_2,
1226 OP_PARM_REGFP_3,
1227 OP_PARM_REGFP_4,
1228 OP_PARM_REGFP_5,
1229 OP_PARM_REGFP_6,
1230 OP_PARM_REGFP_7,
1231 OP_PARM_REG_FP_END = OP_PARM_REGFP_7,
1232
1233 OP_PARM_NTA,
1234 OP_PARM_T0,
1235 OP_PARM_T1,
1236 OP_PARM_T2,
1237 OP_PARM_1,
1238
1239 OP_PARM_REX,
1240 OP_PARM_REX_START = OP_PARM_REX,
1241 OP_PARM_REX_B,
1242 OP_PARM_REX_X,
1243 OP_PARM_REX_XB,
1244 OP_PARM_REX_R,
1245 OP_PARM_REX_RB,
1246 OP_PARM_REX_RX,
1247 OP_PARM_REX_RXB,
1248 OP_PARM_REX_W,
1249 OP_PARM_REX_WB,
1250 OP_PARM_REX_WX,
1251 OP_PARM_REX_WXB,
1252 OP_PARM_REX_WR,
1253 OP_PARM_REX_WRB,
1254 OP_PARM_REX_WRX,
1255 OP_PARM_REX_WRXB,
1256
1257 OP_PARM_REG_RAX,
1258 OP_PARM_REG_GEN64_START = OP_PARM_REG_RAX,
1259 OP_PARM_REG_RCX,
1260 OP_PARM_REG_RDX,
1261 OP_PARM_REG_RBX,
1262 OP_PARM_REG_RSP,
1263 OP_PARM_REG_RBP,
1264 OP_PARM_REG_RSI,
1265 OP_PARM_REG_RDI,
1266 OP_PARM_REG_R8,
1267 OP_PARM_REG_R9,
1268 OP_PARM_REG_R10,
1269 OP_PARM_REG_R11,
1270 OP_PARM_REG_R12,
1271 OP_PARM_REG_R13,
1272 OP_PARM_REG_R14,
1273 OP_PARM_REG_R15,
1274 OP_PARM_REG_GEN64_END = OP_PARM_REG_R15,
1275
1276 OP_PARM_REG_XMM0,
1277 OP_PARM_REG_SSE_START = OP_PARM_REG_XMM0,
1278 OP_PARM_REG_XMM1,
1279 OP_PARM_REG_XMM2,
1280 OP_PARM_REG_XMM3,
1281 OP_PARM_REG_XMM4,
1282 OP_PARM_REG_XMM5,
1283 OP_PARM_REG_XMM6,
1284 OP_PARM_REG_XMM7,
1285 OP_PARM_REG_XMM8,
1286 OP_PARM_REG_XMM9,
1287 OP_PARM_REG_XMM10,
1288 OP_PARM_REG_XMM11,
1289 OP_PARM_REG_XMM12,
1290 OP_PARM_REG_XMM13,
1291 OP_PARM_REG_XMM14,
1292 OP_PARM_REG_XMM15,
1293 OP_PARM_REG_SSE_END = OP_PARM_REG_XMM15
1294};
1295
1296
1297/* 8-bit GRP aliases (for IEM). */
1298#define OP_PARM_AL OP_PARM_REG_AL
1299
1300/* GPR aliases for op-size specified register sizes (for IEM). */
1301#define OP_PARM_rAX OP_PARM_REG_EAX
1302#define OP_PARM_rCX OP_PARM_REG_ECX
1303#define OP_PARM_rDX OP_PARM_REG_EDX
1304#define OP_PARM_rBX OP_PARM_REG_EBX
1305#define OP_PARM_rSP OP_PARM_REG_ESP
1306#define OP_PARM_rBP OP_PARM_REG_EBP
1307#define OP_PARM_rSI OP_PARM_REG_ESI
1308#define OP_PARM_rDI OP_PARM_REG_EDI
1309
1310/* SREG aliases (for IEM). */
1311#define OP_PARM_ES OP_PARM_REG_ES
1312#define OP_PARM_CS OP_PARM_REG_CS
1313#define OP_PARM_SS OP_PARM_REG_SS
1314#define OP_PARM_DS OP_PARM_REG_DS
1315#define OP_PARM_FS OP_PARM_REG_FS
1316#define OP_PARM_GS OP_PARM_REG_GS
1317
1318/*
1319 * Note! We don't document anything here if we can help it, because it we love
1320 * wasting other peoples time figuring out crypting crap. The new VEX
1321 * stuff of course uphelds this vexing tradition. Aaaaaaaaaaaaaaaaaaarg!
1322 */
1323
1324#define OP_PARM_VTYPE(a) ((unsigned)a & 0xFE0)
1325#define OP_PARM_VSUBTYPE(a) ((unsigned)a & 0x01F)
1326
1327#define OP_PARM_A 0x100
1328#define OP_PARM_VARIABLE OP_PARM_A
1329#define OP_PARM_E 0x120
1330#define OP_PARM_F 0x140
1331#define OP_PARM_G 0x160
1332#define OP_PARM_I 0x180
1333#define OP_PARM_J 0x1A0
1334#define OP_PARM_M 0x1C0
1335#define OP_PARM_O 0x1E0
1336#define OP_PARM_R 0x200
1337#define OP_PARM_X 0x220
1338#define OP_PARM_Y 0x240
1339
1340/* Grouped rare parameters for optimization purposes */
1341#define IS_OP_PARM_RARE(a) ((a & 0xF00) >= 0x300)
1342#define OP_PARM_C 0x300 /* control register */
1343#define OP_PARM_D 0x320 /* debug register */
1344#define OP_PARM_S 0x340 /* segment register */
1345#define OP_PARM_T 0x360 /* test register */
1346#define OP_PARM_Q 0x380
1347#define OP_PARM_P 0x3A0 /* mmx register */
1348#define OP_PARM_W 0x3C0 /* xmm register */
1349#define OP_PARM_V 0x3E0
1350#define OP_PARM_U 0x400 /* The R/M field of the ModR/M byte selects XMM/YMM register. */
1351#define OP_PARM_B 0x420 /* VEX.vvvv field select general purpose register. */
1352#define OP_PARM_H 0x440
1353#define OP_PARM_L 0x460
1354
1355#define OP_PARM_NONE 0
1356#define OP_PARM_a 0x1 /**< Operand to bound instruction. */
1357#define OP_PARM_b 0x2 /**< Byte (always). */
1358#define OP_PARM_d 0x3 /**< Double word (always). */
1359#define OP_PARM_dq 0x4 /**< Double quad word (always). */
1360#define OP_PARM_p 0x5 /**< Far pointer (subject to opsize). */
1361#define OP_PARM_pd 0x6 /**< 128-bit or 256-bit double precision floating point data. */
1362#define OP_PARM_pi 0x7 /**< Quad word MMX register. */
1363#define OP_PARM_ps 0x8 /**< 128-bit or 256-bit single precision floating point data. */
1364#define OP_PARM_q 0xA /**< Quad word (always). */
1365#define OP_PARM_s 0xB /**< Descriptor table size (SIDT/LIDT/SGDT/LGDT). */
1366#define OP_PARM_sd 0xC /**< Scalar element of 128-bit double precision floating point data. */
1367#define OP_PARM_ss 0xD /**< Scalar element of 128-bit single precision floating point data. */
1368#define OP_PARM_v 0xE /**< Word, double word, or quad word depending on opsize. */
1369#define OP_PARM_w 0xF /**< Word (always). */
1370#define OP_PARM_x 0x10 /**< Double quad word (dq) or quad quad word (qq) depending on opsize. */
1371#define OP_PARM_y 0x11 /**< Double word or quad word depending on opsize. */
1372#define OP_PARM_z 0x12 /**< Word (16-bit opsize) or double word (32-bit/64-bit opsize). */
1373#define OP_PARM_qq 0x13 /**< Quad quad word. */
1374
1375
1376#define OP_PARM_Ap (OP_PARM_A+OP_PARM_p)
1377#define OP_PARM_By (OP_PARM_B+OP_PARM_y)
1378#define OP_PARM_Cd (OP_PARM_C+OP_PARM_d)
1379#define OP_PARM_Dd (OP_PARM_D+OP_PARM_d)
1380#define OP_PARM_Eb (OP_PARM_E+OP_PARM_b)
1381#define OP_PARM_Ed (OP_PARM_E+OP_PARM_d)
1382#define OP_PARM_Ep (OP_PARM_E+OP_PARM_p)
1383#define OP_PARM_Ev (OP_PARM_E+OP_PARM_v)
1384#define OP_PARM_Ew (OP_PARM_E+OP_PARM_w)
1385#define OP_PARM_Ey (OP_PARM_E+OP_PARM_y)
1386#define OP_PARM_Fv (OP_PARM_F+OP_PARM_v)
1387#define OP_PARM_Gb (OP_PARM_G+OP_PARM_b)
1388#define OP_PARM_Gd (OP_PARM_G+OP_PARM_d)
1389#define OP_PARM_Gv (OP_PARM_G+OP_PARM_v)
1390#define OP_PARM_Gw (OP_PARM_G+OP_PARM_w)
1391#define OP_PARM_Gy (OP_PARM_G+OP_PARM_y)
1392#define OP_PARM_Hq (OP_PARM_H+OP_PARM_q)
1393#define OP_PARM_Hps (OP_PARM_H+OP_PARM_ps)
1394#define OP_PARM_Hpd (OP_PARM_H+OP_PARM_pd)
1395#define OP_PARM_Hdq (OP_PARM_H+OP_PARM_dq)
1396#define OP_PARM_Hqq (OP_PARM_H+OP_PARM_qq)
1397#define OP_PARM_Hsd (OP_PARM_H+OP_PARM_sd)
1398#define OP_PARM_Hss (OP_PARM_H+OP_PARM_ss)
1399#define OP_PARM_Hx (OP_PARM_H+OP_PARM_x)
1400#define OP_PARM_Ib (OP_PARM_I+OP_PARM_b)
1401#define OP_PARM_Id (OP_PARM_I+OP_PARM_d)
1402#define OP_PARM_Iq (OP_PARM_I+OP_PARM_q)
1403#define OP_PARM_Iw (OP_PARM_I+OP_PARM_w)
1404#define OP_PARM_Iv (OP_PARM_I+OP_PARM_v)
1405#define OP_PARM_Iz (OP_PARM_I+OP_PARM_z)
1406#define OP_PARM_Jb (OP_PARM_J+OP_PARM_b)
1407#define OP_PARM_Jv (OP_PARM_J+OP_PARM_v)
1408#define OP_PARM_Ma (OP_PARM_M+OP_PARM_a)
1409#define OP_PARM_Mb (OP_PARM_M+OP_PARM_b)
1410#define OP_PARM_Mw (OP_PARM_M+OP_PARM_w)
1411#define OP_PARM_Md (OP_PARM_M+OP_PARM_d)
1412#define OP_PARM_Mp (OP_PARM_M+OP_PARM_p)
1413#define OP_PARM_Mq (OP_PARM_M+OP_PARM_q)
1414#define OP_PARM_Mdq (OP_PARM_M+OP_PARM_dq)
1415#define OP_PARM_Ms (OP_PARM_M+OP_PARM_s)
1416#define OP_PARM_Mx (OP_PARM_M+OP_PARM_x)
1417#define OP_PARM_My (OP_PARM_M+OP_PARM_y)
1418#define OP_PARM_Mps (OP_PARM_M+OP_PARM_ps)
1419#define OP_PARM_Mpd (OP_PARM_M+OP_PARM_pd)
1420#define OP_PARM_MVx (OP_PARM_M+OP_PARM_x) /**< VSIB encoding. AMD uses 'M*x'. @todo add a OP_PARM_VSIB or smth. */
1421#define OP_PARM_Ob (OP_PARM_O+OP_PARM_b)
1422#define OP_PARM_Ov (OP_PARM_O+OP_PARM_v)
1423#define OP_PARM_Pq (OP_PARM_P+OP_PARM_q)
1424#define OP_PARM_Pd (OP_PARM_P+OP_PARM_d)
1425#define OP_PARM_Qd (OP_PARM_Q+OP_PARM_d)
1426#define OP_PARM_Qq (OP_PARM_Q+OP_PARM_q)
1427#define OP_PARM_Rd (OP_PARM_R+OP_PARM_d)
1428#define OP_PARM_Rw (OP_PARM_R+OP_PARM_w)
1429#define OP_PARM_Ry (OP_PARM_R+OP_PARM_y)
1430#define OP_PARM_Sw (OP_PARM_S+OP_PARM_w)
1431#define OP_PARM_Td (OP_PARM_T+OP_PARM_d)
1432#define OP_PARM_Ux (OP_PARM_U+OP_PARM_x)
1433#define OP_PARM_Vq (OP_PARM_V+OP_PARM_q)
1434#define OP_PARM_Vx (OP_PARM_V+OP_PARM_x)
1435#define OP_PARM_Vy (OP_PARM_V+OP_PARM_y)
1436#define OP_PARM_Wq (OP_PARM_W+OP_PARM_q)
1437/*#define OP_PARM_Ws (OP_PARM_W+OP_PARM_s) - wtf? Same as lgdt (OP_PARM_Ms)?*/
1438#define OP_PARM_Wx (OP_PARM_W+OP_PARM_x)
1439#define OP_PARM_Xb (OP_PARM_X+OP_PARM_b)
1440#define OP_PARM_Xv (OP_PARM_X+OP_PARM_v)
1441#define OP_PARM_Yb (OP_PARM_Y+OP_PARM_b)
1442#define OP_PARM_Yv (OP_PARM_Y+OP_PARM_v)
1443
1444#define OP_PARM_Vps (OP_PARM_V+OP_PARM_ps)
1445#define OP_PARM_Vss (OP_PARM_V+OP_PARM_ss)
1446#define OP_PARM_Vpd (OP_PARM_V+OP_PARM_pd)
1447#define OP_PARM_Vdq (OP_PARM_V+OP_PARM_dq)
1448#define OP_PARM_Wps (OP_PARM_W+OP_PARM_ps)
1449#define OP_PARM_Wpd (OP_PARM_W+OP_PARM_pd)
1450#define OP_PARM_Wss (OP_PARM_W+OP_PARM_ss)
1451#define OP_PARM_Ww (OP_PARM_W+OP_PARM_w)
1452#define OP_PARM_Wd (OP_PARM_W+OP_PARM_d)
1453#define OP_PARM_Wq (OP_PARM_W+OP_PARM_q)
1454#define OP_PARM_Wdq (OP_PARM_W+OP_PARM_dq)
1455#define OP_PARM_Wqq (OP_PARM_W+OP_PARM_qq)
1456#define OP_PARM_Ppi (OP_PARM_P+OP_PARM_pi)
1457#define OP_PARM_Qpi (OP_PARM_Q+OP_PARM_pi)
1458#define OP_PARM_Qdq (OP_PARM_Q+OP_PARM_dq)
1459#define OP_PARM_Vsd (OP_PARM_V+OP_PARM_sd)
1460#define OP_PARM_Wsd (OP_PARM_W+OP_PARM_sd)
1461#define OP_PARM_Vqq (OP_PARM_V+OP_PARM_qq)
1462#define OP_PARM_Pdq (OP_PARM_P+OP_PARM_dq)
1463#define OP_PARM_Ups (OP_PARM_U+OP_PARM_ps)
1464#define OP_PARM_Upd (OP_PARM_U+OP_PARM_pd)
1465#define OP_PARM_Udq (OP_PARM_U+OP_PARM_dq)
1466#define OP_PARM_Lx (OP_PARM_L+OP_PARM_x)
1467
1468/* For making IEM / bs3-cpu-generated-1 happy: */
1469#define OP_PARM_Ew_WO OP_PARM_Ew /**< Annotates write only operand. */
1470#define OP_PARM_Ed_WO OP_PARM_Ed /**< Annotates write only operand. */
1471#define OP_PARM_Eq (OP_PARM_E+OP_PARM_q)
1472#define OP_PARM_Eq_WO OP_PARM_Eq /**< Annotates write only operand. */
1473#define OP_PARM_Ey_WO OP_PARM_Ey /**< Annotates write only operand. */
1474#define OP_PARM_Gv_RO OP_PARM_Gv /**< Annotates read only first operand (default is readwrite). */
1475#define OP_PARM_HssHi OP_PARM_Hx /**< Register referenced by VEX.vvvv, bits [127:32]. */
1476#define OP_PARM_HsdHi OP_PARM_Hx /**< Register referenced by VEX.vvvv, bits [127:64]. */
1477#define OP_PARM_HqHi OP_PARM_Hx /**< Register referenced by VEX.vvvv, bits [127:64]. */
1478#define OP_PARM_M_RO OP_PARM_M /**< Annotates read only memory of variable operand size (xrstor). */
1479#define OP_PARM_M_RW OP_PARM_M /**< Annotates read-write memory of variable operand size (xsave). */
1480#define OP_PARM_Mb_RO OP_PARM_Mb /**< Annotates read only memory byte operand. */
1481#define OP_PARM_Md_RO OP_PARM_Md /**< Annotates read only memory operand. */
1482#define OP_PARM_MVx_RO OP_PARM_MVx /**< Annotates read only memory operand. */
1483#define OP_PARM_Md_WO OP_PARM_Md /**< Annotates write only memory operand. */
1484#define OP_PARM_Mdq_WO OP_PARM_Mdq /**< Annotates write only memory operand. */
1485#define OP_PARM_Mq_WO OP_PARM_Mq /**< Annotates write only memory quad word operand. */
1486#define OP_PARM_Mps_WO OP_PARM_Mps /**< Annotates write only memory operand. */
1487#define OP_PARM_Mpd_WO OP_PARM_Mpd /**< Annotates write only memory operand. */
1488#define OP_PARM_Mx_WO OP_PARM_Mx /**< Annotates write only memory operand. */
1489#define OP_PARM_MVx_WO OP_PARM_MVx /**< Annotates write only memory operand. */
1490#define OP_PARM_PdZx_WO OP_PARM_Pd /**< Annotates write only operand and zero extends to 64-bit. */
1491#define OP_PARM_Pq_WO OP_PARM_Pq /**< Annotates write only operand. */
1492#define OP_PARM_Qq_WO OP_PARM_Qq /**< Annotates write only operand. */
1493#define OP_PARM_Nq OP_PARM_Qq /**< Missing 'N' class (MMX reg selected by modrm.mem) in disasm. */
1494#define OP_PARM_Uq (OP_PARM_U+OP_PARM_q)
1495#define OP_PARM_UqHi (OP_PARM_U+OP_PARM_dq)
1496#define OP_PARM_Uss (OP_PARM_U+OP_PARM_ss)
1497#define OP_PARM_Uss_WO OP_PARM_Uss /**< Annotates write only operand. */
1498#define OP_PARM_Usd (OP_PARM_U+OP_PARM_sd)
1499#define OP_PARM_Usd_WO OP_PARM_Usd /**< Annotates write only operand. */
1500#define OP_PARM_Vd (OP_PARM_V+OP_PARM_d)
1501#define OP_PARM_Vd_WO OP_PARM_Vd /**< Annotates write only operand. */
1502#define OP_PARM_VdZx_WO OP_PARM_Vd /**< Annotates that the registers get their upper bits cleared */
1503#define OP_PARM_Vdq_WO OP_PARM_Vdq /**< Annotates that only YMM/XMM[127:64] are accessed. */
1504#define OP_PARM_Vpd_WO OP_PARM_Vpd /**< Annotates write only operand. */
1505#define OP_PARM_Vps_WO OP_PARM_Vps /**< Annotates write only operand. */
1506#define OP_PARM_Vq_WO OP_PARM_Vq /**< Annotates write only operand. */
1507#define OP_PARM_VqHi OP_PARM_Vdq /**< Annotates that only YMM/XMM[127:64] are accessed. */
1508#define OP_PARM_VqHi_WO OP_PARM_Vdq /**< Annotates that only YMM/XMM[127:64] are written. */
1509#define OP_PARM_VqZx_WO OP_PARM_Vq /**< Annotates that the registers get their upper bits cleared */
1510#define OP_PARM_Vqq_WO OP_PARM_Vq /**< Annotates write only operand. */
1511#define OP_PARM_VsdZx_WO OP_PARM_Vsd /**< Annotates that the registers get their upper bits cleared. */
1512#define OP_PARM_VssZx_WO OP_PARM_Vss /**< Annotates that the registers get their upper bits cleared. */
1513#define OP_PARM_Vss_WO OP_PARM_Vss /**< Annotates write only operand. */
1514#define OP_PARM_Vsd_WO OP_PARM_Vsd /**< Annotates write only operand. */
1515#define OP_PARM_Vx_WO OP_PARM_Vx /**< Annotates write only operand. */
1516#define OP_PARM_Wpd_WO OP_PARM_Wpd /**< Annotates write only operand. */
1517#define OP_PARM_Wps_WO OP_PARM_Wps /**< Annotates write only operand. */
1518#define OP_PARM_Wq_WO OP_PARM_Wq /**< Annotates write only operand. */
1519#define OP_PARM_WqZxReg_WO OP_PARM_Wq /**< Annotates that register targets get their upper bits cleared. */
1520#define OP_PARM_Wss_WO OP_PARM_Wss /**< Annotates write only operand. */
1521#define OP_PARM_Wsd_WO OP_PARM_Wsd /**< Annotates write only operand. */
1522#define OP_PARM_Wx_WO OP_PARM_Wx /**< Annotates write only operand. */
1523
1524/** @} */
1525
1526#endif /* !VBOX_INCLUDED_disopcode_x86_amd64_h */
1527
Note: See TracBrowser for help on using the repository browser.

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