-/* Registers */
-
-/* 8 bit reg */
-#define Reg8 0
-/* 16 bit reg */
-#define Reg16 (Reg8 + 1)
-/* 32 bit reg */
-#define Reg32 (Reg16 + 1)
-/* 64 bit reg */
-#define Reg64 (Reg32 + 1)
-
-/* immediate */
-
-/* 8 bit immediate */
-#define Imm8 (Reg64 + 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)
-/* 1 bit immediate */
-#define Imm1 (Imm64 + 1)
-
-/* memory */
-
-#define BaseIndex (Imm1 + 1)
-/* Disp8,16,32 are used in different ways, depending on the
- instruction. For jumps, they specify the size of the PC relative
- displacement, for baseindex type instructions, they specify the
- size of the offset relative to the base register, and for memory
- offset instructions such as `mov 1234,%al' they specify the size of
- the offset relative to the segment base. */
-/* 8 bit displacement */
-#define Disp8 (BaseIndex + 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)
-
-/* specials */
-
-/* register to hold in/out port addr = dx */
-#define InOutPortReg (Disp64 + 1)
-/* register to hold shift count = cl */
-#define ShiftCount (InOutPortReg + 1)
-/* Control register */
-#define Control (ShiftCount + 1)
-/* Debug register */
-#define Debug (Control + 1)
-/* Test register */
-#define Test (Debug + 1)
-/* Float register */
-#define FloatReg (Test + 1)
-/* Float stack top %st(0) */
-#define FloatAcc (FloatReg + 1)
-/* 2 bit segment register */
-#define SReg2 (FloatAcc + 1)
-/* 3 bit segment register */
-#define SReg3 (SReg2 + 1)
-/* Accumulator %al or %ax or %eax */
-#define Acc (SReg3 + 1)
-#define JumpAbsolute (Acc + 1)
-/* MMX register */
-#define RegMMX (JumpAbsolute + 1)
-/* XMM registers in PIII */
-#define RegXMM (RegMMX + 1)
-/* String insn operand with fixed es segment */
-#define EsSeg (RegXMM + 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)
-
-/* The last bitfield in i386_operand_type. */
-#define OTMax RegMem
+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
+};