* config/tc-sh.c (parse_at): Reject @(r0) and @(r0,).
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 20 Dec 2001 17:28:13 +0000 (17:28 +0000)
committerAlexandre Oliva <aoliva@redhat.com>
Thu, 20 Dec 2001 17:28:13 +0000 (17:28 +0000)
gas/ChangeLog
gas/config/tc-sh.c

index dfea7813c842755204ff8944ff90dbd89ecd4305..8d6cc41eb9f97eb9b30b560ab694dde249d0a592 100644 (file)
@@ -1,3 +1,7 @@
+2001-12-20  Alexandre Oliva  <aoliva@redhat.com>
+
+       * config/tc-sh.c (parse_at): Reject @(r0) and @(r0,).
+
 2001-12-20  matthew green  <mrg@redhat.com>
 
        * config/tc-ppc.c (md_parse_option): Make -maltivec default
index a238019db27c9cd92ced43221b048f6e74ffccfd..27c33cd016a6e835a4372229098029b0cb762ba7 100644 (file)
@@ -914,7 +914,7 @@ parse_at (src, op)
   else if (src[0] == '(')
     {
       /* Could be @(disp, rn), @(disp, gbr), @(disp, pc),  @(r0, gbr) or
-         @(r0, rn) */
+         @(r0, rn) */
       src++;
       len = parse_reg (src, &mode, &(op->reg));
       if (len && mode == A_REG_N)
@@ -925,29 +925,42 @@ parse_at (src, op)
              as_bad (_("must be @(r0,...)"));
            }
          if (src[0] == ',')
-           src++;
-         /* Now can be rn or gbr */
-         len = parse_reg (src, &mode, &(op->reg));
-         if (mode == A_GBR)
            {
-             op->type = A_R0_GBR;
+             src++;
+             /* Now can be rn or gbr.  */
+             len = parse_reg (src, &mode, &(op->reg));
+           }
+         else
+           {
+             len = 0;
            }
-         else if (mode == A_REG_N)
+         if (len)
            {
-             op->type = A_IND_R0_REG_N;
+             if (mode == A_GBR)
+               {
+                 op->type = A_R0_GBR;
+               }
+             else if (mode == A_REG_N)
+               {
+                 op->type = A_IND_R0_REG_N;
+               }
+             else
+               {
+                 as_bad (_("syntax error in @(r0,...)"));
+               }
            }
          else
            {
-             as_bad (_("syntax error in @(r0,...)"));
+             as_bad (_("syntax error in @(r0...)"));
            }
        }
       else
        {
-         /* Must be an @(disp,.. thing) */
+         /* Must be an @(disp,.. thing) */
          src = parse_exp (src, op);
          if (src[0] == ',')
            src++;
-         /* Now can be rn, gbr or pc */
+         /* Now can be rn, gbr or pc */
          len = parse_reg (src, &mode, &op->reg);
          if (len)
            {