/* A lexical scanner generated by flex */

/* Scanner skeleton version:
 * $Header: /cvs/src/src/gas/Attic/bfin-lex.c,v 1.1.2.1 2006/04/16 18:36:43 drow Exp $
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>
#include <errno.h>

/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>
#ifndef _WIN32
#include <unistd.h>
#endif

/* Use prototypes in function declarations. */
#define YY_USE_PROTOS

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

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

#endif	/* __STDC__ */
#endif	/* ! __cplusplus */

#ifdef __TURBOC__
 #pragma warn -rch
 #pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif

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


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#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. */
#define YY_BUF_SIZE 16384

typedef struct yy_buffer_state *YY_BUFFER_STATE;

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

/* The funky do-while in the following #define is used to turn the definition
 * int a single C statement (which needs a semi-colon terminator).  This
 * avoids problems with code like:
 *
 * 	if ( condition_holds )
 *		yyless( 5 );
 *	else
 *		do_something_else();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the yyless() call.
 */

/* Return all but the first 'n' matched characters back to the input stream. */

#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		*yy_cp = yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yy_c_buf_p = yy_cp = yy_bp + n - 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).
 */
typedef unsigned int yy_size_t;


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;

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

static YY_BUFFER_STATE yy_current_buffer = 0;

/* 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".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* 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 YY_PROTO(( FILE *input_file ));

void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )

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

static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

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

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

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)

typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern char *yytext;
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
static int yy_get_next_buffer YY_PROTO(( void ));
static void yy_fatal_error YY_PROTO(( 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 = (int) (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
static yyconst short int yy_accept[559] =
    {   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,  232,  234,  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,  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 int 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 int yy_meta[70] =
    {   0,
        1,    1,    2,    1,    1,    3,    1,    1,    1,    1,
        1,    1,    1,    1,    3,    1,    4,    4,    4,    4,
        4,    4,    4,    4,    4,    4,    1,    1,    1,    1,
        1,    1,    5,    4,    5,    5,    5,    4,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    1,    1,
        1,    3,    5,    4,    3,    3,    3,    1,    1
    } ;

static yyconst short int yy_base[565] =
    {   0,
        0,    0,   32,   33,  814,  815,  815,  815,  815,    0,
      815,  783,  815,  815,  782,   60,  815,   61,  800,  113,
       44,  815,  815,   54,   75,  779,  815,  161,  221,   59,
       84,   42,   92,  105,  109,  148,  756,  271,  141,   48,
      110,  322,  372,  421,  153,  757,   60,  787,    0,    0,
      815,  815,  776,  741,   58,  815,  141,   64,  763,   43,
       61,    0,  815,  815,  815,  815,  105,  815,  815,  129,
      792,  210,  225,  235,  472,  275,  815,  772,  815,  815,
      815,  145,  786,  785,  748,  163,  757,    0,    0,  263,
      185,    0,    0,  782,  131,    0,  759,   97,  154,  751,

        0,  753,    0,  736,  757,  752,  742,   69,  736,  279,
      773,  741,    0,  156,    0,    0,  157,  749,  770,  740,
        0,    0,  732,    0,  737,  766,  196,  199,    0,  153,
      226,  247,  765,  723,  732,  220,  280,    0,  221,  740,
      170,  761,  740,    0,  250,  728,  758,  731,  252,  735,
      257,  308,  260,  248,  269,  288,  281,  729,  730,  753,
      710,  725,  714,  713,  710,    0,    0,  714,  298,    0,
      742,  815,  219,  815,  815,  707,  715,  714,  711,  174,
      712,  815,  815,  815,  815,  744,  138,  356,  408,    0,
        0,  815,  815,  724,  312,  343,    0,    0,    0,  714,

      711,    0,    0,  249,  700,  699,    0,  232,  369,  695,
      303,  711,  703,    0,  700,  701,  375,  337,  337,  122,
      238,  338,  378,  347,  239,  709,  725,    0,  356,  318,
      705,  722,  692,  363,    0,    0,    0,    0,  691,  390,
      697,    0,    0,  372,    0,    0,  689,    0,    0,  700,
      684,  699,  403,  690,  684,  393,  436,  680,  474,  431,
        0,    0,    0,    0,    0,    0,  684,    0,    0,  398,
      678,  401,  690,  681,  437,  680,    0,  690,  401,    0,
        0,  662,    0,  657,  671,  684,  667,  676,  680,  676,
      705,  815,    0,    0,    0,    0,    0,    0,    0,    0,

      669,  676,  434,    0,    0,    0,  669,  659,  674,  448,
        0,  659,  466,  694,  673,  670,  439,  661,  411,  654,
      660,    0,    0,  419,  422,  647,  649,  450,  665,  470,
        0,    0,  664,  675,  462,    0,  636,    0,  682,    0,
      634,  642,  656,    0,    0,  656,    0,    0,    0,    0,
      657,    0,    0,  654,    0,    0,    0,    0,    0,  671,
      672,    0,    0,  652,  652,  470,  649,  471,  470,    0,
        0,  650,  646,  632,  637,  614,  640,  617,  627,    0,
      640,  630,  521,  474,    0,  466,  619,  475,  630,  477,
      633,  624,  485,  625,  614,    0,  618,    0,    0,  620,

      623,  625,  626,  611,  491,  628,  611,    0,  619,  625,
      622,  613,  622,  495,  503,  487,  608,  497,    0,    0,
        0,    0,    0,    0,  615,  517,  603,    0,  612,    0,
      613,  614,  519,    0,  609,  609,  501,  605,  624,  625,
        0,    0,    0,    0,    0,    0,    0,  604,  537,  609,
      595,    0,  623,  597,  508,  510,  594,  588,    0,  590,
      600,    0,  511,  585,  614,  532,  597,    0,    0,    0,
      596,  586,    0,    0,    0,  514,  594,  517,    0,  518,
      574,  583,    0,  593,    0,    0,    0,  589,  544,  315,
      578,  582,  538,    0,  568,    0,    0,  586,  578,  520,

        0,    0,  575,    0,  551,  554,  563,  564,    0,  521,
      548,    0,    0,  543,  556,  522,  418,    0,    0,    0,
        0,    0,  558,    0,  535,    0,    0,  524,  528,    0,
      424,    0,    0,    0,    0,    0,    0,    0,    0,  403,
      388,  378,  324,  279,    0,  272,  529,    0,    0,  531,
      538,    0,  262,  168,   82,   83,    0,  815,  603,  608,
       92,  613,  615,  617
    } ;

static yyconst short int yy_def[565] =
    {   0,
      558,    1,    1,    1,  558,  558,  558,  558,  558,  559,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  560,
      561,  558,  558,  558,  558,  558,  558,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      558,  558,  558,   28,  558,  558,  559,   36,   38,   42,
      559,  559,  558,  558,  558,  558,  558,  558,  558,  558,
      562,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  563,  559,  559,  559,  559,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  558,  559,  558,  558,  559,  559,  559,  559,  559,
      559,  558,  558,  558,  558,  562,  562,  558,  558,   75,
      564,  558,  558,  558,  559,  559,  559,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  563,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      562,  558,  559,  559,  559,  559,  559,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,

      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      559,  559,  559,  559,  559,  559,  559,    0,  558,  558,
      558,  558,  558,  558
    } ;

static yyconst short int yy_nxt[885] =
    {   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,   77,   80,   60,
       60,   77,   78,   79,   61,   61,  109,  174,   93,   66,
       69,  100,  180,  101,  137,   76,   93,  110,  138,  177,

      169,  178,  102,  557,   81,  103,  181,   77,  180,  104,
      170,  168,  137,   93,   93,  105,  182,  106,  183,  219,
      107,  100,  220,  103,  108,  175,  556,   67,   70,   73,
       73,   73,   73,   73,   73,   73,   73,   73,   73,  111,
      184,  113,  185,  211,  112,   93,   74,  106,  187,  116,
       74,  114,  117,  291,  139,  140,  115,  133,  133,  133,
      133,  211,  141,  118,  119,  119,  119,  119,   75,  114,
      322,  115,  323,  134,  193,  194,   74,   83,   84,  198,
      199,  135,  209,  120,  176,  121,  136,  122,  111,  164,
      165,  555,  166,  112,   85,   86,  167,  209,  123,  239,

      124,  205,  206,  134,   87,  212,   88,  227,  228,   89,
      289,   90,  235,  236,   91,  237,  238,  239,   92,  256,
      212,  252,  227,  228,   85,   93,  188,  188,  188,  188,
      188,  188,  188,  188,  188,  188,  252,   94,   94,   94,
       94,  189,  189,  189,  189,  189,  189,  189,  189,  189,
      189,  188,  188,  188,  188,  188,  188,  188,  188,  188,
      188,   95,  240,  242,  243,  241,  247,  250,   96,  197,
       97,  306,  324,  325,  326,  306,   98,   99,  331,  554,
      268,  303,  332,  284,  247,  250,   97,  126,  126,  126,
      126,   76,   76,   76,   76,   76,   76,   76,   76,   76,

       76,  255,  201,  259,  127,  128,  202,  129,  261,  267,
      268,  303,  203,  222,  204,  269,  255,  130,  259,  550,
      270,  131,  132,  261,  549,  267,  223,  248,  203,  204,
      224,  249,  272,  269,  127,  130,  271,  132,  142,  142,
      142,  142,  142,  142,  262,  224,  249,  272,  263,  282,
      270,  293,  312,  264,  143,  294,  144,  336,  265,  519,
      548,  336,  520,  266,  282,  145,  295,  296,  312,  321,
      327,  146,  188,  188,  188,  188,  188,  188,  188,  188,
      188,  188,  297,  320,  143,  328,  298,  146,  147,  147,
      147,  147,  147,  147,  147,  147,  330,  299,  300,  321,

      327,  320,  340,  307,  148,  335,  340,  317,  149,  318,
      329,  344,  330,  308,  319,  344,  547,  150,  151,  309,
      310,  335,  546,  152,  189,  189,  189,  189,  189,  189,
      189,  189,  189,  189,  148,  310,  151,  317,  152,  153,
      329,  342,  349,  401,  352,  545,  349,  365,  360,  361,
      367,  404,  374,  154,  405,  155,  342,  156,  157,  352,
      158,  159,  538,  365,  544,  539,  367,  374,  160,  353,
      362,  161,  162,  401,  363,  353,  370,  163,  398,  353,
      371,  404,  399,  154,  405,  385,  389,  162,  190,  190,
      190,  190,  190,  190,  190,  190,  190,  190,  390,  353,

      385,  408,  410,  429,  191,  191,  191,  191,  191,  191,
      355,  413,  392,  393,  356,  443,  408,  450,  394,  357,
      471,  426,  428,  472,  358,  442,  445,  413,  447,  359,
      392,  443,  410,  429,  191,  191,  426,  428,  439,  440,
      442,  445,  459,  447,  467,  441,  468,  450,  474,  476,
      471,  481,  484,  469,  489,  490,  491,  459,  470,  496,
      467,  497,  502,  474,  505,  509,  517,  484,  511,  512,
      523,  527,  533,  537,  496,  551,  497,  502,  543,  476,
      509,  481,  552,  511,  512,  542,  527,  533,  537,  553,
      541,  518,  540,  551,  505,  536,  535,  552,  534,  532,

      523,  531,  530,  529,  553,   62,   62,   62,   72,  528,
       72,   72,   72,  186,  526,  186,  186,  186,  207,  207,
      191,  191,  525,  524,  522,  521,  516,  515,  514,  513,
      510,  508,  507,  506,  504,  503,  501,  500,  499,  498,
      495,  494,  493,  492,  488,  487,  486,  485,  483,  482,
      480,  479,  478,  477,  475,  473,  466,  465,  464,  463,
      462,  461,  460,  458,  457,  456,  455,  454,  453,  452,
      451,  449,  448,  446,  444,  438,  437,  436,  414,  435,
      434,  433,  432,  431,  430,  427,  425,  424,  423,  422,
      421,  420,  419,  418,  417,  416,  415,  414,  412,  411,

      409,  407,  406,  403,  402,  400,  397,  396,  395,  391,
      388,  387,  386,  384,  383,  187,  382,  381,  380,  379,
      378,  377,  376,  375,  373,  372,  369,  368,  366,  364,
      354,  351,  350,  348,  347,  346,  345,  343,  341,  339,
      338,  337,  334,  333,  316,  315,  314,  313,  311,  305,
      304,  302,  301,  292,  187,  290,  288,  287,  286,  285,
      283,  281,  280,  279,  278,  277,  276,  275,  274,  273,
      260,  258,  257,  256,  254,  253,  251,  246,  245,  244,
      234,  233,  232,  231,  230,  229,  226,  225,  221,  218,
      217,  216,  215,  214,  213,  210,  208,  200,  197,  196,

      195,  192,  187,  179,  173,  172,  171,  168,  125,   82,
       71,   64,   63,  558,    5,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558
    } ;

static yyconst short int yy_chk[885] =
    {   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,   21,   25,    3,
        4,   21,   24,   24,    3,    4,   32,   55,   31,   16,
       18,   30,   60,   30,   40,  561,   33,   32,   40,   58,

       47,   58,   30,  556,   25,   30,   61,   21,   60,   30,
       47,   61,   40,   35,   41,   30,   67,   31,   67,  108,
       31,   30,  108,   30,   31,   55,  555,   16,   18,   20,
       20,   20,   20,   20,   20,   20,   20,   20,   20,   33,
       70,   34,   70,   98,   33,   57,   20,   31,  187,   35,
       20,   34,   35,  187,   41,   41,   34,   39,   39,   39,
       39,   98,   41,   35,   36,   36,   36,   36,   20,   34,
      220,   34,  220,   39,   82,   82,   20,   28,   28,   86,
       86,   39,   95,   36,   57,   36,   39,   36,   57,   45,
       45,  554,   45,   57,   28,   28,   45,   95,   36,  130,

       36,   91,   91,   39,   28,   99,   28,  114,  117,   28,
      180,   28,  127,  127,   28,  128,  128,  130,   28,  180,
       99,  141,  114,  117,   28,   29,   72,   72,   72,   72,
       72,   72,   72,   72,   72,   72,  141,   29,   29,   29,
       29,   73,   73,   73,   73,   73,   73,   73,   73,   73,
       73,   74,   74,   74,   74,   74,   74,   74,   74,   74,
       74,   29,  131,  132,  132,  131,  136,  139,   29,  173,
       29,  208,  221,  221,  221,  208,   29,   29,  225,  553,
      154,  204,  225,  173,  136,  139,   29,   38,   38,   38,
       38,   76,   76,   76,   76,   76,   76,   76,   76,   76,

       76,  145,   90,  149,   38,   38,   90,   38,  151,  153,
      154,  204,   90,  110,   90,  155,  145,   38,  149,  546,
      156,   38,   38,  151,  544,  153,  110,  137,   90,   90,
      110,  137,  157,  155,   38,   38,  156,   38,   42,   42,
       42,   42,   42,   42,  152,  110,  137,  157,  152,  169,
      156,  195,  211,  152,   42,  195,   42,  230,  152,  490,
      543,  230,  490,  152,  169,   42,  195,  195,  211,  219,
      222,   42,  188,  188,  188,  188,  188,  188,  188,  188,
      188,  188,  196,  218,   42,  222,  196,   42,   43,   43,
       43,   43,   43,   43,   43,   43,  224,  196,  196,  219,

      222,  218,  234,  209,   43,  229,  234,  217,   43,  217,
      223,  244,  224,  209,  217,  244,  542,   43,   43,  209,
      209,  229,  541,   43,  189,  189,  189,  189,  189,  189,
      189,  189,  189,  189,   43,  209,   43,  217,   43,   44,
      223,  240,  253,  319,  256,  540,  253,  270,  260,  260,
      272,  324,  279,   44,  325,   44,  240,   44,   44,  256,
       44,   44,  517,  270,  531,  517,  272,  279,   44,  257,
      260,   44,   44,  319,  260,  257,  275,   44,  317,  257,
      275,  324,  317,   44,  325,  303,  310,   44,   75,   75,
       75,   75,   75,   75,   75,   75,   75,   75,  310,  257,

      303,  328,  330,  369,   75,   75,   75,   75,   75,   75,
      259,  335,  313,  313,  259,  386,  328,  393,  313,  259,
      416,  366,  368,  416,  259,  384,  388,  335,  390,  259,
      313,  386,  330,  369,   75,   75,  366,  368,  383,  383,
      384,  388,  405,  390,  414,  383,  415,  393,  418,  426,
      416,  433,  437,  415,  449,  449,  449,  405,  415,  455,
      414,  456,  463,  418,  466,  476,  489,  437,  478,  480,
      493,  500,  510,  516,  455,  547,  456,  463,  529,  426,
      476,  433,  550,  478,  480,  528,  500,  510,  516,  551,
      525,  489,  523,  547,  466,  515,  514,  550,  511,  508,

      493,  507,  506,  505,  551,  559,  559,  559,  560,  503,
      560,  560,  560,  562,  499,  562,  562,  562,  563,  563,
      564,  564,  498,  495,  492,  491,  488,  484,  482,  481,
      477,  472,  471,  467,  465,  464,  461,  460,  458,  457,
      454,  453,  451,  450,  448,  440,  439,  438,  436,  435,
      432,  431,  429,  427,  425,  417,  413,  412,  411,  410,
      409,  407,  406,  404,  403,  402,  401,  400,  397,  395,
      394,  392,  391,  389,  387,  382,  381,  379,  378,  377,
      376,  375,  374,  373,  372,  367,  365,  364,  361,  360,
      354,  351,  346,  343,  342,  341,  339,  337,  334,  333,

      329,  327,  326,  321,  320,  318,  316,  315,  314,  312,
      309,  308,  307,  302,  301,  291,  290,  289,  288,  287,
      286,  285,  284,  282,  278,  276,  274,  273,  271,  267,
      258,  255,  254,  252,  251,  250,  247,  241,  239,  233,
      232,  231,  227,  226,  216,  215,  213,  212,  210,  206,
      205,  201,  200,  194,  186,  181,  179,  178,  177,  176,
      171,  168,  165,  164,  163,  162,  161,  160,  159,  158,
      150,  148,  147,  146,  143,  142,  140,  135,  134,  133,
      126,  125,  123,  120,  119,  118,  112,  111,  109,  107,
      106,  105,  104,  102,  100,   97,   94,   87,   85,   84,

       83,   78,   71,   59,   54,   53,   48,   46,   37,   26,
       19,   15,   12,    5,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558,  558,  558,  558,  558,  558,  558,
      558,  558,  558,  558
    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

/* 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"
#define INITIAL 0
/* bfin-lex.l  ADI Blackfin lexer
   Copyright 2005
   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 2, 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 <stdlib.h>
#include <string.h>
#include "bfin-defs.h"
#include "bfin-parse.h"
#include "as.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.  */
#define KEYWORD 1

#line 788 "bfin-lex.c"

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

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

#ifndef YY_NO_UNPUT
static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif

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

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

#if YY_STACK_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
#ifndef YY_NO_PUSH_STATE
static void yy_push_state YY_PROTO(( int new_state ));
#endif
#ifndef YY_NO_POP_STATE
static void yy_pop_state YY_PROTO(( void ));
#endif
#ifndef YY_NO_TOP_STATE
static int yy_top_state YY_PROTO(( void ));
#endif

#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif

#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines.  This will fail
 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 * or sizeof(void*) != sizeof(int).
 */
#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->yy_is_interactive ) \
		{ \
		int c = '*', 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

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif

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

YY_DECL
	{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;

#line 45 "bfin-lex.l"

#line 952 "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 )
			yy_current_buffer =
				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 >= 559 )
					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] != 815 );

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

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

           Construct a local label name, then an undefined symbol.
           Just return it as never seen before.  */

        name = fb_label_name ((int) (ref[0] - '0'), 1);
	yylval.symbol = symbol_find_or_make (name);
	/* We have no need to check symbol properties.  */
	return SYMBOL;
      }                                  
  }                                  
	YY_BREAK
case 235:
YY_RULE_SETUP
#line 336 "bfin-lex.l"
;
	YY_BREAK
case 236:
YY_RULE_SETUP
#line 337 "bfin-lex.l"
;
	YY_BREAK
case 237:
YY_RULE_SETUP
#line 338 "bfin-lex.l"
return yytext[0];
	YY_BREAK
case 238:
YY_RULE_SETUP
#line 339 "bfin-lex.l"
ECHO;
	YY_BREAK
#line 2260 "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->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->yy_n_chars;
			yy_current_buffer->yy_input_file = yyin;
			yy_current_buffer->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->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->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()
	{
	register char *dest = yy_current_buffer->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->yy_ch_buf[yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( yy_current_buffer->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->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->yy_n_chars = yy_n_chars = 0;

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

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
#else

			/* 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. */
					yy_flex_realloc( (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->yy_buf_size -
						number_to_move - 1;
#endif
			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

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

		yy_current_buffer->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->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	yy_n_chars += number_to_move;
	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

	yytext_ptr = &yy_current_buffer->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()
	{
	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 >= 559 )
				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 );
 */

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
yy_state_type yy_current_state;
#endif
	{
	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 >= 559 )
			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 == 558);

	return yy_is_jam ? 0 : yy_current_state;
	}


#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static void yyunput( int c, register char *yy_bp )
#else
static void yyunput( c, yy_bp )
int c;
register char *yy_bp;
#endif
	{
	register char *yy_cp = yy_c_buf_p;

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

	if ( yy_cp < yy_current_buffer->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->yy_ch_buf[
					yy_current_buffer->yy_buf_size + 2];
		register char *source =
				&yy_current_buffer->yy_ch_buf[number_to_move];

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

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

		if ( yy_cp < yy_current_buffer->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;
	}
#endif	/* ifndef YY_NO_UNPUT */


#ifdef __cplusplus
static int yyinput()
#else
static int input()
#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->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 );

					/* fall through */

				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;
	}


#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif
	{
	if ( ! yy_current_buffer )
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

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


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif
	{
	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->yy_buf_pos = yy_c_buf_p;
		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	yy_current_buffer = 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;
	}


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif
	{
	yy_n_chars = yy_current_buffer->yy_n_chars;
	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
	yyin = yy_current_buffer->yy_input_file;
	yy_hold_char = *yy_c_buf_p;
	}


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif
	{
	YY_BUFFER_STATE b;

	b = (YY_BUFFER_STATE) yy_flex_alloc( 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 *) yy_flex_alloc( 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;
	}


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif
	{
	if ( ! b )
		return;

	if ( b == yy_current_buffer )
		yy_current_buffer = (YY_BUFFER_STATE) 0;

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

	yy_flex_free( (void *) b );
	}


#ifndef _WIN32
#include <unistd.h>
#else
#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern int isatty YY_PROTO(( int ));
#endif
#endif
#endif

#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif


	{
	yy_flush_buffer( b );

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

#if YY_ALWAYS_INTERACTIVE
	b->yy_is_interactive = 1;
#else
#if YY_NEVER_INTERACTIVE
	b->yy_is_interactive = 0;
#else
	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
#endif
#endif
	}


#ifdef YY_USE_PROTOS
void yy_flush_buffer( YY_BUFFER_STATE b )
#else
void yy_flush_buffer( b )
YY_BUFFER_STATE b;
#endif

	{
	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();
	}


#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
#else
YY_BUFFER_STATE yy_scan_buffer( base, size )
char *base;
yy_size_t size;
#endif
	{
	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) yy_flex_alloc( 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;
	}
#endif


#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
YY_BUFFER_STATE yy_scan_string( yy_str )
yyconst char *yy_str;
#endif
	{
	int len;
	for ( len = 0; yy_str[len]; ++len )
		;

	return yy_scan_bytes( yy_str, len );
	}
#endif


#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
#else
YY_BUFFER_STATE yy_scan_bytes( bytes, len )
yyconst char *bytes;
int len;
#endif
	{
	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 *) yy_flex_alloc( 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;
	}
#endif


#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static void yy_push_state( int new_state )
#else
static void yy_push_state( new_state )
int new_state;
#endif
	{
	if ( yy_start_stack_ptr >= yy_start_stack_depth )
		{
		yy_size_t new_size;

		yy_start_stack_depth += YY_START_STACK_INCR;
		new_size = yy_start_stack_depth * sizeof( int );

		if ( ! yy_start_stack )
			yy_start_stack = (int *) yy_flex_alloc( new_size );

		else
			yy_start_stack = (int *) yy_flex_realloc(
					(void *) yy_start_stack, new_size );

		if ( ! yy_start_stack )
			YY_FATAL_ERROR(
			"out of memory expanding start-condition stack" );
		}

	yy_start_stack[yy_start_stack_ptr++] = YY_START;

	BEGIN(new_state);
	}
#endif


#ifndef YY_NO_POP_STATE
static void yy_pop_state()
	{
	if ( --yy_start_stack_ptr < 0 )
		YY_FATAL_ERROR( "start-condition stack underflow" );

	BEGIN(yy_start_stack[yy_start_stack_ptr]);
	}
#endif


#ifndef YY_NO_TOP_STATE
static int yy_top_state()
	{
	return yy_start_stack[yy_start_stack_ptr - 1];
	}
#endif

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

#ifdef YY_USE_PROTOS
static void yy_fatal_error( yyconst char msg[] )
#else
static void yy_fatal_error( msg )
char msg[];
#endif
	{
	(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. */ \
		yytext[yyleng] = yy_hold_char; \
		yy_c_buf_p = yytext + n; \
		yy_hold_char = *yy_c_buf_p; \
		*yy_c_buf_p = '\0'; \
		yyleng = n; \
		} \
	while ( 0 )


/* Internal utility routines. */

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

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

	return n;
	}
#endif


#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
#else
static void *yy_flex_alloc( size )
yy_size_t size;
#endif
	{
	return (void *) malloc( size );
	}

#ifdef YY_USE_PROTOS
static void *yy_flex_realloc( void *ptr, yy_size_t size )
#else
static void *yy_flex_realloc( ptr, size )
void *ptr;
yy_size_t size;
#endif
	{
	/* 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 );
	}

#ifdef YY_USE_PROTOS
static void yy_flex_free( void *ptr )
#else
static void yy_flex_free( ptr )
void *ptr;
#endif
	{
	free( ptr );
	}

#if YY_MAIN
int main()
	{
	yylex();
	return 0;
	}
#endif
#line 339 "bfin-lex.l"

static long parse_int (char **end)
{
  char fmt = '\0';
  int not_done = 1;
  int shiftvalue = 0;
  char * char_bag;
  long value = 0;
  char 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
