This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] S12Z: GAS: Issue warning if TFR/EXG have identical source and destination.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1d4d86699fcc9641c1f4dfb3a44a1588353c2137

commit 1d4d86699fcc9641c1f4dfb3a44a1588353c2137
Author: John Darrington <john@darrington.wattle.id.au>
Date:   Fri Feb 1 17:42:54 2019 +0100

    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.

Diff:
---
 gas/ChangeLog                | 6 ++++++
 gas/config/tc-s12z.c         | 2 ++
 gas/testsuite/gas/s12z/exg.d | 1 +
 gas/testsuite/gas/s12z/exg.l | 2 ++
 4 files changed, 11 insertions(+)

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]