| Index: opcodes/i386-opc.h
|
| diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h
|
| index 598b22027289660586123b6fadb72271ab10f062..25eb976c77bc83cb8e7808049ffc1e96262e1b2a 100644
|
| --- a/opcodes/i386-opc.h
|
| +++ b/opcodes/i386-opc.h
|
| @@ -94,6 +94,15 @@ enum
|
| CpuAVX,
|
| /* AVX2 support required */
|
| CpuAVX2,
|
| + /* Intel AVX-512 Foundation Instructions support required */
|
| + CpuAVX512F,
|
| + /* Intel AVX-512 Conflict Detection Instructions support required */
|
| + CpuAVX512CD,
|
| + /* Intel AVX-512 Exponential and Reciprocal Instructions support
|
| + required */
|
| + CpuAVX512ER,
|
| + /* Intel AVX-512 Prefetch Instructions support required */
|
| + CpuAVX512PF,
|
| /* Intel L1OM support required */
|
| CpuL1OM,
|
| /* Intel K1OM support required */
|
| @@ -120,6 +129,8 @@ enum
|
| CpuTBM,
|
| /* MOVBE Instruction support required */
|
| CpuMovbe,
|
| + /* CMPXCHG16B instruction support required. */
|
| + CpuCX16,
|
| /* EPT Instructions required */
|
| CpuEPT,
|
| /* RDTSCP Instruction support required */
|
| @@ -142,14 +153,22 @@ enum
|
| CpuINVPCID,
|
| /* VMFUNC Instruction required */
|
| CpuVMFUNC,
|
| + /* Intel MPX Instructions required */
|
| + CpuMPX,
|
| /* 64bit support available, used by -march= in assembler. */
|
| CpuLM,
|
| /* RDRSEED instruction required. */
|
| CpuRDSEED,
|
| /* Multi-presisionn add-carry instructions are required. */
|
| CpuADX,
|
| - /* Supports prefetchw instruction. */
|
| + /* Supports prefetchw and prefetch instructions. */
|
| CpuPRFCHW,
|
| + /* SMAP instructions required. */
|
| + CpuSMAP,
|
| + /* SHA instructions required. */
|
| + CpuSHA,
|
| + /* VREX support required */
|
| + CpuVREX,
|
| /* 64bit support required */
|
| Cpu64,
|
| /* Not supported in the 64bit mode */
|
| @@ -204,6 +223,10 @@ typedef union i386_cpu_flags
|
| unsigned int cpusse4_2:1;
|
| unsigned int cpuavx:1;
|
| unsigned int cpuavx2:1;
|
| + unsigned int cpuavx512f:1;
|
| + unsigned int cpuavx512cd:1;
|
| + unsigned int cpuavx512er:1;
|
| + unsigned int cpuavx512pf:1;
|
| unsigned int cpul1om:1;
|
| unsigned int cpuk1om:1;
|
| unsigned int cpuxsave:1;
|
| @@ -217,6 +240,7 @@ typedef union i386_cpu_flags
|
| unsigned int cpubmi:1;
|
| unsigned int cputbm:1;
|
| unsigned int cpumovbe:1;
|
| + unsigned int cpucx16:1;
|
| unsigned int cpuept:1;
|
| unsigned int cpurdtscp:1;
|
| unsigned int cpufsgsbase:1;
|
| @@ -228,10 +252,14 @@ typedef union i386_cpu_flags
|
| unsigned int cpurtm:1;
|
| unsigned int cpuinvpcid:1;
|
| unsigned int cpuvmfunc:1;
|
| + unsigned int cpumpx:1;
|
| unsigned int cpulm:1;
|
| unsigned int cpurdseed:1;
|
| unsigned int cpuadx:1;
|
| unsigned int cpuprfchw:1;
|
| + unsigned int cpusmap:1;
|
| + unsigned int cpusha:1;
|
| + unsigned int cpuvrex:1;
|
| unsigned int cpu64:1;
|
| unsigned int cpuno64:1;
|
| #ifdef CpuUnused
|
| @@ -299,6 +327,8 @@ enum
|
| FWait,
|
| /* quick test for string instructions */
|
| IsString,
|
| + /* quick test if branch instruction is MPX supported */
|
| + BNDPrefixOk,
|
| /* quick test for lockable instructions */
|
| IsLockable,
|
| /* fake an extra reg operand for clr, imul and special register
|
| @@ -401,14 +431,67 @@ enum
|
| /* Instruction with vector SIB byte:
|
| 1: 128bit vector register.
|
| 2: 256bit vector register.
|
| + 3: 512bit vector register.
|
| */
|
| #define VecSIB128 1
|
| #define VecSIB256 2
|
| +#define VecSIB512 3
|
| VecSIB,
|
| /* SSE to AVX support required */
|
| SSE2AVX,
|
| /* No AVX equivalent */
|
| NoAVX,
|
| +
|
| + /* insn has EVEX prefix:
|
| + 1: 512bit EVEX prefix.
|
| + 2: 128bit EVEX prefix.
|
| + 3: 256bit EVEX prefix.
|
| + 4: Length-ignored (LIG) EVEX prefix.
|
| + */
|
| +#define EVEX512 1
|
| +#define EVEX128 2
|
| +#define EVEX256 3
|
| +#define EVEXLIG 4
|
| + EVex,
|
| +
|
| + /* AVX512 masking support:
|
| + 1: Zeroing-masking.
|
| + 2: Merging-masking.
|
| + 3: Both zeroing and merging masking.
|
| + */
|
| +#define ZEROING_MASKING 1
|
| +#define MERGING_MASKING 2
|
| +#define BOTH_MASKING 3
|
| + Masking,
|
| +
|
| + /* Input element size of vector insn:
|
| + 0: 32bit.
|
| + 1: 64bit.
|
| + */
|
| + VecESize,
|
| +
|
| + /* Broadcast factor.
|
| + 0: No broadcast.
|
| + 1: 1to16 broadcast.
|
| + 2: 1to8 broadcast.
|
| + */
|
| +#define NO_BROADCAST 0
|
| +#define BROADCAST_1TO16 1
|
| +#define BROADCAST_1TO8 2
|
| + Broadcast,
|
| +
|
| + /* Static rounding control is supported. */
|
| + StaticRounding,
|
| +
|
| + /* Supress All Exceptions is supported. */
|
| + SAE,
|
| +
|
| + /* Copressed Disp8*N attribute. */
|
| + Disp8MemShift,
|
| +
|
| + /* Default mask isn't allowed. */
|
| + NoDefMask,
|
| +
|
| /* Compatible with old (<= 2.8.1) versions of gcc */
|
| OldGcc,
|
| /* AT&T mnemonic. */
|
| @@ -449,6 +532,7 @@ typedef struct i386_opcode_modifier
|
| unsigned int no_ldsuf:1;
|
| unsigned int fwait:1;
|
| unsigned int isstring:1;
|
| + unsigned int bndprefixok:1;
|
| unsigned int islockable:1;
|
| unsigned int regkludge:1;
|
| unsigned int firstxmm0:1;
|
| @@ -472,6 +556,14 @@ typedef struct i386_opcode_modifier
|
| unsigned int vecsib:2;
|
| unsigned int sse2avx:1;
|
| unsigned int noavx:1;
|
| + unsigned int evex:3;
|
| + unsigned int masking:2;
|
| + unsigned int vecesize:1;
|
| + unsigned int broadcast:3;
|
| + unsigned int staticrounding:1;
|
| + unsigned int sae:1;
|
| + unsigned int disp8memshift:3;
|
| + unsigned int nodefmask:1;
|
| unsigned int oldgcc:1;
|
| unsigned int attmnemonic:1;
|
| unsigned int attsyntax:1;
|
| @@ -498,6 +590,10 @@ enum
|
| RegXMM,
|
| /* AVX registers */
|
| RegYMM,
|
| + /* AVX512 registers */
|
| + RegZMM,
|
| + /* Vector Mask registers */
|
| + RegMask,
|
| /* Control register */
|
| Control,
|
| /* Debug register */
|
| @@ -577,6 +673,8 @@ enum
|
| Xmmword,
|
| /* YMMWORD memory. */
|
| Ymmword,
|
| + /* ZMMWORD memory. */
|
| + Zmmword,
|
| /* Unspecified memory size. */
|
| Unspecified,
|
| /* Any memory size. */
|
| @@ -585,6 +683,12 @@ enum
|
| /* Vector 4 bit immediate. */
|
| Vec_Imm4,
|
|
|
| + /* Bound register. */
|
| + RegBND,
|
| +
|
| + /* Vector 8bit displacement */
|
| + Vec_Disp8,
|
| +
|
| /* The last bitfield in i386_operand_type. */
|
| OTMax
|
| };
|
| @@ -610,6 +714,8 @@ typedef union i386_operand_type
|
| unsigned int regmmx:1;
|
| unsigned int regxmm:1;
|
| unsigned int regymm:1;
|
| + unsigned int regzmm:1;
|
| + unsigned int regmask:1;
|
| unsigned int control:1;
|
| unsigned int debug:1;
|
| unsigned int test:1;
|
| @@ -644,9 +750,12 @@ typedef union i386_operand_type
|
| unsigned int tbyte:1;
|
| unsigned int xmmword:1;
|
| unsigned int ymmword:1;
|
| + unsigned int zmmword:1;
|
| unsigned int unspecified:1;
|
| unsigned int anysize:1;
|
| unsigned int vec_imm4:1;
|
| + unsigned int regbnd:1;
|
| + unsigned int vec_disp8:1;
|
| #ifdef OTUnused
|
| unsigned int unused:(OTNumOfBits - OTUnused);
|
| #endif
|
| @@ -708,6 +817,7 @@ typedef struct
|
| unsigned char reg_flags;
|
| #define RegRex 0x1 /* Extended register. */
|
| #define RegRex64 0x2 /* Extended 8 bit register. */
|
| +#define RegVRex 0x4 /* Extended vector register. */
|
| unsigned char reg_num;
|
| #define RegRip ((unsigned char ) ~0)
|
| #define RegEip (RegRip - 1)
|
|
|