X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=opcodes%2Fi386-opc.h;h=ccf5d91067e3759103524ef8d5384c3c9df3d47e;hb=7deea9aad86683a4bcc68d6dd073038039f7a267;hp=8f6cd045eb647e408a2ceeed6502fda7a1f9aa68;hpb=474da251bf92a11a08583080af77fa197570767f;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/i386-opc.h b/opcodes/i386-opc.h index 8f6cd045eb..ccf5d91067 100644 --- a/opcodes/i386-opc.h +++ b/opcodes/i386-opc.h @@ -1,5 +1,5 @@ /* Declarations for Intel 80386 opcode table - Copyright (C) 2007-2019 Free Software Foundation, Inc. + Copyright (C) 2007-2020 Free Software Foundation, Inc. This file is part of the GNU opcodes library. @@ -401,16 +401,17 @@ enum Load, /* insn has a modrm byte. */ Modrm, - /* register is in low 3 bits of opcode */ - ShortForm, - /* special case for jump insns. */ - Jump, + /* special case for jump insns; value has to be 1 */ +#define JUMP 1 /* call and jump */ - JumpDword, +#define JUMP_DWORD 2 /* loop and jecxz */ - JumpByte, +#define JUMP_BYTE 3 /* special case for intersegment leaps/calls */ - JumpInterSegment, +#define JUMP_INTERSEGMENT 4 + /* absolute address for jump */ +#define JUMP_ABSOLUTE 5 + Jump, /* FP insn memory format bit, sized by 0x4 */ FloatMF, /* src/dest swap for floats. */ @@ -429,6 +430,8 @@ enum IgnoreSize, /* default insn size depends on mode */ DefaultSize, + /* any memory size */ + Anysize, /* b suffix on instruction illegal */ No_bSuf, /* w suffix on instruction illegal */ @@ -443,7 +446,11 @@ enum No_ldSuf, /* instruction needs FWAIT */ FWait, - /* quick test for string instructions */ + /* IsString provides for a quick test for string instructions, and + its actual value also indicates which of the operands (if any) + requires use of the %es segment. */ +#define IS_STRING_ES_OP0 2 +#define IS_STRING_ES_OP1 3 IsString, /* RegMem is for instructions with a modrm byte where the register destination operand should be encoded in the mod and regmem fields. @@ -629,10 +636,16 @@ enum ATTSyntax, /* Intel syntax. */ IntelSyntax, - /* AMD64. */ - AMD64, - /* Intel64. */ - Intel64, + /* ISA64: Don't change the order without other code adjustments. + 0: Common to AMD64 and Intel64. + 1: AMD64. + 2: Intel64. + 3: Only in Intel64. + */ +#define AMD64 1 +#define INTEL64 2 +#define INTEL64ONLY 3 + ISA64, /* The last bitfield in i386_opcode_modifier. */ Opcode_Modifier_Num }; @@ -643,17 +656,14 @@ typedef struct i386_opcode_modifier unsigned int w:1; unsigned int load:1; unsigned int modrm:1; - unsigned int shortform:1; - unsigned int jump:1; - unsigned int jumpdword:1; - unsigned int jumpbyte:1; - unsigned int jumpintersegment:1; + unsigned int jump:3; unsigned int floatmf:1; unsigned int floatr:1; unsigned int size:2; unsigned int checkregsize:1; unsigned int ignoresize:1; unsigned int defaultsize:1; + unsigned int anysize:1; unsigned int no_bsuf:1; unsigned int no_wsuf:1; unsigned int no_lsuf:1; @@ -661,7 +671,7 @@ typedef struct i386_opcode_modifier unsigned int no_qsuf:1; unsigned int no_ldsuf:1; unsigned int fwait:1; - unsigned int isstring:1; + unsigned int isstring:2; unsigned int regmem:1; unsigned int bndprefixok:1; unsigned int notrackprefixok:1; @@ -698,8 +708,7 @@ typedef struct i386_opcode_modifier unsigned int attmnemonic:1; unsigned int attsyntax:1; unsigned int intelsyntax:1; - unsigned int amd64:1; - unsigned int intel64:1; + unsigned int isa64:2; } i386_opcode_modifier; /* Operand classes. */ @@ -770,10 +779,6 @@ enum Disp64, /* Register which can be used for base or index in memory operand. */ BaseIndex, - /* Absolute address for jump. */ - JumpAbsolute, - /* String insn operand with fixed es segment */ - EsSeg, /* BYTE size. */ Byte, /* WORD size. 2 byte */ @@ -794,8 +799,6 @@ enum Zmmword, /* Unspecified memory size. */ Unspecified, - /* Any memory size. */ - Anysize, /* The number of bits in i386_operand_type. */ OTNum @@ -829,8 +832,6 @@ typedef union i386_operand_type unsigned int disp32s:1; unsigned int disp64:1; unsigned int baseindex:1; - unsigned int jumpabsolute:1; - unsigned int esseg:1; unsigned int byte:1; unsigned int word:1; unsigned int dword:1; @@ -841,7 +842,6 @@ typedef union i386_operand_type unsigned int ymmword:1; unsigned int zmmword:1; unsigned int unspecified:1; - unsigned int anysize:1; #ifdef OTUnused unsigned int unused:(OTNumOfBits - OTUnused); #endif