diff options
author | John Darrington <john@darrington.wattle.id.au> | 2019-02-01 17:42:54 +0100 |
---|---|---|
committer | John Darrington <john@darrington.wattle.id.au> | 2019-02-01 18:08:04 +0100 |
commit | 1d4d86699fcc9641c1f4dfb3a44a1588353c2137 (patch) | |
tree | 6366c97db7f65ae53f3a84501c98a95f42b471f7 /gas | |
parent | 8b3a46f93c2b9ee839f806713afe7f88f0482214 (diff) | |
download | gdb-1d4d86699fcc9641c1f4dfb3a44a1588353c2137.zip gdb-1d4d86699fcc9641c1f4dfb3a44a1588353c2137.tar.gz gdb-1d4d86699fcc9641c1f4dfb3a44a1588353c2137.tar.bz2 |
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.
Diffstat (limited to 'gas')
-rw-r--r-- | gas/ChangeLog | 6 | ||||
-rw-r--r-- | gas/config/tc-s12z.c | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/s12z/exg.d | 1 | ||||
-rw-r--r-- | gas/testsuite/gas/s12z/exg.l | 2 |
4 files changed, 11 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog index 7905717..e168d72 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,5 +1,11 @@ 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 immediate mode operands should be permitted. * testsuite/s12z/imm-dest.d: New file. diff --git a/gas/config/tc-s12z.c b/gas/config/tc-s12z.c index 2bd536a..a013149 100644 --- a/gas/config/tc-s12z.c +++ b/gas/config/tc-s12z.c @@ -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) diff --git a/gas/testsuite/gas/s12z/exg.d b/gas/testsuite/gas/s12z/exg.d index 54cf268..e9af154 100644 --- a/gas/testsuite/gas/s12z/exg.d +++ b/gas/testsuite/gas/s12z/exg.d @@ -1,6 +1,7 @@ #objdump: -d #name: #source: exg.s +#warning_output: exg.l .*: file format elf32-s12z diff --git a/gas/testsuite/gas/s12z/exg.l b/gas/testsuite/gas/s12z/exg.l new file mode 100644 index 0000000..018d8f9 --- /dev/null +++ b/gas/testsuite/gas/s12z/exg.l @@ -0,0 +1,2 @@ +.*: Assembler messages: +.*:2: Warning: The destination and source registers are identical |