17ec681f3Smrg%option yylineno
27ec681f3Smrg%option nounput
37ec681f3Smrg%{
47ec681f3Smrg#include <string.h>
57ec681f3Smrg#include "i965_asm.h"
67ec681f3Smrg#undef ALIGN16
77ec681f3Smrg#include "i965_gram.tab.h"
87ec681f3Smrg
97ec681f3Smrg/* Locations */
107ec681f3Smrgint yycolumn = 1;
117ec681f3Smrg
127ec681f3Smrgint saved_state = 0;
137ec681f3Smrgextern char *input_filename;
147ec681f3Smrg
157ec681f3Smrg#define YY_NO_INPUT
167ec681f3Smrg#define YY_USER_ACTION                                  	\
177ec681f3Smrg	yylloc.first_line = yylloc.last_line = yylineno;	\
187ec681f3Smrg	yylloc.first_column = yycolumn;			        \
197ec681f3Smrg	yylloc.last_column = yycolumn + yyleng - 1;	        \
207ec681f3Smrg	yycolumn += yyleng;
217ec681f3Smrg%}
227ec681f3Smrg
237ec681f3Smrg%x BLOCK_COMMENT
247ec681f3Smrg%x FILENAME
257ec681f3Smrg%x CHANNEL
267ec681f3Smrg%x REG
277ec681f3Smrg%x DOTSEL
287ec681f3Smrg%x LABEL
297ec681f3Smrg%%
307ec681f3Smrg
317ec681f3Smrg /* eat up single line comment */
327ec681f3Smrg\/\/.*[\r\n]	{ yycolumn = 1; }
337ec681f3Smrg
347ec681f3Smrg /* eat up multiline comment */
357ec681f3Smrg\/\*		{ saved_state = YYSTATE; BEGIN(BLOCK_COMMENT); }
367ec681f3Smrg
377ec681f3Smrg<BLOCK_COMMENT>\*\/	{ BEGIN(saved_state); }
387ec681f3Smrg
397ec681f3Smrg<BLOCK_COMMENT>.     	{ }
407ec681f3Smrg<BLOCK_COMMENT>[\r\n]	{ }
417ec681f3Smrg
427ec681f3Smrg<FILENAME>\"[^\"]+\"	{
437ec681f3Smrg			   char *name = malloc(yyleng - 1);
447ec681f3Smrg			   memmove(name, yytext + 1, yyleng - 2);
457ec681f3Smrg			   name[yyleng-1] = '\0';
467ec681f3Smrg			   input_filename = name;
477ec681f3Smrg			}
487ec681f3Smrg
497ec681f3Smrg /* null register */
507ec681f3Smrgnull 		{ BEGIN(REG); return NULL_TOKEN; }
517ec681f3Smrg
527ec681f3Smrg /* Opcodes */
537ec681f3Smrgadd		{ yylval.integer = BRW_OPCODE_ADD; return ADD; }
547ec681f3Smrgaddc		{ yylval.integer = BRW_OPCODE_ADDC; return ADDC; }
557ec681f3Smrgand		{ yylval.integer = BRW_OPCODE_AND; return AND; }
567ec681f3Smrgasr		{ yylval.integer = BRW_OPCODE_ASR; return ASR; }
577ec681f3Smrgavg		{ yylval.integer = BRW_OPCODE_AVG; return AVG; }
587ec681f3Smrgbfe 		{ yylval.integer = BRW_OPCODE_BFE; return BFE; }
597ec681f3Smrgbfi1 		{ yylval.integer = BRW_OPCODE_BFI1; return BFI1; }
607ec681f3Smrgbfi2 		{ yylval.integer = BRW_OPCODE_BFI2; return BFI2; }
617ec681f3Smrgbfrev 		{ yylval.integer = BRW_OPCODE_BFREV; return BFREV; }
627ec681f3Smrgbrc 		{ yylval.integer = BRW_OPCODE_BRC; return BRC; }
637ec681f3Smrgbrd 		{ yylval.integer = BRW_OPCODE_BRD; return BRD; }
647ec681f3Smrgbreak 		{ yylval.integer = BRW_OPCODE_BREAK; return BREAK; }
657ec681f3Smrgcall 		{ yylval.integer = BRW_OPCODE_CALL; return CALL; }
667ec681f3Smrgcalla 		{ yylval.integer = BRW_OPCODE_CALLA; return CALLA; }
677ec681f3Smrgcase 		{ yylval.integer = BRW_OPCODE_CASE; return CASE; }
687ec681f3Smrgcbit 		{ yylval.integer = BRW_OPCODE_CBIT; return CBIT; }
697ec681f3Smrgcmp 		{ yylval.integer = BRW_OPCODE_CMP; return CMP; }
707ec681f3Smrgcmpn 		{ yylval.integer = BRW_OPCODE_CMPN; return CMPN; }
717ec681f3Smrgcont 		{ yylval.integer = BRW_OPCODE_CONTINUE; return CONT; }
727ec681f3Smrgcsel 		{ yylval.integer = BRW_OPCODE_CSEL; return CSEL; }
737ec681f3Smrgdim 		{ yylval.integer = BRW_OPCODE_DIM; return DIM; }
747ec681f3Smrgdo 		{ yylval.integer = BRW_OPCODE_DO; return DO; }
757ec681f3Smrgdp2 		{ yylval.integer = BRW_OPCODE_DP2; return DP2; }
767ec681f3Smrgdp3 		{ yylval.integer = BRW_OPCODE_DP3; return DP3; }
777ec681f3Smrgdp4 		{ yylval.integer = BRW_OPCODE_DP4; return DP4; }
787ec681f3Smrgdph 		{ yylval.integer = BRW_OPCODE_DPH; return DPH; }
797ec681f3Smrgelse 		{ yylval.integer = BRW_OPCODE_ELSE; return ELSE; }
807ec681f3Smrgendif 		{ yylval.integer = BRW_OPCODE_ENDIF; return ENDIF; }
817ec681f3Smrgf16to32 	{ yylval.integer = BRW_OPCODE_F16TO32; return F16TO32; }
827ec681f3Smrgf32to16 	{ yylval.integer = BRW_OPCODE_F32TO16; return F32TO16; }
837ec681f3Smrgfbh 		{ yylval.integer = BRW_OPCODE_FBH; return FBH; }
847ec681f3Smrgfbl 		{ yylval.integer = BRW_OPCODE_FBL; return FBL; }
857ec681f3Smrgfork 		{ yylval.integer = BRW_OPCODE_FORK; return FORK; }
867ec681f3Smrgfrc 		{ yylval.integer = BRW_OPCODE_FRC; return FRC; }
877ec681f3Smrggoto 		{ yylval.integer = BRW_OPCODE_GOTO; return GOTO; }
887ec681f3Smrghalt 		{ yylval.integer = BRW_OPCODE_HALT; return HALT; }
897ec681f3Smrgif 		{ yylval.integer = BRW_OPCODE_IF; return IF; }
907ec681f3Smrgiff 		{ yylval.integer = BRW_OPCODE_IFF; return IFF; }
917ec681f3Smrgillegal 	{ yylval.integer = BRW_OPCODE_ILLEGAL; return ILLEGAL; }
927ec681f3Smrgjmpi 		{ yylval.integer = BRW_OPCODE_JMPI; return JMPI; }
937ec681f3Smrgline 		{ yylval.integer = BRW_OPCODE_LINE; return LINE; }
947ec681f3Smrglrp 		{ yylval.integer = BRW_OPCODE_LRP; return LRP; }
957ec681f3Smrglzd 		{ yylval.integer = BRW_OPCODE_LZD; return LZD; }
967ec681f3Smrgmac 		{ yylval.integer = BRW_OPCODE_MAC; return MAC; }
977ec681f3Smrgmach 		{ yylval.integer = BRW_OPCODE_MACH; return MACH; }
987ec681f3Smrgmad 		{ yylval.integer = BRW_OPCODE_MAD; return MAD; }
997ec681f3Smrgmadm 		{ yylval.integer = BRW_OPCODE_MADM; return MADM; }
1007ec681f3Smrgmov 		{ yylval.integer = BRW_OPCODE_MOV; return MOV; }
1017ec681f3Smrgmovi 		{ yylval.integer = BRW_OPCODE_MOVI; return MOVI; }
1027ec681f3Smrgmul 		{ yylval.integer = BRW_OPCODE_MUL; return MUL; }
1037ec681f3Smrgmrest 		{ yylval.integer = BRW_OPCODE_MREST; return MREST; }
1047ec681f3Smrgmsave 		{ yylval.integer = BRW_OPCODE_MSAVE; return MSAVE; }
1057ec681f3Smrgnenop 		{ yylval.integer = BRW_OPCODE_NENOP; return NENOP; }
1067ec681f3Smrgnop 		{ yylval.integer = BRW_OPCODE_NOP; return NOP; }
1077ec681f3Smrgnot 		{ yylval.integer = BRW_OPCODE_NOT; return NOT; }
1087ec681f3Smrgor 		{ yylval.integer = BRW_OPCODE_OR; return OR; }
1097ec681f3Smrgpln 		{ yylval.integer = BRW_OPCODE_PLN; return PLN; }
1107ec681f3Smrgpop 		{ yylval.integer = BRW_OPCODE_POP; return POP; }
1117ec681f3Smrgpush 		{ yylval.integer = BRW_OPCODE_PUSH; return PUSH; }
1127ec681f3Smrgret 		{ yylval.integer = BRW_OPCODE_RET; return RET; }
1137ec681f3Smrgrndd 		{ yylval.integer = BRW_OPCODE_RNDD; return RNDD; }
1147ec681f3Smrgrnde 		{ yylval.integer = BRW_OPCODE_RNDE; return RNDE; }
1157ec681f3Smrgrndu 		{ yylval.integer = BRW_OPCODE_RNDU; return RNDU; }
1167ec681f3Smrgrndz 		{ yylval.integer = BRW_OPCODE_RNDZ; return RNDZ; }
1177ec681f3Smrgrol 		{ yylval.integer = BRW_OPCODE_ROL; return ROL; }
1187ec681f3Smrgror 		{ yylval.integer = BRW_OPCODE_ROR; return ROR; }
1197ec681f3Smrgsad2 		{ yylval.integer = BRW_OPCODE_SAD2; return SAD2; }
1207ec681f3Smrgsada2 		{ yylval.integer = BRW_OPCODE_SADA2; return SADA2; }
1217ec681f3Smrgsel 		{ yylval.integer = BRW_OPCODE_SEL; return SEL; }
1227ec681f3Smrgsend 		{ yylval.integer = BRW_OPCODE_SEND; return SEND; }
1237ec681f3Smrgsendc 		{ yylval.integer = BRW_OPCODE_SENDC; return SENDC; }
1247ec681f3Smrgsends 	        { yylval.integer = BRW_OPCODE_SENDS; return SENDS; }
1257ec681f3Smrgsendsc        	{ yylval.integer = BRW_OPCODE_SENDSC; return SENDSC; }
1267ec681f3Smrgshl 		{ yylval.integer = BRW_OPCODE_SHL; return SHL; }
1277ec681f3Smrgshr 		{ yylval.integer = BRW_OPCODE_SHR; return SHR; }
1287ec681f3Smrgsmov 		{ yylval.integer = BRW_OPCODE_SMOV; return SMOV; }
1297ec681f3Smrgsubb 		{ yylval.integer = BRW_OPCODE_SUBB; return SUBB; }
1307ec681f3Smrgwait 		{ yylval.integer = BRW_OPCODE_WAIT; return WAIT; }
1317ec681f3Smrgwhile 		{ yylval.integer = BRW_OPCODE_WHILE; return WHILE; }
1327ec681f3Smrgxor 		{ yylval.integer = BRW_OPCODE_XOR; return XOR; }
1337ec681f3Smrg
1347ec681f3Smrg /* extended math functions */
1357ec681f3Smrgcos 		{ yylval.integer = BRW_MATH_FUNCTION_COS; return COS; }
1367ec681f3Smrgexp 		{ yylval.integer = BRW_MATH_FUNCTION_EXP; return EXP; }
1377ec681f3Smrgfdiv 		{ yylval.integer = BRW_MATH_FUNCTION_FDIV; return FDIV; }
1387ec681f3Smrginv 		{ yylval.integer = BRW_MATH_FUNCTION_INV; return INV; }
1397ec681f3Smrginvm 		{ yylval.integer = GFX8_MATH_FUNCTION_INVM; return INVM; }
1407ec681f3Smrgintdiv        	{
1417ec681f3Smrg		   yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT;
1427ec681f3Smrg		   return INTDIV;
1437ec681f3Smrg		}
1447ec681f3Smrgintdivmod    	{
1457ec681f3Smrg		   yylval.integer =
1467ec681f3Smrg		      BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER;
1477ec681f3Smrg		   return INTDIVMOD;
1487ec681f3Smrg		}
1497ec681f3Smrgintmod      	{
1507ec681f3Smrg		   yylval.integer = BRW_MATH_FUNCTION_INT_DIV_REMAINDER;
1517ec681f3Smrg		   return INTMOD;
1527ec681f3Smrg		}
1537ec681f3Smrglog 		{ yylval.integer = BRW_MATH_FUNCTION_LOG; return LOG; }
1547ec681f3Smrgpow 		{ yylval.integer = BRW_MATH_FUNCTION_POW; return POW; }
1557ec681f3Smrgrsq 		{ yylval.integer = BRW_MATH_FUNCTION_RSQ; return RSQ; }
1567ec681f3Smrgrsqrtm       	{ yylval.integer = GFX8_MATH_FUNCTION_RSQRTM; return RSQRTM; }
1577ec681f3Smrgsin 		{ yylval.integer = BRW_MATH_FUNCTION_SIN; return SIN; }
1587ec681f3Smrgsqrt 		{ yylval.integer = BRW_MATH_FUNCTION_SQRT; return SQRT; }
1597ec681f3Smrgsincos       	{ yylval.integer = BRW_MATH_FUNCTION_SINCOS; return SINCOS; }
1607ec681f3Smrg
1617ec681f3Smrg /* shared functions for send instruction */
1627ec681f3Smrgsampler 		{ return SAMPLER; }
1637ec681f3Smrgdp_sampler 		{ return DP_SAMPLER; }
1647ec681f3Smrggateway 		{ return GATEWAY; }
1657ec681f3Smrgurb 			{ return URB; }
1667ec681f3Smrgthread_spawner		{ return THREAD_SPAWNER; }
1677ec681f3Smrgrender            	{ return RENDER; }
1687ec681f3Smrgconst 			{ return CONST; }
1697ec681f3Smrgdata 			{ return DATA; }
1707ec681f3Smrgcre 			{ return CRE; }
1717ec681f3Smrgmath 			{ return MATH; }
1727ec681f3Smrgread 			{ return READ; }
1737ec681f3Smrgwrite 			{ return WRITE; }
1747ec681f3Smrgvme 			{ return VME; }
1757ec681f3Smrg"pixel interp"		{ return PIXEL_INTERP; }
1767ec681f3Smrg"dp data 1" 		{ return DP_DATA_1; }
1777ec681f3Smrg
1787ec681f3Smrg";"    	{ return SEMICOLON; }
1797ec681f3Smrg":"    	{ return COLON; }
1807ec681f3Smrg"("    	{ return LPAREN; }
1817ec681f3Smrg")"    	{ return RPAREN; }
1827ec681f3Smrg"{"    	{ return LCURLY; }
1837ec681f3Smrg"}"    	{ return RCURLY; }
1847ec681f3Smrg"["    	{ return LSQUARE; }
1857ec681f3Smrg"]"    	{ return RSQUARE; }
1867ec681f3Smrg"<"    	{ return LANGLE; }
1877ec681f3Smrg">"    	{ return RANGLE; }
1887ec681f3Smrg","    	{ return COMMA; }
1897ec681f3Smrg"."    	{ return DOT; }
1907ec681f3Smrg"+"    	{ return PLUS; }
1917ec681f3Smrg"-"    	{ return MINUS; }
1927ec681f3Smrg"~"    	{ return MINUS; }
1937ec681f3Smrg"(abs)"	{ return ABS; }
1947ec681f3Smrg
1957ec681f3Smrg
1967ec681f3Smrg"VxH"             	{ return VxH; }
1977ec681f3Smrg<REG>"<" 		{ return LANGLE; }
1987ec681f3Smrg<REG>[0-9][0-9]* 	{
1997ec681f3Smrg			   yylval.integer = strtoul(yytext, NULL, 10);
2007ec681f3Smrg			   return INTEGER;
2017ec681f3Smrg			}
2027ec681f3Smrg<REG>">" 		{ return RANGLE; }
2037ec681f3Smrg<REG>","		{ return COMMA; }
2047ec681f3Smrg<REG>"."		{ BEGIN(DOTSEL); return DOT; }
2057ec681f3Smrg<REG>";"		{ return SEMICOLON; }
2067ec681f3Smrg
2077ec681f3Smrg<DOTSEL>"x"	        { yylval.integer = BRW_CHANNEL_X; return X; }
2087ec681f3Smrg<DOTSEL>"y" 	        { yylval.integer = BRW_CHANNEL_Y; return Y; }
2097ec681f3Smrg<DOTSEL>"z" 	        { yylval.integer = BRW_CHANNEL_Z; return Z; }
2107ec681f3Smrg<DOTSEL>"w" 	        { yylval.integer = BRW_CHANNEL_W; return W; }
2117ec681f3Smrg<DOTSEL>[0-9][0-9]* 	{
2127ec681f3Smrg			   yylval.integer = strtoul(yytext, NULL, 10);
2137ec681f3Smrg			   BEGIN(REG);
2147ec681f3Smrg			   return INTEGER;
2157ec681f3Smrg		        }
2167ec681f3Smrg<DOTSEL>. 	        { yyless(0); BEGIN(INITIAL); }
2177ec681f3Smrg<REG>.             	{ yyless(0); BEGIN(INITIAL); }
2187ec681f3Smrg
2197ec681f3Smrg /* Access mode */
2207ec681f3Smrg"align1"	{ return ALIGN1; }
2217ec681f3Smrg"align16"	{ return ALIGN16; }
2227ec681f3Smrg
2237ec681f3Smrg /* Accumulator write control */
2247ec681f3SmrgAccWrEnable 	{ return ACCWREN; }
2257ec681f3Smrg
2267ec681f3Smrg /* Mask control (formerly WECtrl/Write Enable Control) */
2277ec681f3Smrg"WE_all"	{ return WECTRL; }
2287ec681f3Smrg
2297ec681f3Smrg /* Compaction control */
2307ec681f3Smrgcompacted 	{ return CMPTCTRL; }
2317ec681f3Smrg
2327ec681f3Smrg /* Debug control */
2337ec681f3Smrgbreakpoint 	{ return BREAKPOINT; }
2347ec681f3Smrg
2357ec681f3Smrg /* Dependency control */
2367ec681f3SmrgNoDDClr 	{ return NODDCLR; }
2377ec681f3SmrgNoDDChk 	{ return NODDCHK; }
2387ec681f3Smrg
2397ec681f3Smrg /* End of thread */
2407ec681f3SmrgEOT 		{ return EOT; }
2417ec681f3Smrg
2427ec681f3Smrg /* Mask control */
2437ec681f3Smrgnomask      	{ return MASK_DISABLE; }
2447ec681f3Smrg
2457ec681f3Smrg /* Channel */
2467ec681f3Smrg<CHANNEL>"x" 		{ yylval.integer = BRW_CHANNEL_X; return X; }
2477ec681f3Smrg<CHANNEL>"y" 		{ yylval.integer = BRW_CHANNEL_Y; return Y; }
2487ec681f3Smrg<CHANNEL>"z" 		{ yylval.integer = BRW_CHANNEL_Z; return Z; }
2497ec681f3Smrg<CHANNEL>"w" 		{ yylval.integer = BRW_CHANNEL_W; return W; }
2507ec681f3Smrg<CHANNEL>[0-9][0-9]* 	{
2517ec681f3Smrg			   yylval.integer = strtoul(yytext, NULL, 10);
2527ec681f3Smrg			   return INTEGER;
2537ec681f3Smrg		        }
2547ec681f3Smrg<CHANNEL>"."    	{ return DOT; }
2557ec681f3Smrg<CHANNEL>. 		{ yyless(0); BEGIN(INITIAL); }
2567ec681f3Smrg
2577ec681f3Smrg
2587ec681f3Smrg /* Predicate Control */
2597ec681f3Smrg<CHANNEL>".anyv"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANYV; return ANYV; }
2607ec681f3Smrg<CHANNEL>".allv"      	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALLV; return ALLV; }
2617ec681f3Smrg<CHANNEL>".any2h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY2H; return ANY2H; }
2627ec681f3Smrg<CHANNEL>".all2h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL2H; return ALL2H; }
2637ec681f3Smrg<CHANNEL>".any4h"	{ yylval.integer = BRW_PREDICATE_ALIGN16_ANY4H; return ANY4H; }
2647ec681f3Smrg<CHANNEL>".all4h"	{ yylval.integer = BRW_PREDICATE_ALIGN16_ALL4H; return ALL4H; }
2657ec681f3Smrg<CHANNEL>".any8h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY8H; return ANY8H; }
2667ec681f3Smrg<CHANNEL>".all8h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL8H; return ALL8H; }
2677ec681f3Smrg<CHANNEL>".any16h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY16H; return ANY16H; }
2687ec681f3Smrg<CHANNEL>".all16h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL16H; return ALL16H; }
2697ec681f3Smrg<CHANNEL>".any32h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY32H; return ANY32H; }
2707ec681f3Smrg<CHANNEL>".all32h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL32H; return ALL32H; }
2717ec681f3Smrg
2727ec681f3Smrg /* Saturation */
2737ec681f3Smrg".sat"		{ return SATURATE; }
2747ec681f3Smrg
2757ec681f3Smrg /* Thread control */
2767ec681f3Smrgatomic       	{ return ATOMIC; }
2777ec681f3Smrgswitch       	{ return SWITCH; }
2787ec681f3Smrg
2797ec681f3Smrg /* compression control */
2807ec681f3Smrgcompr 		{ return COMPR; }
2817ec681f3Smrgcompr4    	{ return COMPR4; }
2827ec681f3Smrgsechalf 	{ return SECHALF; }
2837ec681f3Smrg
2847ec681f3Smrg /* Quarter Control */
2857ec681f3Smrg1[HNQ]       	{ }
2867ec681f3Smrg"2Q"	        { return QTR_2Q; }
2877ec681f3Smrg"3Q"	        { return QTR_3Q; }
2887ec681f3Smrg"4Q"	        { return QTR_4Q; }
2897ec681f3Smrg"2H"	        { return QTR_2H; }
2907ec681f3Smrg"2N"	        { return QTR_2N; }
2917ec681f3Smrg"3N"	        { return QTR_3N; }
2927ec681f3Smrg"4N"	        { return QTR_4N; }
2937ec681f3Smrg"5N"	        { return QTR_5N; }
2947ec681f3Smrg"6N"	        { return QTR_6N; }
2957ec681f3Smrg"7N"	        { return QTR_7N; }
2967ec681f3Smrg"8N"	        { return QTR_8N; }
2977ec681f3Smrg
2987ec681f3Smrg /* data types */
2997ec681f3Smrg:?B 	{ return TYPE_B; }
3007ec681f3Smrg:?D 	{ return TYPE_D; }
3017ec681f3Smrg:?DF 	{ return TYPE_DF; }
3027ec681f3Smrg:?F 	{ return TYPE_F; }
3037ec681f3Smrg:?HF 	{ return TYPE_HF; }
3047ec681f3Smrg:?NF 	{ return TYPE_NF; }
3057ec681f3Smrg:?Q 	{ return TYPE_Q; }
3067ec681f3Smrg:?UB 	{ return TYPE_UB; }
3077ec681f3Smrg:?UD 	{ return TYPE_UD; }
3087ec681f3Smrg:?UW 	{ return TYPE_UW; }
3097ec681f3Smrg:?UQ 	{ return TYPE_UQ; }
3107ec681f3Smrg:?UV 	{ return TYPE_UV; }
3117ec681f3Smrg:?V 	{ return TYPE_V; }
3127ec681f3Smrg:?VF 	{ return TYPE_VF; }
3137ec681f3Smrg:?W 	{ return TYPE_W; }
3147ec681f3Smrg
3157ec681f3Smrg /* Address registers */
3167ec681f3Smrg"a0" 		{ return ADDRREG; }
3177ec681f3Smrg
3187ec681f3Smrg /* accumulator registers */
3197ec681f3Smrg"acc"[0-9]+ 	{ yylval.integer = atoi(yytext + 3); return ACCREG; }
3207ec681f3Smrg
3217ec681f3Smrg /* channel enable registers */
3227ec681f3Smrg"ce0"		{ return CHANNELENABLEREG; }
3237ec681f3Smrg
3247ec681f3Smrg /* control registers */
3257ec681f3Smrg"cr0" 		{ return CONTROLREG; }
3267ec681f3Smrg
3277ec681f3Smrg /* flag registers */
3287ec681f3Smrg"f"[0|1] 	{ BEGIN(CHANNEL); yylval.integer = atoi(yytext + 1); return FLAGREG; }
3297ec681f3Smrg
3307ec681f3Smrg /* message control registers */
3317ec681f3Smrg"m" 		{ return MSGREGFILE; }
3327ec681f3Smrgm[0-9]+ 	{ yylval.integer = atoi(yytext + 1); BEGIN(REG); return MSGREG; }
3337ec681f3Smrg
3347ec681f3Smrg /* state register */
3357ec681f3Smrgsr[0-9]+ 	{ yylval.integer = atoi(yytext + 2); return STATEREG; }
3367ec681f3Smrg
3377ec681f3Smrg /* notification registers */
3387ec681f3Smrg"n0"  		{ BEGIN(REG); return NOTIFYREG; }
3397ec681f3Smrg
3407ec681f3Smrg /* IP register */
3417ec681f3Smrg"ip" 		{ return IPREG; }
3427ec681f3Smrg
3437ec681f3Smrg /* Thread control register */
3447ec681f3Smrg"tdr0"		{ return THREADREG; }
3457ec681f3Smrg
3467ec681f3Smrg /* performance register */
3477ec681f3Smrg"tm0" 		{ BEGIN(REG); return PERFORMANCEREG; }
3487ec681f3Smrg
3497ec681f3Smrg[gr][0-9]+ 	{
3507ec681f3Smrg		   yylval.integer = atoi(yytext + 1);
3517ec681f3Smrg		   BEGIN(REG); return GENREG;
3527ec681f3Smrg		}
3537ec681f3Smrg[gr] 		{ return GENREGFILE; }
3547ec681f3Smrg"mask"[0-9]+ 	{ yylval.integer = atoi(yytext + 4); return MASKREG; }
3557ec681f3Smrg
3567ec681f3Smrg /* Conditional modifiers */
3577ec681f3Smrg".e" 	{ yylval.integer = BRW_CONDITIONAL_Z; return EQUAL; }
3587ec681f3Smrg".g" 	{ yylval.integer = BRW_CONDITIONAL_G; return GREATER; }
3597ec681f3Smrg".ge"	{ yylval.integer = BRW_CONDITIONAL_GE; return GREATER_EQUAL; }
3607ec681f3Smrg".l"	{ yylval.integer = BRW_CONDITIONAL_L; return LESS; }
3617ec681f3Smrg".le"	{ yylval.integer = BRW_CONDITIONAL_LE; return LESS_EQUAL; }
3627ec681f3Smrg".ne"	{ yylval.integer = BRW_CONDITIONAL_NZ; return NOT_EQUAL; }
3637ec681f3Smrg".nz"	{ yylval.integer = BRW_CONDITIONAL_NZ; return NOT_ZERO; }
3647ec681f3Smrg".o"	{ yylval.integer = BRW_CONDITIONAL_O; return OVERFLOW; }
3657ec681f3Smrg".r"	{ yylval.integer = BRW_CONDITIONAL_R; return ROUND_INCREMENT; }
3667ec681f3Smrg".u"	{ yylval.integer = BRW_CONDITIONAL_U; return UNORDERED; }
3677ec681f3Smrg".z"	{ yylval.integer = BRW_CONDITIONAL_Z; return ZERO; }
3687ec681f3Smrg
3697ec681f3Smrg /* Eat up JIP and UIP token, their values will be parsed
3707ec681f3Smrg  * in numeric section
3717ec681f3Smrg  */
3727ec681f3Smrg"JIP: "		{ BEGIN(LABEL); }
3737ec681f3Smrg"UIP: "		{ BEGIN(LABEL); }
3747ec681f3Smrg"Jump: "       	{ }
3757ec681f3Smrg"Pop: "		{ }
3767ec681f3Smrg[ \t]+ 		{ }
3777ec681f3Smrg"MsgDesc:"[^{]* 	{ }
3787ec681f3Smrg
3797ec681f3Smrg"0x"[0-9a-f][0-9a-f]* 	{
3807ec681f3Smrg			   yylval.llint = strtoull(yytext + 2, NULL, 16);
3817ec681f3Smrg			   return LONG;
3827ec681f3Smrg			}
3837ec681f3Smrg[0-9][0-9]* 		{
3847ec681f3Smrg			   yylval.llint = strtoll(yytext, NULL, 10);
3857ec681f3Smrg			   return LONG;
3867ec681f3Smrg			}
3877ec681f3Smrg
3887ec681f3Smrg /* jump label target */
3897ec681f3Smrg[a-zA-Z_][0-9a-zA-Z_]*":" {
3907ec681f3Smrg	yylval.string = ralloc_strdup(p->mem_ctx, yytext);
3917ec681f3Smrg	/* Stomp the trailing ':' */
3927ec681f3Smrg	yylval.string[yyleng - 1] = '\0';
3937ec681f3Smrg	return JUMP_LABEL_TARGET;
3947ec681f3Smrg}
3957ec681f3Smrg
3967ec681f3Smrg /* jump label */
3977ec681f3Smrg<LABEL>[a-zA-Z_][0-9a-zA-Z_]* {
3987ec681f3Smrg	yylval.string = ralloc_strdup(p->mem_ctx, yytext);
3997ec681f3Smrg	BEGIN(INITIAL);
4007ec681f3Smrg	return JUMP_LABEL;
4017ec681f3Smrg}
4027ec681f3Smrg
4037ec681f3Smrg\n 	{ yycolumn = 1; }
4047ec681f3Smrg
4057ec681f3Smrg. 	{
4067ec681f3Smrg	   fprintf(stderr, "%s: %d: %s: at \"%s\"\n",
4077ec681f3Smrg	           input_filename, yylineno,
4087ec681f3Smrg	           "unexpected token", lex_text());
4097ec681f3Smrg	}
4107ec681f3Smrg%%
4117ec681f3Smrg
4127ec681f3Smrgchar *
4137ec681f3Smrglex_text(void)
4147ec681f3Smrg{
4157ec681f3Smrg	return yytext;
4167ec681f3Smrg}
4177ec681f3Smrg
4187ec681f3Smrg#ifndef yywrap
4197ec681f3Smrgint yywrap()
4207ec681f3Smrg{
4217ec681f3Smrg	return -1;
4227ec681f3Smrg}
4237ec681f3Smrg#endif
424