S12Z: GAS: Issue warning if TFR/EXG have identical source and destination.
It is permissible for the source and destination operands of TFR and EXG to be the same register. However it is a pointless instruction and anyone writing it has probably made a mistake. This change emits a warning if such an instruction is encountered. gas/ * config/tc-s12z.c (tfr): Emit warning if operands are the same. * testsuite/gas/s12z/exg.d: New test case. * testsuite/gas/s12z/exg.l: New file.
This commit is contained in:
parent
8b3a46f93c
commit
1d4d86699f
4 changed files with 11 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2019-01-31 John Darrington <john@darrington.wattle.id.au>
|
||||
|
||||
* config/tc-s12z.c (tfr): Emit warning if operands are the same.
|
||||
* testsuite/gas/s12z/exg.d: New test case.
|
||||
* testsuite/gas/s12z/exg.l: New file.
|
||||
|
||||
2019-01-31 John Darrington <john@darrington.wattle.id.au>
|
||||
|
||||
* config/tc-s12z.c (lex_opr): Add a parameter to indicate whether
|
||||
|
|
|
@ -1328,6 +1328,8 @@ tfr (const struct instruction *insn)
|
|||
&& (registers[reg2].bytes <= registers[reg1].bytes))
|
||||
as_warn (_("Source register for %s is no larger than the destination register"),
|
||||
insn->name);
|
||||
else if (reg1 == reg2)
|
||||
as_warn (_("The destination and source registers are identical"));
|
||||
|
||||
char *f = s12z_new_insn (1 + insn->page);
|
||||
if (insn->page == 2)
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#objdump: -d
|
||||
#name:
|
||||
#source: exg.s
|
||||
#warning_output: exg.l
|
||||
|
||||
|
||||
.*: file format elf32-s12z
|
||||
|
|
2
gas/testsuite/gas/s12z/exg.l
Normal file
2
gas/testsuite/gas/s12z/exg.l
Normal file
|
@ -0,0 +1,2 @@
|
|||
.*: Assembler messages:
|
||||
.*:2: Warning: The destination and source registers are identical
|
Loading…
Add table
Reference in a new issue