mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-25 11:04:18 +08:00
x86: Replace IgnoreSize/DefaultSize with MnemonicSize
Since an instruction template can't have both IgnoreSize and DefaultSize, this patch replaces IgnoreSize and DefaultSize with MnemonicSize. gas/ * config/tc-i386.c (match_template): Replace ignoresize and defaultsize with mnemonicsize. (process_suffix): Likewise. opcodes/ * i386-gen.c (opcode_modifiers): Replace IgnoreSize/DefaultSize with MnemonicSize. * i386-opc.h (IGNORESIZE): New. (DEFAULTSIZE): Likewise. (IgnoreSize): Removed. (DefaultSize): Likewise. (MnemonicSize): New. (i386_opcode_modifier): Replace ignoresize/defaultsize with mnemonicsize. * i386-opc.tbl (IgnoreSize): New. (DefaultSize): Likewise. * i386-tbl.h: Regenerated.
This commit is contained in:
parent
5e5d66b6a4
commit
3cd7f3e3bd
@ -1,3 +1,9 @@
|
|||||||
|
2020-03-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* config/tc-i386.c (match_template): Replace ignoresize and
|
||||||
|
defaultsize with mnemonicsize.
|
||||||
|
(process_suffix): Likewise.
|
||||||
|
|
||||||
2020-03-03 Sergey Belyashov <sergey.belyashov@gmail.com>
|
2020-03-03 Sergey Belyashov <sergey.belyashov@gmail.com>
|
||||||
|
|
||||||
PR 25627
|
PR 25627
|
||||||
|
@ -5876,7 +5876,7 @@ match_template (char mnem_suffix)
|
|||||||
if (i.suffix == QWORD_MNEM_SUFFIX
|
if (i.suffix == QWORD_MNEM_SUFFIX
|
||||||
&& flag_code != CODE_64BIT
|
&& flag_code != CODE_64BIT
|
||||||
&& (intel_syntax
|
&& (intel_syntax
|
||||||
? (!t->opcode_modifier.ignoresize
|
? (t->opcode_modifier.mnemonicsize != IGNORESIZE
|
||||||
&& !t->opcode_modifier.broadcast
|
&& !t->opcode_modifier.broadcast
|
||||||
&& !intel_float_operand (t->name))
|
&& !intel_float_operand (t->name))
|
||||||
: intel_float_operand (t->name) != 2)
|
: intel_float_operand (t->name) != 2)
|
||||||
@ -5892,7 +5892,7 @@ match_template (char mnem_suffix)
|
|||||||
else if (i.suffix == LONG_MNEM_SUFFIX
|
else if (i.suffix == LONG_MNEM_SUFFIX
|
||||||
&& !cpu_arch_flags.bitfield.cpui386
|
&& !cpu_arch_flags.bitfield.cpui386
|
||||||
&& (intel_syntax
|
&& (intel_syntax
|
||||||
? (!t->opcode_modifier.ignoresize
|
? (t->opcode_modifier.mnemonicsize != IGNORESIZE
|
||||||
&& !intel_float_operand (t->name))
|
&& !intel_float_operand (t->name))
|
||||||
: intel_float_operand (t->name) != 2)
|
: intel_float_operand (t->name) != 2)
|
||||||
&& ((operand_types[0].bitfield.class != RegMMX
|
&& ((operand_types[0].bitfield.class != RegMMX
|
||||||
@ -6247,7 +6247,7 @@ match_template (char mnem_suffix)
|
|||||||
as_warn (_("indirect %s without `*'"), t->name);
|
as_warn (_("indirect %s without `*'"), t->name);
|
||||||
|
|
||||||
if (t->opcode_modifier.isprefix
|
if (t->opcode_modifier.isprefix
|
||||||
&& t->opcode_modifier.ignoresize)
|
&& t->opcode_modifier.mnemonicsize == IGNORESIZE)
|
||||||
{
|
{
|
||||||
/* Warn them that a data or address size prefix doesn't
|
/* Warn them that a data or address size prefix doesn't
|
||||||
affect assembly of the next line of code. */
|
affect assembly of the next line of code. */
|
||||||
@ -6371,7 +6371,7 @@ process_suffix (void)
|
|||||||
else if (i.suffix == BYTE_MNEM_SUFFIX)
|
else if (i.suffix == BYTE_MNEM_SUFFIX)
|
||||||
{
|
{
|
||||||
if (intel_syntax
|
if (intel_syntax
|
||||||
&& i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
|
||||||
&& i.tm.opcode_modifier.no_bsuf)
|
&& i.tm.opcode_modifier.no_bsuf)
|
||||||
i.suffix = 0;
|
i.suffix = 0;
|
||||||
else if (!check_byte_reg ())
|
else if (!check_byte_reg ())
|
||||||
@ -6380,7 +6380,7 @@ process_suffix (void)
|
|||||||
else if (i.suffix == LONG_MNEM_SUFFIX)
|
else if (i.suffix == LONG_MNEM_SUFFIX)
|
||||||
{
|
{
|
||||||
if (intel_syntax
|
if (intel_syntax
|
||||||
&& i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
|
||||||
&& i.tm.opcode_modifier.no_lsuf
|
&& i.tm.opcode_modifier.no_lsuf
|
||||||
&& !i.tm.opcode_modifier.todword
|
&& !i.tm.opcode_modifier.todword
|
||||||
&& !i.tm.opcode_modifier.toqword)
|
&& !i.tm.opcode_modifier.toqword)
|
||||||
@ -6391,7 +6391,7 @@ process_suffix (void)
|
|||||||
else if (i.suffix == QWORD_MNEM_SUFFIX)
|
else if (i.suffix == QWORD_MNEM_SUFFIX)
|
||||||
{
|
{
|
||||||
if (intel_syntax
|
if (intel_syntax
|
||||||
&& i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
|
||||||
&& i.tm.opcode_modifier.no_qsuf
|
&& i.tm.opcode_modifier.no_qsuf
|
||||||
&& !i.tm.opcode_modifier.todword
|
&& !i.tm.opcode_modifier.todword
|
||||||
&& !i.tm.opcode_modifier.toqword)
|
&& !i.tm.opcode_modifier.toqword)
|
||||||
@ -6402,13 +6402,14 @@ process_suffix (void)
|
|||||||
else if (i.suffix == WORD_MNEM_SUFFIX)
|
else if (i.suffix == WORD_MNEM_SUFFIX)
|
||||||
{
|
{
|
||||||
if (intel_syntax
|
if (intel_syntax
|
||||||
&& i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize == IGNORESIZE
|
||||||
&& i.tm.opcode_modifier.no_wsuf)
|
&& i.tm.opcode_modifier.no_wsuf)
|
||||||
i.suffix = 0;
|
i.suffix = 0;
|
||||||
else if (!check_word_reg ())
|
else if (!check_word_reg ())
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (intel_syntax && i.tm.opcode_modifier.ignoresize)
|
else if (intel_syntax
|
||||||
|
&& i.tm.opcode_modifier.mnemonicsize == IGNORESIZE)
|
||||||
/* Do nothing if the instruction is going to ignore the prefix. */
|
/* Do nothing if the instruction is going to ignore the prefix. */
|
||||||
;
|
;
|
||||||
else
|
else
|
||||||
@ -6417,7 +6418,8 @@ process_suffix (void)
|
|||||||
/* Undo the movsx/movzx change done above. */
|
/* Undo the movsx/movzx change done above. */
|
||||||
i.operands = numop;
|
i.operands = numop;
|
||||||
}
|
}
|
||||||
else if (i.tm.opcode_modifier.defaultsize && !i.suffix)
|
else if (i.tm.opcode_modifier.mnemonicsize == DEFAULTSIZE
|
||||||
|
&& !i.suffix)
|
||||||
{
|
{
|
||||||
i.suffix = stackop_size;
|
i.suffix = stackop_size;
|
||||||
if (stackop_size == LONG_MNEM_SUFFIX)
|
if (stackop_size == LONG_MNEM_SUFFIX)
|
||||||
@ -6466,12 +6468,12 @@ process_suffix (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!i.suffix
|
if (!i.suffix
|
||||||
&& (!i.tm.opcode_modifier.defaultsize
|
&& (i.tm.opcode_modifier.mnemonicsize != DEFAULTSIZE
|
||||||
/* Also cover lret/retf/iret in 64-bit mode. */
|
/* Also cover lret/retf/iret in 64-bit mode. */
|
||||||
|| (flag_code == CODE_64BIT
|
|| (flag_code == CODE_64BIT
|
||||||
&& !i.tm.opcode_modifier.no_lsuf
|
&& !i.tm.opcode_modifier.no_lsuf
|
||||||
&& !i.tm.opcode_modifier.no_qsuf))
|
&& !i.tm.opcode_modifier.no_qsuf))
|
||||||
&& !i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize != IGNORESIZE
|
||||||
/* Accept FLDENV et al without suffix. */
|
/* Accept FLDENV et al without suffix. */
|
||||||
&& (i.tm.opcode_modifier.no_ssuf || i.tm.opcode_modifier.floatmf))
|
&& (i.tm.opcode_modifier.no_ssuf || i.tm.opcode_modifier.floatmf))
|
||||||
{
|
{
|
||||||
@ -6544,7 +6546,7 @@ process_suffix (void)
|
|||||||
if (suffixes & (suffixes - 1))
|
if (suffixes & (suffixes - 1))
|
||||||
{
|
{
|
||||||
if (intel_syntax
|
if (intel_syntax
|
||||||
&& (!i.tm.opcode_modifier.defaultsize
|
&& (i.tm.opcode_modifier.mnemonicsize != DEFAULTSIZE
|
||||||
|| operand_check == check_error))
|
|| operand_check == check_error))
|
||||||
{
|
{
|
||||||
as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
|
as_bad (_("ambiguous operand size for `%s'"), i.tm.name);
|
||||||
@ -6638,7 +6640,7 @@ process_suffix (void)
|
|||||||
size prefix, except for instructions that will ignore this
|
size prefix, except for instructions that will ignore this
|
||||||
prefix anyway. */
|
prefix anyway. */
|
||||||
if (i.suffix != QWORD_MNEM_SUFFIX
|
if (i.suffix != QWORD_MNEM_SUFFIX
|
||||||
&& !i.tm.opcode_modifier.ignoresize
|
&& i.tm.opcode_modifier.mnemonicsize != IGNORESIZE
|
||||||
&& !i.tm.opcode_modifier.floatmf
|
&& !i.tm.opcode_modifier.floatmf
|
||||||
&& !is_any_vex_encoding (&i.tm)
|
&& !is_any_vex_encoding (&i.tm)
|
||||||
&& ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
|
&& ((i.suffix == LONG_MNEM_SUFFIX) == (flag_code == CODE_16BIT)
|
||||||
|
@ -1,3 +1,18 @@
|
|||||||
|
2020-03-03 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* i386-gen.c (opcode_modifiers): Replace IgnoreSize/DefaultSize
|
||||||
|
with MnemonicSize.
|
||||||
|
* i386-opc.h (IGNORESIZE): New.
|
||||||
|
(DEFAULTSIZE): Likewise.
|
||||||
|
(IgnoreSize): Removed.
|
||||||
|
(DefaultSize): Likewise.
|
||||||
|
(MnemonicSize): New.
|
||||||
|
(i386_opcode_modifier): Replace ignoresize/defaultsize with
|
||||||
|
mnemonicsize.
|
||||||
|
* i386-opc.tbl (IgnoreSize): New.
|
||||||
|
(DefaultSize): Likewise.
|
||||||
|
* i386-tbl.h: Regenerated.
|
||||||
|
|
||||||
2020-03-03 Sergey Belyashov <sergey.belyashov@gmail.com>
|
2020-03-03 Sergey Belyashov <sergey.belyashov@gmail.com>
|
||||||
|
|
||||||
PR 25627
|
PR 25627
|
||||||
|
@ -622,8 +622,7 @@ static bitfield opcode_modifiers[] =
|
|||||||
BITFIELD (FloatR),
|
BITFIELD (FloatR),
|
||||||
BITFIELD (Size),
|
BITFIELD (Size),
|
||||||
BITFIELD (CheckRegSize),
|
BITFIELD (CheckRegSize),
|
||||||
BITFIELD (IgnoreSize),
|
BITFIELD (MnemonicSize),
|
||||||
BITFIELD (DefaultSize),
|
|
||||||
BITFIELD (Anysize),
|
BITFIELD (Anysize),
|
||||||
BITFIELD (No_bSuf),
|
BITFIELD (No_bSuf),
|
||||||
BITFIELD (No_wSuf),
|
BITFIELD (No_wSuf),
|
||||||
|
@ -427,9 +427,10 @@ enum
|
|||||||
CheckRegSize,
|
CheckRegSize,
|
||||||
/* instruction ignores operand size prefix and in Intel mode ignores
|
/* instruction ignores operand size prefix and in Intel mode ignores
|
||||||
mnemonic size suffix check. */
|
mnemonic size suffix check. */
|
||||||
IgnoreSize,
|
#define IGNORESIZE 1
|
||||||
/* default insn size depends on mode */
|
/* default insn size depends on mode */
|
||||||
DefaultSize,
|
#define DEFAULTSIZE 2
|
||||||
|
MnemonicSize,
|
||||||
/* any memory size */
|
/* any memory size */
|
||||||
Anysize,
|
Anysize,
|
||||||
/* b suffix on instruction illegal */
|
/* b suffix on instruction illegal */
|
||||||
@ -661,8 +662,7 @@ typedef struct i386_opcode_modifier
|
|||||||
unsigned int floatr:1;
|
unsigned int floatr:1;
|
||||||
unsigned int size:2;
|
unsigned int size:2;
|
||||||
unsigned int checkregsize:1;
|
unsigned int checkregsize:1;
|
||||||
unsigned int ignoresize:1;
|
unsigned int mnemonicsize:2;
|
||||||
unsigned int defaultsize:1;
|
|
||||||
unsigned int anysize:1;
|
unsigned int anysize:1;
|
||||||
unsigned int no_bsuf:1;
|
unsigned int no_bsuf:1;
|
||||||
unsigned int no_wsuf:1;
|
unsigned int no_wsuf:1;
|
||||||
|
@ -66,6 +66,9 @@
|
|||||||
#define Size32 Size=SIZE32
|
#define Size32 Size=SIZE32
|
||||||
#define Size64 Size=SIZE64
|
#define Size64 Size=SIZE64
|
||||||
|
|
||||||
|
#define IgnoreSize MnemonicSize=IGNORESIZE
|
||||||
|
#define DefaultSize MnemonicSize=DEFAULTSIZE
|
||||||
|
|
||||||
// RegMem implies a ModR/M byte
|
// RegMem implies a ModR/M byte
|
||||||
#define RegMem Modrm|RegMem
|
#define RegMem Modrm|RegMem
|
||||||
|
|
||||||
|
21702
opcodes/i386-tbl.h
21702
opcodes/i386-tbl.h
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user