]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: blackfin: reject invalid register destinations for vector add/sub
authorMike Frysinger <vapier@gentoo.org>
Thu, 24 Mar 2011 06:17:47 +0000 (06:17 +0000)
committerMike Frysinger <vapier@gentoo.org>
Thu, 24 Mar 2011 06:17:47 +0000 (06:17 +0000)
The destination registers with vector add/sub insns must be different,
so make sure gas rejects attempt to write these.

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 4c4a03c4aad822ff10d2f30ff584dc3b0af16acb..61478ffe405329258f3d8b1cfd0f09bc2500ac50 100644 (file)
@@ -1,3 +1,10 @@
+2011-03-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * config/bfin-parse.y (dual 32bit add/sub): Return yyerror when dest
+       reg $1 is the same as dest reg $7.
+       (quad 16bit add/sub): Return yyerror when dest reg $1 is the same as
+       dest reg $7.
+
 2011-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * config/bfin-parse.y (check_macfuncs): Clarify error message when
 2011-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * config/bfin-parse.y (check_macfuncs): Clarify error message when
index f20d20b3c18addd85d990860eb1d65f1b0e959f2..803afd1c55299c2cc1628f4f5d4978b5f3158837 100644 (file)
@@ -1,5 +1,5 @@
 /* bfin-parse.y  ADI Blackfin parser
 /* bfin-parse.y  ADI Blackfin parser
-   Copyright 2005, 2006, 2007, 2008, 2009, 2010
+   Copyright 2005, 2006, 2007, 2008, 2009, 2010, 2011
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
    Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
@@ -898,6 +898,9 @@ asm_1:
 
        | REG ASSIGN REG_A PLUS REG_A COMMA REG ASSIGN REG_A MINUS REG_A amod1
        {
 
        | REG ASSIGN REG_A PLUS REG_A COMMA REG ASSIGN REG_A MINUS REG_A amod1
        {
+         if (REG_SAME ($1, $7))
+           return yyerror ("Resource conflict in dest reg");
+
          if (IS_DREG ($1) && IS_DREG ($7) && !REG_SAME ($3, $5)
              && IS_A1 ($9) && !IS_A1 ($11))
            {
          if (IS_DREG ($1) && IS_DREG ($7) && !REG_SAME ($3, $5)
              && IS_A1 ($9) && !IS_A1 ($11))
            {
@@ -941,6 +944,8 @@ asm_1:
          if (!IS_DREG ($1) || !IS_DREG ($3) || !IS_DREG ($5) || !IS_DREG ($7))
            return yyerror ("Dregs expected");
 
          if (!IS_DREG ($1) || !IS_DREG ($3) || !IS_DREG ($5) || !IS_DREG ($7))
            return yyerror ("Dregs expected");
 
+         if (REG_SAME ($1, $7))
+           return yyerror ("Resource conflict in dest reg");
 
          if ($4.r0 == 1 && $10.r0 == 2)
            {
 
          if ($4.r0 == 1 && $10.r0 == 2)
            {
index ce01151d76de6cfd24713754f2512dcc77529255..7975fb851f9196a8701a9c0b90816def97441a59 100644 (file)
@@ -1,3 +1,8 @@
+2011-03-24  Mike Frysinger  <vapier@gentoo.org>
+
+       * gas/bfin/expected_errors.s: Add invalid vector add/sub insn tests.
+       * gas/bfin/expected_errors.l: Add new error messages.
+
 2011-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * gas/bfin/16bit_illegals.d, gas/bfin/16bit_illegals.s: Delete.
 2011-03-24  Mike Frysinger  <vapier@gentoo.org>
 
        * gas/bfin/16bit_illegals.d, gas/bfin/16bit_illegals.s: Delete.
index 316ff20f661247a605685c8e933d1ef158e3e97b..863b30bdadc28f980935c5ffd7d1f53b3269b4fa 100644 (file)
@@ -95,3 +95,8 @@
 .*:120: Error: Destination Dregs \(full\) must differ by one.
 .*:121: Error: Destination Dregs \(half\) must match.
 .*:122: Error: Destination Dreg sizes \(full or half\) must match.
 .*:120: Error: Destination Dregs \(full\) must differ by one.
 .*:121: Error: Destination Dregs \(half\) must match.
 .*:122: Error: Destination Dreg sizes \(full or half\) must match.
+.*:124: Error: Resource conflict in dest reg.
+.*:125: Error: Differing source registers.
+.*:126: Error: Resource conflict in dest reg.
+.*:127: Error: Differing source registers.
+.*:129: Error: Register mismatch.
index 736613ff72044c7dc1261bd95c228153c68f932d..46be66c3a4728d7ee0b534fb06cd8126554f57b4 100644 (file)
        R0 = A0, R3 = A1;
        R0.L = A0, R1.H = A1;
        R0 = A0, R1.H = A1;
        R0 = A0, R3 = A1;
        R0.L = A0, R1.H = A1;
        R0 = A0, R1.H = A1;
+
+       R0 = R1 +|+ R2, R0 = R1 -|- R2;
+       R0 = R4 +|+ R5, R1 = R6 -|- R7;
+       R1 = R3 +|- R7, R1 = R3 -|+ R7;
+       R7 = R3 +|- R4, R1 = R1 -|+ R2;
+
+       R0 = R3 + R4, R1 = R5 - R6;