| 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 |