]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blobdiff - gas/config/bfin-lex.l
Update year range in copyright notice of binutils files
[thirdparty/binutils-gdb.git] / gas / config / bfin-lex.l
index 26c8f172ed709bbfbf709f09c98fa53aa63c674a..188bb197be6f79fac5973b0224ea9e6db961a933 100644 (file)
@@ -1,6 +1,7 @@
+%option noyywrap
+
 /* bfin-lex.l  ADI Blackfin lexer
-   Copyright 2005, 2006, 2007, 2008
-   Free Software Foundation, Inc.
+   Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
@@ -39,6 +40,7 @@ int yylex (void);
    and <INITIAL> would match some keyword rules only with
    initial.  */
 %s KEYWORD
+%s FLAGS
 
 %%
 [sS][fF][tT][rR][eE][sS][eE][tT]        _REG.regno = REG_sftreset;  return REG;
@@ -47,8 +49,8 @@ int yylex (void);
 [hH][wW][eE][rR][rR][cC][aA][uU][sS][eE] _REG.regno = REG_hwerrcause; return REG;
 [eE][xX][cC][aA][uU][sS][eE]            _REG.regno = REG_excause;   return REG;
 [eE][mM][uU][cC][aA][uU][sS][eE]       _REG.regno = REG_emucause;  return REG;
-[zZ]                                    return Z;
-[xX]                                    return X;
+<FLAGS>[zZ]                             return Z;
+<FLAGS>[xX]                             return X;
 [wW]32                                  yylval.value = M_W32; return MMOD;
 [wW]                                    return W;
 [vV][iI][tT]_[mM][aA][xX]               return VIT_MAX;
@@ -58,13 +60,13 @@ int yylex (void);
 [tT][hH]                                return TH;
 [tT][fF][uU]                            yylval.value = M_TFU; return MMOD;
 [tT][eE][sS][tT][sS][eE][tT]            return TESTSET;
-[tT]                                    yylval.value = M_T; return MMOD;
-[sS]                                                        return S;
+<FLAGS>[tT]                             yylval.value = M_T; return MMOD;
+<FLAGS>[sS]                             return S;
 [sS][yY][sS][cC][fF][gG]       _REG.regno = REG_SYSCFG; return REG;
 [sS][tT][iI]                            return STI;
 [sS][sS][yY][nN][cC]                    return SSYNC;
-[sS][pP]"."[lL]                         _REG.regno = REG_SP; return HALF_REG;
-[sS][pP]"."[hH]                         _REG.regno = REG_SP | F_REG_HIGH; return HALF_REG;
+[sS][pP]"."[lL]                         _REG.regno = REG_SP; _REG.flags = F_REG_LOW; return HALF_REG;
+[sS][pP]"."[hH]                         _REG.regno = REG_SP; _REG.flags = F_REG_HIGH; return HALF_REG;
 [sS][pP]                                _REG.regno = REG_SP; return REG;
 [sS][iI][gG][nN][bB][iI][tT][sS]        return SIGNBITS;
 [sS][iI][gG][nN]                        return SIGN;
@@ -122,7 +124,7 @@ int yylex (void);
 [mM][0-3]"."[lLhH]  return parse_halfreg (&yylval.reg, T_REG_M, yytext);
 [mM][0-3]           return parse_reg (&yylval.reg, T_REG_M, yytext);
 
-[mM]                                    return M;
+<FLAGS>[mM]                             return M;
 [lL][tT]                                return LT;
 [lL][sS][hH][iI][fF][tT]                return LSHIFT;
 [lL][sS][eE][tT][uU][pP]                return LSETUP;
@@ -158,8 +160,8 @@ int yylex (void);
 [gG][eE]                                return GE;
 [fF][uU]                                yylval.value = M_FU; return MMOD;
 [fF][pP]         _REG.regno = REG_FP; return REG;
-[fF][pP]"."[lL]  _REG.regno = REG_FP; return HALF_REG;
-[fF][pP]"."[hH]  _REG.regno = REG_FP | F_REG_HIGH; return HALF_REG;
+[fF][pP]"."[lL]  _REG.regno = REG_FP; _REG.flags = F_REG_LOW; return HALF_REG;
+[fF][pP]"."[hH]  _REG.regno = REG_FP; _REG.flags = F_REG_HIGH; return HALF_REG;
 
 [eE][xX][tT][rR][aA][cC][tT]            return EXTRACT;
 [eE][xX][pP][aA][dD][jJ]                return EXPADJ;
@@ -189,7 +191,6 @@ int yylex (void);
 [bB][yY][tT][eE][oO][pP]16[mM]          return BYTEOP16M;
 [bB][yY][tT][eE][oO][pP]16[pP]          return BYTEOP16P;
 [bB][yY][tT][eE][oO][pP]3[pP]           return BYTEOP3P;
-[bB][yY][tT][eE][oO][pP]2[mM]           return BYTEOP2M;
 [bB][yY][tT][eE][oO][pP]2[pP]           return BYTEOP2P;
 [bB][yY][tT][eE][oO][pP]1[pP]           return BYTEOP1P;
 [bB][yY]                                return BY;
@@ -208,6 +209,8 @@ int yylex (void);
 [bB]                                    return B;
 [aA][zZ]  _REG.regno = S_AZ;   return STATUS_REG;
 [aA][nN]  _REG.regno = S_AN;   return STATUS_REG;
+[aA][cC]0_[cC][oO][pP][yY]  _REG.regno = S_AC0_COPY; return STATUS_REG;
+[vV]_[cC][oO][pP][yY]       _REG.regno = S_V_COPY;   return STATUS_REG;
 [aA][qQ]  _REG.regno = S_AQ;   return STATUS_REG;
 [aA][cC]0 _REG.regno = S_AC0;  return STATUS_REG;
 [aA][cC]1 _REG.regno = S_AC1;  return STATUS_REG;
@@ -215,8 +218,8 @@ int yylex (void);
 [aA][vV]0[sS] _REG.regno = S_AV0S; return STATUS_REG;
 [aA][vV]1 _REG.regno = S_AV1;  return STATUS_REG;
 [aA][vV]1[sS] _REG.regno = S_AV1S; return STATUS_REG;
-[vV] _REG.regno = S_V; return STATUS_REG;
 [vV][sS]  _REG.regno = S_VS;   return STATUS_REG;
+[rR][nN][dD]_[mM][oO][dD]  _REG.regno = S_RND_MOD; return STATUS_REG;
 
 
 [aA][sS][tT][aA][tT]   _REG.regno = REG_ASTAT; return REG;
@@ -231,7 +234,7 @@ int yylex (void);
 [aA]1"."[hH]    return A_ONE_DOT_H;
 [aA]0"."[hH]    return A_ZERO_DOT_H;
 [aA][bB][sS]                            return ABS;
-abort                                   return ABORT;
+[aA][bB][oO][rR][tT]                    return ABORT;
 [aA]1"."[xX]    _REG.regno = REG_A1x; return REG;
 [aA]1"."[wW]    _REG.regno = REG_A1w; return REG;
 [aA]1           _REG.regno = REG_A1;  return REG_A_DOUBLE_ONE;
@@ -261,8 +264,8 @@ abort                                   return ABORT;
 "<<="                   return _LESS_LESS_ASSIGN;
 "<<"                    return LESS_LESS;
 "<"                     return LESS_THAN;
-"("                     return LPAREN;
-")"                     return RPAREN;
+"("                     BEGIN(FLAGS); return LPAREN;
+")"                     BEGIN(INITIAL); return RPAREN;
 ":"                     return COLON;
 "/"                     return SLASH;
 "-="                    return _MINUS_ASSIGN;
@@ -297,10 +300,10 @@ abort                                   return ABORT;
     yylval.value = parse_int (&yytext);
     return NUMBER;
   }
-[A-Za-z_$.][A-Za-z0-9_$.]* { 
+[[:alpha:]\x80-\xff_$.][[:alnum:]\x80-\xff_$.]* {
     yylval.symbol = symbol_find_or_make (yytext);
     symbol_mark_used (yylval.symbol);
-    return SYMBOL; 
+    return SYMBOL;
   }
 [0-9][bfBF] {
     char *name;
@@ -313,8 +316,8 @@ abort                                   return ABORT;
        if ((yylval.symbol != NULL)
              && (S_IS_DEFINED (yylval.symbol)))
           return SYMBOL;
-       as_bad ("backward reference to unknown label %d:", 
-                                                 (int) (ref[0] - '0')); 
+       as_bad ("backward reference to unknown label %d:",
+                                                 (int) (ref[0] - '0'));
       }
     else if (ref[1] == 'f' || ref[1] == 'F')
       {
@@ -329,8 +332,8 @@ abort                                   return ABORT;
        yylval.symbol = symbol_find_or_make (name);
        /* We have no need to check symbol properties.  */
        return SYMBOL;
-      }                                  
-  }                                  
+      }
+  }
 [ \t\n]                                    ;
 "/*".*"*/"                                 ;
 .                                          return yytext[0];
@@ -341,8 +344,7 @@ static long parse_int (char **end)
   int not_done = 1;
   int shiftvalue = 0;
   char * char_bag;
-  long value = 0;
-  char c;
+  unsigned long value = 0;
   char *arg = *end;
 
   while (*arg && *arg == ' ')
@@ -362,9 +364,9 @@ static long parse_int (char **end)
         fmt = 'd';
         break;
 
-      case '0':  /* Accept different formated integers hex octal and binary. */
+      case '0':  /* Accept different formatted integers hex octal and binary. */
         {
-         c = *++arg;
+         char c = *++arg;
           arg++;
          if (c == 'x' || c == 'X') /* Hex input.  */
            fmt = 'h';
@@ -418,7 +420,7 @@ static long parse_int (char **end)
         break;
 
 /* The assembler allows for fractional constants to be created
-   by either the 0.xxxx or the f#xxxx format 
+   by either the 0.xxxx or the f#xxxx format
 
    i.e.   0.5 would result in 0x4000
 
@@ -461,7 +463,7 @@ static long parse_int (char **end)
         {
           while (1)
             {
-              int c;
+              char c;
               c = *arg++;
               if (c >= '0' && c <= '9')
                 value = (value * 10) + (c - '0');
@@ -485,7 +487,7 @@ static long parse_int (char **end)
     {
       char c;
       c = *arg++;
-      if (c == 0 || !index (char_bag, c))
+      if (c == 0 || !strchr (char_bag, c))
        {
           not_done = 0;
           *--arg = c;
@@ -509,6 +511,7 @@ static long parse_int (char **end)
 static int parse_reg (Register *r, int cl, char *rt)
 {
   r->regno = cl | (rt[1] - '0');
+  r->flags = F_REG_NONE;
   return REG;
 }
 
@@ -524,11 +527,12 @@ static int parse_halfreg (Register *r, int cl, char *rt)
 
       case 'l':
       case 'L':
+       r->flags = F_REG_LOW;
        break;
 
       case 'h':
       case 'H':
-       r->regno |= F_REG_HIGH;
+       r->flags = F_REG_HIGH;
        break;
     }
 
@@ -538,17 +542,8 @@ static int parse_halfreg (Register *r, int cl, char *rt)
 /* Our start state is KEYWORD as we have
    command keywords such as PREFETCH.  */
 
-void 
+void
 set_start_state (void)
 {
   BEGIN KEYWORD;
 }
-
-
-#ifndef yywrap
-int
-yywrap ()
-{ 
-  return 1;
-}
-#endif