/* bfin-lex.l ADI Blackfin lexer
- Copyright 2005, 2006, 2007, 2008, 2010
- Free Software Foundation, Inc.
+ Copyright (C) 2005-2015 Free Software Foundation, Inc.
This file is part of GAS, the GNU Assembler.
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;
[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;
[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;
[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;
[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;
[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;
[aA][vV]1 _REG.regno = S_AV1; return STATUS_REG;
[aA][vV]1[sS] _REG.regno = S_AV1S; 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;
[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;
"<<=" 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;
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;