
#line 3 "bfin-lex.c"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
#endif /* ! C99 */

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN (yy_start) = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart(yyin  )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
#endif

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

extern int yyleng;

extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

    #define YY_LESS_LINENO(n)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, (yytext_ptr)  )

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;

#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : NULL)

/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 0;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart (FILE *input_file  );
void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE yy_create_buffer (FILE *file,int size  );
void yy_delete_buffer (YY_BUFFER_STATE b  );
void yy_flush_buffer (YY_BUFFER_STATE b  );
void yypush_buffer_state (YY_BUFFER_STATE new_buffer  );
void yypop_buffer_state (void );

static void yyensure_buffer_stack (void );
static void yy_load_buffer_state (void );
static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,int len  );

void *yyalloc (yy_size_t  );
void *yyrealloc (void *,yy_size_t  );
void yyfree (void *  );

#define yy_new_buffer yy_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer(yyin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        yyensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            yy_create_buffer(yyin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

typedef unsigned char YY_CHAR;

FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;

typedef int yy_state_type;

extern int yylineno;

int yylineno = 1;

extern char *yytext;
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state (void );
static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
static int yy_get_next_buffer (void );
static void yy_fatal_error (yyconst char msg[]  );

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	(yytext_ptr) = yy_bp; \
	yyleng = (size_t) (yy_cp - yy_bp); \
	(yy_hold_char) = *yy_cp; \
	*yy_cp = '\0'; \
	(yy_c_buf_p) = yy_cp;

#define YY_NUM_RULES 239
#define YY_END_OF_BUFFER 240
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_accept[571] =
    {   0,
        0,    0,    0,    0,    0,    0,  240,  238,  236,  236,
      221,  234,  220,  219,  201,  202,  217,  215,  212,  211,
      204,  233,  233,  203,  222,  200,  196,  238,  225,  234,
      147,  234,  234,  234,  234,  234,  234,  234,  234,  234,
      234,  234,  234,  234,   54,  234,  234,  234,   12,   10,
      190,  189,  188,  186,  184,  234,  234,  234,  234,  234,
       70,   19,   18,    8,    7,  234,  218,  216,  214,  213,
        0,  210,  205,    0,    0,    0,  233,  235,    0,  199,
      197,  223,  195,  194,  179,  176,  234,  234,  234,  149,
      152,  234,  234,  148,    0,  146,  234,  139,  234,  234,

      135,  234,  125,  234,  123,  234,  234,  234,  234,  234,
      234,  234,  103,  102,  101,  234,  100,   99,  234,  234,
       97,  234,   95,   94,   93,   91,  234,   85,  234,  234,
       77,   86,  234,   71,   69,  234,  234,  234,  234,   65,
      234,  234,  234,   59,  234,   56,  234,  234,   53,  234,
      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
      234,   25,  234,  234,  234,  234,  234,   15,   14,  234,
      234,  159,  234,  234,  187,  185,  224,  234,  234,   95,
      234,  234,  234,  206,  208,  207,  209,    0,    0,  233,
      233,  198,  192,  193,  234,  234,  234,  172,  153,  154,

      234,  234,  163,  164,  234,  155,  157,  233,  234,  234,
      234,  234,  234,  234,  124,  234,  234,  119,  234,  234,
      234,  234,  234,  234,  234,  234,  234,  180,   98,  234,
      234,  234,  234,  234,  234,   80,   83,   78,   81,  234,
      234,  234,   79,   82,  234,   67,   66,  234,   63,   62,
      234,  234,  234,  234,  234,  234,  234,  234,  234,  234,
       44,   39,   38,   37,   36,   35,   34,  234,   32,   31,
      234,  234,  234,  234,  234,  234,  234,   21,  234,  234,
       16,   13,  234,  234,    9,  234,  234,  234,  234,  234,
      234,  237,  191,  171,  169,  178,  177,  170,  168,  175,

      174,  234,  234,  234,  234,  234,  156,  158,  145,  234,
      234,  234,  234,  138,  137,  234,  127,  234,  234,  118,
      234,  234,  234,  234,  111,  110,  234,  234,  234,  234,
      234,  234,  234,  105,  104,  234,  234,  234,   96,  234,
       92,   89,   84,   74,  234,  234,   68,   64,  234,   61,
       60,   58,   57,  234,   55,   45,  234,   50,   47,   49,
       46,   48,  234,  234,   43,   42,  234,  234,  234,  234,
      234,  234,   27,   24,   23,  234,  234,  234,  234,  234,
      234,  229,  234,  228,  234,  234,  173,  234,  234,  234,
      161,  234,  234,  234,  234,  234,  234,  234,  234,  234,

      234,  122,  234,  117,  116,  234,  234,  234,  234,  234,
      234,  234,  234,  108,  234,  234,  234,  234,  234,  234,
      234,  234,  234,  234,    2,  183,   52,   41,   40,  234,
       33,  234,  234,  234,   30,  234,   22,  234,  234,  234,
      234,  232,  234,  234,  234,  234,  234,  234,  165,  162,
      144,  143,  142,  141,  140,  234,  234,  234,  234,  126,
      121,  234,  234,  234,  234,  234,   51,  234,  234,  107,
      234,  234,  234,  234,  234,   88,   87,   90,  234,  234,
       73,   72,  234,   29,  234,  234,  234,   20,  234,  234,
      151,  234,  230,  234,  227,  234,  166,  167,  234,  234,

      234,  234,  234,  234,  120,  234,  114,  113,  234,  234,
      234,    5,  106,  234,  181,  234,  234,  234,  234,  160,
       28,  234,  234,   17,   11,  234,  234,  150,  234,  234,
      134,  133,  132,  129,  234,  115,  234,    6,  109,  234,
      234,    3,  234,   76,    1,   26,  231,  226,  136,  130,
      131,  234,  234,  234,  234,  234,  128,  234,  234,    4,
       75,  234,  234,  112,  234,  234,  234,  234,  182,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    4,    1,    5,    6,    7,    8,    1,    9,
       10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
       20,   21,   22,   23,   24,   25,   26,   27,   28,   29,
       30,   31,    1,   32,   33,   34,   35,   36,   37,   38,
       39,   40,   41,   42,   43,   44,   45,   46,   47,   48,
       49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
       59,    1,   60,   61,   62,    1,   33,   34,   35,   36,

       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
       47,   48,   49,   50,   51,   52,   53,   54,   55,   56,
       57,   58,    1,   63,    1,   64,    1,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,

        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
        6,    6,    6,    6,    6
    } ;

static yyconst flex_int32_t yy_meta[65] =
    {   0,
        1,    1,    2,    1,    1,    3,    1,    1,    1,    1,
        1,    1,    1,    1,    4,    1,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    1,    1,    1,    1,
        1,    1,    6,    7,    6,    6,    6,    7,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    4,    3,    3,    1,    1,
        1,    3,    1,    1
    } ;

static yyconst flex_int16_t yy_base[577] =
    {   0,
        0,    0,   27,   28,   32,   40,  666,  667,  667,  667,
      667,    0,  667,  635,  667,  667,  634,   67,  667,   56,
      652,   67,   72,  667,  667,   44,   63,  631,  667,  114,
      168,   67,   99,   33,   89,   70,  111,  157,  608,  209,
      161,   48,   98,  245,  279,  313,  101,  609,   84,  639,
      667,  667,  628,   90,  667,  152,   77,  616,  606,   75,
      235,    0,  175,    0,    0,    0,  667,  667,  667,  667,
      115,  667,  667,  142,  644,    0,   74,  667,    0,  624,
      667,  667,  667,  131,  638,  637,  120,  152,  610,    0,
        0,  190,  165,    0,    0,  635,  597,    0,  611,  600,

      594,  601,    0,  603,    0,  586,  607,  602,  592,   96,
      586,  169,  623,  591,    0,  584,    0,    0,  583,  597,
      618,  588,    0,    0,  580,    0,  585,  614,  172,  174,
        0,  581,  161,  205,  612,  570,  579,  577,  151,    0,
      576,  585,  569,  605,  584,    0,  566,  571,  601,  574,
      562,  577,  560,  236,  561,  577,  562,  187,  556,  566,
      567,  590,  547,  562,  551,  550,  547,    0,    0,  551,
      546,    0,  562,  577,  667,  667,  667,  542,  550,  549,
      546,  195,  547,  667,  667,  667,  667,  579,  148,    0,
        0,  667,  667,  559,  193,  195,  538,    0,  525,    0,

      547,  544,    0,    0,  551,  532,  531,    0,  230,  234,
      527,  530,  542,  534,    0,  531,  532,  271,  528,  541,
      196,  222,  242,  540,  522,  244,  536,  552,    0,  519,
      265,  531,  548,  518,  270,    0,    0,    0,    0,  517,
      512,  522,    0,    0,  273,    0,    0,  514,    0,    0,
      525,  509,  524,  275,  515,  509,  504,  284,  504,  293,
      318,    0,    0,    0,    0,    0,    0,  508,    0,    0,
      503,  501,  501,  512,  503,  283,  502,    0,  512,  494,
        0,    0,  483,  497,    0,  492,  505,  488,  497,  501,
      497,  526,  667,    0,    0,    0,    0,    0,    0,    0,

        0,  484,  500,  488,  495,  480,    0,    0,    0,  487,
      477,  492,  232,    0,  477,  294,  512,  491,  488,  289,
      479,  490,  471,  477,    0,    0,  487,  486,  462,  464,
      464,  479,  481,    0,    0,  477,  488,  461,    0,  448,
        0,  494,    0,  446,  454,  468,    0,    0,  468,    0,
        0,    0,    0,  469,    0,    0,  466,    0,    0,    0,
        0,    0,  483,  484,    0,    0,  455,  463,  463,  445,
      459,  443,  460,    0,    0,  458,  454,  440,  445,  441,
      448,  425,  435,    0,  448,  438,    0,  436,  338,  430,
        0,  431,  424,  427,  434,  425,  436,  427,  441,  427,

      416,    0,  420,    0,    0,  422,  425,  427,  428,  413,
      413,  429,  412,    0,  420,  426,  423,  414,  423,  407,
      315,  177,  408,  403,    0,    0,    0,    0,    0,  407,
        0,  413,  419,  400,    0,  409,    0,  410,  411,  414,
      389,  404,  404,  391,  399,  393,  417,  418,    0,    0,
        0,    0,    0,    0,    0,  397,  302,  402,  388,    0,
      416,  390,  381,  380,  385,  379,    0,  381,  391,    0,
      375,  375,  404,  391,  386,    0,    0,    0,  385,  375,
        0,    0,  384,    0,  367,  381,  365,    0,  364,  359,
        0,  368,    0,  378,    0,  355,    0,    0,  373,   86,

      362,  361,  365,  374,    0,  350,    0,    0,  368,  367,
      351,    0,    0,  356,    0,  335,  330,  339,  341,    0,
        0,  324,  324,    0,    0,  320,  333,    0,  320,  246,
        0,    0,    0,    0,  334,    0,  312,    0,    0,  305,
      309,    0,  314,    0,    0,    0,    0,    0,    0,    0,
        0,  309,  310,  304,  303,  292,    0,  287,  261,    0,
        0,  255,  241,    0,  254,  214,  186,  185,    0,  667,
      378,  382,  389,  179,  392,  395
    } ;

static yyconst flex_int16_t yy_def[577] =
    {   0,
      570,    1,    1,    1,    1,    1,  570,  570,  570,  570,
      570,  571,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  572,  572,  570,  570,  570,  570,  570,  570,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      570,  570,  570,  570,  570,  571,   38,   40,   44,  571,
      571,   46,  571,  571,  571,  571,  570,  570,  570,  570,
      570,  570,  570,  570,  573,  574,   23,  570,  575,  570,
      570,  570,  570,  570,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  576,  571,  571,  571,  571,  571,

      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  570,  570,  570,  571,  571,  571,
      571,  571,  571,  570,  570,  570,  570,  573,  573,  574,
      575,  570,  570,  570,  571,  571,  571,  571,  571,  571,

      571,  571,  571,  571,  571,  571,  571,  576,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  573,  570,  571,  571,  571,  571,  571,  571,  571,

      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,

      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,

      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
      571,  571,  571,  571,  571,  571,  571,  571,  571,    0,
      570,  570,  570,  570,  570,  570
    } ;

static yyconst flex_int16_t yy_nxt[732] =
    {   0,
        8,    9,   10,   11,    8,   12,   13,   14,   15,   16,
       17,   18,   19,   20,   12,   21,   22,   23,   23,   23,
       23,   23,   23,   23,   23,   23,   24,   25,   26,   27,
       28,   29,   30,   31,   32,   33,   34,   35,   36,   37,
       38,   39,   12,   40,   41,   42,   43,   44,   12,   45,
       46,   47,   48,   49,   50,   12,   12,   12,   51,   52,
       53,   12,   54,   55,   56,   56,   82,   57,   57,   72,
       58,   58,   80,   81,   59,   59,   61,  111,   69,   60,
       60,   76,   62,   63,   61,   73,  570,   64,  112,   65,
       62,   63,   83,   95,  139,   64,   70,   65,  140,  102,

       78,  103,   95,   95,   78,   78,  115,  570,  530,   78,
      104,  570,  179,  105,  180,   95,  116,  106,   74,  176,
      183,  117,   79,  107,  171,  170,  184,  570,  185,   71,
       85,   86,  108,  531,  172,  109,  113,  166,  167,  110,
      168,  114,  141,  142,  169,  173,  220,   87,   88,  221,
      143,  118,  177,  186,  119,  187,   95,   89,  189,   90,
      193,  194,   91,  292,   92,  120,  197,   93,  199,  200,
      198,   94,   95,  121,  121,  121,  121,  135,  135,  135,
      135,  206,  207,  190,   96,   96,   96,   96,  236,  237,
      238,  239,  122,  136,  123,  178,  124,  241,  249,  113,

      242,  137,  250,  223,  114,  569,  138,  125,   97,  126,
      479,  166,  167,  480,  168,   98,  224,   99,  169,  271,
      225,  243,  244,  100,  101,  128,  128,  128,  128,  202,
      568,  290,  294,  203,  298,  272,  295,  567,  299,  204,
      257,  205,  129,  130,  325,  131,  326,  296,  297,  300,
      301,  135,  135,  135,  135,  132,  327,  328,  329,  133,
      134,  144,  144,  144,  144,  144,  144,  136,  310,  309,
      395,  566,  263,  309,  330,  137,  264,  145,  311,  146,
      138,  265,  396,  334,  312,  313,  266,  335,  147,  331,
      550,  267,  565,  551,  148,  149,  149,  149,  149,  149,

      149,  149,  149,  320,  339,  321,  564,  563,  339,  343,
      322,  150,  347,  343,  352,  151,  347,  356,  352,  500,
      501,  502,  374,  356,  152,  153,  375,  356,  404,  358,
      154,  155,  405,  359,  562,  363,  364,  561,  360,  560,
      398,  399,  559,  361,  558,  156,  400,  157,  362,  158,
      159,  557,  160,  161,  556,  447,  448,  365,  476,  555,
      162,  366,  449,  163,  164,  477,  554,  553,  552,  165,
      478,  549,  548,  547,  546,  545,  544,  543,  542,  367,
       66,   66,   66,   66,   66,   77,   77,  541,   77,  188,
      540,  188,  188,  188,  188,  188,  191,  191,  191,  208,

      208,  208,  539,  538,  537,  536,  535,  534,  533,  532,
      529,  528,  527,  526,  525,  524,  523,  522,  521,  520,
      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
      509,  508,  507,  506,  505,  504,  503,  499,  498,  497,
      496,  495,  494,  493,  492,  491,  490,  489,  488,  487,
      486,  485,  484,  483,  482,  481,  475,  474,  473,  472,
      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
      461,  460,  459,  458,  457,  456,  455,  454,  453,  452,
      451,  450,  446,  445,  444,  443,  420,  442,  441,  440,
      439,  438,  437,  436,  435,  434,  433,  432,  431,  430,

      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
      409,  408,  407,  406,  403,  402,  401,  397,  394,  393,
      392,  391,  390,  389,  388,  387,  189,  386,  385,  384,
      383,  382,  381,  380,  379,  378,  377,  376,  373,  372,
      371,  370,  369,  368,  357,  355,  354,  353,  351,  350,
      349,  348,  346,  345,  344,  342,  341,  340,  338,  337,
      336,  333,  332,  324,  323,  319,  318,  317,  316,  315,
      314,  308,  307,  306,  305,  304,  303,  302,  293,  189,
      291,  289,  288,  287,  286,  285,  284,  283,  282,  281,

      280,  279,  278,  277,  276,  275,  274,  273,  270,  269,
      268,  262,  261,  260,  259,  258,  257,  256,  255,  254,
      253,  252,  251,  248,  247,  246,  245,  240,  235,  234,
      233,  232,  231,  230,  229,  228,  227,  226,  222,  219,
      218,  217,  216,  215,  214,  213,  212,  211,  210,  209,
      201,  196,  195,  192,  189,  182,  181,  175,  174,  170,
      127,   84,   75,   68,   67,  570,    7,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,

      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570
    } ;

static yyconst flex_int16_t yy_chk[732] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    3,    4,   27,    3,    4,   20,
        3,    4,   26,   26,    3,    4,    5,   34,   18,    3,
        4,   22,    5,    5,    6,   20,   23,    5,   34,    5,
        6,    6,   27,   35,   42,    6,   18,    6,   42,   32,

       22,   32,   43,   33,   22,   23,   36,   77,  500,   23,
       32,   77,   57,   32,   57,   37,   36,   32,   20,   54,
       60,   36,   22,   32,   49,   60,   71,   23,   71,   18,
       30,   30,   33,  500,   49,   33,   35,   47,   47,   33,
       47,   35,   43,   43,   47,   49,  110,   30,   30,  110,
       43,   37,   54,   74,   37,   74,   56,   30,  189,   30,
       84,   84,   30,  189,   30,   37,   87,   30,   88,   88,
       87,   30,   31,   38,   38,   38,   38,   41,   41,   41,
       41,   93,   93,  574,   31,   31,   31,   31,  129,  129,
      130,  130,   38,   41,   38,   56,   38,  133,  139,   56,

      133,   41,  139,  112,   56,  568,   41,   38,   31,   38,
      422,   63,   63,  422,   63,   31,  112,   31,   63,  158,
      112,  134,  134,   31,   31,   40,   40,   40,   40,   92,
      567,  182,  195,   92,  196,  158,  195,  566,  196,   92,
      182,   92,   40,   40,  221,   40,  221,  195,  195,  196,
      196,   61,   61,   61,   61,   40,  222,  222,  222,   40,
       40,   44,   44,   44,   44,   44,   44,   61,  210,  209,
      313,  565,  154,  209,  223,   61,  154,   44,  210,   44,
       61,  154,  313,  226,  210,  210,  154,  226,   44,  223,
      530,  154,  563,  530,   44,   45,   45,   45,   45,   45,

       45,   45,   45,  218,  231,  218,  562,  559,  231,  235,
      218,   45,  245,  235,  254,   45,  245,  258,  254,  457,
      457,  457,  276,  258,   45,   45,  276,  258,  320,  260,
       45,   46,  320,  260,  558,  261,  261,  556,  260,  555,
      316,  316,  554,  260,  553,   46,  316,   46,  260,   46,
       46,  552,   46,   46,  543,  389,  389,  261,  421,  541,
       46,  261,  389,   46,   46,  421,  540,  537,  535,   46,
      421,  529,  527,  526,  523,  522,  519,  518,  517,  261,
      571,  571,  571,  571,  571,  572,  572,  516,  572,  573,
      514,  573,  573,  573,  573,  573,  575,  575,  575,  576,

      576,  576,  511,  510,  509,  506,  504,  503,  502,  501,
      499,  496,  494,  492,  490,  489,  487,  486,  485,  483,
      480,  479,  475,  474,  473,  472,  471,  469,  468,  466,
      465,  464,  463,  462,  461,  459,  458,  456,  448,  447,
      446,  445,  444,  443,  442,  441,  440,  439,  438,  436,
      434,  433,  432,  430,  424,  423,  420,  419,  418,  417,
      416,  415,  413,  412,  411,  410,  409,  408,  407,  406,
      403,  401,  400,  399,  398,  397,  396,  395,  394,  393,
      392,  390,  388,  386,  385,  383,  382,  381,  380,  379,
      378,  377,  376,  373,  372,  371,  370,  369,  368,  367,

      364,  363,  357,  354,  349,  346,  345,  344,  342,  340,
      338,  337,  336,  333,  332,  331,  330,  329,  328,  327,
      324,  323,  322,  321,  319,  318,  317,  315,  312,  311,
      310,  306,  305,  304,  303,  302,  292,  291,  290,  289,
      288,  287,  286,  284,  283,  280,  279,  277,  275,  274,
      273,  272,  271,  268,  259,  257,  256,  255,  253,  252,
      251,  248,  242,  241,  240,  234,  233,  232,  230,  228,
      227,  225,  224,  220,  219,  217,  216,  214,  213,  212,
      211,  207,  206,  205,  202,  201,  199,  197,  194,  188,
      183,  181,  180,  179,  178,  174,  173,  171,  170,  167,

      166,  165,  164,  163,  162,  161,  160,  159,  157,  156,
      155,  153,  152,  151,  150,  149,  148,  147,  145,  144,
      143,  142,  141,  138,  137,  136,  135,  132,  128,  127,
      125,  122,  121,  120,  119,  116,  114,  113,  111,  109,
      108,  107,  106,  104,  102,  101,  100,   99,   97,   96,
       89,   86,   85,   80,   75,   59,   58,   53,   50,   48,
       39,   28,   21,   17,   14,    7,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,

      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570,  570,  570,  570,  570,  570,  570,  570,  570,  570,
      570
    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

extern int yy_flex_debug;
int yy_flex_debug = 0;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "bfin-lex.l"
/* bfin-lex.l  ADI Blackfin lexer
   Copyright 2005, 2006, 2007, 2008, 2010
   Free Software Foundation, Inc.

   This file is part of GAS, the GNU Assembler.

   GAS is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3, or (at your option)
   any later version.

   GAS is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with GAS; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
   02110-1301, USA.  */
#line 22 "bfin-lex.l"

#include "as.h"
#include "bfin-defs.h"
#include "bfin-parse.h"

static long parse_int (char **end);
static int parse_halfreg (Register *r, int cl, char *hr);
static int parse_reg (Register *r, int type, char *rt);
int yylex (void);

#define _REG yylval.reg


/* Define Start States ... Actually we will use exclusion.
   If no start state is specified it should match any state
   and <INITIAL> would match some keyword rules only with
   initial.  */


#line 840 "bfin-lex.c"

#define INITIAL 0
#define KEYWORD 1
#define FLAGS 2

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

static int yy_init_globals (void );

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int yylex_destroy (void );

int yyget_debug (void );

void yyset_debug (int debug_flag  );

YY_EXTRA_TYPE yyget_extra (void );

void yyset_extra (YY_EXTRA_TYPE user_defined  );

FILE *yyget_in (void );

void yyset_in  (FILE * in_str  );

FILE *yyget_out (void );

void yyset_out  (FILE * out_str  );

int yyget_leng (void );

char *yyget_text (void );

int yyget_lineno (void );

void yyset_lineno (int line_number  );

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap (void );
#else
extern int yywrap (void );
#endif
#endif

    static void yyunput (int c,char *buf_ptr  );
    
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * );
#endif

#ifndef YY_NO_INPUT

#ifdef __cplusplus
static int yyinput (void );
#else
static int input (void );
#endif

#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO fwrite( yytext, yyleng, 1, yyout )
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		yy_size_t n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(yyin); \
			} \
		}\
\

#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int yylex (void);

#define YY_DECL int yylex (void)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    
#line 44 "bfin-lex.l"

#line 1026 "bfin-lex.c"

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! (yy_start) )
			(yy_start) = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			yyensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				yy_create_buffer(yyin,YY_BUF_SIZE );
		}

		yy_load_buffer_state( );
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
		yy_cp = (yy_c_buf_p);

		/* Support of yytext. */
		*yy_cp = (yy_hold_char);

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = (yy_start);
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				(yy_last_accepting_state) = yy_current_state;
				(yy_last_accepting_cpos) = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 571 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 667 );

yy_find_action:
		yy_act = yy_accept[yy_current_state];
		if ( yy_act == 0 )
			{ /* have to back up */
			yy_cp = (yy_last_accepting_cpos);
			yy_current_state = (yy_last_accepting_state);
			yy_act = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;

do_action:	/* This label is used only to access EOF actions. */

		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = (yy_hold_char);
			yy_cp = (yy_last_accepting_cpos);
			yy_current_state = (yy_last_accepting_state);
			goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 45 "bfin-lex.l"
_REG.regno = REG_sftreset;  return REG;
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 46 "bfin-lex.l"
_REG.regno = REG_omode;     return REG;
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 47 "bfin-lex.l"
_REG.regno = REG_idle_req;  return REG;
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 48 "bfin-lex.l"
_REG.regno = REG_hwerrcause; return REG;
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 49 "bfin-lex.l"
_REG.regno = REG_excause;   return REG;
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 50 "bfin-lex.l"
_REG.regno = REG_emucause;  return REG;
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 51 "bfin-lex.l"
return Z;
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 52 "bfin-lex.l"
return X;
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 53 "bfin-lex.l"
yylval.value = M_W32; return MMOD;
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 54 "bfin-lex.l"
return W;
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 55 "bfin-lex.l"
return VIT_MAX;
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 56 "bfin-lex.l"
return V; /* Special: V is a statflag and a modifier.  */
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 57 "bfin-lex.l"
_REG.regno = REG_USP; return REG;
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 58 "bfin-lex.l"
return TL;
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 59 "bfin-lex.l"
return TH;
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 60 "bfin-lex.l"
yylval.value = M_TFU; return MMOD;
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 61 "bfin-lex.l"
return TESTSET;
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 62 "bfin-lex.l"
yylval.value = M_T; return MMOD;
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 63 "bfin-lex.l"
return S;
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 64 "bfin-lex.l"
_REG.regno = REG_SYSCFG; return REG;
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 65 "bfin-lex.l"
return STI;
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 66 "bfin-lex.l"
return SSYNC;
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 67 "bfin-lex.l"
_REG.regno = REG_SP; _REG.flags = F_REG_LOW; return HALF_REG;
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 68 "bfin-lex.l"
_REG.regno = REG_SP; _REG.flags = F_REG_HIGH; return HALF_REG;
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 69 "bfin-lex.l"
_REG.regno = REG_SP; return REG;
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 70 "bfin-lex.l"
return SIGNBITS;
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 71 "bfin-lex.l"
return SIGN;
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 72 "bfin-lex.l"
_REG.regno = REG_SEQSTAT; return REG;
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 73 "bfin-lex.l"
return SEARCH;
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 74 "bfin-lex.l"
return SHIFT;
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 75 "bfin-lex.l"
return SCO;
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 77 "bfin-lex.l"
return SAA;
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 78 "bfin-lex.l"
yylval.value = M_S2RND; return MMOD;
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 79 "bfin-lex.l"
return RTX;
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 80 "bfin-lex.l"
return RTS;
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 81 "bfin-lex.l"
return RTN;
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 82 "bfin-lex.l"
return RTI;
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 83 "bfin-lex.l"
return RTE;
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 84 "bfin-lex.l"
return ROT;
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 85 "bfin-lex.l"
return RND20;
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 86 "bfin-lex.l"
return RND12;
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 87 "bfin-lex.l"
return RNDL;
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 88 "bfin-lex.l"
return RNDH;
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 89 "bfin-lex.l"
return RND;
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 91 "bfin-lex.l"
return parse_halfreg(&yylval.reg, T_REG_R, yytext);
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 93 "bfin-lex.l"
_REG.regno = REG_RETS; return REG;
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 94 "bfin-lex.l"
_REG.regno = REG_RETI; return REG;
	YY_BREAK
case 48:
YY_RULE_SETUP
#line 95 "bfin-lex.l"
_REG.regno = REG_RETX; return REG;
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 96 "bfin-lex.l"
_REG.regno = REG_RETN; return REG;
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 97 "bfin-lex.l"
_REG.regno = REG_RETE; return REG;
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 98 "bfin-lex.l"
_REG.regno = REG_EMUDAT; return REG;
	YY_BREAK
case 52:
YY_RULE_SETUP
#line 99 "bfin-lex.l"
return RAISE;
	YY_BREAK
case 53:
YY_RULE_SETUP
#line 101 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_R, yytext);
	YY_BREAK
case 54:
YY_RULE_SETUP
#line 103 "bfin-lex.l"
return R;
	YY_BREAK
case 55:
YY_RULE_SETUP
#line 104 "bfin-lex.l"
return PRNT;
	YY_BREAK
case 56:
YY_RULE_SETUP
#line 105 "bfin-lex.l"
return PC;
	YY_BREAK
case 57:
YY_RULE_SETUP
#line 106 "bfin-lex.l"
return PACK;
	YY_BREAK
case 58:
YY_RULE_SETUP
#line 108 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_P, yytext);
	YY_BREAK
case 59:
YY_RULE_SETUP
#line 109 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_P, yytext);
	YY_BREAK
case 60:
YY_RULE_SETUP
#line 111 "bfin-lex.l"
return OUTC;
	YY_BREAK
case 61:
YY_RULE_SETUP
#line 112 "bfin-lex.l"
return ONES;
	YY_BREAK
case 62:
YY_RULE_SETUP
#line 114 "bfin-lex.l"
return NOT;
	YY_BREAK
case 63:
YY_RULE_SETUP
#line 115 "bfin-lex.l"
return NOP;
	YY_BREAK
case 64:
YY_RULE_SETUP
#line 116 "bfin-lex.l"
return MNOP;
	YY_BREAK
case 65:
YY_RULE_SETUP
#line 117 "bfin-lex.l"
return NS;
	YY_BREAK
case 66:
YY_RULE_SETUP
#line 120 "bfin-lex.l"
return MIN;
	YY_BREAK
case 67:
YY_RULE_SETUP
#line 121 "bfin-lex.l"
return MAX;
	YY_BREAK
case 68:
YY_RULE_SETUP
#line 123 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_M, yytext);
	YY_BREAK
case 69:
YY_RULE_SETUP
#line 124 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_M, yytext);
	YY_BREAK
case 70:
YY_RULE_SETUP
#line 126 "bfin-lex.l"
return M;
	YY_BREAK
case 71:
YY_RULE_SETUP
#line 127 "bfin-lex.l"
return LT;
	YY_BREAK
case 72:
YY_RULE_SETUP
#line 128 "bfin-lex.l"
return LSHIFT;
	YY_BREAK
case 73:
YY_RULE_SETUP
#line 129 "bfin-lex.l"
return LSETUP;
	YY_BREAK
case 74:
YY_RULE_SETUP
#line 130 "bfin-lex.l"
return LOOP;
	YY_BREAK
case 75:
YY_RULE_SETUP
#line 131 "bfin-lex.l"
return LOOP_BEGIN;
	YY_BREAK
case 76:
YY_RULE_SETUP
#line 132 "bfin-lex.l"
return LOOP_END;
	YY_BREAK
case 77:
YY_RULE_SETUP
#line 134 "bfin-lex.l"
return LE;
	YY_BREAK
case 78:
YY_RULE_SETUP
#line 135 "bfin-lex.l"
_REG.regno = REG_LC0; return REG;
	YY_BREAK
case 79:
YY_RULE_SETUP
#line 136 "bfin-lex.l"
_REG.regno = REG_LT0; return REG;
	YY_BREAK
case 80:
YY_RULE_SETUP
#line 137 "bfin-lex.l"
_REG.regno = REG_LB0; return REG;
	YY_BREAK
case 81:
YY_RULE_SETUP
#line 138 "bfin-lex.l"
_REG.regno = REG_LC1; return REG;
	YY_BREAK
case 82:
YY_RULE_SETUP
#line 139 "bfin-lex.l"
_REG.regno = REG_LT1; return REG;
	YY_BREAK
case 83:
YY_RULE_SETUP
#line 140 "bfin-lex.l"
_REG.regno = REG_LB1; return REG;
	YY_BREAK
case 84:
YY_RULE_SETUP
#line 142 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_L, yytext);
	YY_BREAK
case 85:
YY_RULE_SETUP
#line 143 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_L, yytext);
	YY_BREAK
case 86:
YY_RULE_SETUP
#line 144 "bfin-lex.l"
return LO;
	YY_BREAK
case 87:
YY_RULE_SETUP
#line 145 "bfin-lex.l"
{ BEGIN 0; return JUMP_DOT_S;}
	YY_BREAK
case 88:
YY_RULE_SETUP
#line 146 "bfin-lex.l"
{ BEGIN 0; return JUMP_DOT_L;}
	YY_BREAK
case 89:
YY_RULE_SETUP
#line 147 "bfin-lex.l"
{ BEGIN 0; return JUMP;}
	YY_BREAK
case 90:
YY_RULE_SETUP
#line 148 "bfin-lex.l"
{ BEGIN 0; return JUMP_DOT_L; }
	YY_BREAK
case 91:
YY_RULE_SETUP
#line 149 "bfin-lex.l"
yylval.value = M_IU;   return MMOD;
	YY_BREAK
case 92:
YY_RULE_SETUP
#line 150 "bfin-lex.l"
yylval.value = M_ISS2; return MMOD;
	YY_BREAK
case 93:
YY_RULE_SETUP
#line 151 "bfin-lex.l"
yylval.value = M_IS;   return MMOD;
	YY_BREAK
case 94:
YY_RULE_SETUP
#line 152 "bfin-lex.l"
yylval.value = M_IH;   return MMOD;
	YY_BREAK
case 95:
YY_RULE_SETUP
#line 153 "bfin-lex.l"
return IF;
	YY_BREAK
case 96:
YY_RULE_SETUP
#line 154 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_I, yytext);
	YY_BREAK
case 97:
YY_RULE_SETUP
#line 155 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_I, yytext);
	YY_BREAK
case 98:
YY_RULE_SETUP
#line 156 "bfin-lex.l"
return HLT;
	YY_BREAK
case 99:
YY_RULE_SETUP
#line 157 "bfin-lex.l"
return HI;
	YY_BREAK
case 100:
YY_RULE_SETUP
#line 158 "bfin-lex.l"
return GT;
	YY_BREAK
case 101:
YY_RULE_SETUP
#line 159 "bfin-lex.l"
return GE;
	YY_BREAK
case 102:
YY_RULE_SETUP
#line 160 "bfin-lex.l"
yylval.value = M_FU; return MMOD;
	YY_BREAK
case 103:
YY_RULE_SETUP
#line 161 "bfin-lex.l"
_REG.regno = REG_FP; return REG;
	YY_BREAK
case 104:
YY_RULE_SETUP
#line 162 "bfin-lex.l"
_REG.regno = REG_FP; _REG.flags = F_REG_LOW; return HALF_REG;
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 163 "bfin-lex.l"
_REG.regno = REG_FP; _REG.flags = F_REG_HIGH; return HALF_REG;
	YY_BREAK
case 106:
YY_RULE_SETUP
#line 165 "bfin-lex.l"
return EXTRACT;
	YY_BREAK
case 107:
YY_RULE_SETUP
#line 166 "bfin-lex.l"
return EXPADJ;
	YY_BREAK
case 108:
YY_RULE_SETUP
#line 167 "bfin-lex.l"
return EXCPT;
	YY_BREAK
case 109:
YY_RULE_SETUP
#line 168 "bfin-lex.l"
return EMUEXCPT;
	YY_BREAK
case 110:
YY_RULE_SETUP
#line 169 "bfin-lex.l"
return DIVS;
	YY_BREAK
case 111:
YY_RULE_SETUP
#line 170 "bfin-lex.l"
return DIVQ;
	YY_BREAK
case 112:
YY_RULE_SETUP
#line 171 "bfin-lex.l"
return DISALGNEXCPT;
	YY_BREAK
case 113:
YY_RULE_SETUP
#line 172 "bfin-lex.l"
return DEPOSIT;
	YY_BREAK
case 114:
YY_RULE_SETUP
#line 173 "bfin-lex.l"
return DBGHALT;
	YY_BREAK
case 115:
YY_RULE_SETUP
#line 174 "bfin-lex.l"
return DBGCMPLX;
	YY_BREAK
case 116:
YY_RULE_SETUP
#line 175 "bfin-lex.l"
return DBGAL;
	YY_BREAK
case 117:
YY_RULE_SETUP
#line 176 "bfin-lex.l"
return DBGAH;
	YY_BREAK
case 118:
YY_RULE_SETUP
#line 177 "bfin-lex.l"
return DBGA;
	YY_BREAK
case 119:
YY_RULE_SETUP
#line 178 "bfin-lex.l"
return DBG;
	YY_BREAK
case 120:
YY_RULE_SETUP
#line 179 "bfin-lex.l"
{ _REG.regno = REG_CYCLES2; return REG; }
	YY_BREAK
case 121:
YY_RULE_SETUP
#line 180 "bfin-lex.l"
{ _REG.regno = REG_CYCLES; return REG; }
	YY_BREAK
case 122:
YY_RULE_SETUP
#line 181 "bfin-lex.l"
return CSYNC;
	YY_BREAK
case 123:
YY_RULE_SETUP
#line 182 "bfin-lex.l"
return CO;
	YY_BREAK
case 124:
YY_RULE_SETUP
#line 183 "bfin-lex.l"
return CLI;
	YY_BREAK
case 125:
YY_RULE_SETUP
#line 185 "bfin-lex.l"
_REG.regno = REG_CC; return CCREG;
	YY_BREAK
case 126:
YY_RULE_SETUP
#line 186 "bfin-lex.l"
{ BEGIN 0; return CALL;}
	YY_BREAK
case 127:
YY_RULE_SETUP
#line 187 "bfin-lex.l"
{ BEGIN 0; return CALL;}
	YY_BREAK
case 128:
YY_RULE_SETUP
#line 188 "bfin-lex.l"
return BYTEUNPACK;
	YY_BREAK
case 129:
YY_RULE_SETUP
#line 189 "bfin-lex.l"
return BYTEPACK;
	YY_BREAK
case 130:
YY_RULE_SETUP
#line 190 "bfin-lex.l"
return BYTEOP16M;
	YY_BREAK
case 131:
YY_RULE_SETUP
#line 191 "bfin-lex.l"
return BYTEOP16P;
	YY_BREAK
case 132:
YY_RULE_SETUP
#line 192 "bfin-lex.l"
return BYTEOP3P;
	YY_BREAK
case 133:
YY_RULE_SETUP
#line 193 "bfin-lex.l"
return BYTEOP2P;
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 194 "bfin-lex.l"
return BYTEOP1P;
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 195 "bfin-lex.l"
return BY;
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 196 "bfin-lex.l"
return BXORSHIFT;
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 197 "bfin-lex.l"
return BXOR;
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 199 "bfin-lex.l"
return BREV;
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 200 "bfin-lex.l"
return BP;
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 201 "bfin-lex.l"
return BITTST;
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 202 "bfin-lex.l"
return BITTGL;
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 203 "bfin-lex.l"
return BITSET;
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 204 "bfin-lex.l"
return BITMUX;
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 205 "bfin-lex.l"
return BITCLR;
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 206 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_B, yytext);
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 207 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_B, yytext);
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 208 "bfin-lex.l"
return B;
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 209 "bfin-lex.l"
_REG.regno = S_AZ;   return STATUS_REG;
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 210 "bfin-lex.l"
_REG.regno = S_AN;   return STATUS_REG;
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 211 "bfin-lex.l"
_REG.regno = S_AC0_COPY; return STATUS_REG;
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 212 "bfin-lex.l"
_REG.regno = S_V_COPY;   return STATUS_REG;
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 213 "bfin-lex.l"
_REG.regno = S_AQ;   return STATUS_REG;
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 214 "bfin-lex.l"
_REG.regno = S_AC0;  return STATUS_REG;
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 215 "bfin-lex.l"
_REG.regno = S_AC1;  return STATUS_REG;
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 216 "bfin-lex.l"
_REG.regno = S_AV0;  return STATUS_REG;
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 217 "bfin-lex.l"
_REG.regno = S_AV0S; return STATUS_REG;
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 218 "bfin-lex.l"
_REG.regno = S_AV1;  return STATUS_REG;
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 219 "bfin-lex.l"
_REG.regno = S_AV1S; return STATUS_REG;
	YY_BREAK
case 159:
YY_RULE_SETUP
#line 220 "bfin-lex.l"
_REG.regno = S_VS;   return STATUS_REG;
	YY_BREAK
case 160:
YY_RULE_SETUP
#line 221 "bfin-lex.l"
_REG.regno = S_RND_MOD; return STATUS_REG;
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 224 "bfin-lex.l"
_REG.regno = REG_ASTAT; return REG;
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 225 "bfin-lex.l"
return ASHIFT;
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 226 "bfin-lex.l"
return ASL;
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 227 "bfin-lex.l"
return ASR;
	YY_BREAK
case 165:
YY_RULE_SETUP
#line 228 "bfin-lex.l"
return ALIGN8;
	YY_BREAK
case 166:
YY_RULE_SETUP
#line 229 "bfin-lex.l"
return ALIGN16;
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 230 "bfin-lex.l"
return ALIGN24;
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 231 "bfin-lex.l"
return A_ONE_DOT_L;
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 232 "bfin-lex.l"
return A_ZERO_DOT_L;
	YY_BREAK
case 170:
YY_RULE_SETUP
#line 233 "bfin-lex.l"
return A_ONE_DOT_H;
	YY_BREAK
case 171:
YY_RULE_SETUP
#line 234 "bfin-lex.l"
return A_ZERO_DOT_H;
	YY_BREAK
case 172:
YY_RULE_SETUP
#line 235 "bfin-lex.l"
return ABS;
	YY_BREAK
case 173:
YY_RULE_SETUP
#line 236 "bfin-lex.l"
return ABORT;
	YY_BREAK
case 174:
YY_RULE_SETUP
#line 237 "bfin-lex.l"
_REG.regno = REG_A1x; return REG;
	YY_BREAK
case 175:
YY_RULE_SETUP
#line 238 "bfin-lex.l"
_REG.regno = REG_A1w; return REG;
	YY_BREAK
case 176:
YY_RULE_SETUP
#line 239 "bfin-lex.l"
_REG.regno = REG_A1;  return REG_A_DOUBLE_ONE;
	YY_BREAK
case 177:
YY_RULE_SETUP
#line 240 "bfin-lex.l"
_REG.regno = REG_A0x; return REG;
	YY_BREAK
case 178:
YY_RULE_SETUP
#line 241 "bfin-lex.l"
_REG.regno = REG_A0w; return REG;
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 242 "bfin-lex.l"
_REG.regno = REG_A0;  return REG_A_DOUBLE_ZERO;
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 243 "bfin-lex.l"
return GOT;
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 244 "bfin-lex.l"
return GOT17M4;
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 245 "bfin-lex.l"
return FUNCDESC_GOT17M4;
	YY_BREAK
case 183:
YY_RULE_SETUP
#line 246 "bfin-lex.l"
return PLTPC;
	YY_BREAK
case 184:
YY_RULE_SETUP
#line 249 "bfin-lex.l"
return TILDA;
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 250 "bfin-lex.l"
return _BAR_ASSIGN;
	YY_BREAK
case 186:
YY_RULE_SETUP
#line 251 "bfin-lex.l"
return BAR;
	YY_BREAK
case 187:
YY_RULE_SETUP
#line 252 "bfin-lex.l"
return _CARET_ASSIGN;
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 253 "bfin-lex.l"
return CARET;
	YY_BREAK
case 189:
YY_RULE_SETUP
#line 254 "bfin-lex.l"
return RBRACK;
	YY_BREAK
case 190:
YY_RULE_SETUP
#line 255 "bfin-lex.l"
return LBRACK;
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 256 "bfin-lex.l"
return _GREATER_GREATER_GREATER_THAN_ASSIGN;
	YY_BREAK
case 192:
YY_RULE_SETUP
#line 257 "bfin-lex.l"
return _GREATER_GREATER_ASSIGN;
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 258 "bfin-lex.l"
return _GREATER_GREATER_GREATER;
	YY_BREAK
case 194:
YY_RULE_SETUP
#line 259 "bfin-lex.l"
return GREATER_GREATER;
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 260 "bfin-lex.l"
return _ASSIGN_ASSIGN;
	YY_BREAK
case 196:
YY_RULE_SETUP
#line 261 "bfin-lex.l"
return ASSIGN;
	YY_BREAK
case 197:
YY_RULE_SETUP
#line 262 "bfin-lex.l"
return _LESS_THAN_ASSIGN;
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 263 "bfin-lex.l"
return _LESS_LESS_ASSIGN;
	YY_BREAK
case 199:
YY_RULE_SETUP
#line 264 "bfin-lex.l"
return LESS_LESS;
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 265 "bfin-lex.l"
return LESS_THAN;
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 266 "bfin-lex.l"
BEGIN(FLAGS); return LPAREN;
	YY_BREAK
case 202:
YY_RULE_SETUP
#line 267 "bfin-lex.l"
BEGIN(INITIAL); return RPAREN;
	YY_BREAK
case 203:
YY_RULE_SETUP
#line 268 "bfin-lex.l"
return COLON;
	YY_BREAK
case 204:
YY_RULE_SETUP
#line 269 "bfin-lex.l"
return SLASH;
	YY_BREAK
case 205:
YY_RULE_SETUP
#line 270 "bfin-lex.l"
return _MINUS_ASSIGN;
	YY_BREAK
case 206:
YY_RULE_SETUP
#line 271 "bfin-lex.l"
return _PLUS_BAR_PLUS;
	YY_BREAK
case 207:
YY_RULE_SETUP
#line 272 "bfin-lex.l"
return _MINUS_BAR_PLUS;
	YY_BREAK
case 208:
YY_RULE_SETUP
#line 273 "bfin-lex.l"
return _PLUS_BAR_MINUS;
	YY_BREAK
case 209:
YY_RULE_SETUP
#line 274 "bfin-lex.l"
return _MINUS_BAR_MINUS;
	YY_BREAK
case 210:
YY_RULE_SETUP
#line 275 "bfin-lex.l"
return _MINUS_MINUS;
	YY_BREAK
case 211:
YY_RULE_SETUP
#line 276 "bfin-lex.l"
return MINUS;
	YY_BREAK
case 212:
YY_RULE_SETUP
#line 277 "bfin-lex.l"
return COMMA;
	YY_BREAK
case 213:
YY_RULE_SETUP
#line 278 "bfin-lex.l"
return _PLUS_ASSIGN;
	YY_BREAK
case 214:
YY_RULE_SETUP
#line 279 "bfin-lex.l"
return _PLUS_PLUS;
	YY_BREAK
case 215:
YY_RULE_SETUP
#line 280 "bfin-lex.l"
return PLUS;
	YY_BREAK
case 216:
YY_RULE_SETUP
#line 281 "bfin-lex.l"
return _STAR_ASSIGN;
	YY_BREAK
case 217:
YY_RULE_SETUP
#line 282 "bfin-lex.l"
return STAR;
	YY_BREAK
case 218:
YY_RULE_SETUP
#line 283 "bfin-lex.l"
return _AMPERSAND_ASSIGN;
	YY_BREAK
case 219:
YY_RULE_SETUP
#line 284 "bfin-lex.l"
return AMPERSAND;
	YY_BREAK
case 220:
YY_RULE_SETUP
#line 285 "bfin-lex.l"
return PERCENT;
	YY_BREAK
case 221:
YY_RULE_SETUP
#line 286 "bfin-lex.l"
return BANG;
	YY_BREAK
case 222:
YY_RULE_SETUP
#line 287 "bfin-lex.l"
return SEMICOLON;
	YY_BREAK
case 223:
YY_RULE_SETUP
#line 288 "bfin-lex.l"
return _ASSIGN_BANG;
	YY_BREAK
case 224:
YY_RULE_SETUP
#line 289 "bfin-lex.l"
return DOUBLE_BAR;
	YY_BREAK
case 225:
YY_RULE_SETUP
#line 290 "bfin-lex.l"
return AT;
	YY_BREAK
case 226:
YY_RULE_SETUP
#line 291 "bfin-lex.l"
return PREFETCH;
	YY_BREAK
case 227:
YY_RULE_SETUP
#line 292 "bfin-lex.l"
return UNLINK;
	YY_BREAK
case 228:
YY_RULE_SETUP
#line 293 "bfin-lex.l"
return LINK;
	YY_BREAK
case 229:
YY_RULE_SETUP
#line 294 "bfin-lex.l"
return IDLE;
	YY_BREAK
case 230:
YY_RULE_SETUP
#line 295 "bfin-lex.l"
return IFLUSH;
	YY_BREAK
case 231:
YY_RULE_SETUP
#line 296 "bfin-lex.l"
return FLUSHINV;
	YY_BREAK
case 232:
YY_RULE_SETUP
#line 297 "bfin-lex.l"
return FLUSH;
	YY_BREAK
case 233:
YY_RULE_SETUP
#line 298 "bfin-lex.l"
{
    yylval.value = parse_int (&yytext);
    return NUMBER;
  }
	YY_BREAK
case 234:
YY_RULE_SETUP
#line 302 "bfin-lex.l"
{
    yylval.symbol = symbol_find_or_make (yytext);
    symbol_mark_used (yylval.symbol);
    return SYMBOL;
  }
	YY_BREAK
case 235:
YY_RULE_SETUP
#line 307 "bfin-lex.l"
{
    char *name;
    char *ref = strdup (yytext);
    if (ref[1] == 'b' || ref[1] == 'B')
      {
        name = fb_label_name ((int) (ref[0] - '0'), 0);
	yylval.symbol = symbol_find (name);

	if ((yylval.symbol != NULL)
             && (S_IS_DEFINED (yylval.symbol)))
          return SYMBOL;
	as_bad ("backward reference to unknown label %d:",
						  (int) (ref[0] - '0'));
      }
    else if (ref[1] == 'f' || ref[1] == 'F')
      {
        /* Forward reference.  Expect symbol to be undefined or
           unknown.  undefined: seen it before.  unknown: never seen
           it before.

           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);
	yylval.symbol = symbol_find_or_make (name);
	/* We have no need to check symbol properties.  */
	return SYMBOL;
      }
  }
	YY_BREAK
case 236:
/* rule 236 can match eol */
YY_RULE_SETUP
#line 336 "bfin-lex.l"
;
	YY_BREAK
case 237:
YY_RULE_SETUP
#line 337 "bfin-lex.l"
;
	YY_BREAK
case 238:
YY_RULE_SETUP
#line 338 "bfin-lex.l"
return yytext[0];
	YY_BREAK
case 239:
YY_RULE_SETUP
#line 339 "bfin-lex.l"
ECHO;
	YY_BREAK
#line 2340 "bfin-lex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(KEYWORD):
case YY_STATE_EOF(FLAGS):
	yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = (yy_hold_char);
		YY_RESTORE_YY_MORE_OFFSET

		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between YY_CURRENT_BUFFER and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state(  );

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = (yytext_ptr) + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++(yy_c_buf_p);
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = (yy_c_buf_p);
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer(  ) )
			{
			case EOB_ACT_END_OF_FILE:
				{
				(yy_did_buffer_switch_on_eof) = 0;

				if ( yywrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				(yy_c_buf_p) =
					(yytext_ptr) + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				(yy_c_buf_p) =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];

				yy_current_state = yy_get_previous_state(  );

				yy_cp = (yy_c_buf_p);
				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
} /* end of yylex */

/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */
static int yy_get_next_buffer (void)
{
    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
	register char *source = (yytext_ptr);
	register int number_to_move, i;
	int ret_val;

	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;

	else
		{
			int num_to_read =
			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;

			int yy_c_buf_p_offset =
				(int) ((yy_c_buf_p) - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					yyrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
			(yy_n_chars), (size_t) num_to_read );

		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	if ( (yy_n_chars) == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart(yyin  );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];

	return ret_val;
}

/* yy_get_previous_state - get the state just before the EOB char was reached */

    static yy_state_type yy_get_previous_state (void)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    
	yy_current_state = (yy_start);

	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			(yy_last_accepting_state) = yy_current_state;
			(yy_last_accepting_cpos) = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 571 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
}

/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	register int yy_is_jam;
    	register char *yy_cp = (yy_c_buf_p);

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		(yy_last_accepting_state) = yy_current_state;
		(yy_last_accepting_cpos) = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 571 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 570);

	return yy_is_jam ? 0 : yy_current_state;
}

    static void yyunput (int c, register char * yy_bp )
{
	register char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up yytext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register int number_to_move = (yy_n_chars) + 2;
		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		register char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;

		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#endif

{
	int c;
    
	*(yy_c_buf_p) = (yy_hold_char);

	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
			/* This was really a NUL. */
			*(yy_c_buf_p) = '\0';

		else
			{ /* need more input */
			int offset = (yy_c_buf_p) - (yytext_ptr);
			++(yy_c_buf_p);

			switch ( yy_get_next_buffer(  ) )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart(yyin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap( ) )
						return EOF;

					if ( ! (yy_did_buffer_switch_on_eof) )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					(yy_c_buf_p) = (yytext_ptr) + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
	*(yy_c_buf_p) = '\0';	/* preserve yytext */
	(yy_hold_char) = *++(yy_c_buf_p);

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void yyrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        yyensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            yy_create_buffer(yyin,YY_BUF_SIZE );
	}

	yy_init_buffer(YY_CURRENT_BUFFER,input_file );
	yy_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void yy_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		yypop_buffer_state();
	 *		yypush_buffer_state(new_buffer);
     */
	yyensure_buffer_stack ();
	if ( YY_CURRENT_BUFFER == new_buffer )
		return;

	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	yy_load_buffer_state( );

	/* We don't actually know whether we did this switch during
	 * EOF (yywrap()) processing, but the only time this flag
	 * is looked at is after yywrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	(yy_did_buffer_switch_on_eof) = 1;
}

static void yy_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE yy_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with yy_create_buffer()
 * 
 */
    void yy_delete_buffer (YY_BUFFER_STATE  b )
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yyfree((void *) b->yy_ch_buf  );

	yyfree((void *) b  );
}

#ifndef __cplusplus
extern int isatty (int );
#endif /* __cplusplus */
    
/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a yyrestart() or at EOF.
 */
    static void yy_init_buffer  (YY_BUFFER_STATE  b, FILE * file )

{
	int oerrno = errno;
    
	yy_flush_buffer(b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

    /* If b is the current buffer, then yy_init_buffer was _probably_
     * called from yyrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
    void yy_flush_buffer (YY_BUFFER_STATE  b )
{
    	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == YY_CURRENT_BUFFER )
		yy_load_buffer_state( );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
void yypush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	yyensure_buffer_stack();

	/* This block is copied from yy_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from yy_switch_to_buffer. */
	yy_load_buffer_state( );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void yypop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	yy_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		yy_load_buffer_state( );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void yyensure_buffer_stack (void)
{
	int num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
		num_to_alloc = 1;
		(yy_buffer_stack) = (struct yy_buffer_state**)yyalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );
								  
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)yyrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE yy_scan_buffer  (char * base, yy_size_t  size )
{
	YY_BUFFER_STATE b;
    
	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer(b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to yylex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       yy_scan_bytes() instead.
 */
YY_BUFFER_STATE yy_scan_string (yyconst char * yystr )
{
    
	return yy_scan_bytes(yystr,strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to yylex() will
 * scan from a @e copy of @a bytes.
 * @param bytes the byte buffer to scan
 * @param len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE yy_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) yyalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yy_fatal_error (yyconst char* msg )
{
    	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
}

/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		yytext[yyleng] = (yy_hold_char); \
		(yy_c_buf_p) = yytext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		yyleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the current line number.
 * 
 */
int yyget_lineno  (void)
{
        
    return yylineno;
}

/** Get the input stream.
 * 
 */
FILE *yyget_in  (void)
{
        return yyin;
}

/** Get the output stream.
 * 
 */
FILE *yyget_out  (void)
{
        return yyout;
}

/** Get the length of the current token.
 * 
 */
int yyget_leng  (void)
{
        return yyleng;
}

/** Get the current token.
 * 
 */

char *yyget_text  (void)
{
        return yytext;
}

/** Set the current line number.
 * @param line_number
 * 
 */
void yyset_lineno (int  line_number )
{
    
    yylineno = line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * 
 * @see yy_switch_to_buffer
 */
void yyset_in (FILE *  in_str )
{
        yyin = in_str ;
}

void yyset_out (FILE *  out_str )
{
        yyout = out_str ;
}

int yyget_debug  (void)
{
        return yy_flex_debug;
}

void yyset_debug (int  bdebug )
{
        yy_flex_debug = bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from yylex_destroy(), so don't allocate here.
     */

    (yy_buffer_stack) = 0;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = (char *) 0;
    (yy_init) = 0;
    (yy_start) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    yyin = stdin;
    yyout = stdout;
#else
    yyin = (FILE *) 0;
    yyout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * yylex_init()
     */
    return 0;
}

/* yylex_destroy is for both reentrant and non-reentrant scanners. */
int yylex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		yy_delete_buffer(YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		yypop_buffer_state();
	}

	/* Destroy the stack itself. */
	yyfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * yylex() is called, initialization will occur. */
    yy_init_globals( );

    return 0;
}

/*
 * Internal utility routines.
 */

#ifndef yytext_ptr
static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
}
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen (yyconst char * s )
{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
}
#endif

void *yyalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

void *yyrealloc  (void * ptr, yy_size_t  size )
{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
}

void yyfree (void * ptr )
{
	free( (char *) ptr );	/* see yyrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 339 "bfin-lex.l"


static long parse_int (char **end)
{
  char fmt = '\0';
  int not_done = 1;
  int shiftvalue = 0;
  char * char_bag;
  long value = 0;
  char *arg = *end;

  while (*arg && *arg == ' ')
    arg++;

  switch (*arg)
    {
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9':
        fmt = 'd';
        break;

      case '0':  /* Accept different formated integers hex octal and binary. */
        {
	  char c = *++arg;
          arg++;
	  if (c == 'x' || c == 'X') /* Hex input.  */
	    fmt = 'h';
	  else if (c == 'b' || c == 'B')
	    fmt = 'b';
	  else if (c == '.')
	    fmt = 'f';
	  else
            {             /* Octal.  */
	      arg--;
	      fmt = 'o';
	    }
	  break;
        }

      case 'd':
      case 'D':
      case 'h':
      case 'H':
      case 'o':
      case 'O':
      case 'b':
      case 'B':
      case 'f':
      case 'F':
        {
	  fmt = *arg++;
	  if (*arg == '#')
	    arg++;
        }
    }

  switch (fmt)
    {
      case 'h':
      case 'H':
        shiftvalue = 4;
        char_bag = "0123456789ABCDEFabcdef";
        break;

      case 'o':
      case 'O':
        shiftvalue = 3;
        char_bag = "01234567";
        break;

      case 'b':
      case 'B':
        shiftvalue = 1;
        char_bag = "01";
        break;

/* The assembler allows for fractional constants to be created
   by either the 0.xxxx or the f#xxxx format

   i.e.   0.5 would result in 0x4000

   note .5 would result in the identifier .5.

   The assembler converts to fractional format 1.15 by the simple rule:

             value = (short) (finput * (1 << 15)).  */

      case 'f':
      case 'F':
        {
          float fval = 0.0;
          float pos = 10.0;
          while (1)
            {
              int c;
              c = *arg++;

              if (c >= '0' && c <= '9')
                {
                  float digit = (c - '0') / pos;
                  fval = fval + digit;
                  pos = pos * 10.0;
                }
              else
                {
	          *--arg = c;
                  value = (short) (fval * (1 << 15));
                  break;
                }
            }
          *end = arg+1;
          return value;
        }

      case 'd':
      case 'D':
      default:
        {
          while (1)
            {
              char c;
              c = *arg++;
              if (c >= '0' && c <= '9')
                value = (value * 10) + (c - '0');
              else
                {
                  /* Constants that are suffixed with k|K are multiplied by 1024
                     This suffix is only allowed on decimal constants. */
                  if (c == 'k' || c == 'K')
                    value *= 1024;
                  else
                    *--arg = c;
                  break;
                }
            }
          *end = arg+1;
          return value;
        }
    }

  while (not_done)
    {
      char c;
      c = *arg++;
      if (c == 0 || !strchr (char_bag, c))
	{
          not_done = 0;
          *--arg = c;
        }
      else
        {
          if (c >= 'a' && c <= 'z')
            c = c - ('a' - '9') + 1;
          else if (c >= 'A' && c <= 'Z')
            c = c - ('A' - '9') + 1;

          c -= '0';
          value = (value << shiftvalue) + c;
        }
    }
  *end = arg+1;
  return value;
}


static int parse_reg (Register *r, int cl, char *rt)
{
  r->regno = cl | (rt[1] - '0');
  r->flags = F_REG_NONE;
  return REG;
}

static int parse_halfreg (Register *r, int cl, char *rt)
{
  r->regno = cl | (rt[1] - '0');

  switch (rt[3])
    {
      case 'b':
      case 'B':
	return BYTE_DREG;

      case 'l':
      case 'L':
	r->flags = F_REG_LOW;
	break;

      case 'h':
      case 'H':
	r->flags = F_REG_HIGH;
	break;
    }

  return HALF_REG;
}

/* Our start state is KEYWORD as we have
   command keywords such as PREFETCH.  */

void
set_start_state (void)
{
  BEGIN KEYWORD;
}


#ifndef yywrap
int
yywrap ()
{
  return 1;
}
#endif

