-/* 8bit register */
-#define Reg8 0
-/* 16bit register */
-#define Reg16 (Reg8 + 1)
-/* 32bit register */
-#define Reg32 (Reg16 + 1)
-/* 64bit register */
-#define Reg64 (Reg32 + 1)
-/* Floating pointer stack register */
-#define FloatReg (Reg64 + 1)
-/* MMX register */
-#define RegMMX (FloatReg + 1)
-/* SSE register */
-#define RegXMM (RegMMX + 1)
-/* Control register */
-#define Control (RegXMM + 1)
-/* Debug register */
-#define Debug (Control + 1)
-/* Test register */
-#define Test (Debug + 1)
-/* 2 bit segment register */
-#define SReg2 (Test + 1)
-/* 3 bit segment register */
-#define SReg3 (SReg2 + 1)
-/* 1 bit immediate */
-#define Imm1 (SReg3 + 1)
-/* 8 bit immediate */
-#define Imm8 (Imm1 + 1)
-/* 8 bit immediate sign extended */
-#define Imm8S (Imm8 + 1)
-/* 16 bit immediate */
-#define Imm16 (Imm8S + 1)
-/* 32 bit immediate */
-#define Imm32 (Imm16 + 1)
-/* 32 bit immediate sign extended */
-#define Imm32S (Imm32 + 1)
-/* 64 bit immediate */
-#define Imm64 (Imm32S + 1)
-/* 8bit/16bit/32bit displacements are used in different ways,
- depending on the instruction. For jumps, they specify the
- size of the PC relative displacement, for instructions with
- memory operand, they specify the size of the offset relative
- to the base register, and for instructions with memory offset
- such as `mov 1234,%al' they specify the size of the offset
- relative to the segment base. */
-/* 8 bit displacement */
-#define Disp8 (Imm64 + 1)
-/* 16 bit displacement */
-#define Disp16 (Disp8 + 1)
-/* 32 bit displacement */
-#define Disp32 (Disp16 + 1)
-/* 32 bit signed displacement */
-#define Disp32S (Disp32 + 1)
-/* 64 bit displacement */
-#define Disp64 (Disp32S + 1)
-/* Accumulator %al/%ax/%eax/%rax */
-#define Acc (Disp64 + 1)
-/* Floating pointer top stack register %st(0) */
-#define FloatAcc (Acc + 1)
-/* Register which can be used for base or index in memory operand. */
-#define BaseIndex (FloatAcc + 1)
-/* Register to hold in/out port addr = dx */
-#define InOutPortReg (BaseIndex + 1)
-/* Register to hold shift count = cl */
-#define ShiftCount (InOutPortReg + 1)
-/* Absolute address for jump. */
-#define JumpAbsolute (ShiftCount + 1)
-/* String insn operand with fixed es segment */
-#define EsSeg (JumpAbsolute + 1)
-/* RegMem is for instructions with a modrm byte where the register
- destination operand should be encoded in the mod and regmem fields.
- Normally, it will be encoded in the reg field. We add a RegMem
- flag to the destination register operand to indicate that it should
- be encoded in the regmem field. */
-#define RegMem (EsSeg + 1)
-/* Memory. */
-#define Mem (RegMem + 1)
-/* BYTE memory. */
-#define Byte (Mem + 1)
-/* WORD memory. 2 byte */
-#define Word (Byte + 1)
-/* DWORD memory. 4 byte */
-#define Dword (Word + 1)
-/* FWORD memory. 6 byte */
-#define Fword (Dword + 1)
-/* QWORD memory. 8 byte */
-#define Qword (Fword + 1)
-/* TBYTE memory. 10 byte */
-#define Tbyte (Qword + 1)
-/* XMMWORD memory. */
-#define Xmmword (Tbyte + 1)
-/* Unspecified memory size. */
-#define Unspecified (Xmmword + 1)
-/* Any memory size. */
-#define Anysize (Unspecified + 1)
-
-/* The last bitfield in i386_operand_type. */
-#define OTMax Anysize
+enum
+{
+ /* 8bit register */
+ Reg8 = 0,
+ /* 16bit register */
+ Reg16,
+ /* 32bit register */
+ Reg32,
+ /* 64bit register */
+ Reg64,
+ /* Floating pointer stack register */
+ FloatReg,
+ /* MMX register */
+ RegMMX,
+ /* SSE register */
+ RegXMM,
+ /* AVX registers */
+ RegYMM,
+ /* Control register */
+ Control,
+ /* Debug register */
+ Debug,
+ /* Test register */
+ Test,
+ /* 2 bit segment register */
+ SReg2,
+ /* 3 bit segment register */
+ SReg3,
+ /* 1 bit immediate */
+ Imm1,
+ /* 8 bit immediate */
+ Imm8,
+ /* 8 bit immediate sign extended */
+ Imm8S,
+ /* 16 bit immediate */
+ Imm16,
+ /* 32 bit immediate */
+ Imm32,
+ /* 32 bit immediate sign extended */
+ Imm32S,
+ /* 64 bit immediate */
+ Imm64,
+ /* 8bit/16bit/32bit displacements are used in different ways,
+ depending on the instruction. For jumps, they specify the
+ size of the PC relative displacement, for instructions with
+ memory operand, they specify the size of the offset relative
+ to the base register, and for instructions with memory offset
+ such as `mov 1234,%al' they specify the size of the offset
+ relative to the segment base. */
+ /* 8 bit displacement */
+ Disp8,
+ /* 16 bit displacement */
+ Disp16,
+ /* 32 bit displacement */
+ Disp32,
+ /* 32 bit signed displacement */
+ Disp32S,
+ /* 64 bit displacement */
+ Disp64,
+ /* Accumulator %al/%ax/%eax/%rax */
+ 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 */
+ InOutPortReg,
+ /* Register to hold shift count = cl */
+ ShiftCount,
+ /* Absolute address for jump. */
+ JumpAbsolute,
+ /* String insn operand with fixed es segment */
+ EsSeg,
+ /* RegMem is for instructions with a modrm byte where the register
+ destination operand should be encoded in the mod and regmem fields.
+ Normally, it will be encoded in the reg field. We add a RegMem
+ flag to the destination register operand to indicate that it should
+ be encoded in the regmem field. */
+ RegMem,
+ /* Memory. */
+ Mem,
+ /* BYTE memory. */
+ Byte,
+ /* WORD memory. 2 byte */
+ Word,
+ /* DWORD memory. 4 byte */
+ Dword,
+ /* FWORD memory. 6 byte */
+ Fword,
+ /* QWORD memory. 8 byte */
+ Qword,
+ /* TBYTE memory. 10 byte */
+ Tbyte,
+ /* XMMWORD memory. */
+ Xmmword,
+ /* YMMWORD memory. */
+ Ymmword,
+ /* Unspecified memory size. */
+ Unspecified,
+ /* Any memory size. */
+ Anysize,
+
+ /* The last bitfield in i386_operand_type. */
+ OTMax
+};