OLD | NEW |
1 /* Declarations for Intel 80386 opcode table | 1 /* Declarations for Intel 80386 opcode table |
2 Copyright 2007, 2008, 2009, 2010, 2012 | 2 Copyright 2007, 2008, 2009, 2010, 2012 |
3 Free Software Foundation, Inc. | 3 Free Software Foundation, Inc. |
4 | 4 |
5 This file is part of the GNU opcodes library. | 5 This file is part of the GNU opcodes library. |
6 | 6 |
7 This library is free software; you can redistribute it and/or modify | 7 This library is free software; you can redistribute it and/or modify |
8 it under the terms of the GNU General Public License as published by | 8 it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 3, or (at your option) | 9 the Free Software Foundation; either version 3, or (at your option) |
10 any later version. | 10 any later version. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 /* ABM New Instructions required */ | 87 /* ABM New Instructions required */ |
88 CpuABM, | 88 CpuABM, |
89 /* SSE4.1 support required */ | 89 /* SSE4.1 support required */ |
90 CpuSSE4_1, | 90 CpuSSE4_1, |
91 /* SSE4.2 support required */ | 91 /* SSE4.2 support required */ |
92 CpuSSE4_2, | 92 CpuSSE4_2, |
93 /* AVX support required */ | 93 /* AVX support required */ |
94 CpuAVX, | 94 CpuAVX, |
95 /* AVX2 support required */ | 95 /* AVX2 support required */ |
96 CpuAVX2, | 96 CpuAVX2, |
| 97 /* Intel AVX-512 Foundation Instructions support required */ |
| 98 CpuAVX512F, |
| 99 /* Intel AVX-512 Conflict Detection Instructions support required */ |
| 100 CpuAVX512CD, |
| 101 /* Intel AVX-512 Exponential and Reciprocal Instructions support |
| 102 required */ |
| 103 CpuAVX512ER, |
| 104 /* Intel AVX-512 Prefetch Instructions support required */ |
| 105 CpuAVX512PF, |
97 /* Intel L1OM support required */ | 106 /* Intel L1OM support required */ |
98 CpuL1OM, | 107 CpuL1OM, |
99 /* Intel K1OM support required */ | 108 /* Intel K1OM support required */ |
100 CpuK1OM, | 109 CpuK1OM, |
101 /* Xsave/xrstor New Instructions support required */ | 110 /* Xsave/xrstor New Instructions support required */ |
102 CpuXsave, | 111 CpuXsave, |
103 /* Xsaveopt New Instructions support required */ | 112 /* Xsaveopt New Instructions support required */ |
104 CpuXsaveopt, | 113 CpuXsaveopt, |
105 /* AES support required */ | 114 /* AES support required */ |
106 CpuAES, | 115 CpuAES, |
107 /* PCLMUL support required */ | 116 /* PCLMUL support required */ |
108 CpuPCLMUL, | 117 CpuPCLMUL, |
109 /* FMA support required */ | 118 /* FMA support required */ |
110 CpuFMA, | 119 CpuFMA, |
111 /* FMA4 support required */ | 120 /* FMA4 support required */ |
112 CpuFMA4, | 121 CpuFMA4, |
113 /* XOP support required */ | 122 /* XOP support required */ |
114 CpuXOP, | 123 CpuXOP, |
115 /* LWP support required */ | 124 /* LWP support required */ |
116 CpuLWP, | 125 CpuLWP, |
117 /* BMI support required */ | 126 /* BMI support required */ |
118 CpuBMI, | 127 CpuBMI, |
119 /* TBM support required */ | 128 /* TBM support required */ |
120 CpuTBM, | 129 CpuTBM, |
121 /* MOVBE Instruction support required */ | 130 /* MOVBE Instruction support required */ |
122 CpuMovbe, | 131 CpuMovbe, |
| 132 /* CMPXCHG16B instruction support required. */ |
| 133 CpuCX16, |
123 /* EPT Instructions required */ | 134 /* EPT Instructions required */ |
124 CpuEPT, | 135 CpuEPT, |
125 /* RDTSCP Instruction support required */ | 136 /* RDTSCP Instruction support required */ |
126 CpuRdtscp, | 137 CpuRdtscp, |
127 /* FSGSBASE Instructions required */ | 138 /* FSGSBASE Instructions required */ |
128 CpuFSGSBase, | 139 CpuFSGSBase, |
129 /* RDRND Instructions required */ | 140 /* RDRND Instructions required */ |
130 CpuRdRnd, | 141 CpuRdRnd, |
131 /* F16C Instructions required */ | 142 /* F16C Instructions required */ |
132 CpuF16C, | 143 CpuF16C, |
133 /* Intel BMI2 support required */ | 144 /* Intel BMI2 support required */ |
134 CpuBMI2, | 145 CpuBMI2, |
135 /* LZCNT support required */ | 146 /* LZCNT support required */ |
136 CpuLZCNT, | 147 CpuLZCNT, |
137 /* HLE support required */ | 148 /* HLE support required */ |
138 CpuHLE, | 149 CpuHLE, |
139 /* RTM support required */ | 150 /* RTM support required */ |
140 CpuRTM, | 151 CpuRTM, |
141 /* INVPCID Instructions required */ | 152 /* INVPCID Instructions required */ |
142 CpuINVPCID, | 153 CpuINVPCID, |
143 /* VMFUNC Instruction required */ | 154 /* VMFUNC Instruction required */ |
144 CpuVMFUNC, | 155 CpuVMFUNC, |
| 156 /* Intel MPX Instructions required */ |
| 157 CpuMPX, |
145 /* 64bit support available, used by -march= in assembler. */ | 158 /* 64bit support available, used by -march= in assembler. */ |
146 CpuLM, | 159 CpuLM, |
147 /* RDRSEED instruction required. */ | 160 /* RDRSEED instruction required. */ |
148 CpuRDSEED, | 161 CpuRDSEED, |
149 /* Multi-presisionn add-carry instructions are required. */ | 162 /* Multi-presisionn add-carry instructions are required. */ |
150 CpuADX, | 163 CpuADX, |
151 /* Supports prefetchw instruction. */ | 164 /* Supports prefetchw and prefetch instructions. */ |
152 CpuPRFCHW, | 165 CpuPRFCHW, |
| 166 /* SMAP instructions required. */ |
| 167 CpuSMAP, |
| 168 /* SHA instructions required. */ |
| 169 CpuSHA, |
| 170 /* VREX support required */ |
| 171 CpuVREX, |
153 /* 64bit support required */ | 172 /* 64bit support required */ |
154 Cpu64, | 173 Cpu64, |
155 /* Not supported in the 64bit mode */ | 174 /* Not supported in the 64bit mode */ |
156 CpuNo64, | 175 CpuNo64, |
157 /* The last bitfield in i386_cpu_flags. */ | 176 /* The last bitfield in i386_cpu_flags. */ |
158 CpuMax = CpuNo64 | 177 CpuMax = CpuNo64 |
159 }; | 178 }; |
160 | 179 |
161 #define CpuNumOfUints \ | 180 #define CpuNumOfUints \ |
162 (CpuMax / sizeof (unsigned int) / CHAR_BIT + 1) | 181 (CpuMax / sizeof (unsigned int) / CHAR_BIT + 1) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 unsigned int cpusvme:1; | 216 unsigned int cpusvme:1; |
198 unsigned int cpuvmx:1; | 217 unsigned int cpuvmx:1; |
199 unsigned int cpusmx:1; | 218 unsigned int cpusmx:1; |
200 unsigned int cpussse3:1; | 219 unsigned int cpussse3:1; |
201 unsigned int cpusse4a:1; | 220 unsigned int cpusse4a:1; |
202 unsigned int cpuabm:1; | 221 unsigned int cpuabm:1; |
203 unsigned int cpusse4_1:1; | 222 unsigned int cpusse4_1:1; |
204 unsigned int cpusse4_2:1; | 223 unsigned int cpusse4_2:1; |
205 unsigned int cpuavx:1; | 224 unsigned int cpuavx:1; |
206 unsigned int cpuavx2:1; | 225 unsigned int cpuavx2:1; |
| 226 unsigned int cpuavx512f:1; |
| 227 unsigned int cpuavx512cd:1; |
| 228 unsigned int cpuavx512er:1; |
| 229 unsigned int cpuavx512pf:1; |
207 unsigned int cpul1om:1; | 230 unsigned int cpul1om:1; |
208 unsigned int cpuk1om:1; | 231 unsigned int cpuk1om:1; |
209 unsigned int cpuxsave:1; | 232 unsigned int cpuxsave:1; |
210 unsigned int cpuxsaveopt:1; | 233 unsigned int cpuxsaveopt:1; |
211 unsigned int cpuaes:1; | 234 unsigned int cpuaes:1; |
212 unsigned int cpupclmul:1; | 235 unsigned int cpupclmul:1; |
213 unsigned int cpufma:1; | 236 unsigned int cpufma:1; |
214 unsigned int cpufma4:1; | 237 unsigned int cpufma4:1; |
215 unsigned int cpuxop:1; | 238 unsigned int cpuxop:1; |
216 unsigned int cpulwp:1; | 239 unsigned int cpulwp:1; |
217 unsigned int cpubmi:1; | 240 unsigned int cpubmi:1; |
218 unsigned int cputbm:1; | 241 unsigned int cputbm:1; |
219 unsigned int cpumovbe:1; | 242 unsigned int cpumovbe:1; |
| 243 unsigned int cpucx16:1; |
220 unsigned int cpuept:1; | 244 unsigned int cpuept:1; |
221 unsigned int cpurdtscp:1; | 245 unsigned int cpurdtscp:1; |
222 unsigned int cpufsgsbase:1; | 246 unsigned int cpufsgsbase:1; |
223 unsigned int cpurdrnd:1; | 247 unsigned int cpurdrnd:1; |
224 unsigned int cpuf16c:1; | 248 unsigned int cpuf16c:1; |
225 unsigned int cpubmi2:1; | 249 unsigned int cpubmi2:1; |
226 unsigned int cpulzcnt:1; | 250 unsigned int cpulzcnt:1; |
227 unsigned int cpuhle:1; | 251 unsigned int cpuhle:1; |
228 unsigned int cpurtm:1; | 252 unsigned int cpurtm:1; |
229 unsigned int cpuinvpcid:1; | 253 unsigned int cpuinvpcid:1; |
230 unsigned int cpuvmfunc:1; | 254 unsigned int cpuvmfunc:1; |
| 255 unsigned int cpumpx:1; |
231 unsigned int cpulm:1; | 256 unsigned int cpulm:1; |
232 unsigned int cpurdseed:1; | 257 unsigned int cpurdseed:1; |
233 unsigned int cpuadx:1; | 258 unsigned int cpuadx:1; |
234 unsigned int cpuprfchw:1; | 259 unsigned int cpuprfchw:1; |
| 260 unsigned int cpusmap:1; |
| 261 unsigned int cpusha:1; |
| 262 unsigned int cpuvrex:1; |
235 unsigned int cpu64:1; | 263 unsigned int cpu64:1; |
236 unsigned int cpuno64:1; | 264 unsigned int cpuno64:1; |
237 #ifdef CpuUnused | 265 #ifdef CpuUnused |
238 unsigned int unused:(CpuNumOfBits - CpuUnused); | 266 unsigned int unused:(CpuNumOfBits - CpuUnused); |
239 #endif | 267 #endif |
240 } bitfield; | 268 } bitfield; |
241 unsigned int array[CpuNumOfUints]; | 269 unsigned int array[CpuNumOfUints]; |
242 } i386_cpu_flags; | 270 } i386_cpu_flags; |
243 | 271 |
244 /* Position of opcode_modifier bits. */ | 272 /* Position of opcode_modifier bits. */ |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
292 /* s suffix on instruction illegal */ | 320 /* s suffix on instruction illegal */ |
293 No_sSuf, | 321 No_sSuf, |
294 /* q suffix on instruction illegal */ | 322 /* q suffix on instruction illegal */ |
295 No_qSuf, | 323 No_qSuf, |
296 /* long double suffix on instruction illegal */ | 324 /* long double suffix on instruction illegal */ |
297 No_ldSuf, | 325 No_ldSuf, |
298 /* instruction needs FWAIT */ | 326 /* instruction needs FWAIT */ |
299 FWait, | 327 FWait, |
300 /* quick test for string instructions */ | 328 /* quick test for string instructions */ |
301 IsString, | 329 IsString, |
| 330 /* quick test if branch instruction is MPX supported */ |
| 331 BNDPrefixOk, |
302 /* quick test for lockable instructions */ | 332 /* quick test for lockable instructions */ |
303 IsLockable, | 333 IsLockable, |
304 /* fake an extra reg operand for clr, imul and special register | 334 /* fake an extra reg operand for clr, imul and special register |
305 processing for some instructions. */ | 335 processing for some instructions. */ |
306 RegKludge, | 336 RegKludge, |
307 /* The first operand must be xmm0 */ | 337 /* The first operand must be xmm0 */ |
308 FirstXmm0, | 338 FirstXmm0, |
309 /* An implicit xmm0 as the first operand */ | 339 /* An implicit xmm0 as the first operand */ |
310 Implicit1stXmm0, | 340 Implicit1stXmm0, |
311 /* The HLE prefix is OK: | 341 /* The HLE prefix is OK: |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 2: 3 source operands. | 424 2: 3 source operands. |
395 */ | 425 */ |
396 #define XOP2SOURCES 1 | 426 #define XOP2SOURCES 1 |
397 #define VEX3SOURCES 2 | 427 #define VEX3SOURCES 2 |
398 VexSources, | 428 VexSources, |
399 /* instruction has VEX 8 bit imm */ | 429 /* instruction has VEX 8 bit imm */ |
400 VexImmExt, | 430 VexImmExt, |
401 /* Instruction with vector SIB byte: | 431 /* Instruction with vector SIB byte: |
402 1: 128bit vector register. | 432 1: 128bit vector register. |
403 2: 256bit vector register. | 433 2: 256bit vector register. |
| 434 3: 512bit vector register. |
404 */ | 435 */ |
405 #define VecSIB128 1 | 436 #define VecSIB128 1 |
406 #define VecSIB256 2 | 437 #define VecSIB256 2 |
| 438 #define VecSIB512 3 |
407 VecSIB, | 439 VecSIB, |
408 /* SSE to AVX support required */ | 440 /* SSE to AVX support required */ |
409 SSE2AVX, | 441 SSE2AVX, |
410 /* No AVX equivalent */ | 442 /* No AVX equivalent */ |
411 NoAVX, | 443 NoAVX, |
| 444 |
| 445 /* insn has EVEX prefix: |
| 446 1: 512bit EVEX prefix. |
| 447 2: 128bit EVEX prefix. |
| 448 3: 256bit EVEX prefix. |
| 449 4: Length-ignored (LIG) EVEX prefix. |
| 450 */ |
| 451 #define EVEX512 1 |
| 452 #define EVEX128 2 |
| 453 #define EVEX256 3 |
| 454 #define EVEXLIG 4 |
| 455 EVex, |
| 456 |
| 457 /* AVX512 masking support: |
| 458 1: Zeroing-masking. |
| 459 2: Merging-masking. |
| 460 3: Both zeroing and merging masking. |
| 461 */ |
| 462 #define ZEROING_MASKING 1 |
| 463 #define MERGING_MASKING 2 |
| 464 #define BOTH_MASKING 3 |
| 465 Masking, |
| 466 |
| 467 /* Input element size of vector insn: |
| 468 0: 32bit. |
| 469 1: 64bit. |
| 470 */ |
| 471 VecESize, |
| 472 |
| 473 /* Broadcast factor. |
| 474 0: No broadcast. |
| 475 1: 1to16 broadcast. |
| 476 2: 1to8 broadcast. |
| 477 */ |
| 478 #define NO_BROADCAST 0 |
| 479 #define BROADCAST_1TO16 1 |
| 480 #define BROADCAST_1TO8 2 |
| 481 Broadcast, |
| 482 |
| 483 /* Static rounding control is supported. */ |
| 484 StaticRounding, |
| 485 |
| 486 /* Supress All Exceptions is supported. */ |
| 487 SAE, |
| 488 |
| 489 /* Copressed Disp8*N attribute. */ |
| 490 Disp8MemShift, |
| 491 |
| 492 /* Default mask isn't allowed. */ |
| 493 NoDefMask, |
| 494 |
412 /* Compatible with old (<= 2.8.1) versions of gcc */ | 495 /* Compatible with old (<= 2.8.1) versions of gcc */ |
413 OldGcc, | 496 OldGcc, |
414 /* AT&T mnemonic. */ | 497 /* AT&T mnemonic. */ |
415 ATTMnemonic, | 498 ATTMnemonic, |
416 /* AT&T syntax. */ | 499 /* AT&T syntax. */ |
417 ATTSyntax, | 500 ATTSyntax, |
418 /* Intel syntax. */ | 501 /* Intel syntax. */ |
419 IntelSyntax, | 502 IntelSyntax, |
420 /* The last bitfield in i386_opcode_modifier. */ | 503 /* The last bitfield in i386_opcode_modifier. */ |
421 Opcode_Modifier_Max | 504 Opcode_Modifier_Max |
(...skipping 20 matching lines...) Expand all Loading... |
442 unsigned int ignoresize:1; | 525 unsigned int ignoresize:1; |
443 unsigned int defaultsize:1; | 526 unsigned int defaultsize:1; |
444 unsigned int no_bsuf:1; | 527 unsigned int no_bsuf:1; |
445 unsigned int no_wsuf:1; | 528 unsigned int no_wsuf:1; |
446 unsigned int no_lsuf:1; | 529 unsigned int no_lsuf:1; |
447 unsigned int no_ssuf:1; | 530 unsigned int no_ssuf:1; |
448 unsigned int no_qsuf:1; | 531 unsigned int no_qsuf:1; |
449 unsigned int no_ldsuf:1; | 532 unsigned int no_ldsuf:1; |
450 unsigned int fwait:1; | 533 unsigned int fwait:1; |
451 unsigned int isstring:1; | 534 unsigned int isstring:1; |
| 535 unsigned int bndprefixok:1; |
452 unsigned int islockable:1; | 536 unsigned int islockable:1; |
453 unsigned int regkludge:1; | 537 unsigned int regkludge:1; |
454 unsigned int firstxmm0:1; | 538 unsigned int firstxmm0:1; |
455 unsigned int implicit1stxmm0:1; | 539 unsigned int implicit1stxmm0:1; |
456 unsigned int hleprefixok:2; | 540 unsigned int hleprefixok:2; |
457 unsigned int repprefixok:1; | 541 unsigned int repprefixok:1; |
458 unsigned int todword:1; | 542 unsigned int todword:1; |
459 unsigned int toqword:1; | 543 unsigned int toqword:1; |
460 unsigned int addrprefixop0:1; | 544 unsigned int addrprefixop0:1; |
461 unsigned int isprefix:1; | 545 unsigned int isprefix:1; |
462 unsigned int immext:1; | 546 unsigned int immext:1; |
463 unsigned int norex64:1; | 547 unsigned int norex64:1; |
464 unsigned int rex64:1; | 548 unsigned int rex64:1; |
465 unsigned int ugh:1; | 549 unsigned int ugh:1; |
466 unsigned int vex:2; | 550 unsigned int vex:2; |
467 unsigned int vexvvvv:2; | 551 unsigned int vexvvvv:2; |
468 unsigned int vexw:2; | 552 unsigned int vexw:2; |
469 unsigned int vexopcode:3; | 553 unsigned int vexopcode:3; |
470 unsigned int vexsources:2; | 554 unsigned int vexsources:2; |
471 unsigned int veximmext:1; | 555 unsigned int veximmext:1; |
472 unsigned int vecsib:2; | 556 unsigned int vecsib:2; |
473 unsigned int sse2avx:1; | 557 unsigned int sse2avx:1; |
474 unsigned int noavx:1; | 558 unsigned int noavx:1; |
| 559 unsigned int evex:3; |
| 560 unsigned int masking:2; |
| 561 unsigned int vecesize:1; |
| 562 unsigned int broadcast:3; |
| 563 unsigned int staticrounding:1; |
| 564 unsigned int sae:1; |
| 565 unsigned int disp8memshift:3; |
| 566 unsigned int nodefmask:1; |
475 unsigned int oldgcc:1; | 567 unsigned int oldgcc:1; |
476 unsigned int attmnemonic:1; | 568 unsigned int attmnemonic:1; |
477 unsigned int attsyntax:1; | 569 unsigned int attsyntax:1; |
478 unsigned int intelsyntax:1; | 570 unsigned int intelsyntax:1; |
479 } i386_opcode_modifier; | 571 } i386_opcode_modifier; |
480 | 572 |
481 /* Position of operand_type bits. */ | 573 /* Position of operand_type bits. */ |
482 | 574 |
483 enum | 575 enum |
484 { | 576 { |
485 /* 8bit register */ | 577 /* 8bit register */ |
486 Reg8 = 0, | 578 Reg8 = 0, |
487 /* 16bit register */ | 579 /* 16bit register */ |
488 Reg16, | 580 Reg16, |
489 /* 32bit register */ | 581 /* 32bit register */ |
490 Reg32, | 582 Reg32, |
491 /* 64bit register */ | 583 /* 64bit register */ |
492 Reg64, | 584 Reg64, |
493 /* Floating pointer stack register */ | 585 /* Floating pointer stack register */ |
494 FloatReg, | 586 FloatReg, |
495 /* MMX register */ | 587 /* MMX register */ |
496 RegMMX, | 588 RegMMX, |
497 /* SSE register */ | 589 /* SSE register */ |
498 RegXMM, | 590 RegXMM, |
499 /* AVX registers */ | 591 /* AVX registers */ |
500 RegYMM, | 592 RegYMM, |
| 593 /* AVX512 registers */ |
| 594 RegZMM, |
| 595 /* Vector Mask registers */ |
| 596 RegMask, |
501 /* Control register */ | 597 /* Control register */ |
502 Control, | 598 Control, |
503 /* Debug register */ | 599 /* Debug register */ |
504 Debug, | 600 Debug, |
505 /* Test register */ | 601 /* Test register */ |
506 Test, | 602 Test, |
507 /* 2 bit segment register */ | 603 /* 2 bit segment register */ |
508 SReg2, | 604 SReg2, |
509 /* 3 bit segment register */ | 605 /* 3 bit segment register */ |
510 SReg3, | 606 SReg3, |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
570 /* FWORD memory. 6 byte */ | 666 /* FWORD memory. 6 byte */ |
571 Fword, | 667 Fword, |
572 /* QWORD memory. 8 byte */ | 668 /* QWORD memory. 8 byte */ |
573 Qword, | 669 Qword, |
574 /* TBYTE memory. 10 byte */ | 670 /* TBYTE memory. 10 byte */ |
575 Tbyte, | 671 Tbyte, |
576 /* XMMWORD memory. */ | 672 /* XMMWORD memory. */ |
577 Xmmword, | 673 Xmmword, |
578 /* YMMWORD memory. */ | 674 /* YMMWORD memory. */ |
579 Ymmword, | 675 Ymmword, |
| 676 /* ZMMWORD memory. */ |
| 677 Zmmword, |
580 /* Unspecified memory size. */ | 678 /* Unspecified memory size. */ |
581 Unspecified, | 679 Unspecified, |
582 /* Any memory size. */ | 680 /* Any memory size. */ |
583 Anysize, | 681 Anysize, |
584 | 682 |
585 /* Vector 4 bit immediate. */ | 683 /* Vector 4 bit immediate. */ |
586 Vec_Imm4, | 684 Vec_Imm4, |
587 | 685 |
| 686 /* Bound register. */ |
| 687 RegBND, |
| 688 |
| 689 /* Vector 8bit displacement */ |
| 690 Vec_Disp8, |
| 691 |
588 /* The last bitfield in i386_operand_type. */ | 692 /* The last bitfield in i386_operand_type. */ |
589 OTMax | 693 OTMax |
590 }; | 694 }; |
591 | 695 |
592 #define OTNumOfUints \ | 696 #define OTNumOfUints \ |
593 (OTMax / sizeof (unsigned int) / CHAR_BIT + 1) | 697 (OTMax / sizeof (unsigned int) / CHAR_BIT + 1) |
594 #define OTNumOfBits \ | 698 #define OTNumOfBits \ |
595 (OTNumOfUints * sizeof (unsigned int) * CHAR_BIT) | 699 (OTNumOfUints * sizeof (unsigned int) * CHAR_BIT) |
596 | 700 |
597 /* If you get a compiler error for zero width of the unused field, | 701 /* If you get a compiler error for zero width of the unused field, |
598 comment it out. */ | 702 comment it out. */ |
599 #define OTUnused (OTMax + 1) | 703 #define OTUnused (OTMax + 1) |
600 | 704 |
601 typedef union i386_operand_type | 705 typedef union i386_operand_type |
602 { | 706 { |
603 struct | 707 struct |
604 { | 708 { |
605 unsigned int reg8:1; | 709 unsigned int reg8:1; |
606 unsigned int reg16:1; | 710 unsigned int reg16:1; |
607 unsigned int reg32:1; | 711 unsigned int reg32:1; |
608 unsigned int reg64:1; | 712 unsigned int reg64:1; |
609 unsigned int floatreg:1; | 713 unsigned int floatreg:1; |
610 unsigned int regmmx:1; | 714 unsigned int regmmx:1; |
611 unsigned int regxmm:1; | 715 unsigned int regxmm:1; |
612 unsigned int regymm:1; | 716 unsigned int regymm:1; |
| 717 unsigned int regzmm:1; |
| 718 unsigned int regmask:1; |
613 unsigned int control:1; | 719 unsigned int control:1; |
614 unsigned int debug:1; | 720 unsigned int debug:1; |
615 unsigned int test:1; | 721 unsigned int test:1; |
616 unsigned int sreg2:1; | 722 unsigned int sreg2:1; |
617 unsigned int sreg3:1; | 723 unsigned int sreg3:1; |
618 unsigned int imm1:1; | 724 unsigned int imm1:1; |
619 unsigned int imm8:1; | 725 unsigned int imm8:1; |
620 unsigned int imm8s:1; | 726 unsigned int imm8s:1; |
621 unsigned int imm16:1; | 727 unsigned int imm16:1; |
622 unsigned int imm32:1; | 728 unsigned int imm32:1; |
(...skipping 14 matching lines...) Expand all Loading... |
637 unsigned int regmem:1; | 743 unsigned int regmem:1; |
638 unsigned int mem:1; | 744 unsigned int mem:1; |
639 unsigned int byte:1; | 745 unsigned int byte:1; |
640 unsigned int word:1; | 746 unsigned int word:1; |
641 unsigned int dword:1; | 747 unsigned int dword:1; |
642 unsigned int fword:1; | 748 unsigned int fword:1; |
643 unsigned int qword:1; | 749 unsigned int qword:1; |
644 unsigned int tbyte:1; | 750 unsigned int tbyte:1; |
645 unsigned int xmmword:1; | 751 unsigned int xmmword:1; |
646 unsigned int ymmword:1; | 752 unsigned int ymmword:1; |
| 753 unsigned int zmmword:1; |
647 unsigned int unspecified:1; | 754 unsigned int unspecified:1; |
648 unsigned int anysize:1; | 755 unsigned int anysize:1; |
649 unsigned int vec_imm4:1; | 756 unsigned int vec_imm4:1; |
| 757 unsigned int regbnd:1; |
| 758 unsigned int vec_disp8:1; |
650 #ifdef OTUnused | 759 #ifdef OTUnused |
651 unsigned int unused:(OTNumOfBits - OTUnused); | 760 unsigned int unused:(OTNumOfBits - OTUnused); |
652 #endif | 761 #endif |
653 } bitfield; | 762 } bitfield; |
654 unsigned int array[OTNumOfUints]; | 763 unsigned int array[OTNumOfUints]; |
655 } i386_operand_type; | 764 } i386_operand_type; |
656 | 765 |
657 typedef struct insn_template | 766 typedef struct insn_template |
658 { | 767 { |
659 /* instruction name sans width suffix ("mov" for movl insns) */ | 768 /* instruction name sans width suffix ("mov" for movl insns) */ |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
701 extern const insn_template i386_optab[]; | 810 extern const insn_template i386_optab[]; |
702 | 811 |
703 /* these are for register name --> number & type hash lookup */ | 812 /* these are for register name --> number & type hash lookup */ |
704 typedef struct | 813 typedef struct |
705 { | 814 { |
706 char *reg_name; | 815 char *reg_name; |
707 i386_operand_type reg_type; | 816 i386_operand_type reg_type; |
708 unsigned char reg_flags; | 817 unsigned char reg_flags; |
709 #define RegRex 0x1 /* Extended register. */ | 818 #define RegRex 0x1 /* Extended register. */ |
710 #define RegRex64 0x2 /* Extended 8 bit register. */ | 819 #define RegRex64 0x2 /* Extended 8 bit register. */ |
| 820 #define RegVRex 0x4 /* Extended vector register. */ |
711 unsigned char reg_num; | 821 unsigned char reg_num; |
712 #define RegRip ((unsigned char ) ~0) | 822 #define RegRip ((unsigned char ) ~0) |
713 #define RegEip (RegRip - 1) | 823 #define RegEip (RegRip - 1) |
714 /* EIZ and RIZ are fake index registers. */ | 824 /* EIZ and RIZ are fake index registers. */ |
715 #define RegEiz (RegEip - 1) | 825 #define RegEiz (RegEip - 1) |
716 #define RegRiz (RegEiz - 1) | 826 #define RegRiz (RegEiz - 1) |
717 /* FLAT is a fake segment register (Intel mode). */ | 827 /* FLAT is a fake segment register (Intel mode). */ |
718 #define RegFlat ((unsigned char) ~0) | 828 #define RegFlat ((unsigned char) ~0) |
719 signed char dw2_regnum[2]; | 829 signed char dw2_regnum[2]; |
720 #define Dw2Inval (-1) | 830 #define Dw2Inval (-1) |
(...skipping 14 matching lines...) Expand all Loading... |
735 unsigned int seg_prefix; | 845 unsigned int seg_prefix; |
736 } | 846 } |
737 seg_entry; | 847 seg_entry; |
738 | 848 |
739 extern const seg_entry cs; | 849 extern const seg_entry cs; |
740 extern const seg_entry ds; | 850 extern const seg_entry ds; |
741 extern const seg_entry ss; | 851 extern const seg_entry ss; |
742 extern const seg_entry es; | 852 extern const seg_entry es; |
743 extern const seg_entry fs; | 853 extern const seg_entry fs; |
744 extern const seg_entry gs; | 854 extern const seg_entry gs; |
OLD | NEW |