
#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 31
#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
#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 */

#if __STDC__

#define YY_USE_CONST

#endif	/* __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)  )

/* The following is because we cannot portably get our hands on size_t
 * (without autoconf's help, which isn't available because we want
 * flex-generated scanners to compile on their own).
 */

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef unsigned int 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 = 1;		/* 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;
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 238
#define YY_END_OF_BUFFER 239
/* 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[555] =
    {   0,
        0,    0,    0,    0,  239,  237,  235,  235,  220,  233,
      219,  218,  200,  201,  216,  214,  211,  210,  203,  232,
      232,  202,  221,  199,  195,  237,  224,  233,  148,  233,
      233,  233,  233,  233,  233,  233,  233,  233,   70,  233,
      233,  233,   54,   19,   18,  233,   12,   10,    8,    7,
      189,  188,  187,  233,  185,  183,  233,  233,  233,  233,
      233,  233,  217,  215,  213,  212,    0,  209,  204,    0,
        0,    0,  232,  234,    0,  198,  196,  222,  194,  193,
      178,  175,  233,  233,  233,  150,  151,  233,  233,  149,
        0,  147,  233,  140,  233,  233,  136,  233,  125,  233,

      123,  233,  233,  233,  233,  233,  233,  233,  103,  102,
      101,  233,  100,   99,  233,  233,   97,  233,   95,   94,
       93,   91,  233,   85,  233,  233,   77,   86,  233,   71,
       69,  233,  233,  233,  233,   65,  233,  233,  233,   59,
      233,   56,  233,  233,   53,  233,  233,  233,  233,  233,
      233,  233,  233,  233,  233,  233,  233,   25,  233,  233,
      233,  233,  233,   15,   14,  233,  233,  159,  233,  186,
      233,  184,  223,  233,  233,   95,  233,  233,  233,  205,
      207,  206,  208,    0,    0,  232,  232,  197,  191,  192,
      233,  233,  171,  152,  153,  233,  233,  162,  163,  233,

      154,  156,  232,  233,  233,  233,  233,  233,  233,  124,
      233,  233,  119,  233,  233,  233,  233,  233,  233,  233,
      233,  233,  179,   98,  233,  233,  233,  233,  233,  233,
       80,   83,   78,   81,  233,  233,  233,   79,   82,  233,
       67,   66,  233,   63,   62,  233,  233,  233,  233,  233,
      233,  233,  233,  233,  233,   44,   39,   38,   37,   36,
       35,   34,  233,   32,   31,  233,  233,  233,  233,  233,
      233,  233,   21,  233,  233,   16,   13,  233,    9,  233,
      233,  233,  233,  233,  233,  233,  236,  190,  170,  168,
      177,  176,  169,  167,  174,  173,  233,  233,  233,  155,

      157,  146,  233,  233,  233,  233,  139,  138,  233,  127,
      233,  233,  118,  233,  233,  233,  233,  111,  110,  233,
      233,  233,  233,  233,  233,  233,  105,  104,  233,  233,
      233,   96,  233,   92,   89,   84,   74,  233,  233,   68,
       64,  233,   61,   60,   58,   57,  233,   55,   45,  233,
       50,   47,   49,   46,   48,  233,  233,   43,   42,  233,
      233,  233,  233,  233,   27,   24,   23,  233,  233,  233,
      233,  233,  233,  228,  233,  227,  233,  233,  233,  233,
      160,  233,  233,  233,  233,  233,  233,  233,  233,  233,
      233,  122,  233,  117,  116,  233,  233,  233,  233,  233,

      233,  233,  233,  108,  233,  233,  233,  233,  233,  233,
      233,  233,  233,  233,    2,  182,   52,   41,   40,   33,
      233,  233,  233,   30,  233,   22,  233,  233,  233,  172,
      231,  233,  233,  233,  233,  233,  164,  161,  145,  144,
      143,  142,  141,  233,  233,  233,  233,  126,  121,  233,
      233,  233,  233,  233,   51,  233,  233,  107,  233,  233,
      233,  233,  233,   88,   87,   90,  233,  233,   73,   72,
       29,  233,  233,  233,   20,  233,  233,  233,  229,  233,
      226,  165,  166,  233,  233,  233,  233,  233,  233,  120,
      233,  114,  113,  233,  233,  233,    5,  106,  233,  180,

      233,  233,  233,  233,   28,  233,  233,   17,   11,  233,
      233,  233,  233,  135,  133,  134,  132,  129,  233,  115,
      233,    6,  109,  233,  233,    3,  233,   76,    1,   26,
      230,  225,  137,  130,  131,  233,  233,  233,  233,  233,
      128,  233,  233,    4,   75,  233,  233,  112,  233,  233,
      233,  233,  181,    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,   63,   64,   35,   36,

       37,   38,   39,   40,   41,   42,   43,   44,   45,   46,
       65,   48,   49,   66,   51,   67,   53,   54,   55,   56,
       57,   58,    1,   68,    1,   69,    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,
        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,    1
    } ;

static yyconst flex_int32_t yy_meta[70] =
    {   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,    5,    6,    6,    6,    5,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    4,    3,    3,    1,    1,
        1,    3,    6,    5,    3,    3,    3,    1,    1
    } ;

static yyconst flex_int16_t yy_base[560] =
    {   0,
        0,    0,   32,   33,  758,  759,  759,  759,  759,    0,
      759,  727,  759,  759,  726,   60,  759,   61,  744,   63,
       68,  759,  759,   58,   75,  723,  759,  116,  176,   60,
       79,   44,   87,   89,   98,  165,  700,  226,  158,   47,
      113,  277,  327,  376,  108,  701,   58,  731,    0,    0,
      759,  759,  720,  685,  100,  759,  144,   72,  707,   65,
      118,    0,  759,  759,  759,  759,  143,  759,  759,  149,
      736,  189,  230,  759,    0,  716,  759,  759,  759,   91,
      730,  729,  692,  120,  701,    0,    0,  218,  154,    0,
        0,  726,  135,    0,  703,   49,  167,  695,    0,  697,

        0,  680,  701,  696,  686,   93,  680,  234,  717,  685,
        0,  168,    0,    0,  170,  693,  714,  684,    0,    0,
      676,    0,  681,  710,  172,  210,    0,  176,  199,  212,
      709,  667,  676,  210,  235,    0,  224,  684,  173,  705,
      684,    0,  207,  672,  702,  675,  212,  679,  213,  263,
      222,  243,  258,  259,  214,  673,  674,  697,  654,  669,
      658,  657,  654,    0,    0,  658,  251,    0,  686,  759,
      135,  759,  759,  651,  659,  658,  655,  270,  656,  759,
      759,  759,  759,  688,  304,  311,    0,  759,  759,  668,
      298,  312,    0,    0,    0,  658,  655,    0,    0,  278,

      644,  643,    0,  273,  320,  639,  309,  655,  647,    0,
      644,  645,  343,  292,  325,  275,  326,  333,  336,  320,
      340,  653,  669,    0,  327,  345,  649,  666,  636,  357,
        0,    0,    0,    0,  635,  348,  641,    0,    0,  358,
        0,    0,  633,    0,    0,  644,  628,  643,  363,  634,
      628,  352,  378,  624,  384,  413,    0,    0,    0,    0,
        0,    0,  628,    0,    0,  360,  622,  370,  634,  625,
      394,  624,    0,  634,  356,    0,    0,  606,    0,  601,
      615,  628,  611,  620,  624,  620,  649,  759,    0,    0,
        0,    0,    0,    0,    0,    0,  613,  620,  377,    0,

        0,    0,  613,  603,  618,  398,    0,  603,  398,  638,
      617,  614,  408,  605,  408,  598,  604,    0,    0,  414,
      417,  591,  593,  402,  609,  422,    0,    0,  608,  619,
      406,    0,  580,    0,  626,    0,  578,  586,  600,    0,
        0,  600,    0,    0,    0,    0,  601,    0,    0,  598,
        0,    0,    0,    0,    0,  615,  616,    0,    0,  596,
      596,  406,  593,  407,  426,    0,    0,  594,  590,  576,
      581,  558,  584,  561,  571,    0,  584,  574,  443,  412,
        0,  415,  563,  415,  574,  424,  577,  568,  433,  569,
      558,    0,  562,    0,    0,  564,  567,  569,  570,  555,

      426,  572,  555,    0,  563,  569,  566,  557,  566,  420,
      443,  455,  552,  431,    0,    0,    0,    0,    0,    0,
      559,  442,  547,    0,  556,    0,  557,  558,  451,    0,
      553,  553,  436,  549,  568,  569,    0,    0,    0,    0,
        0,    0,    0,  548,  482,  553,  539,    0,  567,  541,
      443,  445,  538,  532,    0,  534,  544,    0,  454,  529,
      558,  471,  541,    0,    0,    0,  540,  530,    0,    0,
        0,  455,  538,  456,    0,  457,  518,  527,    0,  537,
        0,    0,    0,  533,  150,  468,  522,  526,  478,    0,
      512,    0,    0,  530,  529,  463,    0,    0,  530,    0,

      511,  514,  523,  525,    0,  465,  501,    0,    0,  489,
      500,  466,  480,    0,    0,    0,    0,    0,  504,    0,
      481,    0,    0,  474,  484,    0,  490,    0,    0,    0,
        0,    0,    0,    0,    0,  483,  370,  352,  345,  279,
        0,  219,  473,    0,    0,  475,  477,    0,  220,  207,
      134,   61,    0,  759,  542,  545,  550,  552,  554
    } ;

static yyconst flex_int16_t yy_def[560] =
    {   0,
      554,    1,    1,    1,  554,  554,  554,  554,  554,  555,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  556,
      556,  554,  554,  554,  554,  554,  554,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      554,  554,  554,   28,  554,  554,  555,   36,   38,   42,
      555,  555,  554,  554,  554,  554,  554,  554,  554,  554,
      557,  554,  554,  554,  558,  554,  554,  554,  554,  554,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      559,  555,  555,  555,  555,  555,  555,  555,  555,  555,

      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  554,
      555,  554,  554,  555,  555,  555,  555,  555,  555,  554,
      554,  554,  554,  557,  557,  554,  558,  554,  554,  554,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,

      555,  555,  559,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  557,  554,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,

      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,

      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,

      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,  555,  555,  555,  555,  555,  555,  555,
      555,  555,  555,    0,  554,  554,  554,  554,  554
    } ;

static yyconst flex_int16_t yy_nxt[829] =
    {   0,
        6,    7,    8,    9,    6,   10,   11,   12,   13,   14,
       15,   16,   17,   18,   10,   19,   20,   21,   21,   21,
       21,   21,   21,   21,   21,   21,   22,   23,   24,   25,
       26,   27,   28,   29,   30,   31,   32,   33,   34,   35,
       36,   37,   10,   38,   39,   40,   41,   42,   10,   43,
       44,   45,   46,   47,   48,   49,   10,   50,   51,   52,
       53,   10,   54,   29,   41,   43,   45,   55,   56,   57,
       57,   65,   58,   58,   68,   59,   59,   72,   78,   60,
       60,  553,  554,   91,   61,   61,   76,   77,  107,   66,
       69,   91,   98,  135,   99,  207,   74,  136,  167,  108,

       74,   74,   91,  100,   79,   74,  101,  175,  168,  176,
      102,  135,  104,  207,  178,  105,  103,   91,   75,  106,
      189,  190,   98,  554,  101,  111,   74,   67,   70,  172,
      178,   74,   81,   82,  109,  112,  194,  195,  114,  110,
      113,  115,  104,  215,  162,  163,  216,  164,   91,   83,
       84,  165,  116,  112,  180,  113,  181,  137,  138,   85,
      182,   86,  183,  179,   87,  139,   88,  173,  166,   89,
      201,  202,  513,   90,  131,  131,  131,  131,  552,   83,
       91,  117,  117,  117,  117,  193,  205,  174,  231,  232,
      132,  109,   92,   92,   92,   92,  110,  514,  133,  280,

      118,  205,  119,  134,  120,  186,  186,  186,  186,  186,
      186,  186,  186,  186,  186,  121,   93,  122,  208,  223,
      132,  224,  235,   94,  248,   95,  233,  234,  238,  239,
      551,   96,   97,  208,  223,  236,  224,  550,  237,  248,
      235,   95,  124,  124,  124,  124,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,  243,  197,  251,  125,
      126,  198,  127,  255,  257,  268,  546,  199,  218,  200,
      246,  263,  128,  251,  243,  264,  129,  130,  255,  257,
      268,  219,  244,  199,  200,  220,  245,  263,  246,  125,
      128,  266,  130,  140,  140,  140,  140,  140,  140,  258,

      220,  245,  278,  259,  265,  264,  285,  267,  260,  141,
      299,  142,  302,  261,  185,  252,  302,  278,  262,  287,
      143,  266,  265,  318,  545,  319,  144,  186,  186,  186,
      186,  186,  186,  186,  186,  186,  186,  289,  316,  141,
      299,  290,  144,  145,  145,  145,  145,  145,  145,  145,
      145,  293,  291,  292,  303,  294,  316,  317,  308,  146,
      320,  321,  322,  147,  304,  323,  295,  296,  325,  326,
      305,  306,  148,  149,  308,  313,  331,  314,  150,  327,
      324,  544,  315,  328,  332,  326,  306,  317,  332,  146,
      543,  149,  331,  150,  151,  323,  336,  340,  325,  338,

      336,  340,  345,  348,  542,  313,  345,  370,  152,  361,
      153,  349,  154,  155,  338,  156,  157,  349,  348,  363,
      351,  349,  370,  158,  352,  361,  159,  160,  381,  353,
      356,  357,  161,  366,  354,  363,  385,  367,  152,  355,
      397,  349,  160,  381,  388,  389,  400,  394,  386,  401,
      390,  395,  358,  404,  406,  409,  359,  422,  424,  425,
      435,  436,  388,  438,  439,  446,  441,  437,  404,  463,
      397,  409,  422,  424,  472,  443,  400,  455,  438,  401,
      439,  441,  470,  477,  406,  463,  464,  480,  467,  425,
      443,  468,  455,  465,  492,  446,  493,  470,  466,  485,

      486,  487,  480,  501,  472,  498,  505,  507,  508,  492,
      519,  493,  515,  477,  523,  516,  529,  533,  467,  547,
      498,  505,  507,  508,  534,  541,  548,  535,  549,  523,
      540,  529,  533,  501,  539,  538,  537,  547,  536,  532,
      519,  548,  531,  549,   62,   62,   62,   62,   73,   73,
      184,  530,  184,  184,  184,  184,  187,  187,  203,  203,
      528,  527,  526,  525,  524,  522,  521,  520,  518,  517,
      512,  511,  510,  509,  506,  504,  503,  502,  500,  499,
      497,  496,  495,  494,  491,  490,  489,  488,  484,  483,
      482,  481,  479,  478,  476,  475,  474,  473,  471,  469,

      462,  461,  460,  459,  458,  457,  456,  454,  453,  452,
      451,  450,  449,  448,  447,  445,  444,  442,  440,  434,
      433,  432,  410,  431,  430,  429,  428,  427,  426,  423,
      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
      411,  410,  408,  407,  405,  403,  402,  399,  398,  396,
      393,  392,  391,  387,  384,  383,  382,  380,  379,  185,
      378,  377,  376,  375,  374,  373,  372,  371,  369,  368,
      365,  364,  362,  360,  350,  347,  346,  344,  343,  342,
      341,  339,  337,  335,  334,  333,  330,  329,  312,  311,
      310,  309,  307,  301,  300,  298,  297,  288,  185,  286,

      284,  283,  282,  281,  279,  277,  276,  275,  274,  273,
      272,  271,  270,  269,  256,  254,  253,  252,  250,  249,
      247,  242,  241,  240,  230,  229,  228,  227,  226,  225,
      222,  221,  217,  214,  213,  212,  211,  210,  209,  206,
      204,  196,  193,  192,  191,  188,  185,  177,  171,  170,
      169,  166,  123,   80,   71,   64,   63,  554,    5,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,

      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554
    } ;

static yyconst flex_int16_t yy_chk[829] =
    {   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,    1,    1,    1,    1,    1,    3,
        4,   16,    3,    4,   18,    3,    4,   20,   25,    3,
        4,  552,   21,   31,    3,    4,   24,   24,   32,   16,
       18,   33,   30,   40,   30,   96,   20,   40,   47,   32,

       20,   21,   35,   30,   25,   21,   30,   58,   47,   58,
       30,   40,   31,   96,   60,   31,   30,   41,   20,   31,
       80,   80,   30,   21,   30,   34,   20,   16,   18,   55,
       60,   21,   28,   28,   33,   34,   84,   84,   35,   33,
       34,   35,   31,  106,   45,   45,  106,   45,   57,   28,
       28,   45,   35,   34,   67,   34,   67,   41,   41,   28,
       70,   28,   70,   61,   28,   41,   28,   55,   61,   28,
       89,   89,  485,   28,   39,   39,   39,   39,  551,   28,
       29,   36,   36,   36,   36,  171,   93,   57,  125,  125,
       39,   57,   29,   29,   29,   29,   57,  485,   39,  171,

       36,   93,   36,   39,   36,   72,   72,   72,   72,   72,
       72,   72,   72,   72,   72,   36,   29,   36,   97,  112,
       39,  115,  128,   29,  139,   29,  126,  126,  130,  130,
      550,   29,   29,   97,  112,  129,  115,  549,  129,  139,
      128,   29,   38,   38,   38,   38,   73,   73,   73,   73,
       73,   73,   73,   73,   73,   73,  134,   88,  143,   38,
       38,   88,   38,  147,  149,  155,  542,   88,  108,   88,
      137,  151,   38,  143,  134,  152,   38,   38,  147,  149,
      155,  108,  135,   88,   88,  108,  135,  151,  137,   38,
       38,  154,   38,   42,   42,   42,   42,   42,   42,  150,

      108,  135,  167,  150,  153,  152,  178,  154,  150,   42,
      200,   42,  204,  150,  185,  178,  204,  167,  150,  185,
       42,  154,  153,  216,  540,  216,   42,  186,  186,  186,
      186,  186,  186,  186,  186,  186,  186,  191,  214,   42,
      200,  191,   42,   43,   43,   43,   43,   43,   43,   43,
       43,  192,  191,  191,  205,  192,  214,  215,  207,   43,
      217,  217,  217,   43,  205,  218,  192,  192,  219,  220,
      205,  205,   43,   43,  207,  213,  225,  213,   43,  221,
      218,  539,  213,  221,  226,  220,  205,  215,  226,   43,
      538,   43,  225,   43,   44,  218,  230,  240,  219,  236,

      230,  240,  249,  252,  537,  213,  249,  275,   44,  266,
       44,  253,   44,   44,  236,   44,   44,  253,  252,  268,
      255,  253,  275,   44,  255,  266,   44,   44,  299,  255,
      256,  256,   44,  271,  255,  268,  306,  271,   44,  255,
      315,  253,   44,  299,  309,  309,  320,  313,  306,  321,
      309,  313,  256,  324,  326,  331,  256,  362,  364,  365,
      379,  379,  309,  380,  382,  389,  384,  379,  324,  410,
      315,  331,  362,  364,  422,  386,  320,  401,  380,  321,
      382,  384,  414,  429,  326,  410,  411,  433,  412,  365,
      386,  412,  401,  411,  451,  389,  452,  414,  411,  445,

      445,  445,  433,  462,  422,  459,  472,  474,  476,  451,
      489,  452,  486,  429,  496,  486,  506,  512,  412,  543,
      459,  472,  474,  476,  513,  536,  546,  513,  547,  496,
      527,  506,  512,  462,  525,  524,  521,  543,  519,  511,
      489,  546,  510,  547,  555,  555,  555,  555,  556,  556,
      557,  507,  557,  557,  557,  557,  558,  558,  559,  559,
      504,  503,  502,  501,  499,  495,  494,  491,  488,  487,
      484,  480,  478,  477,  473,  468,  467,  463,  461,  460,
      457,  456,  454,  453,  450,  449,  447,  446,  444,  436,
      435,  434,  432,  431,  428,  427,  425,  423,  421,  413,

      409,  408,  407,  406,  405,  403,  402,  400,  399,  398,
      397,  396,  393,  391,  390,  388,  387,  385,  383,  378,
      377,  375,  374,  373,  372,  371,  370,  369,  368,  363,
      361,  360,  357,  356,  350,  347,  342,  339,  338,  337,
      335,  333,  330,  329,  325,  323,  322,  317,  316,  314,
      312,  311,  310,  308,  305,  304,  303,  298,  297,  287,
      286,  285,  284,  283,  282,  281,  280,  278,  274,  272,
      270,  269,  267,  263,  254,  251,  250,  248,  247,  246,
      243,  237,  235,  229,  228,  227,  223,  222,  212,  211,
      209,  208,  206,  202,  201,  197,  196,  190,  184,  179,

      177,  176,  175,  174,  169,  166,  163,  162,  161,  160,
      159,  158,  157,  156,  148,  146,  145,  144,  141,  140,
      138,  133,  132,  131,  124,  123,  121,  118,  117,  116,
      110,  109,  107,  105,  104,  103,  102,  100,   98,   95,
       92,   85,   83,   82,   81,   76,   71,   59,   54,   53,
       48,   46,   37,   26,   19,   15,   12,    5,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,

      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
      554,  554,  554,  554,  554,  554,  554,  554
    } ;

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
   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 847 "bfin-lex.c"

#define INITIAL 0
#define KEYWORD 1

/* 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>

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

/* 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 (void) 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 = '*'; \
		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 999 "bfin-lex.c"

	if ( (yy_init) )
		{
		(yy_init) = 0;

#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 >= 555 )
					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] != 759 );

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; return HALF_REG;
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 67 "bfin-lex.l"
_REG.regno = REG_SP | 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; return HALF_REG;
	YY_BREAK
case 105:
YY_RULE_SETUP
#line 162 "bfin-lex.l"
_REG.regno = REG_FP | 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 BYTEOP2M;
	YY_BREAK
case 134:
YY_RULE_SETUP
#line 193 "bfin-lex.l"
return BYTEOP2P;
	YY_BREAK
case 135:
YY_RULE_SETUP
#line 194 "bfin-lex.l"
return BYTEOP1P;
	YY_BREAK
case 136:
YY_RULE_SETUP
#line 195 "bfin-lex.l"
return BY;
	YY_BREAK
case 137:
YY_RULE_SETUP
#line 196 "bfin-lex.l"
return BXORSHIFT;
	YY_BREAK
case 138:
YY_RULE_SETUP
#line 197 "bfin-lex.l"
return BXOR;
	YY_BREAK
case 139:
YY_RULE_SETUP
#line 199 "bfin-lex.l"
return BREV;
	YY_BREAK
case 140:
YY_RULE_SETUP
#line 200 "bfin-lex.l"
return BP;
	YY_BREAK
case 141:
YY_RULE_SETUP
#line 201 "bfin-lex.l"
return BITTST;
	YY_BREAK
case 142:
YY_RULE_SETUP
#line 202 "bfin-lex.l"
return BITTGL;
	YY_BREAK
case 143:
YY_RULE_SETUP
#line 203 "bfin-lex.l"
return BITSET;
	YY_BREAK
case 144:
YY_RULE_SETUP
#line 204 "bfin-lex.l"
return BITMUX;
	YY_BREAK
case 145:
YY_RULE_SETUP
#line 205 "bfin-lex.l"
return BITCLR;
	YY_BREAK
case 146:
YY_RULE_SETUP
#line 206 "bfin-lex.l"
return parse_halfreg (&yylval.reg, T_REG_B, yytext);
	YY_BREAK
case 147:
YY_RULE_SETUP
#line 207 "bfin-lex.l"
return parse_reg (&yylval.reg, T_REG_B, yytext);
	YY_BREAK
case 148:
YY_RULE_SETUP
#line 208 "bfin-lex.l"
return B;
	YY_BREAK
case 149:
YY_RULE_SETUP
#line 209 "bfin-lex.l"
_REG.regno = S_AZ;   return STATUS_REG;
	YY_BREAK
case 150:
YY_RULE_SETUP
#line 210 "bfin-lex.l"
_REG.regno = S_AN;   return STATUS_REG;
	YY_BREAK
case 151:
YY_RULE_SETUP
#line 211 "bfin-lex.l"
_REG.regno = S_AQ;   return STATUS_REG;
	YY_BREAK
case 152:
YY_RULE_SETUP
#line 212 "bfin-lex.l"
_REG.regno = S_AC0;  return STATUS_REG;
	YY_BREAK
case 153:
YY_RULE_SETUP
#line 213 "bfin-lex.l"
_REG.regno = S_AC1;  return STATUS_REG;
	YY_BREAK
case 154:
YY_RULE_SETUP
#line 214 "bfin-lex.l"
_REG.regno = S_AV0;  return STATUS_REG;
	YY_BREAK
case 155:
YY_RULE_SETUP
#line 215 "bfin-lex.l"
_REG.regno = S_AV0S; return STATUS_REG;
	YY_BREAK
case 156:
YY_RULE_SETUP
#line 216 "bfin-lex.l"
_REG.regno = S_AV1;  return STATUS_REG;
	YY_BREAK
case 157:
YY_RULE_SETUP
#line 217 "bfin-lex.l"
_REG.regno = S_AV1S; return STATUS_REG;
	YY_BREAK
case 158:
YY_RULE_SETUP
#line 218 "bfin-lex.l"
_REG.regno = S_V; 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 222 "bfin-lex.l"
_REG.regno = REG_ASTAT; return REG;
	YY_BREAK
case 161:
YY_RULE_SETUP
#line 223 "bfin-lex.l"
return ASHIFT;
	YY_BREAK
case 162:
YY_RULE_SETUP
#line 224 "bfin-lex.l"
return ASL;
	YY_BREAK
case 163:
YY_RULE_SETUP
#line 225 "bfin-lex.l"
return ASR;
	YY_BREAK
case 164:
YY_RULE_SETUP
#line 226 "bfin-lex.l"
return ALIGN8;
	YY_BREAK
case 165:
YY_RULE_SETUP
#line 227 "bfin-lex.l"
return ALIGN16;
	YY_BREAK
case 166:
YY_RULE_SETUP
#line 228 "bfin-lex.l"
return ALIGN24;
	YY_BREAK
case 167:
YY_RULE_SETUP
#line 229 "bfin-lex.l"
return A_ONE_DOT_L;
	YY_BREAK
case 168:
YY_RULE_SETUP
#line 230 "bfin-lex.l"
return A_ZERO_DOT_L;
	YY_BREAK
case 169:
YY_RULE_SETUP
#line 231 "bfin-lex.l"
return A_ONE_DOT_H;
	YY_BREAK
case 170:
YY_RULE_SETUP
#line 232 "bfin-lex.l"
return A_ZERO_DOT_H;
	YY_BREAK
case 171:
YY_RULE_SETUP
#line 233 "bfin-lex.l"
return ABS;
	YY_BREAK
case 172:
YY_RULE_SETUP
#line 234 "bfin-lex.l"
return ABORT;
	YY_BREAK
case 173:
YY_RULE_SETUP
#line 235 "bfin-lex.l"
_REG.regno = REG_A1x; return REG;
	YY_BREAK
case 174:
YY_RULE_SETUP
#line 236 "bfin-lex.l"
_REG.regno = REG_A1w; return REG;
	YY_BREAK
case 175:
YY_RULE_SETUP
#line 237 "bfin-lex.l"
_REG.regno = REG_A1;  return REG_A_DOUBLE_ONE;
	YY_BREAK
case 176:
YY_RULE_SETUP
#line 238 "bfin-lex.l"
_REG.regno = REG_A0x; return REG;
	YY_BREAK
case 177:
YY_RULE_SETUP
#line 239 "bfin-lex.l"
_REG.regno = REG_A0w; return REG;
	YY_BREAK
case 178:
YY_RULE_SETUP
#line 240 "bfin-lex.l"
_REG.regno = REG_A0;  return REG_A_DOUBLE_ZERO;
	YY_BREAK
case 179:
YY_RULE_SETUP
#line 241 "bfin-lex.l"
return GOT;
	YY_BREAK
case 180:
YY_RULE_SETUP
#line 242 "bfin-lex.l"
return GOT17M4;
	YY_BREAK
case 181:
YY_RULE_SETUP
#line 243 "bfin-lex.l"
return FUNCDESC_GOT17M4;
	YY_BREAK
case 182:
YY_RULE_SETUP
#line 244 "bfin-lex.l"
return PLTPC;
	YY_BREAK
case 183:
YY_RULE_SETUP
#line 247 "bfin-lex.l"
return TILDA;
	YY_BREAK
case 184:
YY_RULE_SETUP
#line 248 "bfin-lex.l"
return _BAR_ASSIGN;
	YY_BREAK
case 185:
YY_RULE_SETUP
#line 249 "bfin-lex.l"
return BAR;
	YY_BREAK
case 186:
YY_RULE_SETUP
#line 250 "bfin-lex.l"
return _CARET_ASSIGN;
	YY_BREAK
case 187:
YY_RULE_SETUP
#line 251 "bfin-lex.l"
return CARET;
	YY_BREAK
case 188:
YY_RULE_SETUP
#line 252 "bfin-lex.l"
return RBRACK;
	YY_BREAK
case 189:
YY_RULE_SETUP
#line 253 "bfin-lex.l"
return LBRACK;
	YY_BREAK
case 190:
YY_RULE_SETUP
#line 254 "bfin-lex.l"
return _GREATER_GREATER_GREATER_THAN_ASSIGN;
	YY_BREAK
case 191:
YY_RULE_SETUP
#line 255 "bfin-lex.l"
return _GREATER_GREATER_ASSIGN;
	YY_BREAK
case 192:
YY_RULE_SETUP
#line 256 "bfin-lex.l"
return _GREATER_GREATER_GREATER;
	YY_BREAK
case 193:
YY_RULE_SETUP
#line 257 "bfin-lex.l"
return GREATER_GREATER;
	YY_BREAK
case 194:
YY_RULE_SETUP
#line 258 "bfin-lex.l"
return _ASSIGN_ASSIGN;
	YY_BREAK
case 195:
YY_RULE_SETUP
#line 259 "bfin-lex.l"
return ASSIGN;
	YY_BREAK
case 196:
YY_RULE_SETUP
#line 260 "bfin-lex.l"
return _LESS_THAN_ASSIGN;
	YY_BREAK
case 197:
YY_RULE_SETUP
#line 261 "bfin-lex.l"
return _LESS_LESS_ASSIGN;
	YY_BREAK
case 198:
YY_RULE_SETUP
#line 262 "bfin-lex.l"
return LESS_LESS;
	YY_BREAK
case 199:
YY_RULE_SETUP
#line 263 "bfin-lex.l"
return LESS_THAN;
	YY_BREAK
case 200:
YY_RULE_SETUP
#line 264 "bfin-lex.l"
return LPAREN;
	YY_BREAK
case 201:
YY_RULE_SETUP
#line 265 "bfin-lex.l"
return RPAREN;
	YY_BREAK
case 202:
YY_RULE_SETUP
#line 266 "bfin-lex.l"
return COLON;
	YY_BREAK
case 203:
YY_RULE_SETUP
#line 267 "bfin-lex.l"
return SLASH;
	YY_BREAK
case 204:
YY_RULE_SETUP
#line 268 "bfin-lex.l"
return _MINUS_ASSIGN;
	YY_BREAK
case 205:
YY_RULE_SETUP
#line 269 "bfin-lex.l"
return _PLUS_BAR_PLUS;
	YY_BREAK
case 206:
YY_RULE_SETUP
#line 270 "bfin-lex.l"
return _MINUS_BAR_PLUS;
	YY_BREAK
case 207:
YY_RULE_SETUP
#line 271 "bfin-lex.l"
return _PLUS_BAR_MINUS;
	YY_BREAK
case 208:
YY_RULE_SETUP
#line 272 "bfin-lex.l"
return _MINUS_BAR_MINUS;
	YY_BREAK
case 209:
YY_RULE_SETUP
#line 273 "bfin-lex.l"
return _MINUS_MINUS;
	YY_BREAK
case 210:
YY_RULE_SETUP
#line 274 "bfin-lex.l"
return MINUS;
	YY_BREAK
case 211:
YY_RULE_SETUP
#line 275 "bfin-lex.l"
return COMMA;
	YY_BREAK
case 212:
YY_RULE_SETUP
#line 276 "bfin-lex.l"
return _PLUS_ASSIGN;
	YY_BREAK
case 213:
YY_RULE_SETUP
#line 277 "bfin-lex.l"
return _PLUS_PLUS;
	YY_BREAK
case 214:
YY_RULE_SETUP
#line 278 "bfin-lex.l"
return PLUS;
	YY_BREAK
case 215:
YY_RULE_SETUP
#line 279 "bfin-lex.l"
return _STAR_ASSIGN;
	YY_BREAK
case 216:
YY_RULE_SETUP
#line 280 "bfin-lex.l"
return STAR;
	YY_BREAK
case 217:
YY_RULE_SETUP
#line 281 "bfin-lex.l"
return _AMPERSAND_ASSIGN;
	YY_BREAK
case 218:
YY_RULE_SETUP
#line 282 "bfin-lex.l"
return AMPERSAND;
	YY_BREAK
case 219:
YY_RULE_SETUP
#line 283 "bfin-lex.l"
return PERCENT;
	YY_BREAK
case 220:
YY_RULE_SETUP
#line 284 "bfin-lex.l"
return BANG;
	YY_BREAK
case 221:
YY_RULE_SETUP
#line 285 "bfin-lex.l"
return SEMICOLON;
	YY_BREAK
case 222:
YY_RULE_SETUP
#line 286 "bfin-lex.l"
return _ASSIGN_BANG;
	YY_BREAK
case 223:
YY_RULE_SETUP
#line 287 "bfin-lex.l"
return DOUBLE_BAR;
	YY_BREAK
case 224:
YY_RULE_SETUP
#line 288 "bfin-lex.l"
return AT;
	YY_BREAK
case 225:
YY_RULE_SETUP
#line 289 "bfin-lex.l"
return PREFETCH;
	YY_BREAK
case 226:
YY_RULE_SETUP
#line 290 "bfin-lex.l"
return UNLINK;
	YY_BREAK
case 227:
YY_RULE_SETUP
#line 291 "bfin-lex.l"
return LINK;
	YY_BREAK
case 228:
YY_RULE_SETUP
#line 292 "bfin-lex.l"
return IDLE;
	YY_BREAK
case 229:
YY_RULE_SETUP
#line 293 "bfin-lex.l"
return IFLUSH;
	YY_BREAK
case 230:
YY_RULE_SETUP
#line 294 "bfin-lex.l"
return FLUSHINV;
	YY_BREAK
case 231:
YY_RULE_SETUP
#line 295 "bfin-lex.l"
return FLUSH;
	YY_BREAK
case 232:
YY_RULE_SETUP
#line 296 "bfin-lex.l"
{
    yylval.value = parse_int (&yytext);
    return NUMBER;
  }
	YY_BREAK
case 233:
YY_RULE_SETUP
#line 300 "bfin-lex.l"
{ 
    yylval.symbol = symbol_find_or_make (yytext);
    symbol_mark_used (yylval.symbol);
    return SYMBOL; 
  }
	YY_BREAK
case 234:
YY_RULE_SETUP
#line 305 "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 235:
/* rule 235 can match eol */
YY_RULE_SETUP
#line 334 "bfin-lex.l"
;
	YY_BREAK
case 236:
YY_RULE_SETUP
#line 335 "bfin-lex.l"
;
	YY_BREAK
case 237:
YY_RULE_SETUP
#line 336 "bfin-lex.l"
return yytext[0];
	YY_BREAK
case 238:
YY_RULE_SETUP
#line 337 "bfin-lex.l"
ECHO;
	YY_BREAK
#line 2308 "bfin-lex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(KEYWORD):
	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
		{
			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 )
				{
				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), 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;

	(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 >= 555 )
				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 >= 555 )
			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 == 554);

	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*)
								);
		
		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*)
								);

		/* 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 str 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 * str )
{
    
	return yy_scan_bytes(str,strlen(str) );
}

/** 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 * bytes, int  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 = len + 2;
	buf = (char *) yyalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < len; ++i )
		buf[i] = bytes[i];

	buf[len] = buf[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 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 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 ;
}

/* 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;

    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 337 "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 c;
  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. */
        {
	  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)
            {
              int 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 || !index (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');
  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':
	break;

      case 'h':
      case 'H':
	r->regno |= 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

