
#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;
typedef uint64_t flex_uint64_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

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

extern yy_size_t 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_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.
	 */
	yy_size_t 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 yy_size_t yy_n_chars;		/* number of characters read into yy_ch_buf */
yy_size_t 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,yy_size_t 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 = (yy_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 (C) 2005-2014 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 21 "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  );

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

					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)
{
	yy_size_t 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, yy_size_t  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n, 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.
 * 
 */
yy_size_t 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 338 "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

