gas: blackfin: gas: blackfin: reject invalid BYTEUNPACK insns
authorMike Frysinger <vapier@gentoo.org>
Tue, 29 Mar 2011 05:54:41 +0000 (05:54 +0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 29 Mar 2011 05:54:41 +0000 (05:54 +0000)
The destination registers must be different with BYTEUNPACK insns,
otherwise the hardware throws up an exception.  So reject them.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
gas/ChangeLog
gas/config/bfin-parse.y
gas/testsuite/ChangeLog
gas/testsuite/gas/bfin/expected_errors.l
gas/testsuite/gas/bfin/expected_errors.s

index 5ae246e5eca3b883ec7bbace09e0d7fb2acf3d8a..7c5b7054bf88fe4714e4742806ff917cc6088ca3 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-29  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/bfin-parse.y (BYTEUNPACK): Return yyerror when dest
+       reg $2 is the same as dest reg $4.
+
 2011-03-29  Mike Frysinger  <vapier@gentoo.org>
 
        * config/bfin-parse.y (BYTEOP16M): Return yyerror when dest
index 7961e2e031f85ef6ea3f24f48e7fa86fcc4f6166..797664a5015856ad732d0ea3c48db42a6e9b8e7b 100644 (file)
@@ -866,6 +866,8 @@ asm_1:
        {
          if (!IS_DREG ($2) || !IS_DREG ($4))
            return yyerror ("Dregs expected");
+         else if (REG_SAME ($2, $4))
+           return yyerror ("Illegal dest register combination");
          else if (!valid_dreg_pair (&$8, $10))
            return yyerror ("Bad dreg pair");
          else
index 20aeb3fbb86c72a0c5cd627e9d958bd4f4883b9d..2101e9fc3daabfb6b031e01b9c3003fa7dbfb6d0 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-29  Mike Frysinger  <vapier@gentoo.org>
+
+       * gas/bfin/expected_errors.s: Add invalid BYTEUNPACK insn tests.
+       * gas/bfin/expected_errors.l: Add new error messages.
+
 2011-03-29  Mike Frysinger  <vapier@gentoo.org>
 
        * gas/bfin/expected_errors.s: Add invalid BYTEOP16M insn tests.
index 1c12e65f10d58e12217fe0d5ca6afc07a72b2bcf..40a90437c9f3f253cd34604e93103348273eb6bf 100644 (file)
 .*:134: Error: Illegal dest register combination.
 .*:135: Error: Illegal dest register combination.
 .*:136: Error: Illegal dest register combination.
+.*:137: Error: Illegal dest register combination.
index a671a2cd66a726a0ecbe549d8920f30ac86591c6..6ff14a68b508c928577b58ae11e08a9cb3b5f219 100644 (file)
        (R7, R7) = BYTEOP16P (R1:0, R3:2);
        (R1, R1) = BYTEOP16M (R1:0, R3:2);
        (R4, R4) = BYTEOP16M (R1:0, R3:2);
+       (R5, R5) = BYTEUNPACK R3:2;