gas: blackfin: gas: blackfin: reject invalid BYTEOP16P insns
authorMike Frysinger <vapier@gentoo.org>
Tue, 29 Mar 2011 05:44:56 +0000 (05:44 +0000)
committerMike Frysinger <vapier@gentoo.org>
Tue, 29 Mar 2011 05:44:56 +0000 (05:44 +0000)
The destination registers must be different with BYTEOP16P 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 fe0c4668b36562901aaa63aa614a8cd0a557ca42..428d26663b8804b46c228c389c8e5125311e5bb6 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-29  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/bfin-parse.y (BYTEOP16P): Return yyerror when dest
+       reg $2 is the same as dest reg $4.
+
 2011-03-28  Mike Frysinger  <vapier@gentoo.org>
 
        * config/bfin-parse.y (16bit acc add): Return yyerror when dest
index fa81a61dd8f46cbc7f27a60cf0e4a3a302336400..12e752584c2308403b56817b195451e6f3b5fa4f 100644 (file)
@@ -831,6 +831,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 (&$9, $11))
            return yyerror ("Bad dreg pair");
          else if (!valid_dreg_pair (&$13, $15))
index b4bdca15bfe01cbf89021ce0658a1be507324c9e..24726279b6af02df46fa6f075a7a99a0cea2fb61 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-29  Mike Frysinger  <vapier@gentoo.org>
+
+       * gas/bfin/expected_errors.s: Add invalid BYTEOP16P insn tests.
+       * gas/bfin/expected_errors.l: Add new error messages.
+
 2011-03-28  Mike Frysinger  <vapier@gentoo.org>
 
        * gas/bfin/expected_errors.s: Add invalid 16bit acc add insn tests.
index 2f746db460b8d5b426694f7f7eb4024e2823b922..216c8e141f39efea5abaec3d031f26da9169faf7 100644 (file)
 .*:127: Error: Differing source registers.
 .*:129: Error: Register mismatch.
 .*:131: Error: Illegal dest register combination. Input text was A0.H.
+.*:133: Error: Illegal dest register combination.
+.*:134: Error: Illegal dest register combination.
index f6e3f6f05c0ea52342a42fae720f967fb63c70fc..677103c9e2bf3b7be698758e353feb3db7d11192 100644 (file)
        R0 = R3 + R4, R1 = R5 - R6;
 
        R7 = A1.L + A1.H, R7 = A0.L + A0.H;
+
+       (R0, R0) = BYTEOP16P (R1:0, R3:2);
+       (R7, R7) = BYTEOP16P (R1:0, R3:2);