xref: /aosp_15_r20/external/mesa3d/src/intel/compiler/brw_lex.l (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker %option yylineno
2*61046927SAndroid Build Coastguard Worker %option nounput
3*61046927SAndroid Build Coastguard Worker %{
4*61046927SAndroid Build Coastguard Worker #include <string.h>
5*61046927SAndroid Build Coastguard Worker #include "brw_asm_internal.h"
6*61046927SAndroid Build Coastguard Worker #undef ALIGN16
7*61046927SAndroid Build Coastguard Worker #include "brw_gram.tab.h"
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker /* Locations */
10*61046927SAndroid Build Coastguard Worker int yycolumn = 1;
11*61046927SAndroid Build Coastguard Worker 
12*61046927SAndroid Build Coastguard Worker int saved_state = 0;
13*61046927SAndroid Build Coastguard Worker extern const char *input_filename;
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker #define YY_NO_INPUT
16*61046927SAndroid Build Coastguard Worker #define YY_USER_ACTION                                  	\
17*61046927SAndroid Build Coastguard Worker 	yylloc.first_line = yylloc.last_line = yylineno;	\
18*61046927SAndroid Build Coastguard Worker 	yylloc.first_column = yycolumn;			        \
19*61046927SAndroid Build Coastguard Worker 	yylloc.last_column = yycolumn + yyleng - 1;	        \
20*61046927SAndroid Build Coastguard Worker 	yycolumn += yyleng;
21*61046927SAndroid Build Coastguard Worker %}
22*61046927SAndroid Build Coastguard Worker 
23*61046927SAndroid Build Coastguard Worker %x BLOCK_COMMENT
24*61046927SAndroid Build Coastguard Worker %x FILENAME
25*61046927SAndroid Build Coastguard Worker %x CHANNEL
26*61046927SAndroid Build Coastguard Worker %x REG
27*61046927SAndroid Build Coastguard Worker %x DOTSEL
28*61046927SAndroid Build Coastguard Worker %x LABEL
29*61046927SAndroid Build Coastguard Worker %x MSGDESC
30*61046927SAndroid Build Coastguard Worker %%
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker  /* eat up single line comment */
33*61046927SAndroid Build Coastguard Worker \/\/.*[\r\n]	{ yycolumn = 1; }
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker  /* eat up multiline comment */
36*61046927SAndroid Build Coastguard Worker \/\*		{ saved_state = YYSTATE; BEGIN(BLOCK_COMMENT); }
37*61046927SAndroid Build Coastguard Worker 
38*61046927SAndroid Build Coastguard Worker <BLOCK_COMMENT>\*\/	{ BEGIN(saved_state); }
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker <BLOCK_COMMENT>.     	{ }
41*61046927SAndroid Build Coastguard Worker <BLOCK_COMMENT>[\r\n]	{ }
42*61046927SAndroid Build Coastguard Worker 
43*61046927SAndroid Build Coastguard Worker <FILENAME>\"[^\"]+\"	{
44*61046927SAndroid Build Coastguard Worker 			   char *name = malloc(yyleng - 1);
45*61046927SAndroid Build Coastguard Worker 			   memmove(name, yytext + 1, yyleng - 2);
46*61046927SAndroid Build Coastguard Worker 			   name[yyleng-1] = '\0';
47*61046927SAndroid Build Coastguard Worker 			   input_filename = name;
48*61046927SAndroid Build Coastguard Worker 			}
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker  /* null register */
51*61046927SAndroid Build Coastguard Worker null 		{ BEGIN(REG); return NULL_TOKEN; }
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker  /* Opcodes */
54*61046927SAndroid Build Coastguard Worker add		{ yylval.integer = BRW_OPCODE_ADD; return ADD; }
55*61046927SAndroid Build Coastguard Worker add3		{ yylval.integer = BRW_OPCODE_ADD3; return ADD3; }
56*61046927SAndroid Build Coastguard Worker addc		{ yylval.integer = BRW_OPCODE_ADDC; return ADDC; }
57*61046927SAndroid Build Coastguard Worker and		{ yylval.integer = BRW_OPCODE_AND; return AND; }
58*61046927SAndroid Build Coastguard Worker asr		{ yylval.integer = BRW_OPCODE_ASR; return ASR; }
59*61046927SAndroid Build Coastguard Worker avg		{ yylval.integer = BRW_OPCODE_AVG; return AVG; }
60*61046927SAndroid Build Coastguard Worker bfe 		{ yylval.integer = BRW_OPCODE_BFE; return BFE; }
61*61046927SAndroid Build Coastguard Worker bfi1 		{ yylval.integer = BRW_OPCODE_BFI1; return BFI1; }
62*61046927SAndroid Build Coastguard Worker bfi2 		{ yylval.integer = BRW_OPCODE_BFI2; return BFI2; }
63*61046927SAndroid Build Coastguard Worker bfrev 		{ yylval.integer = BRW_OPCODE_BFREV; return BFREV; }
64*61046927SAndroid Build Coastguard Worker brc 		{ yylval.integer = BRW_OPCODE_BRC; return BRC; }
65*61046927SAndroid Build Coastguard Worker brd 		{ yylval.integer = BRW_OPCODE_BRD; return BRD; }
66*61046927SAndroid Build Coastguard Worker break 		{ yylval.integer = BRW_OPCODE_BREAK; return BREAK; }
67*61046927SAndroid Build Coastguard Worker call 		{ yylval.integer = BRW_OPCODE_CALL; return CALL; }
68*61046927SAndroid Build Coastguard Worker calla 		{ yylval.integer = BRW_OPCODE_CALLA; return CALLA; }
69*61046927SAndroid Build Coastguard Worker cbit 		{ yylval.integer = BRW_OPCODE_CBIT; return CBIT; }
70*61046927SAndroid Build Coastguard Worker cmp 		{ yylval.integer = BRW_OPCODE_CMP; return CMP; }
71*61046927SAndroid Build Coastguard Worker cmpn 		{ yylval.integer = BRW_OPCODE_CMPN; return CMPN; }
72*61046927SAndroid Build Coastguard Worker cont 		{ yylval.integer = BRW_OPCODE_CONTINUE; return CONT; }
73*61046927SAndroid Build Coastguard Worker csel 		{ yylval.integer = BRW_OPCODE_CSEL; return CSEL; }
74*61046927SAndroid Build Coastguard Worker do 		{ yylval.integer = BRW_OPCODE_DO; return DO; }
75*61046927SAndroid Build Coastguard Worker dp2 		{ yylval.integer = BRW_OPCODE_DP2; return DP2; }
76*61046927SAndroid Build Coastguard Worker dp3 		{ yylval.integer = BRW_OPCODE_DP3; return DP3; }
77*61046927SAndroid Build Coastguard Worker dp4 		{ yylval.integer = BRW_OPCODE_DP4; return DP4; }
78*61046927SAndroid Build Coastguard Worker dp4a		{ yylval.integer = BRW_OPCODE_DP4A; return DP4A; }
79*61046927SAndroid Build Coastguard Worker dph 		{ yylval.integer = BRW_OPCODE_DPH; return DPH; }
80*61046927SAndroid Build Coastguard Worker else 		{ yylval.integer = BRW_OPCODE_ELSE; return ELSE; }
81*61046927SAndroid Build Coastguard Worker endif 		{ yylval.integer = BRW_OPCODE_ENDIF; return ENDIF; }
82*61046927SAndroid Build Coastguard Worker fbh 		{ yylval.integer = BRW_OPCODE_FBH; return FBH; }
83*61046927SAndroid Build Coastguard Worker fbl 		{ yylval.integer = BRW_OPCODE_FBL; return FBL; }
84*61046927SAndroid Build Coastguard Worker frc 		{ yylval.integer = BRW_OPCODE_FRC; return FRC; }
85*61046927SAndroid Build Coastguard Worker goto 		{ yylval.integer = BRW_OPCODE_GOTO; return GOTO; }
86*61046927SAndroid Build Coastguard Worker halt 		{ yylval.integer = BRW_OPCODE_HALT; return HALT; }
87*61046927SAndroid Build Coastguard Worker if 		{ yylval.integer = BRW_OPCODE_IF; return IF; }
88*61046927SAndroid Build Coastguard Worker illegal 	{ yylval.integer = BRW_OPCODE_ILLEGAL; return ILLEGAL; }
89*61046927SAndroid Build Coastguard Worker jmpi 		{ yylval.integer = BRW_OPCODE_JMPI; return JMPI; }
90*61046927SAndroid Build Coastguard Worker line 		{ yylval.integer = BRW_OPCODE_LINE; return LINE; }
91*61046927SAndroid Build Coastguard Worker lrp 		{ yylval.integer = BRW_OPCODE_LRP; return LRP; }
92*61046927SAndroid Build Coastguard Worker lzd 		{ yylval.integer = BRW_OPCODE_LZD; return LZD; }
93*61046927SAndroid Build Coastguard Worker mac 		{ yylval.integer = BRW_OPCODE_MAC; return MAC; }
94*61046927SAndroid Build Coastguard Worker mach 		{ yylval.integer = BRW_OPCODE_MACH; return MACH; }
95*61046927SAndroid Build Coastguard Worker mad 		{ yylval.integer = BRW_OPCODE_MAD; return MAD; }
96*61046927SAndroid Build Coastguard Worker madm 		{ yylval.integer = BRW_OPCODE_MADM; return MADM; }
97*61046927SAndroid Build Coastguard Worker mov 		{ yylval.integer = BRW_OPCODE_MOV; return MOV; }
98*61046927SAndroid Build Coastguard Worker movi 		{ yylval.integer = BRW_OPCODE_MOVI; return MOVI; }
99*61046927SAndroid Build Coastguard Worker mul 		{ yylval.integer = BRW_OPCODE_MUL; return MUL; }
100*61046927SAndroid Build Coastguard Worker nop 		{ yylval.integer = BRW_OPCODE_NOP; return NOP; }
101*61046927SAndroid Build Coastguard Worker not 		{ yylval.integer = BRW_OPCODE_NOT; return NOT; }
102*61046927SAndroid Build Coastguard Worker or 		{ yylval.integer = BRW_OPCODE_OR; return OR; }
103*61046927SAndroid Build Coastguard Worker pln 		{ yylval.integer = BRW_OPCODE_PLN; return PLN; }
104*61046927SAndroid Build Coastguard Worker ret 		{ yylval.integer = BRW_OPCODE_RET; return RET; }
105*61046927SAndroid Build Coastguard Worker rndd 		{ yylval.integer = BRW_OPCODE_RNDD; return RNDD; }
106*61046927SAndroid Build Coastguard Worker rnde 		{ yylval.integer = BRW_OPCODE_RNDE; return RNDE; }
107*61046927SAndroid Build Coastguard Worker rndu 		{ yylval.integer = BRW_OPCODE_RNDU; return RNDU; }
108*61046927SAndroid Build Coastguard Worker rndz 		{ yylval.integer = BRW_OPCODE_RNDZ; return RNDZ; }
109*61046927SAndroid Build Coastguard Worker rol 		{ yylval.integer = BRW_OPCODE_ROL; return ROL; }
110*61046927SAndroid Build Coastguard Worker ror 		{ yylval.integer = BRW_OPCODE_ROR; return ROR; }
111*61046927SAndroid Build Coastguard Worker sel 		{ yylval.integer = BRW_OPCODE_SEL; return SEL; }
112*61046927SAndroid Build Coastguard Worker send 		{
113*61046927SAndroid Build Coastguard Worker 			yylval.integer = BRW_OPCODE_SEND;
114*61046927SAndroid Build Coastguard Worker 			return p->devinfo->ver < 12 ? SEND_GFX4 : SEND_GFX12;
115*61046927SAndroid Build Coastguard Worker 		}
116*61046927SAndroid Build Coastguard Worker sendc 		{
117*61046927SAndroid Build Coastguard Worker 			yylval.integer = BRW_OPCODE_SENDC;
118*61046927SAndroid Build Coastguard Worker 			return  p->devinfo->ver < 12 ? SENDC_GFX4 : SENDC_GFX12;
119*61046927SAndroid Build Coastguard Worker 		}
120*61046927SAndroid Build Coastguard Worker sends 	        { yylval.integer = BRW_OPCODE_SENDS; return SENDS; }
121*61046927SAndroid Build Coastguard Worker sendsc        	{ yylval.integer = BRW_OPCODE_SENDSC; return SENDSC; }
122*61046927SAndroid Build Coastguard Worker shl 		{ yylval.integer = BRW_OPCODE_SHL; return SHL; }
123*61046927SAndroid Build Coastguard Worker shr 		{ yylval.integer = BRW_OPCODE_SHR; return SHR; }
124*61046927SAndroid Build Coastguard Worker smov 		{ yylval.integer = BRW_OPCODE_SMOV; return SMOV; }
125*61046927SAndroid Build Coastguard Worker subb 		{ yylval.integer = BRW_OPCODE_SUBB; return SUBB; }
126*61046927SAndroid Build Coastguard Worker wait 		{ yylval.integer = BRW_OPCODE_WAIT; return WAIT; }
127*61046927SAndroid Build Coastguard Worker while 		{ yylval.integer = BRW_OPCODE_WHILE; return WHILE; }
128*61046927SAndroid Build Coastguard Worker xor 		{ yylval.integer = BRW_OPCODE_XOR; return XOR; }
129*61046927SAndroid Build Coastguard Worker sync		{ yylval.integer = BRW_OPCODE_SYNC; return SYNC; }
130*61046927SAndroid Build Coastguard Worker math		{ yylval.integer = BRW_OPCODE_MATH; return MATH; }
131*61046927SAndroid Build Coastguard Worker 
132*61046927SAndroid Build Coastguard Worker  /* extended math functions */
133*61046927SAndroid Build Coastguard Worker cos 		{ yylval.integer = BRW_MATH_FUNCTION_COS; return COS; }
134*61046927SAndroid Build Coastguard Worker exp 		{ yylval.integer = BRW_MATH_FUNCTION_EXP; return EXP; }
135*61046927SAndroid Build Coastguard Worker fdiv 		{ yylval.integer = BRW_MATH_FUNCTION_FDIV; return FDIV; }
136*61046927SAndroid Build Coastguard Worker inv 		{ yylval.integer = BRW_MATH_FUNCTION_INV; return INV; }
137*61046927SAndroid Build Coastguard Worker invm 		{ yylval.integer = GFX8_MATH_FUNCTION_INVM; return INVM; }
138*61046927SAndroid Build Coastguard Worker intdiv        	{
139*61046927SAndroid Build Coastguard Worker 		   yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT;
140*61046927SAndroid Build Coastguard Worker 		   return INTDIV;
141*61046927SAndroid Build Coastguard Worker 		}
142*61046927SAndroid Build Coastguard Worker intdivmod    	{
143*61046927SAndroid Build Coastguard Worker 		   yylval.integer =
144*61046927SAndroid Build Coastguard Worker 		      BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER;
145*61046927SAndroid Build Coastguard Worker 		   return INTDIVMOD;
146*61046927SAndroid Build Coastguard Worker 		}
147*61046927SAndroid Build Coastguard Worker intmod      	{
148*61046927SAndroid Build Coastguard Worker 		   yylval.integer = BRW_MATH_FUNCTION_INT_DIV_REMAINDER;
149*61046927SAndroid Build Coastguard Worker 		   return INTMOD;
150*61046927SAndroid Build Coastguard Worker 		}
151*61046927SAndroid Build Coastguard Worker log 		{ yylval.integer = BRW_MATH_FUNCTION_LOG; return LOG; }
152*61046927SAndroid Build Coastguard Worker pow 		{ yylval.integer = BRW_MATH_FUNCTION_POW; return POW; }
153*61046927SAndroid Build Coastguard Worker rsq 		{ yylval.integer = BRW_MATH_FUNCTION_RSQ; return RSQ; }
154*61046927SAndroid Build Coastguard Worker rsqrtm       	{ yylval.integer = GFX8_MATH_FUNCTION_RSQRTM; return RSQRTM; }
155*61046927SAndroid Build Coastguard Worker sin 		{ yylval.integer = BRW_MATH_FUNCTION_SIN; return SIN; }
156*61046927SAndroid Build Coastguard Worker sqrt 		{ yylval.integer = BRW_MATH_FUNCTION_SQRT; return SQRT; }
157*61046927SAndroid Build Coastguard Worker 
158*61046927SAndroid Build Coastguard Worker  /* sync instruction */
159*61046927SAndroid Build Coastguard Worker allrd		{ yylval.integer = TGL_SYNC_ALLRD; return ALLRD; }
160*61046927SAndroid Build Coastguard Worker allwr		{ yylval.integer = TGL_SYNC_ALLWR; return ALLWR; }
161*61046927SAndroid Build Coastguard Worker fence		{ yylval.integer = TGL_SYNC_FENCE; return FENCE; }
162*61046927SAndroid Build Coastguard Worker bar		{ yylval.integer = TGL_SYNC_BAR; return BAR; }
163*61046927SAndroid Build Coastguard Worker host		{ yylval.integer = TGL_SYNC_HOST; return HOST; }
164*61046927SAndroid Build Coastguard Worker 
165*61046927SAndroid Build Coastguard Worker  /* shared functions for send instruction */
166*61046927SAndroid Build Coastguard Worker sampler 		{ return SAMPLER; }
167*61046927SAndroid Build Coastguard Worker dp_sampler 		{ return DP_SAMPLER; }
168*61046927SAndroid Build Coastguard Worker gateway 		{ return GATEWAY; }
169*61046927SAndroid Build Coastguard Worker urb 			{ return URB; }
170*61046927SAndroid Build Coastguard Worker thread_spawner		{ return THREAD_SPAWNER; }
171*61046927SAndroid Build Coastguard Worker render            	{ return RENDER; }
172*61046927SAndroid Build Coastguard Worker const 			{ return CONST; }
173*61046927SAndroid Build Coastguard Worker data 			{ return DATA; }
174*61046927SAndroid Build Coastguard Worker cre 			{ return CRE; }
175*61046927SAndroid Build Coastguard Worker vme 			{ return VME; }
176*61046927SAndroid Build Coastguard Worker "pixel interp"		{ return PIXEL_INTERP; }
177*61046927SAndroid Build Coastguard Worker "dp data 1" 		{ return DP_DATA_1; }
178*61046927SAndroid Build Coastguard Worker "rt accel"		{ return RT_ACCEL; }
179*61046927SAndroid Build Coastguard Worker slm			{ return SLM; }
180*61046927SAndroid Build Coastguard Worker tgm			{ return TGM; }
181*61046927SAndroid Build Coastguard Worker ugm			{ return UGM; }
182*61046927SAndroid Build Coastguard Worker 
183*61046927SAndroid Build Coastguard Worker ";"    	{ return SEMICOLON; }
184*61046927SAndroid Build Coastguard Worker ":"    	{ return COLON; }
185*61046927SAndroid Build Coastguard Worker "("    	{ return LPAREN; }
186*61046927SAndroid Build Coastguard Worker ")"    	{ return RPAREN; }
187*61046927SAndroid Build Coastguard Worker "{"    	{ return LCURLY; }
188*61046927SAndroid Build Coastguard Worker "}"    	{ return RCURLY; }
189*61046927SAndroid Build Coastguard Worker "["    	{ return LSQUARE; }
190*61046927SAndroid Build Coastguard Worker "]"    	{ return RSQUARE; }
191*61046927SAndroid Build Coastguard Worker "<"    	{ return LANGLE; }
192*61046927SAndroid Build Coastguard Worker ">"    	{ return RANGLE; }
193*61046927SAndroid Build Coastguard Worker ","    	{ return COMMA; }
194*61046927SAndroid Build Coastguard Worker "."    	{ return DOT; }
195*61046927SAndroid Build Coastguard Worker "+"    	{ return PLUS; }
196*61046927SAndroid Build Coastguard Worker "-"    	{ return MINUS; }
197*61046927SAndroid Build Coastguard Worker "~"    	{ return MINUS; }
198*61046927SAndroid Build Coastguard Worker "(abs)"	{ return ABS; }
199*61046927SAndroid Build Coastguard Worker 
200*61046927SAndroid Build Coastguard Worker 
201*61046927SAndroid Build Coastguard Worker "VxH"             	{ return VxH; }
202*61046927SAndroid Build Coastguard Worker <REG>"<" 		{ return LANGLE; }
203*61046927SAndroid Build Coastguard Worker <REG>[0-9][0-9]* 	{
204*61046927SAndroid Build Coastguard Worker 			   yylval.integer = strtoul(yytext, NULL, 10);
205*61046927SAndroid Build Coastguard Worker 			   return INTEGER;
206*61046927SAndroid Build Coastguard Worker 			}
207*61046927SAndroid Build Coastguard Worker <REG>">" 		{ return RANGLE; }
208*61046927SAndroid Build Coastguard Worker <REG>","		{ return COMMA; }
209*61046927SAndroid Build Coastguard Worker <REG>"."		{ BEGIN(DOTSEL); return DOT; }
210*61046927SAndroid Build Coastguard Worker <REG>";"		{ return SEMICOLON; }
211*61046927SAndroid Build Coastguard Worker 
212*61046927SAndroid Build Coastguard Worker <DOTSEL>"x"	        { yylval.integer = BRW_CHANNEL_X; return X; }
213*61046927SAndroid Build Coastguard Worker <DOTSEL>"y" 	        { yylval.integer = BRW_CHANNEL_Y; return Y; }
214*61046927SAndroid Build Coastguard Worker <DOTSEL>"z" 	        { yylval.integer = BRW_CHANNEL_Z; return Z; }
215*61046927SAndroid Build Coastguard Worker <DOTSEL>"w" 	        { yylval.integer = BRW_CHANNEL_W; return W; }
216*61046927SAndroid Build Coastguard Worker <DOTSEL>[0-9][0-9]* 	{
217*61046927SAndroid Build Coastguard Worker 			   yylval.integer = strtoul(yytext, NULL, 10);
218*61046927SAndroid Build Coastguard Worker 			   BEGIN(REG);
219*61046927SAndroid Build Coastguard Worker 			   return INTEGER;
220*61046927SAndroid Build Coastguard Worker 		        }
221*61046927SAndroid Build Coastguard Worker <DOTSEL>. 	        { yyless(0); BEGIN(INITIAL); }
222*61046927SAndroid Build Coastguard Worker <REG>.             	{ yyless(0); BEGIN(INITIAL); }
223*61046927SAndroid Build Coastguard Worker 
224*61046927SAndroid Build Coastguard Worker  /* Access mode */
225*61046927SAndroid Build Coastguard Worker "align1"	{ return ALIGN1; }
226*61046927SAndroid Build Coastguard Worker "align16"	{ return ALIGN16; }
227*61046927SAndroid Build Coastguard Worker 
228*61046927SAndroid Build Coastguard Worker  /* Accumulator write control */
229*61046927SAndroid Build Coastguard Worker AccWrEnable 	{ return ACCWREN; }
230*61046927SAndroid Build Coastguard Worker 
231*61046927SAndroid Build Coastguard Worker  /* Mask control (formerly WECtrl/Write Enable Control) */
232*61046927SAndroid Build Coastguard Worker "WE_all"	{ return WECTRL; }
233*61046927SAndroid Build Coastguard Worker 
234*61046927SAndroid Build Coastguard Worker  /* Compaction control */
235*61046927SAndroid Build Coastguard Worker compacted 	{ return CMPTCTRL; }
236*61046927SAndroid Build Coastguard Worker 
237*61046927SAndroid Build Coastguard Worker  /* Debug control */
238*61046927SAndroid Build Coastguard Worker breakpoint 	{ return BREAKPOINT; }
239*61046927SAndroid Build Coastguard Worker 
240*61046927SAndroid Build Coastguard Worker  /* Dependency control */
241*61046927SAndroid Build Coastguard Worker NoDDClr 	{ return NODDCLR; }
242*61046927SAndroid Build Coastguard Worker NoDDChk 	{ return NODDCHK; }
243*61046927SAndroid Build Coastguard Worker 
244*61046927SAndroid Build Coastguard Worker  /* End of thread */
245*61046927SAndroid Build Coastguard Worker EOT 		{ return EOT; }
246*61046927SAndroid Build Coastguard Worker 
247*61046927SAndroid Build Coastguard Worker  /* Mask control */
248*61046927SAndroid Build Coastguard Worker nomask      	{ return MASK_DISABLE; }
249*61046927SAndroid Build Coastguard Worker 
250*61046927SAndroid Build Coastguard Worker  /* Channel */
251*61046927SAndroid Build Coastguard Worker <CHANNEL>"x" 		{ yylval.integer = BRW_CHANNEL_X; return X; }
252*61046927SAndroid Build Coastguard Worker <CHANNEL>"y" 		{ yylval.integer = BRW_CHANNEL_Y; return Y; }
253*61046927SAndroid Build Coastguard Worker <CHANNEL>"z" 		{ yylval.integer = BRW_CHANNEL_Z; return Z; }
254*61046927SAndroid Build Coastguard Worker <CHANNEL>"w" 		{ yylval.integer = BRW_CHANNEL_W; return W; }
255*61046927SAndroid Build Coastguard Worker <CHANNEL>[0-9][0-9]* 	{
256*61046927SAndroid Build Coastguard Worker 			   yylval.integer = strtoul(yytext, NULL, 10);
257*61046927SAndroid Build Coastguard Worker 			   return INTEGER;
258*61046927SAndroid Build Coastguard Worker 		        }
259*61046927SAndroid Build Coastguard Worker <CHANNEL>"."    	{ return DOT; }
260*61046927SAndroid Build Coastguard Worker <CHANNEL>. 		{ yyless(0); BEGIN(INITIAL); }
261*61046927SAndroid Build Coastguard Worker 
262*61046927SAndroid Build Coastguard Worker 
263*61046927SAndroid Build Coastguard Worker  /* Predicate Control */
264*61046927SAndroid Build Coastguard Worker <CHANNEL>".anyv"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANYV; return ANYV; }
265*61046927SAndroid Build Coastguard Worker <CHANNEL>".allv"      	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALLV; return ALLV; }
266*61046927SAndroid Build Coastguard Worker <CHANNEL>".any2h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY2H; return ANY2H; }
267*61046927SAndroid Build Coastguard Worker <CHANNEL>".all2h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL2H; return ALL2H; }
268*61046927SAndroid Build Coastguard Worker <CHANNEL>".any4h"	{ yylval.integer = BRW_PREDICATE_ALIGN16_ANY4H; return ANY4H; }
269*61046927SAndroid Build Coastguard Worker <CHANNEL>".all4h"	{ yylval.integer = BRW_PREDICATE_ALIGN16_ALL4H; return ALL4H; }
270*61046927SAndroid Build Coastguard Worker <CHANNEL>".any8h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY8H; return ANY8H; }
271*61046927SAndroid Build Coastguard Worker <CHANNEL>".all8h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL8H; return ALL8H; }
272*61046927SAndroid Build Coastguard Worker <CHANNEL>".any16h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY16H; return ANY16H; }
273*61046927SAndroid Build Coastguard Worker <CHANNEL>".all16h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL16H; return ALL16H; }
274*61046927SAndroid Build Coastguard Worker <CHANNEL>".any32h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ANY32H; return ANY32H; }
275*61046927SAndroid Build Coastguard Worker <CHANNEL>".all32h"	{ yylval.integer = BRW_PREDICATE_ALIGN1_ALL32H; return ALL32H; }
276*61046927SAndroid Build Coastguard Worker 
277*61046927SAndroid Build Coastguard Worker  /* Saturation */
278*61046927SAndroid Build Coastguard Worker ".sat"		{ return SATURATE; }
279*61046927SAndroid Build Coastguard Worker 
280*61046927SAndroid Build Coastguard Worker  /* Thread control */
281*61046927SAndroid Build Coastguard Worker atomic       	{ return ATOMIC; }
282*61046927SAndroid Build Coastguard Worker switch       	{ return SWITCH; }
283*61046927SAndroid Build Coastguard Worker 
284*61046927SAndroid Build Coastguard Worker  /* Quarter Control */
285*61046927SAndroid Build Coastguard Worker 1[HNQ]       	{ }
286*61046927SAndroid Build Coastguard Worker "2Q"	        { return QTR_2Q; }
287*61046927SAndroid Build Coastguard Worker "3Q"	        { return QTR_3Q; }
288*61046927SAndroid Build Coastguard Worker "4Q"	        { return QTR_4Q; }
289*61046927SAndroid Build Coastguard Worker "2H"	        { return QTR_2H; }
290*61046927SAndroid Build Coastguard Worker "2N"	        { return QTR_2N; }
291*61046927SAndroid Build Coastguard Worker "3N"	        { return QTR_3N; }
292*61046927SAndroid Build Coastguard Worker "4N"	        { return QTR_4N; }
293*61046927SAndroid Build Coastguard Worker "5N"	        { return QTR_5N; }
294*61046927SAndroid Build Coastguard Worker "6N"	        { return QTR_6N; }
295*61046927SAndroid Build Coastguard Worker "7N"	        { return QTR_7N; }
296*61046927SAndroid Build Coastguard Worker "8N"	        { return QTR_8N; }
297*61046927SAndroid Build Coastguard Worker 
298*61046927SAndroid Build Coastguard Worker  /* data types */
299*61046927SAndroid Build Coastguard Worker :?B 	{ return TYPE_B; }
300*61046927SAndroid Build Coastguard Worker :?D 	{ return TYPE_D; }
301*61046927SAndroid Build Coastguard Worker :?DF 	{ return TYPE_DF; }
302*61046927SAndroid Build Coastguard Worker :?F 	{ return TYPE_F; }
303*61046927SAndroid Build Coastguard Worker :?HF 	{ return TYPE_HF; }
304*61046927SAndroid Build Coastguard Worker :?Q 	{ return TYPE_Q; }
305*61046927SAndroid Build Coastguard Worker :?UB 	{ return TYPE_UB; }
306*61046927SAndroid Build Coastguard Worker :?UD 	{ return TYPE_UD; }
307*61046927SAndroid Build Coastguard Worker :?UW 	{ return TYPE_UW; }
308*61046927SAndroid Build Coastguard Worker :?UQ 	{ return TYPE_UQ; }
309*61046927SAndroid Build Coastguard Worker :?UV 	{ return TYPE_UV; }
310*61046927SAndroid Build Coastguard Worker :?V 	{ return TYPE_V; }
311*61046927SAndroid Build Coastguard Worker :?VF 	{ return TYPE_VF; }
312*61046927SAndroid Build Coastguard Worker :?W 	{ return TYPE_W; }
313*61046927SAndroid Build Coastguard Worker 
314*61046927SAndroid Build Coastguard Worker  /* Address registers */
315*61046927SAndroid Build Coastguard Worker "a0" 		{ return ADDRREG; }
316*61046927SAndroid Build Coastguard Worker 
317*61046927SAndroid Build Coastguard Worker  /* accumulator registers */
318*61046927SAndroid Build Coastguard Worker "acc"[0-9]+ 	{ yylval.integer = atoi(yytext + 3); return ACCREG; }
319*61046927SAndroid Build Coastguard Worker 
320*61046927SAndroid Build Coastguard Worker  /* channel enable registers */
321*61046927SAndroid Build Coastguard Worker "ce0"		{ return CHANNELENABLEREG; }
322*61046927SAndroid Build Coastguard Worker 
323*61046927SAndroid Build Coastguard Worker  /* control registers */
324*61046927SAndroid Build Coastguard Worker "cr0" 		{ return CONTROLREG; }
325*61046927SAndroid Build Coastguard Worker 
326*61046927SAndroid Build Coastguard Worker  /* flag registers */
327*61046927SAndroid Build Coastguard Worker "f"[0|1] 	{ BEGIN(CHANNEL); yylval.integer = atoi(yytext + 1); return FLAGREG; }
328*61046927SAndroid Build Coastguard Worker 
329*61046927SAndroid Build Coastguard Worker  /* state register */
330*61046927SAndroid Build Coastguard Worker sr[0-9]+ 	{ yylval.integer = atoi(yytext + 2); return STATEREG; }
331*61046927SAndroid Build Coastguard Worker 
332*61046927SAndroid Build Coastguard Worker  /* notification registers */
333*61046927SAndroid Build Coastguard Worker "n0"  		{ BEGIN(REG); return NOTIFYREG; }
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker  /* IP register */
336*61046927SAndroid Build Coastguard Worker "ip" 		{ return IPREG; }
337*61046927SAndroid Build Coastguard Worker 
338*61046927SAndroid Build Coastguard Worker  /* Thread control register */
339*61046927SAndroid Build Coastguard Worker "tdr0"		{ return THREADREG; }
340*61046927SAndroid Build Coastguard Worker 
341*61046927SAndroid Build Coastguard Worker  /* performance register */
342*61046927SAndroid Build Coastguard Worker "tm0" 		{ BEGIN(REG); return PERFORMANCEREG; }
343*61046927SAndroid Build Coastguard Worker 
344*61046927SAndroid Build Coastguard Worker [gr][0-9]+ 	{
345*61046927SAndroid Build Coastguard Worker 		   yylval.integer = atoi(yytext + 1);
346*61046927SAndroid Build Coastguard Worker 		   BEGIN(REG); return GENREG;
347*61046927SAndroid Build Coastguard Worker 		}
348*61046927SAndroid Build Coastguard Worker [gr] 		{ return GENREGFILE; }
349*61046927SAndroid Build Coastguard Worker "mask"[0-9]+ 	{ yylval.integer = atoi(yytext + 4); return MASKREG; }
350*61046927SAndroid Build Coastguard Worker 
351*61046927SAndroid Build Coastguard Worker  /* Conditional modifiers */
352*61046927SAndroid Build Coastguard Worker ".e" 	{ yylval.integer = BRW_CONDITIONAL_Z; return EQUAL; }
353*61046927SAndroid Build Coastguard Worker ".g" 	{ yylval.integer = BRW_CONDITIONAL_G; return GREATER; }
354*61046927SAndroid Build Coastguard Worker ".ge"	{ yylval.integer = BRW_CONDITIONAL_GE; return GREATER_EQUAL; }
355*61046927SAndroid Build Coastguard Worker ".l"	{ yylval.integer = BRW_CONDITIONAL_L; return LESS; }
356*61046927SAndroid Build Coastguard Worker ".le"	{ yylval.integer = BRW_CONDITIONAL_LE; return LESS_EQUAL; }
357*61046927SAndroid Build Coastguard Worker ".ne"	{ yylval.integer = BRW_CONDITIONAL_NZ; return NOT_EQUAL; }
358*61046927SAndroid Build Coastguard Worker ".nz"	{ yylval.integer = BRW_CONDITIONAL_NZ; return NOT_ZERO; }
359*61046927SAndroid Build Coastguard Worker ".o"	{ yylval.integer = BRW_CONDITIONAL_O; return OVERFLOW; }
360*61046927SAndroid Build Coastguard Worker ".r"	{ yylval.integer = BRW_CONDITIONAL_R; return ROUND_INCREMENT; }
361*61046927SAndroid Build Coastguard Worker ".u"	{ yylval.integer = BRW_CONDITIONAL_U; return UNORDERED; }
362*61046927SAndroid Build Coastguard Worker ".z"	{ yylval.integer = BRW_CONDITIONAL_Z; return ZERO; }
363*61046927SAndroid Build Coastguard Worker 
364*61046927SAndroid Build Coastguard Worker  /* Eat up JIP and UIP token, their values will be parsed
365*61046927SAndroid Build Coastguard Worker   * in numeric section
366*61046927SAndroid Build Coastguard Worker   */
367*61046927SAndroid Build Coastguard Worker "JIP: "		{ BEGIN(LABEL); }
368*61046927SAndroid Build Coastguard Worker "UIP: "		{ BEGIN(LABEL); }
369*61046927SAndroid Build Coastguard Worker "Jump: "       	{ }
370*61046927SAndroid Build Coastguard Worker "Pop: "		{ }
371*61046927SAndroid Build Coastguard Worker [ \t]+ 		{ }
372*61046927SAndroid Build Coastguard Worker 
373*61046927SAndroid Build Coastguard Worker "MsgDesc: "		{ BEGIN(MSGDESC); return MSGDESC_BEGIN; }
374*61046927SAndroid Build Coastguard Worker <MSGDESC>ex_bso		{ return EX_BSO; }
375*61046927SAndroid Build Coastguard Worker <MSGDESC>src1_len	{ return SRC1_LEN; }
376*61046927SAndroid Build Coastguard Worker <MSGDESC>"="		{ return ASSIGN; }
377*61046927SAndroid Build Coastguard Worker <MSGDESC>[0-9][0-9]*	{
378*61046927SAndroid Build Coastguard Worker 			   yylval.integer = strtoul(yytext, NULL, 10);
379*61046927SAndroid Build Coastguard Worker 			   return INTEGER;
380*61046927SAndroid Build Coastguard Worker 		        }
381*61046927SAndroid Build Coastguard Worker <MSGDESC>"{"    	{ yyless(0); BEGIN(INITIAL); return MSGDESC_END; }
382*61046927SAndroid Build Coastguard Worker <MSGDESC>.      	{ }
383*61046927SAndroid Build Coastguard Worker <MSGDESC>\n     	{ yycolumn = 1; }
384*61046927SAndroid Build Coastguard Worker 
385*61046927SAndroid Build Coastguard Worker "0x"[0-9a-f][0-9a-f]* 	{
386*61046927SAndroid Build Coastguard Worker 			   yylval.llint = strtoull(yytext + 2, NULL, 16);
387*61046927SAndroid Build Coastguard Worker 			   return LONG;
388*61046927SAndroid Build Coastguard Worker 			}
389*61046927SAndroid Build Coastguard Worker [0-9][0-9]* 		{
390*61046927SAndroid Build Coastguard Worker 			   yylval.llint = strtoll(yytext, NULL, 10);
391*61046927SAndroid Build Coastguard Worker 			   return LONG;
392*61046927SAndroid Build Coastguard Worker 			}
393*61046927SAndroid Build Coastguard Worker 
394*61046927SAndroid Build Coastguard Worker  /* jump label target */
395*61046927SAndroid Build Coastguard Worker [a-zA-Z_][0-9a-zA-Z_]*":" {
396*61046927SAndroid Build Coastguard Worker 	yylval.string = ralloc_strdup(p->mem_ctx, yytext);
397*61046927SAndroid Build Coastguard Worker 	/* Stomp the trailing ':' */
398*61046927SAndroid Build Coastguard Worker 	yylval.string[yyleng - 1] = '\0';
399*61046927SAndroid Build Coastguard Worker 	return JUMP_LABEL_TARGET;
400*61046927SAndroid Build Coastguard Worker }
401*61046927SAndroid Build Coastguard Worker 
402*61046927SAndroid Build Coastguard Worker  /* jump label */
403*61046927SAndroid Build Coastguard Worker <LABEL>[a-zA-Z_][0-9a-zA-Z_]* {
404*61046927SAndroid Build Coastguard Worker 	yylval.string = ralloc_strdup(p->mem_ctx, yytext);
405*61046927SAndroid Build Coastguard Worker 	BEGIN(INITIAL);
406*61046927SAndroid Build Coastguard Worker 	return JUMP_LABEL;
407*61046927SAndroid Build Coastguard Worker }
408*61046927SAndroid Build Coastguard Worker 
409*61046927SAndroid Build Coastguard Worker  /* SWSB */
410*61046927SAndroid Build Coastguard Worker "@"[1-7]	{ yylval.integer = atoi(yytext + 1); return REG_DIST_CURRENT; }
411*61046927SAndroid Build Coastguard Worker "F@"[1-7]	{ yylval.integer = atoi(yytext + 2); return REG_DIST_FLOAT; }
412*61046927SAndroid Build Coastguard Worker "I@"[1-7]	{ yylval.integer = atoi(yytext + 2); return REG_DIST_INT; }
413*61046927SAndroid Build Coastguard Worker "L@"[1-7]	{ yylval.integer = atoi(yytext + 2); return REG_DIST_LONG; }
414*61046927SAndroid Build Coastguard Worker "A@"[1-7]	{ yylval.integer = atoi(yytext + 2); return REG_DIST_ALL; }
415*61046927SAndroid Build Coastguard Worker 
416*61046927SAndroid Build Coastguard Worker "$"[0-9]*	{ yylval.integer = atoi(yytext + 1); return SBID_ALLOC; }
417*61046927SAndroid Build Coastguard Worker "$"[0-9]*".src"	{ yylval.integer = atoi(yytext + 1); return SBID_WAIT_SRC; }
418*61046927SAndroid Build Coastguard Worker "$"[0-9]*".dst"	{ yylval.integer = atoi(yytext + 1); return SBID_WAIT_DST; }
419*61046927SAndroid Build Coastguard Worker 
420*61046927SAndroid Build Coastguard Worker \n 	{ yycolumn = 1; }
421*61046927SAndroid Build Coastguard Worker 
422*61046927SAndroid Build Coastguard Worker . 	{
423*61046927SAndroid Build Coastguard Worker 	   fprintf(stderr, "%s: %d: %s: at \"%s\"\n",
424*61046927SAndroid Build Coastguard Worker 	           input_filename, yylineno,
425*61046927SAndroid Build Coastguard Worker 	           "unexpected token", lex_text());
426*61046927SAndroid Build Coastguard Worker 	}
427*61046927SAndroid Build Coastguard Worker %%
428*61046927SAndroid Build Coastguard Worker 
429*61046927SAndroid Build Coastguard Worker char *
430*61046927SAndroid Build Coastguard Worker lex_text(void)
431*61046927SAndroid Build Coastguard Worker {
432*61046927SAndroid Build Coastguard Worker 	return yytext;
433*61046927SAndroid Build Coastguard Worker }
434*61046927SAndroid Build Coastguard Worker 
435*61046927SAndroid Build Coastguard Worker #ifndef yywrap
yywrap()436*61046927SAndroid Build Coastguard Worker int yywrap()
437*61046927SAndroid Build Coastguard Worker {
438*61046927SAndroid Build Coastguard Worker 	return -1;
439*61046927SAndroid Build Coastguard Worker }
440*61046927SAndroid Build Coastguard Worker #endif
441