| OLD | NEW |
| 1 /* Declarations for Intel 80386 opcode table | 1 /* Declarations for Intel 80386 opcode table |
| 2 Copyright 2007, 2008, 2009, 2010 | 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. |
| 11 | 11 |
| 12 It is distributed in the hope that it will be useful, but WITHOUT | 12 It is distributed in the hope that it will be useful, but WITHOUT |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 /* FSGSBASE Instructions required */ | 127 /* FSGSBASE Instructions required */ |
| 128 CpuFSGSBase, | 128 CpuFSGSBase, |
| 129 /* RDRND Instructions required */ | 129 /* RDRND Instructions required */ |
| 130 CpuRdRnd, | 130 CpuRdRnd, |
| 131 /* F16C Instructions required */ | 131 /* F16C Instructions required */ |
| 132 CpuF16C, | 132 CpuF16C, |
| 133 /* Intel BMI2 support required */ | 133 /* Intel BMI2 support required */ |
| 134 CpuBMI2, | 134 CpuBMI2, |
| 135 /* LZCNT support required */ | 135 /* LZCNT support required */ |
| 136 CpuLZCNT, | 136 CpuLZCNT, |
| 137 /* HLE support required */ |
| 138 CpuHLE, |
| 139 /* RTM support required */ |
| 140 CpuRTM, |
| 137 /* INVPCID Instructions required */ | 141 /* INVPCID Instructions required */ |
| 138 CpuINVPCID, | 142 CpuINVPCID, |
| 143 /* VMFUNC Instruction required */ |
| 144 CpuVMFUNC, |
| 139 /* 64bit support available, used by -march= in assembler. */ | 145 /* 64bit support available, used by -march= in assembler. */ |
| 140 CpuLM, | 146 CpuLM, |
| 147 /* RDRSEED instruction required. */ |
| 148 CpuRDSEED, |
| 149 /* Multi-presisionn add-carry instructions are required. */ |
| 150 CpuADX, |
| 151 /* Supports prefetchw instruction. */ |
| 152 CpuPRFCHW, |
| 141 /* 64bit support required */ | 153 /* 64bit support required */ |
| 142 Cpu64, | 154 Cpu64, |
| 143 /* Not supported in the 64bit mode */ | 155 /* Not supported in the 64bit mode */ |
| 144 CpuNo64, | 156 CpuNo64, |
| 145 /* The last bitfield in i386_cpu_flags. */ | 157 /* The last bitfield in i386_cpu_flags. */ |
| 146 CpuMax = CpuNo64 | 158 CpuMax = CpuNo64 |
| 147 }; | 159 }; |
| 148 | 160 |
| 149 #define CpuNumOfUints \ | 161 #define CpuNumOfUints \ |
| 150 (CpuMax / sizeof (unsigned int) / CHAR_BIT + 1) | 162 (CpuMax / sizeof (unsigned int) / CHAR_BIT + 1) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 unsigned int cpubmi:1; | 217 unsigned int cpubmi:1; |
| 206 unsigned int cputbm:1; | 218 unsigned int cputbm:1; |
| 207 unsigned int cpumovbe:1; | 219 unsigned int cpumovbe:1; |
| 208 unsigned int cpuept:1; | 220 unsigned int cpuept:1; |
| 209 unsigned int cpurdtscp:1; | 221 unsigned int cpurdtscp:1; |
| 210 unsigned int cpufsgsbase:1; | 222 unsigned int cpufsgsbase:1; |
| 211 unsigned int cpurdrnd:1; | 223 unsigned int cpurdrnd:1; |
| 212 unsigned int cpuf16c:1; | 224 unsigned int cpuf16c:1; |
| 213 unsigned int cpubmi2:1; | 225 unsigned int cpubmi2:1; |
| 214 unsigned int cpulzcnt:1; | 226 unsigned int cpulzcnt:1; |
| 227 unsigned int cpuhle:1; |
| 228 unsigned int cpurtm:1; |
| 215 unsigned int cpuinvpcid:1; | 229 unsigned int cpuinvpcid:1; |
| 230 unsigned int cpuvmfunc:1; |
| 216 unsigned int cpulm:1; | 231 unsigned int cpulm:1; |
| 232 unsigned int cpurdseed:1; |
| 233 unsigned int cpuadx:1; |
| 234 unsigned int cpuprfchw:1; |
| 217 unsigned int cpu64:1; | 235 unsigned int cpu64:1; |
| 218 unsigned int cpuno64:1; | 236 unsigned int cpuno64:1; |
| 219 #ifdef CpuUnused | 237 #ifdef CpuUnused |
| 220 unsigned int unused:(CpuNumOfBits - CpuUnused); | 238 unsigned int unused:(CpuNumOfBits - CpuUnused); |
| 221 #endif | 239 #endif |
| 222 } bitfield; | 240 } bitfield; |
| 223 unsigned int array[CpuNumOfUints]; | 241 unsigned int array[CpuNumOfUints]; |
| 224 } i386_cpu_flags; | 242 } i386_cpu_flags; |
| 225 | 243 |
| 226 /* Position of opcode_modifier bits. */ | 244 /* Position of opcode_modifier bits. */ |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 IsString, | 301 IsString, |
| 284 /* quick test for lockable instructions */ | 302 /* quick test for lockable instructions */ |
| 285 IsLockable, | 303 IsLockable, |
| 286 /* fake an extra reg operand for clr, imul and special register | 304 /* fake an extra reg operand for clr, imul and special register |
| 287 processing for some instructions. */ | 305 processing for some instructions. */ |
| 288 RegKludge, | 306 RegKludge, |
| 289 /* The first operand must be xmm0 */ | 307 /* The first operand must be xmm0 */ |
| 290 FirstXmm0, | 308 FirstXmm0, |
| 291 /* An implicit xmm0 as the first operand */ | 309 /* An implicit xmm0 as the first operand */ |
| 292 Implicit1stXmm0, | 310 Implicit1stXmm0, |
| 311 /* The HLE prefix is OK: |
| 312 1. With a LOCK prefix. |
| 313 2. With or without a LOCK prefix. |
| 314 3. With a RELEASE (0xf3) prefix. |
| 315 */ |
| 316 #define HLEPrefixNone 0 |
| 317 #define HLEPrefixLock 1 |
| 318 #define HLEPrefixAny 2 |
| 319 #define HLEPrefixRelease 3 |
| 320 HLEPrefixOk, |
| 321 /* An instruction on which a "rep" prefix is acceptable. */ |
| 322 RepPrefixOk, |
| 293 /* Convert to DWORD */ | 323 /* Convert to DWORD */ |
| 294 ToDword, | 324 ToDword, |
| 295 /* Convert to QWORD */ | 325 /* Convert to QWORD */ |
| 296 ToQword, | 326 ToQword, |
| 297 /* Address prefix changes operand 0 */ | 327 /* Address prefix changes operand 0 */ |
| 298 AddrPrefixOp0, | 328 AddrPrefixOp0, |
| 299 /* opcode is a prefix */ | 329 /* opcode is a prefix */ |
| 300 IsPrefix, | 330 IsPrefix, |
| 301 /* instruction has extension in 8 bit imm */ | 331 /* instruction has extension in 8 bit imm */ |
| 302 ImmExt, | 332 ImmExt, |
| 303 /* instruction don't need Rex64 prefix. */ | 333 /* instruction don't need Rex64 prefix. */ |
| 304 NoRex64, | 334 NoRex64, |
| 305 /* instruction require Rex64 prefix. */ | 335 /* instruction require Rex64 prefix. */ |
| 306 Rex64, | 336 Rex64, |
| 307 /* deprecated fp insn, gets a warning */ | 337 /* deprecated fp insn, gets a warning */ |
| 308 Ugh, | 338 Ugh, |
| 309 /* insn has VEX prefix: | 339 /* insn has VEX prefix: |
| 310 1: 128bit VEX prefix. | 340 1: 128bit VEX prefix. |
| 311 2: 256bit VEX prefix. | 341 2: 256bit VEX prefix. |
| 312 3: Scalar VEX prefix. | 342 3: Scalar VEX prefix. |
| 313 */ | 343 */ |
| 314 #define VEX128 1 | 344 #define VEX128 1 |
| 315 #define VEX256 2 | 345 #define VEX256 2 |
| 316 #define VEXScalar 3 | 346 #define VEXScalar 3 |
| 317 Vex, | 347 Vex, |
| 318 /* How to encode VEX.vvvv: | 348 /* How to encode VEX.vvvv: |
| 319 0: VEX.vvvv must be 1111b. | 349 0: VEX.vvvv must be 1111b. |
| 320 1: VEX.NDS. Register-only source is encoded in VEX.vvvv where | 350 1: VEX.NDS. Register-only source is encoded in VEX.vvvv where |
| 321 the content of source registers will be preserved. | 351 the content of source registers will be preserved. |
| 322 » VEX.DDS. The second register operand is encoded in VEX.vvvv | 352 » VEX.DDS. The second register operand is encoded in VEX.vvvv |
| 323 where the content of first source register will be overwritten | 353 where the content of first source register will be overwritten |
| 324 by the result. | 354 by the result. |
| 325 VEX.NDD2. The second destination register operand is encoded in | 355 VEX.NDD2. The second destination register operand is encoded in |
| 326 VEX.vvvv for instructions with 2 destination register operands. | 356 VEX.vvvv for instructions with 2 destination register operands. |
| 327 For assembler, there are no difference between VEX.NDS, VEX.DDS | 357 For assembler, there are no difference between VEX.NDS, VEX.DDS |
| 328 and VEX.NDD2. | 358 and VEX.NDD2. |
| 329 2. VEX.NDD. Register destination is encoded in VEX.vvvv for | 359 2. VEX.NDD. Register destination is encoded in VEX.vvvv for |
| 330 instructions with 1 destination register operand. | 360 instructions with 1 destination register operand. |
| 331 3. VEX.LWP. Register destination is encoded in VEX.vvvv and one | 361 3. VEX.LWP. Register destination is encoded in VEX.vvvv and one |
| 332 of the operands can access a memory location. | 362 of the operands can access a memory location. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 unsigned int no_lsuf:1; | 446 unsigned int no_lsuf:1; |
| 417 unsigned int no_ssuf:1; | 447 unsigned int no_ssuf:1; |
| 418 unsigned int no_qsuf:1; | 448 unsigned int no_qsuf:1; |
| 419 unsigned int no_ldsuf:1; | 449 unsigned int no_ldsuf:1; |
| 420 unsigned int fwait:1; | 450 unsigned int fwait:1; |
| 421 unsigned int isstring:1; | 451 unsigned int isstring:1; |
| 422 unsigned int islockable:1; | 452 unsigned int islockable:1; |
| 423 unsigned int regkludge:1; | 453 unsigned int regkludge:1; |
| 424 unsigned int firstxmm0:1; | 454 unsigned int firstxmm0:1; |
| 425 unsigned int implicit1stxmm0:1; | 455 unsigned int implicit1stxmm0:1; |
| 456 unsigned int hleprefixok:2; |
| 457 unsigned int repprefixok:1; |
| 426 unsigned int todword:1; | 458 unsigned int todword:1; |
| 427 unsigned int toqword:1; | 459 unsigned int toqword:1; |
| 428 unsigned int addrprefixop0:1; | 460 unsigned int addrprefixop0:1; |
| 429 unsigned int isprefix:1; | 461 unsigned int isprefix:1; |
| 430 unsigned int immext:1; | 462 unsigned int immext:1; |
| 431 unsigned int norex64:1; | 463 unsigned int norex64:1; |
| 432 unsigned int rex64:1; | 464 unsigned int rex64:1; |
| 433 unsigned int ugh:1; | 465 unsigned int ugh:1; |
| 434 unsigned int vex:2; | 466 unsigned int vex:2; |
| 435 unsigned int vexvvvv:2; | 467 unsigned int vexvvvv:2; |
| (...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 unsigned int base_opcode; | 667 unsigned int base_opcode; |
| 636 #define Opcode_D 0x2 /* Direction bit: | 668 #define Opcode_D 0x2 /* Direction bit: |
| 637 set if Reg --> Regmem; | 669 set if Reg --> Regmem; |
| 638 unset if Regmem --> Reg. */ | 670 unset if Regmem --> Reg. */ |
| 639 #define Opcode_FloatR 0x8 /* Bit to swap src/dest for float insns. */ | 671 #define Opcode_FloatR 0x8 /* Bit to swap src/dest for float insns. */ |
| 640 #define Opcode_FloatD 0x400 /* Direction bit for float insns. */ | 672 #define Opcode_FloatD 0x400 /* Direction bit for float insns. */ |
| 641 | 673 |
| 642 /* extension_opcode is the 3 bit extension for group <n> insns. | 674 /* extension_opcode is the 3 bit extension for group <n> insns. |
| 643 This field is also used to store the 8-bit opcode suffix for the | 675 This field is also used to store the 8-bit opcode suffix for the |
| 644 AMD 3DNow! instructions. | 676 AMD 3DNow! instructions. |
| 645 If this template has no extension opcode (the usual case) use None | 677 If this template has no extension opcode (the usual case) use None |
| 646 Instructions */ | 678 Instructions */ |
| 647 unsigned int extension_opcode; | 679 unsigned int extension_opcode; |
| 648 #define None 0xffff /* If no extension_opcode is possible. */ | 680 #define None 0xffff /* If no extension_opcode is possible. */ |
| 649 | 681 |
| 650 /* Opcode length. */ | 682 /* Opcode length. */ |
| 651 unsigned char opcode_length; | 683 unsigned char opcode_length; |
| 652 | 684 |
| 653 /* cpu feature flags */ | 685 /* cpu feature flags */ |
| 654 i386_cpu_flags cpu_flags; | 686 i386_cpu_flags cpu_flags; |
| 655 | 687 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 703 unsigned int seg_prefix; | 735 unsigned int seg_prefix; |
| 704 } | 736 } |
| 705 seg_entry; | 737 seg_entry; |
| 706 | 738 |
| 707 extern const seg_entry cs; | 739 extern const seg_entry cs; |
| 708 extern const seg_entry ds; | 740 extern const seg_entry ds; |
| 709 extern const seg_entry ss; | 741 extern const seg_entry ss; |
| 710 extern const seg_entry es; | 742 extern const seg_entry es; |
| 711 extern const seg_entry fs; | 743 extern const seg_entry fs; |
| 712 extern const seg_entry gs; | 744 extern const seg_entry gs; |
| OLD | NEW |