Support Intel FRED LKGS
[binutils-gdb.git] / gas / config / bfin-lex.l
index bc7957ad83705d3341a6acbf8cf97edb2363e684..1fc24902074758f5fc5b0094b7f872f1834466d2 100644 (file)
@@ -1,6 +1,7 @@
+%option noyywrap
+
 /* bfin-lex.l  ADI Blackfin lexer
-   Copyright 2005, 2006, 2007, 2008, 2010
-   Free Software Foundation, Inc.
+   Copyright (C) 2005-2023 Free Software Foundation, Inc.
 
    This file is part of GAS, the GNU Assembler.
 
    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
    02110-1301, USA.  */
 %{
-
-#include "as.h"
 #include "bfin-defs.h"
-#include "bfin-parse.h"
+#include "config/bfin-parse.h"
 
 static long parse_int (char **end);
 static int parse_halfreg (Register *r, int cl, char *hr);
@@ -31,6 +30,9 @@ int yylex (void);
 
 #define _REG yylval.reg
 
+/* Flex generates static functions "input" & "unput" which are not used.  */
+#define YY_NO_INPUT
+#define YY_NO_UNPUT
 
 %}
 
@@ -39,6 +41,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 +50,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,8 +61,8 @@ 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;
@@ -122,7 +125,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;
@@ -189,7 +192,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;
@@ -263,8 +265,8 @@ int yylex (void);
 "<<="                   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;
@@ -299,7 +301,7 @@ int yylex (void);
     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;
@@ -309,7 +311,7 @@ int yylex (void);
     char *ref = strdup (yytext);
     if (ref[1] == 'b' || ref[1] == 'B')
       {
-        name = fb_label_name ((int) (ref[0] - '0'), 0);
+        name = fb_label_name (ref[0] - '0', 0);
        yylval.symbol = symbol_find (name);
 
        if ((yylval.symbol != NULL)
@@ -327,7 +329,7 @@ int yylex (void);
            Construct a local label name, then an undefined symbol.
            Just return it as never seen before.  */
 
-        name = fb_label_name ((int) (ref[0] - '0'), 1);
+        name = fb_label_name (ref[0] - '0', 1);
        yylval.symbol = symbol_find_or_make (name);
        /* We have no need to check symbol properties.  */
        return SYMBOL;
@@ -342,8 +344,8 @@ static long parse_int (char **end)
   char fmt = '\0';
   int not_done = 1;
   int shiftvalue = 0;
-  char * char_bag;
-  long value = 0;
+  const char *char_bag;
+  unsigned long value = 0;
   char *arg = *end;
 
   while (*arg && *arg == ' ')
@@ -363,7 +365,7 @@ 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. */
         {
          char c = *++arg;
           arg++;
@@ -546,12 +548,3 @@ set_start_state (void)
 {
   BEGIN KEYWORD;
 }
-
-
-#ifndef yywrap
-int
-yywrap ()
-{
-  return 1;
-}
-#endif