/* Declarations for Intel 80386 opcode table
- Copyright (C) 2007-2017 Free Software Foundation, Inc.
+ Copyright (C) 2007-2018 Free Software Foundation, Inc.
This file is part of the GNU opcodes library.
CpuAVX512_4VNNIW,
/* Intel AVX-512 VPOPCNTDQ Instructions support required. */
CpuAVX512_VPOPCNTDQ,
+ /* Intel AVX-512 VBMI2 Instructions support required. */
+ CpuAVX512_VBMI2,
+ /* Intel AVX-512 VNNI Instructions support required. */
+ CpuAVX512_VNNI,
+ /* Intel AVX-512 BITALG Instructions support required. */
+ CpuAVX512_BITALG,
/* mwaitx instruction required */
CpuMWAITX,
/* Clzero instruction required */
CpuRDPID,
/* PTWRITE instruction required */
CpuPTWRITE,
- /* CET instruction support required */
- CpuCET,
+ /* CET instructions support required */
+ CpuIBT,
+ CpuSHSTK,
+ /* GFNI instructions required */
+ CpuGFNI,
+ /* VAES instructions required */
+ CpuVAES,
+ /* VPCLMULQDQ instructions required */
+ CpuVPCLMULQDQ,
+ /* WBNOINVD instructions required */
+ CpuWBNOINVD,
+ /* PCONFIG instructions required */
+ CpuPCONFIG,
+ /* WAITPKG instructions required */
+ CpuWAITPKG,
+ /* CLDEMOTE instruction required */
+ CpuCLDEMOTE,
/* MMX register support required */
CpuRegMMX,
/* XMM register support required */
/* If you get a compiler error for zero width of the unused field,
comment it out. */
-#if 0
#define CpuUnused (CpuMax + 1)
-#endif
/* We can check if an instruction is available with array instead
of bitfield. */
unsigned int cpuavx512_4fmaps:1;
unsigned int cpuavx512_4vnniw:1;
unsigned int cpuavx512_vpopcntdq:1;
+ unsigned int cpuavx512_vbmi2:1;
+ unsigned int cpuavx512_vnni:1;
+ unsigned int cpuavx512_bitalg:1;
unsigned int cpumwaitx:1;
unsigned int cpuclzero:1;
unsigned int cpuospke:1;
unsigned int cpurdpid:1;
unsigned int cpuptwrite:1;
- unsigned int cpucet:1;
+ unsigned int cpuibt:1;
+ unsigned int cpushstk:1;
+ unsigned int cpugfni:1;
+ unsigned int cpuvaes:1;
+ unsigned int cpuvpclmulqdq:1;
+ unsigned int cpuwbnoinvd:1;
+ unsigned int cpupconfig:1;
+ unsigned int cpuwaitpkg:1;
+ unsigned int cpucldemote:1;
unsigned int cpuregmmx:1;
unsigned int cpuregxmm:1;
unsigned int cpuregymm:1;
FloatMF,
/* src/dest swap for floats. */
FloatR,
- /* has float insn direction bit. */
- FloatD,
/* needs size prefix if in 32-bit mode */
Size16,
/* needs size prefix if in 16-bit mode */
IsString,
/* quick test if branch instruction is MPX supported */
BNDPrefixOk,
+ /* quick test if NOTRACK prefix is supported */
+ NoTrackPrefixOk,
/* quick test for lockable instructions */
IsLockable,
/* fake an extra reg operand for clr, imul and special register
processing for some instructions. */
RegKludge,
- /* The first operand must be xmm0 */
- FirstXmm0,
/* An implicit xmm0 as the first operand */
Implicit1stXmm0,
/* The HLE prefix is OK:
/* deprecated fp insn, gets a warning */
Ugh,
/* insn has VEX prefix:
- 1: 128bit VEX prefix.
+ 1: 128bit VEX prefix (or operand dependent).
2: 256bit VEX prefix.
3: Scalar VEX prefix.
*/
2: 128bit EVEX prefix.
3: 256bit EVEX prefix.
4: Length-ignored (LIG) EVEX prefix.
+ 5: Length determined from actual operands.
*/
#define EVEX512 1
#define EVEX128 2
#define EVEX256 3
#define EVEXLIG 4
+#define EVEXDYN 5
EVex,
/* AVX512 masking support:
#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
-#define BROADCAST_1TO4 3
-#define BROADCAST_1TO2 4
Broadcast,
/* Static rounding control is supported. */
*/
ImplicitQuadGroup,
- /* Compatible with old (<= 2.8.1) versions of gcc */
- OldGcc,
+ /* Support encoding optimization. */
+ Optimize,
+
/* AT&T mnemonic. */
ATTMnemonic,
/* AT&T syntax. */
unsigned int jumpintersegment:1;
unsigned int floatmf:1;
unsigned int floatr:1;
- unsigned int floatd:1;
unsigned int size16:1;
unsigned int size32:1;
unsigned int size64:1;
unsigned int fwait:1;
unsigned int isstring:1;
unsigned int bndprefixok:1;
+ unsigned int notrackprefixok:1;
unsigned int islockable:1;
unsigned int regkludge:1;
- unsigned int firstxmm0:1;
unsigned int implicit1stxmm0:1;
unsigned int hleprefixok:2;
unsigned int repprefixok:1;
unsigned int noavx:1;
unsigned int evex:3;
unsigned int masking:2;
- unsigned int vecesize:1;
- unsigned int broadcast:3;
+ unsigned int broadcast:1;
unsigned int staticrounding:1;
unsigned int sae:1;
unsigned int disp8memshift:3;
unsigned int nodefmask:1;
unsigned int implicitquadgroup:1;
- unsigned int oldgcc:1;
+ unsigned int optimize:1;
unsigned int attmnemonic:1;
unsigned int attsyntax:1;
unsigned int intelsyntax:1;
enum
{
- /* 8bit register */
- Reg8 = 0,
- /* 16bit register */
- Reg16,
- /* 32bit register */
- Reg32,
- /* 64bit register */
- Reg64,
- /* Floating pointer stack register */
- FloatReg,
+ /* Register (qualified by Byte, Word, etc) */
+ Reg = 0,
/* MMX register */
RegMMX,
- /* SSE register */
- RegXMM,
- /* AVX registers */
- RegYMM,
- /* AVX512 registers */
- RegZMM,
+ /* Vector registers */
+ RegSIMD,
/* Vector Mask registers */
RegMask,
/* Control register */
Disp32S,
/* 64 bit displacement */
Disp64,
- /* Accumulator %al/%ax/%eax/%rax */
+ /* Accumulator %al/%ax/%eax/%rax/%st(0)/%xmm0 */
Acc,
- /* Floating pointer top stack register %st(0) */
- FloatAcc,
/* Register which can be used for base or index in memory operand. */
BaseIndex,
/* Register to hold in/out port addr = dx */
/* Bound register. */
RegBND,
- /* Vector 8bit displacement */
- Vec_Disp8,
-
/* The last bitfield in i386_operand_type. */
OTMax
};
{
struct
{
- unsigned int reg8:1;
- unsigned int reg16:1;
- unsigned int reg32:1;
- unsigned int reg64:1;
- unsigned int floatreg:1;
+ unsigned int reg:1;
unsigned int regmmx:1;
- unsigned int regxmm:1;
- unsigned int regymm:1;
- unsigned int regzmm:1;
+ unsigned int regsimd:1;
unsigned int regmask:1;
unsigned int control:1;
unsigned int debug:1;
unsigned int disp32s:1;
unsigned int disp64:1;
unsigned int acc:1;
- unsigned int floatacc:1;
unsigned int baseindex:1;
unsigned int inoutportreg:1;
unsigned int shiftcount: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