diff --git a/llvm/lib/AsmParser/Lexer.cpp b/llvm/lib/AsmParser/Lexer.cpp
new file mode 100644
index 0000000..657b364
--- /dev/null
+++ b/llvm/lib/AsmParser/Lexer.cpp
@@ -0,0 +1,2552 @@
+#define yy_create_buffer llvmAsm_create_buffer
+#define yy_delete_buffer llvmAsm_delete_buffer
+#define yy_scan_buffer llvmAsm_scan_buffer
+#define yy_scan_string llvmAsm_scan_string
+#define yy_scan_bytes llvmAsm_scan_bytes
+#define yy_flex_debug llvmAsm_flex_debug
+#define yy_init_buffer llvmAsm_init_buffer
+#define yy_flush_buffer llvmAsm_flush_buffer
+#define yy_load_buffer_state llvmAsm_load_buffer_state
+#define yy_switch_to_buffer llvmAsm_switch_to_buffer
+#define yyin llvmAsmin
+#define yyleng llvmAsmleng
+#define yylex llvmAsmlex
+#define yyout llvmAsmout
+#define yyrestart llvmAsmrestart
+#define yytext llvmAsmtext
+#define yylineno llvmAsmlineno
+
+#line 20 "Lexer.cpp"
+/* A lexical scanner generated by flex */
+
+/* Scanner skeleton version:
+ * $Header$
+ */
+
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+#include <stdio.h>
+#include <unistd.h>
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <stdlib.h>
+
+/* 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*64)
+
+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 inline 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)
+
+
+#define YY_USES_REJECT
+
+#define yywrap() 1
+#define YY_SKIP_YYWRAP
+typedef unsigned char YY_CHAR;
+FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+typedef int yy_state_type;
+extern int yylineno;
+int yylineno = 1;
+extern char *yytext;
+#define yytext_ptr yytext
+
+static yy_state_type yy_get_previous_state 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 99
+#define YY_END_OF_BUFFER 100
+static yyconst short int yy_acclist[177] =
+    {   0,
+      100,   98,   99,   97,   98,   99,   97,   99,   98,   99,
+       98,   99,   98,   99,   98,   99,   98,   99,   98,   99,
+       90,   98,   99,   90,   98,   99,    1,   98,   99,   98,
+       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
+       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
+       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
+       99,   98,   99,   98,   99,   98,   99,   98,   99,   98,
+       99,   89,   87,   86,   86,   93,   91,   95,   90,    1,
+       75,   32,   57,   20,   89,   86,   86,   94,   95,   17,
+       95,   96,   51,   56,   30,   33,   54,    3,   42,   53,
+
+       22,   65,   55,   74,   69,   70,   52,   58,   88,   95,
+       95,   37,   66,   67,   82,   83,   44,   19,   92,   23,
+        4,   49,   43,   36,   11,   95,    2,    5,   46,   48,
+       38,   60,   64,   62,   63,   61,   59,   40,   84,   39,
+       45,   18,   72,   81,   35,   47,   27,   21,   34,    7,
+       77,   29,   80,   50,   68,   76,   24,   25,   78,   41,
+       73,   71,    6,   26,    8,   14,    9,   10,   31,   12,
+       28,   79,   85,   13,   15,   16
+    } ;
+
+static yyconst short int yy_accept[398] =
+    {   0,
+        1,    1,    1,    2,    4,    7,    9,   11,   13,   15,
+       17,   19,   21,   24,   27,   30,   32,   34,   36,   38,
+       40,   42,   44,   46,   48,   50,   52,   54,   56,   58,
+       60,   62,   64,   66,   68,   70,   72,   72,   73,   73,
+       74,   75,   76,   77,   77,   78,   78,   79,   80,   80,
+       81,   81,   81,   81,   81,   81,   81,   81,   82,   82,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
+       83,   83,   84,   84,   84,   84,   84,   84,   84,   84,
+       84,   84,   84,   84,   85,   85,   85,   85,   85,   85,
+
+       85,   85,   85,   85,   85,   85,   85,   86,   87,   89,
+       90,   91,   92,   92,   93,   94,   94,   95,   95,   95,
+       96,   96,   96,   96,   97,   97,   97,   97,   97,   98,
+       98,   99,   99,   99,   99,   99,   99,   99,   99,   99,
+       99,  100,  100,  100,  100,  100,  100,  100,  100,  101,
+      102,  102,  102,  103,  103,  104,  105,  105,  105,  105,
+      105,  106,  106,  107,  107,  108,  108,  108,  108,  108,
+      108,  108,  108,  108,  108,  108,  108,  108,  108,  108,
+      108,  108,  108,  108,  108,  108,  109,  109,  110,  111,
+      111,  111,  111,  112,  112,  112,  112,  113,  114,  115,
+
+      115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
+      115,  116,  116,  116,  116,  116,  116,  116,  116,  116,
+      117,  118,  118,  119,  119,  119,  120,  120,  120,  120,
+      120,  120,  120,  120,  120,  120,  121,  121,  121,  122,
+      123,  123,  124,  124,  124,  124,  124,  124,  124,  124,
+      124,  124,  125,  125,  126,  126,  127,  127,  127,  128,
+      128,  128,  128,  128,  128,  128,  128,  128,  129,  129,
+      130,  130,  130,  130,  130,  130,  131,  131,  131,  131,
+      131,  131,  132,  132,  133,  134,  135,  136,  137,  138,
+      139,  140,  140,  140,  140,  141,  142,  143,  143,  143,
+
+      143,  143,  143,  144,  144,  144,  144,  145,  145,  146,
+      146,  146,  146,  147,  148,  149,  149,  150,  150,  151,
+      151,  151,  152,  152,  153,  154,  155,  155,  156,  157,
+      158,  159,  159,  159,  160,  161,  162,  163,  163,  163,
+      163,  163,  164,  165,  165,  165,  165,  165,  165,  165,
+      165,  165,  165,  165,  165,  166,  167,  167,  167,  168,
+      169,  169,  169,  169,  170,  170,  171,  171,  171,  171,
+      171,  171,  171,  171,  171,  171,  171,  171,  171,  171,
+      171,  172,  172,  173,  173,  173,  173,  173,  173,  174,
+      174,  175,  175,  176,  176,  177,  177
+
+    } ;
+
+static yyconst int yy_ec[256] =
+    {   0,
+        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+        1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    2,    1,    4,    1,    5,    6,    1,    1,    1,
+        1,    1,    7,    1,    8,    9,    1,   10,   11,   11,
+       11,   11,   11,   11,   11,   11,   11,   12,   13,    1,
+        1,    1,    1,    1,   14,   14,   14,   14,   15,   14,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
+        1,    1,    1,    1,   16,    1,   17,   18,   19,   20,
+
+       21,   22,   23,   24,   25,    5,   26,   27,   28,   29,
+       30,   31,   32,   33,   34,   35,   36,   37,   38,   39,
+       40,   41,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    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[42] =
+    {   0,
+        1,    1,    2,    1,    3,    1,    1,    3,    3,    3,
+        3,    4,    1,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3
+    } ;
+
+static yyconst short int yy_base[402] =
+    {   0,
+        0,    0,  834,  835,  835,  835,  829,  820,   34,   36,
+       38,   42,   46,   50,    0,   51,   54,   53,   56,   61,
+       76,   77,   79,   80,   82,   83,   84,   90,   31,  111,
+       94,  140,  113,   55,  110,  116,  827,  835,  818,  835,
+        0,  128,  131,  144,  150,  124,  160,  167,  172,    0,
+      136,   89,  168,  100,   41,  145,  114,  817,  139,  183,
+      184,  185,  173,  186,  187,  189,  191,  133,  188,  193,
+      200,  202,  194,  203,  205,  215,  208,  211,  207,  214,
+       57,  816,  224,  225,  227,  231,  233,  234,  241,  235,
+      236,  239,  247,  815,  251,  244,  245,  248,  254,  266,
+
+      255,  276,  269,  278,  270,  277,  814,    0,  287,  291,
+      813,  303,  309,    0,  812,  295,  811,  288,  310,  810,
+      296,  299,  315,  809,  316,  317,  318,  319,  808,  240,
+      322,  320,  321,  325,  326,  327,  328,  331,  336,  341,
+      343,  344,  345,  346,  348,  350,  353,  351,  807,  806,
+      355,  357,  805,  359,  804,  803,  380,  361,  363,  391,
+      802,  373,  801,  374,  800,  369,  365,  393,  396,  398,
+      401,  397,  399,  409,  403,  411,  405,  368,  413,  416,
+      417,  418,  367,  419,  423,  799,  425,  835,  431,  437,
+      443,  446,  449,  450,  439,  451,  798,  797,  796,  452,
+
+      453,  455,  454,  458,  461,  462,  463,  465,  464,  469,
+      795,  470,  472,  478,  475,  479,  480,  482,  483,  794,
+      793,  486,  792,  488,  490,    0,  494,  499,  489,  501,
+      502,  505,  497,  507,  508,  791,  517,  518,  790,  789,
+      519,  788,  521,  527,  522,  529,  523,  530,  531,  536,
+      538,  787,  539,  786,  541,  544,  544,  545,  785,  548,
+      556,  546,  557,  550,  558,  560,  564,  784,  566,  783,
+      568,  569,  570,  571,  576,  782,  572,  578,  590,  582,
+      592,  781,  579,  780,  779,  778,  777,  776,  775,  774,
+      773,  593,  580,  595,  772,  771,  770,  594,  599,  600,
+
+      596,  598,  769,  607,  610,  611,  768,  612,  767,  614,
+      613,  615,  766,  765,  764,  616,  763,  618,  762,  620,
+      627,  761,  626,  760,  759,  758,  624,  757,  756,  755,
+      754,  635,  638,  753,  752,  749,  739,  636,  639,  640,
+      641,  738,  737,  643,  644,  642,  646,  647,  649,  655,
+      662,  654,  665,  666,  736,  735,  668,  669,  734,  733,
+      670,  672,  673,  732,  676,  731,  674,  675,  678,  681,
+      684,  686,  682,  690,  693,  695,  696,  700,  698,  703,
+      730,  708,  728,  706,  704,  709,  710,  711,  726,  712,
+      722,  714,  574,  720,  491,  835,  753,  755,  280,  759,
+
+      161
+    } ;
+
+static yyconst short int yy_def[402] =
+    {   0,
+      396,    1,  396,  396,  396,  396,  397,  398,  399,  396,
+      398,  398,  398,  398,  400,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  397,  396,  398,  396,
+      401,  401,  396,  396,  398,  398,  398,  398,  398,  400,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  398,  398,  396,  401,  401,  396,
+      398,  398,  398,   49,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,   49,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  396,  396,  396,
+      396,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  157,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  396,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,  398,  398,  398,  398,  398,
+      398,  398,  398,  398,  398,    0,  396,  396,  396,  396,
+
+      396
+    } ;
+
+static yyconst short int yy_nxt[877] =
+    {   0,
+        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
+       14,    4,   15,    8,    8,    8,   16,   17,   18,   19,
+       20,   21,   22,    8,   23,    8,   24,   25,   26,   27,
+       28,    8,   29,   30,   31,   32,   33,   34,   35,    8,
+       36,   42,   40,   43,   43,   44,   44,   45,   45,   40,
+       46,   85,   40,   40,   47,   48,   48,   40,   47,   48,
+       48,   40,   40,  119,   40,   40,   40,   40,   40,   59,
+       51,   60,   40,  152,   55,  104,   62,   52,   56,   53,
+       63,   54,   61,   57,   49,   64,   58,   40,   40,   65,
+       40,   40,   67,   40,   40,   40,   74,   70,   77,   66,
+
+       40,   40,   68,   71,   75,   40,   72,   73,   69,   76,
+       93,   40,   79,   83,   81,  116,   82,   78,   80,   84,
+       86,   40,   40,   94,   40,   40,   95,   40,   87,  102,
+      118,   88,  111,   96,   89,   40,  106,  109,  109,  105,
+       43,   43,  103,  121,   40,   90,   91,   40,   92,   86,
+       40,   40,  110,   44,   44,  115,   40,   97,   47,   45,
+       45,   40,  136,  108,   98,  122,   99,  120,  100,  112,
+      112,   40,  123,  101,  113,   47,   48,   48,   40,   40,
+      113,  114,  114,   40,   40,  114,  114,  117,  114,  114,
+      114,  114,  114,  114,   40,   40,   40,   40,   40,   40,
+
+       40,  124,   40,  127,   40,   40,  131,  132,  137,  129,
+      125,   40,  126,   40,   40,  128,   40,  134,   40,   40,
+      143,  130,   40,  133,  135,   40,   40,  138,  141,  139,
+      142,  146,  140,  144,  148,   40,   40,  149,   40,  145,
+      151,  150,   40,  147,   40,   40,   40,   40,  153,  154,
+       40,   40,   40,  165,  155,   40,   40,  204,   40,   40,
+      159,  156,   40,  166,  164,   40,   40,  161,  160,  157,
+      162,  167,  158,  163,  171,  169,  173,   40,  179,  168,
+       40,   40,   41,  174,  172,  175,  170,   40,   40,   40,
+      176,  180,  181,  183,  185,  184,  109,  109,  177,   40,
+
+      189,  189,  186,  178,  182,  190,   40,   40,  195,  187,
+       40,  190,  112,  112,   40,  191,  192,  113,  193,  193,
+       40,   40,  197,  113,  194,  198,   40,   40,   40,   40,
+       40,   40,   40,   40,  196,  200,   40,   40,   40,   40,
+      206,  207,   40,  210,  202,  203,  205,   40,  211,  199,
+      201,  212,   40,  213,   40,   40,   40,   40,  208,   40,
+      209,   40,   40,  215,   40,  217,   40,  214,   40,  220,
+       40,  218,   40,  216,   40,  221,   40,  222,   40,   40,
+       40,  223,  219,  228,   40,   40,  252,  225,  224,  226,
+      226,  236,  247,  226,  226,  227,  226,  226,  226,  226,
+
+      226,  226,   40,  235,   40,  233,  234,   40,   40,   40,
+       40,  229,   40,  230,   40,  237,   40,  231,  239,  232,
+       40,  240,   40,  244,   40,  246,  238,   40,   40,   40,
+       40,  241,  249,  242,   40,  253,   40,  243,  251,  245,
+      189,  189,  248,  191,  191,  190,  256,  256,  254,  250,
+       40,  190,  256,  256,  255,  193,  193,   40,  193,  193,
+       40,   40,   40,   40,   40,   40,   40,  258,  257,   40,
+      260,  262,   40,   40,   40,   40,   40,  265,  263,  259,
+       40,   40,  269,   40,  264,  268,   40,  261,  272,   40,
+       40,   40,  266,   40,   40,  267,  271,   40,  273,   40,
+
+       40,   40,   40,  270,  275,   40,  276,  274,   40,  278,
+       40,  277,   40,   40,  282,  279,   40,  283,   40,   40,
+      284,  285,  287,  280,  281,  289,  292,  291,   40,   40,
+       40,  290,   40,   40,   40,  286,  288,  293,   40,  295,
+       40,   40,   40,  296,  294,  299,  298,   40,  297,   40,
+       40,  300,   40,  256,  256,   40,   40,   40,  303,   40,
+      307,   40,  301,  302,  308,  306,  309,   40,   40,   40,
+      313,   40,  310,  305,  312,   40,  304,   40,  311,   40,
+       40,   40,   40,   40,  317,   40,  314,   40,  318,   40,
+       40,   40,  316,   40,  315,  319,  322,  320,  324,  321,
+
+      323,   40,  326,   40,   40,   40,   40,   40,  325,   40,
+       40,   40,  327,  328,  330,  331,  329,  333,   40,  334,
+      336,   40,   40,   40,   40,   40,   40,   40,  332,   40,
+      335,   40,  344,  342,  338,   40,  340,   40,   40,  339,
+      346,  337,  341,  347,  348,  345,   40,   40,  343,   40,
+       40,   40,   40,   40,   40,   40,  349,   40,   40,  350,
+       40,  351,  352,  353,  357,   40,   40,  360,  354,  356,
+      358,  362,  359,   40,  364,  355,   40,   40,  363,   40,
+       40,   40,  361,   40,   40,   40,   40,   40,  366,   40,
+      371,  374,   40,   40,  369,   40,  367,   40,  370,  365,
+
+      372,   40,  378,  368,   40,  376,   40,   40,  373,   40,
+      377,   40,  379,  381,   40,   40,  383,   40,  375,   40,
+       40,   40,   40,   40,  380,   40,  384,  386,  387,  391,
+      388,   40,  385,   40,  394,  382,  389,   40,  390,   40,
+      393,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,  392,  395,   37,   37,   37,   37,   39,   39,   50,
+       40,   50,   50,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,   40,   40,   40,   40,  188,   40,   40,   40,   40,
+      107,   40,   38,  396,    3,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396
+    } ;
+
+static yyconst short int yy_chk[877] =
+    {   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,    9,   29,    9,    9,   10,   10,   11,   11,   11,
+       12,   29,   55,   12,   13,   13,   13,   13,   14,   14,
+       14,   14,   16,   55,   18,   17,   34,   19,   81,   18,
+       16,   18,   20,   81,   17,   34,   19,   16,   17,   16,
+       19,   16,   18,   17,   13,   19,   17,   21,   22,   20,
+       23,   24,   21,   25,   26,   27,   24,   22,   25,   20,
+
+       52,   28,   21,   22,   24,   31,   23,   23,   21,   24,
+       31,   54,   26,   28,   27,   52,   27,   25,   26,   28,
+       30,   35,   30,   31,   33,   57,   31,   36,   30,   33,
+       54,   30,   46,   31,   30,   46,   36,   42,   42,   35,
+       43,   43,   33,   57,   68,   30,   30,   51,   30,   32,
+       59,   32,   44,   44,   44,   51,   56,   32,   45,   45,
+       45,   45,   68,  401,   32,   59,   32,   56,   32,   47,
+       47,   47,   59,   32,   47,   48,   48,   48,   48,   53,
+       47,   49,   49,   49,   63,   49,   49,   53,   49,   49,
+       49,   49,   49,   49,   60,   61,   62,   64,   65,   69,
+
+       66,   60,   67,   62,   70,   73,   65,   66,   69,   63,
+       61,   71,   61,   72,   74,   62,   75,   67,   79,   77,
+       74,   64,   78,   66,   67,   80,   76,   70,   73,   71,
+       73,   76,   72,   75,   77,   83,   84,   78,   85,   75,
+       80,   79,   86,   76,   87,   88,   90,   91,   83,   84,
+       92,  130,   89,   91,   85,   96,   97,  130,   93,   98,
+       88,   85,   95,   92,   90,   99,  101,   89,   88,   86,
+       89,   93,   87,   89,   96,   95,   98,  100,  101,   93,
+      103,  105,  399,   99,   97,  100,   95,  102,  106,  104,
+      100,  102,  102,  103,  104,  103,  109,  109,  100,  118,
+
+      110,  110,  105,  100,  102,  110,  116,  121,  118,  106,
+      122,  110,  112,  112,  112,  113,  113,  112,  113,  113,
+      113,  119,  121,  112,  116,  122,  123,  125,  126,  127,
+      128,  132,  133,  131,  119,  125,  134,  135,  136,  137,
+      132,  133,  138,  136,  127,  128,  131,  139,  137,  123,
+      126,  138,  140,  139,  141,  142,  143,  144,  134,  145,
+      135,  146,  148,  141,  147,  143,  151,  140,  152,  146,
+      154,  144,  158,  142,  159,  147,  167,  148,  183,  178,
+      166,  151,  145,  159,  162,  164,  183,  154,  152,  157,
+      157,  167,  178,  157,  157,  158,  157,  157,  157,  157,
+
+      157,  157,  160,  166,  168,  162,  164,  169,  172,  170,
+      173,  160,  171,  160,  175,  168,  177,  160,  170,  160,
+      174,  171,  176,  175,  179,  177,  169,  180,  181,  182,
+      184,  172,  180,  173,  185,  184,  187,  174,  182,  176,
+      189,  189,  179,  190,  190,  189,  190,  190,  185,  181,
+      195,  189,  191,  191,  187,  192,  192,  192,  193,  193,
+      193,  194,  196,  200,  201,  203,  202,  195,  194,  204,
+      200,  202,  205,  206,  207,  209,  208,  205,  203,  196,
+      210,  212,  209,  213,  204,  208,  215,  201,  213,  214,
+      216,  217,  206,  218,  219,  207,  212,  222,  214,  224,
+
+      229,  225,  395,  210,  216,  227,  217,  215,  233,  219,
+      228,  218,  230,  231,  227,  222,  232,  228,  234,  235,
+      229,  230,  231,  224,  225,  232,  235,  234,  237,  238,
+      241,  233,  243,  245,  247,  230,  231,  237,  244,  241,
+      246,  248,  249,  243,  238,  246,  245,  250,  244,  251,
+      253,  247,  255,  256,  256,  257,  258,  262,  250,  260,
+      257,  264,  248,  249,  258,  255,  260,  261,  263,  265,
+      264,  266,  261,  253,  263,  267,  251,  269,  262,  271,
+      272,  273,  274,  277,  269,  393,  265,  275,  271,  278,
+      283,  293,  267,  280,  266,  272,  275,  273,  278,  274,
+
+      277,  279,  280,  281,  292,  298,  294,  301,  279,  302,
+      299,  300,  281,  283,  293,  294,  292,  299,  304,  300,
+      302,  305,  306,  308,  311,  310,  312,  316,  298,  318,
+      301,  320,  316,  311,  305,  327,  308,  323,  321,  306,
+      320,  304,  310,  321,  323,  318,  332,  338,  312,  333,
+      339,  340,  341,  346,  344,  345,  327,  347,  348,  332,
+      349,  333,  338,  339,  345,  352,  350,  348,  340,  344,
+      346,  350,  347,  351,  352,  341,  353,  354,  351,  357,
+      358,  361,  349,  362,  363,  367,  368,  365,  354,  369,
+      363,  368,  370,  373,  361,  371,  357,  372,  362,  353,
+
+      365,  374,  372,  358,  375,  370,  376,  377,  367,  379,
+      371,  378,  373,  375,  380,  385,  377,  384,  369,  382,
+      386,  387,  388,  390,  374,  392,  378,  380,  382,  387,
+      384,  394,  379,  391,  392,  376,  385,  389,  386,  383,
+      390,  381,  366,  364,  360,  359,  356,  355,  343,  342,
+      337,  388,  394,  397,  397,  397,  397,  398,  398,  400,
+      336,  400,  400,  335,  334,  331,  330,  329,  328,  326,
+      325,  324,  322,  319,  317,  315,  314,  313,  309,  307,
+      303,  297,  296,  295,  291,  290,  289,  288,  287,  286,
+      285,  284,  282,  276,  270,  268,  259,  254,  252,  242,
+
+      240,  239,  236,  223,  221,  220,  211,  199,  198,  197,
+      186,  165,  163,  161,  156,  155,  153,  150,  149,  129,
+      124,  120,  117,  115,  111,  107,   94,   82,   58,   39,
+       37,    8,    7,    3,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396,  396,  396,  396,  396,
+      396,  396,  396,  396,  396,  396
+    } ;
+
+static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+static char *yy_full_match;
+static int yy_lp;
+#define REJECT \
+{ \
+*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
+yy_cp = yy_full_match; /* restore poss. backed-over text */ \
+++yy_lp; \
+goto find_rule; \
+}
+#define yymore() yymore_used_but_not_detected
+#define YY_MORE_ADJ 0
+#define YY_RESTORE_YY_MORE_OFFSET
+char *yytext;
+#line 1 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+#define INITIAL 0
+/*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by the LLVM research group and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file implements the flex scanner for LLVM assembly languages files.
+//
+//===----------------------------------------------------------------------===*/
+#define YY_NEVER_INTERACTIVE 1
+#line 28 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+#include "ParserInternals.h"
+#include "llvm/Module.h"
+#include <list>
+#include "llvmAsmParser.h"
+#include <cctype>
+#include <cstdlib>
+
+void set_scan_file(FILE * F){
+  yy_switch_to_buffer(yy_create_buffer( F, YY_BUF_SIZE ) );
+}
+void set_scan_string (const char * str) {
+  yy_scan_string (str);
+}
+
+#define RET_TOK(type, Enum, sym) \
+  llvmAsmlval.type = Instruction::Enum; return sym
+
+namespace llvm {
+
+// TODO: All of the static identifiers are figured out by the lexer,
+// these should be hashed to reduce the lexer size
+
+
+// atoull - Convert an ascii string of decimal digits into the unsigned long
+// long representation... this does not have to do input error checking,
+// because we know that the input will be matched by a suitable regex...
+//
+static uint64_t atoull(const char *Buffer) {
+  uint64_t Result = 0;
+  for (; *Buffer; Buffer++) {
+    uint64_t OldRes = Result;
+    Result *= 10;
+    Result += *Buffer-'0';
+    if (Result < OldRes)   // Uh, oh, overflow detected!!!
+      ThrowException("constant bigger than 64 bits detected!");
+  }
+  return Result;
+}
+
+static uint64_t HexIntToVal(const char *Buffer) {
+  uint64_t Result = 0;
+  for (; *Buffer; ++Buffer) {
+    uint64_t OldRes = Result;
+    Result *= 16;
+    char C = *Buffer;
+    if (C >= '0' && C <= '9')
+      Result += C-'0';
+    else if (C >= 'A' && C <= 'F')
+      Result += C-'A'+10;
+    else if (C >= 'a' && C <= 'f')
+      Result += C-'a'+10;
+
+    if (Result < OldRes)   // Uh, oh, overflow detected!!!
+      ThrowException("constant bigger than 64 bits detected!");
+  }
+  return Result;
+}
+
+
+// HexToFP - Convert the ascii string in hexidecimal format to the floating
+// point representation of it.
+//
+static double HexToFP(const char *Buffer) {
+  // Behave nicely in the face of C TBAA rules... see:
+  // http://www.nullstone.com/htmls/category/aliastyp.htm
+  union {
+    uint64_t UI;
+    double FP;
+  } UIntToFP;
+  UIntToFP.UI = HexIntToVal(Buffer);
+
+  assert(sizeof(double) == sizeof(uint64_t) &&
+         "Data sizes incompatible on this target!");
+  return UIntToFP.FP;   // Cast Hex constant to double
+}
+
+
+// UnEscapeLexed - Run through the specified buffer and change \xx codes to the
+// appropriate character.  If AllowNull is set to false, a \00 value will cause
+// an exception to be thrown.
+//
+// If AllowNull is set to true, the return value of the function points to the
+// last character of the string in memory.
+//
+char *UnEscapeLexed(char *Buffer, bool AllowNull) {
+  char *BOut = Buffer;
+  for (char *BIn = Buffer; *BIn; ) {
+    if (BIn[0] == '\\' && isxdigit(BIn[1]) && isxdigit(BIn[2])) {
+      char Tmp = BIn[3]; BIn[3] = 0;     // Terminate string
+      *BOut = (char)strtol(BIn+1, 0, 16);  // Convert to number
+      if (!AllowNull && !*BOut)
+        ThrowException("String literal cannot accept \\00 escape!");
+
+      BIn[3] = Tmp;                  // Restore character
+      BIn += 3;                      // Skip over handled chars
+      ++BOut;
+    } else {
+      *BOut++ = *BIn++;
+    }
+  }
+
+  return BOut;
+}
+
+} // End llvm namespace
+
+using namespace llvm;
+
+#define YY_NEVER_INTERACTIVE 1
+/* Comments start with a ; and go till end of line */
+/* Variable(Value) identifiers start with a % sign */
+/* Label identifiers end with a colon */
+/* Quoted names can contain any character except " and \ */
+/* [PN]Integer: match positive and negative literal integer values that
+ * are preceeded by a '%' character.  These represent unnamed variable slots.
+ */
+/* E[PN]Integer: match positive and negative literal integer values */
+/* FPConstant - A Floating point constant.
+ */
+/* HexFPConstant - Floating point constant represented in IEEE format as a
+ *  hexadecimal number for when exponential notation is not precise enough.
+ */
+/* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
+ * it to deal with 64 bit numbers.
+ */
+#line 879 "Lexer.cpp"
+
+/* 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 inline 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 if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+		  && ferror( yyin ) ) \
+		YY_FATAL_ERROR( "input in flex scanner failed" );
+#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 = NULL, *yy_bp = NULL;
+	register int yy_act;
+
+#line 179 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+
+
+#line 1033 "Lexer.cpp"
+
+	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_state_ptr = yy_state_buf;
+		*yy_state_ptr++ = yy_current_state;
+yy_match:
+		do
+			{
+			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*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 >= 397 )
+					yy_c = yy_meta[(unsigned int) yy_c];
+				}
+			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+			*yy_state_ptr++ = yy_current_state;
+			++yy_cp;
+			}
+		while ( yy_current_state != 396 );
+
+yy_find_action:
+		yy_current_state = *--yy_state_ptr;
+		yy_lp = yy_accept[yy_current_state];
+find_rule: /* we branch to this label when backing up */
+		for ( ; ; ) /* until we find what rule we matched */
+			{
+			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
+				{
+				yy_act = yy_acclist[yy_lp];
+					{
+					yy_full_match = yy_cp;
+					break;
+					}
+				}
+			--yy_cp;
+			yy_current_state = *--yy_state_ptr;
+			yy_lp = yy_accept[yy_current_state];
+			}
+
+		YY_DO_BEFORE_ACTION;
+
+		if ( yy_act != YY_END_OF_BUFFER )
+			{
+			int yyl;
+			for ( yyl = 0; yyl < yyleng; ++yyl )
+				if ( yytext[yyl] == '\n' )
+					++yylineno;
+			}
+
+do_action:	/* This label is used only to access EOF actions. */
+
+
+		switch ( yy_act )
+	{ /* beginning of action switch */
+case 1:
+YY_RULE_SETUP
+#line 181 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ /* Ignore comments for now */ }
+	YY_BREAK
+case 2:
+YY_RULE_SETUP
+#line 183 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return BEGINTOK; }
+	YY_BREAK
+case 3:
+YY_RULE_SETUP
+#line 184 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return ENDTOK; }
+	YY_BREAK
+case 4:
+YY_RULE_SETUP
+#line 185 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TRUETOK;  }
+	YY_BREAK
+case 5:
+YY_RULE_SETUP
+#line 186 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return FALSETOK; }
+	YY_BREAK
+case 6:
+YY_RULE_SETUP
+#line 187 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return DECLARE; }
+	YY_BREAK
+case 7:
+YY_RULE_SETUP
+#line 188 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return GLOBAL; }
+	YY_BREAK
+case 8:
+YY_RULE_SETUP
+#line 189 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return CONSTANT; }
+	YY_BREAK
+case 9:
+YY_RULE_SETUP
+#line 190 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return INTERNAL; }
+	YY_BREAK
+case 10:
+YY_RULE_SETUP
+#line 191 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return LINKONCE; }
+	YY_BREAK
+case 11:
+YY_RULE_SETUP
+#line 192 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return WEAK; }
+	YY_BREAK
+case 12:
+YY_RULE_SETUP
+#line 193 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return APPENDING; }
+	YY_BREAK
+case 13:
+YY_RULE_SETUP
+#line 194 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return EXTERNAL; }    /* Deprecated, turn into external */
+	YY_BREAK
+case 14:
+YY_RULE_SETUP
+#line 195 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return EXTERNAL; }
+	YY_BREAK
+case 15:
+YY_RULE_SETUP
+#line 196 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return IMPLEMENTATION; }
+	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 197 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return ZEROINITIALIZER; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 198 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return DOTDOTDOT; }
+	YY_BREAK
+case 18:
+YY_RULE_SETUP
+#line 199 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return UNDEF; }
+	YY_BREAK
+case 19:
+YY_RULE_SETUP
+#line 200 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return NULL_TOK; }
+	YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 201 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TO; }
+	YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 202 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unwind, UNWIND); }
+	YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 203 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return NOT; }  /* Deprecated, turned into XOR */
+	YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 204 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TAIL; }
+	YY_BREAK
+case 24:
+YY_RULE_SETUP
+#line 205 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TARGET; }
+	YY_BREAK
+case 25:
+YY_RULE_SETUP
+#line 206 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TRIPLE; }
+	YY_BREAK
+case 26:
+YY_RULE_SETUP
+#line 207 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return DEPLIBS; }
+	YY_BREAK
+case 27:
+YY_RULE_SETUP
+#line 208 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return ENDIAN; }
+	YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 209 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return POINTERSIZE; }
+	YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 210 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return LITTLE; }
+	YY_BREAK
+case 30:
+YY_RULE_SETUP
+#line 211 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return BIG; }
+	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 212 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return VOLATILE; }
+	YY_BREAK
+case 32:
+YY_RULE_SETUP
+#line 214 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return CC_TOK; }
+	YY_BREAK
+case 33:
+YY_RULE_SETUP
+#line 215 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return CCC_TOK; }
+	YY_BREAK
+case 34:
+YY_RULE_SETUP
+#line 216 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return FASTCC_TOK; }
+	YY_BREAK
+case 35:
+YY_RULE_SETUP
+#line 217 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return COLDCC_TOK; }
+	YY_BREAK
+case 36:
+YY_RULE_SETUP
+#line 219 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::VoidTy  ; return VOID;   }
+	YY_BREAK
+case 37:
+YY_RULE_SETUP
+#line 220 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::BoolTy  ; return BOOL;   }
+	YY_BREAK
+case 38:
+YY_RULE_SETUP
+#line 221 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::SByteTy ; return SBYTE;  }
+	YY_BREAK
+case 39:
+YY_RULE_SETUP
+#line 222 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::UByteTy ; return UBYTE;  }
+	YY_BREAK
+case 40:
+YY_RULE_SETUP
+#line 223 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::ShortTy ; return SHORT;  }
+	YY_BREAK
+case 41:
+YY_RULE_SETUP
+#line 224 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::UShortTy; return USHORT; }
+	YY_BREAK
+case 42:
+YY_RULE_SETUP
+#line 225 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::IntTy   ; return INT;    }
+	YY_BREAK
+case 43:
+YY_RULE_SETUP
+#line 226 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::UIntTy  ; return UINT;   }
+	YY_BREAK
+case 44:
+YY_RULE_SETUP
+#line 227 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::LongTy  ; return LONG;   }
+	YY_BREAK
+case 45:
+YY_RULE_SETUP
+#line 228 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::ULongTy ; return ULONG;  }
+	YY_BREAK
+case 46:
+YY_RULE_SETUP
+#line 229 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::FloatTy ; return FLOAT;  }
+	YY_BREAK
+case 47:
+YY_RULE_SETUP
+#line 230 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::DoubleTy; return DOUBLE; }
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 231 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.PrimType = Type::LabelTy ; return LABEL;  }
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 232 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return TYPE;   }
+	YY_BREAK
+case 50:
+YY_RULE_SETUP
+#line 233 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return OPAQUE; }
+	YY_BREAK
+case 51:
+YY_RULE_SETUP
+#line 235 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Add, ADD); }
+	YY_BREAK
+case 52:
+YY_RULE_SETUP
+#line 236 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Sub, SUB); }
+	YY_BREAK
+case 53:
+YY_RULE_SETUP
+#line 237 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Mul, MUL); }
+	YY_BREAK
+case 54:
+YY_RULE_SETUP
+#line 238 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Div, DIV); }
+	YY_BREAK
+case 55:
+YY_RULE_SETUP
+#line 239 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Rem, REM); }
+	YY_BREAK
+case 56:
+YY_RULE_SETUP
+#line 240 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, And, AND); }
+	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 241 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Or , OR ); }
+	YY_BREAK
+case 58:
+YY_RULE_SETUP
+#line 242 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, Xor, XOR); }
+	YY_BREAK
+case 59:
+YY_RULE_SETUP
+#line 243 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetNE, SETNE); }
+	YY_BREAK
+case 60:
+YY_RULE_SETUP
+#line 244 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
+	YY_BREAK
+case 61:
+YY_RULE_SETUP
+#line 245 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetLT, SETLT); }
+	YY_BREAK
+case 62:
+YY_RULE_SETUP
+#line 246 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetGT, SETGT); }
+	YY_BREAK
+case 63:
+YY_RULE_SETUP
+#line 247 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetLE, SETLE); }
+	YY_BREAK
+case 64:
+YY_RULE_SETUP
+#line 248 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(BinaryOpVal, SetGE, SETGE); }
+	YY_BREAK
+case 65:
+YY_RULE_SETUP
+#line 250 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, PHI, PHI_TOK); }
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 251 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Call, CALL); }
+	YY_BREAK
+case 67:
+YY_RULE_SETUP
+#line 252 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Cast, CAST); }
+	YY_BREAK
+case 68:
+YY_RULE_SETUP
+#line 253 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Select, SELECT); }
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+#line 254 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Shl, SHL); }
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+#line 255 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, Shr, SHR); }
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 256 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return VANEXT_old; }
+	YY_BREAK
+case 72:
+YY_RULE_SETUP
+#line 257 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return VAARG_old; }
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 258 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, VAArg , VAARG); }
+	YY_BREAK
+case 74:
+YY_RULE_SETUP
+#line 259 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Ret, RET); }
+	YY_BREAK
+case 75:
+YY_RULE_SETUP
+#line 260 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Br, BR); }
+	YY_BREAK
+case 76:
+YY_RULE_SETUP
+#line 261 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Switch, SWITCH); }
+	YY_BREAK
+case 77:
+YY_RULE_SETUP
+#line 262 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Invoke, INVOKE); }
+	YY_BREAK
+case 78:
+YY_RULE_SETUP
+#line 263 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unwind, UNWIND); }
+	YY_BREAK
+case 79:
+YY_RULE_SETUP
+#line 264 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
+	YY_BREAK
+case 80:
+YY_RULE_SETUP
+#line 266 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Malloc, MALLOC); }
+	YY_BREAK
+case 81:
+YY_RULE_SETUP
+#line 267 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
+	YY_BREAK
+case 82:
+YY_RULE_SETUP
+#line 268 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Free, FREE); }
+	YY_BREAK
+case 83:
+YY_RULE_SETUP
+#line 269 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Load, LOAD); }
+	YY_BREAK
+case 84:
+YY_RULE_SETUP
+#line 270 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Store, STORE); }
+	YY_BREAK
+case 85:
+YY_RULE_SETUP
+#line 271 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
+	YY_BREAK
+case 86:
+YY_RULE_SETUP
+#line 274 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  UnEscapeLexed(yytext+1);
+                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
+                  return VAR_ID;
+                }
+	YY_BREAK
+case 87:
+YY_RULE_SETUP
+#line 279 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  yytext[strlen(yytext)-1] = 0;  // nuke colon
+                  UnEscapeLexed(yytext);
+                  llvmAsmlval.StrVal = strdup(yytext);
+                  return LABELSTR;
+                }
+	YY_BREAK
+case 88:
+YY_RULE_SETUP
+#line 285 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
+                  UnEscapeLexed(yytext+1);
+                  llvmAsmlval.StrVal = strdup(yytext+1);
+                  return LABELSTR;
+                }
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 292 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ // Note that we cannot unescape a string constant here!  The
+                   // string constant might contain a \00 which would not be
+                   // understood by the string stuff.  It is valid to make a
+                   // [sbyte] c"Hello World\00" constant, for example.
+                   //
+                   yytext[strlen(yytext)-1] = 0;           // nuke end quote
+                   llvmAsmlval.StrVal = strdup(yytext+1);  // Nuke start quote
+                   return STRINGCONSTANT;
+                 }
+	YY_BREAK
+case 90:
+YY_RULE_SETUP
+#line 303 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
+	YY_BREAK
+case 91:
+YY_RULE_SETUP
+#line 304 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  uint64_t Val = atoull(yytext+1);
+                  // +1:  we have bigger negative range
+                  if (Val > (uint64_t)INT64_MAX+1)
+                    ThrowException("Constant too large for signed 64 bits!");
+                  llvmAsmlval.SInt64Val = -Val;
+                  return ESINT64VAL;
+                }
+	YY_BREAK
+case 92:
+YY_RULE_SETUP
+#line 312 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                   llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
+                   return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
+                 }
+	YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 317 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  uint64_t Val = atoull(yytext+1);
+                  if ((unsigned)Val != Val)
+                    ThrowException("Invalid value number (too large)!");
+                  llvmAsmlval.UIntVal = unsigned(Val);
+                  return UINTVAL;
+                }
+	YY_BREAK
+case 94:
+YY_RULE_SETUP
+#line 324 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  uint64_t Val = atoull(yytext+2);
+                  // +1:  we have bigger negative range
+                  if (Val > (uint64_t)INT32_MAX+1)
+                    ThrowException("Constant too large for signed 32 bits!");
+                  llvmAsmlval.SIntVal = (int)-Val;
+                  return SINTVAL;
+                }
+	YY_BREAK
+case 95:
+YY_RULE_SETUP
+#line 333 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
+	YY_BREAK
+case 96:
+YY_RULE_SETUP
+#line 334 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
+	YY_BREAK
+case YY_STATE_EOF(INITIAL):
+#line 336 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{
+                  /* Make sure to free the internal buffers for flex when we are
+                   * done reading our input!
+                   */
+                  yy_delete_buffer(YY_CURRENT_BUFFER);
+                  return EOF;
+                }
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 344 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ /* Ignore whitespace */ }
+	YY_BREAK
+case 98:
+YY_RULE_SETUP
+#line 345 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+{ return yytext[0]; }
+	YY_BREAK
+case 99:
+YY_RULE_SETUP
+#line 347 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+YY_FATAL_ERROR( "flex scanner jammed" );
+	YY_BREAK
+#line 1674 "Lexer.cpp"
+
+	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;
+	yy_state_ptr = yy_state_buf;
+	*yy_state_ptr++ = yy_current_state;
+
+	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);
+		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 >= 397 )
+				yy_c = yy_meta[(unsigned int) yy_c];
+			}
+		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+		*yy_state_ptr++ = yy_current_state;
+		}
+
+	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 YY_CHAR yy_c = 1;
+	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 >= 397 )
+			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 == 396);
+	if ( ! yy_is_jam )
+		*yy_state_ptr++ = yy_current_state;
+
+	return yy_is_jam ? 0 : yy_current_state;
+	}
+
+
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static inline void yyunput( int c, register char *yy_bp )
+#else
+static inline 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;
+
+	if ( c == '\n' )
+		--yylineno;
+
+	yytext_ptr = yy_bp;
+	yy_hold_char = *yy_cp;
+	yy_c_buf_p = yy_cp;
+	}
+#endif	/* ifndef YY_NO_UNPUT */
+
+
+#ifndef YY_NO_INPUT
+#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;
+
+	if ( c == '\n' )
+		++yylineno;
+
+	return c;
+	}
+#endif /* YY_NO_INPUT */
+
+#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 );
+	}
+
+
+
+#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 inline void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static inline 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 347 "/proj/llvm/build/../llvm/lib/AsmParser/Lexer.l"
+
