Browse Source

opcodes: gas: x86: define and use Rex2 as attribute not constraint

Rex2 is currently an operand constraint.  For the upcoming SCFI
implementation in GAS, we need to identify operations which implicitly
update the stack pointer.  An operand constraint enumerator for implicit
stack op seems more appropriate than an attribute.  However, two opcodes
currently necessitate both Rex2 and an implicit stack op marker; this
prompts revisiting the current representations a bit.

Make Rex2 a standalone attribute, so that later a new operand constraint
may be added for IMPLICIT_STACK_OP.

ChangeLog:
	* gas/config/tc-i386.c (is_apx_rex2_encoding): Update the check.
	* opcodes/i386-gen.c: Add a new BITFIELD for Rex2.
	* opcodes/i386-opc.h (REX2_REQUIRED): Remove.
	* opcodes/i386-opc.tbl: Remove Rex2 operand constraint.
	* opcodes/i386-tbl.h: Regenerated.
binutils-2_42-branch
Indu Bhagat 2 years ago
parent
commit
3037cefe56
  1. 2
      gas/config/tc-i386.c
  2. 1
      opcodes/i386-gen.c
  3. 6
      opcodes/i386-opc.h
  4. 1
      opcodes/i386-opc.tbl
  5. 11659
      opcodes/i386-tbl.h

2
gas/config/tc-i386.c

@ -3955,7 +3955,7 @@ static INLINE bool
is_apx_rex2_encoding (void)
{
return i.rex2 || i.rex2_encoding
|| i.tm.opcode_modifier.operandconstraint == REX2_REQUIRED;
|| i.tm.opcode_modifier.rex2;
}
static unsigned int

1
opcodes/i386-gen.c

@ -490,6 +490,7 @@ static bitfield opcode_modifiers[] =
BITFIELD (ISA64),
BITFIELD (NoEgpr),
BITFIELD (NF),
BITFIELD (Rex2),
};
#define CLASS(n) #n, n

6
opcodes/i386-opc.h

@ -579,8 +579,6 @@ enum
/* Instrucion requires that destination must be distinct from source
registers. */
#define DISTINCT_DEST 9
/* Instrucion requires REX2 prefix. */
#define REX2_REQUIRED 10
OperandConstraint,
/* instruction ignores operand size prefix and in Intel mode ignores
mnemonic size suffix check. */
@ -750,6 +748,9 @@ enum
/* No CSPAZO flags update indication. */
NF,
/* Instrucion requires REX2 prefix. */
Rex2,
/* The last bitfield in i386_opcode_modifier. */
Opcode_Modifier_Num
};
@ -796,6 +797,7 @@ typedef struct i386_opcode_modifier
unsigned int isa64:2;
unsigned int noegpr:1;
unsigned int nf:1;
unsigned int rex2:1;
} i386_opcode_modifier;
/* Operand classes. */

1
opcodes/i386-opc.tbl

@ -85,7 +85,6 @@
#define RegKludge OperandConstraint=REG_KLUDGE
#define SwapSources OperandConstraint=SWAP_SOURCES
#define Ugh OperandConstraint=UGH
#define Rex2 OperandConstraint=REX2_REQUIRED
#define ATTSyntax Dialect=ATT_SYNTAX
#define ATTMnemonic Dialect=ATT_MNEMONIC

11659
opcodes/i386-tbl.h

File diff suppressed because it is too large
Loading…
Cancel
Save