xref: /aosp_15_r20/external/igt-gpu-tools/assembler/lex.l (revision d83cc019efdc2edc6c4b16e9034a3ceb8d35d77c)
1*d83cc019SAndroid Build Coastguard Worker %option yylineno
2*d83cc019SAndroid Build Coastguard Worker %{
3*d83cc019SAndroid Build Coastguard Worker #include <string.h>
4*d83cc019SAndroid Build Coastguard Worker #include "gen4asm.h"
5*d83cc019SAndroid Build Coastguard Worker #include "gram.h"
6*d83cc019SAndroid Build Coastguard Worker #include "brw_defines.h"
7*d83cc019SAndroid Build Coastguard Worker 
8*d83cc019SAndroid Build Coastguard Worker #include "string.h"
9*d83cc019SAndroid Build Coastguard Worker int saved_state = 0;
10*d83cc019SAndroid Build Coastguard Worker extern char *input_filename;
11*d83cc019SAndroid Build Coastguard Worker 
12*d83cc019SAndroid Build Coastguard Worker /* Locations */
13*d83cc019SAndroid Build Coastguard Worker int yycolumn = 1;
14*d83cc019SAndroid Build Coastguard Worker 
15*d83cc019SAndroid Build Coastguard Worker #define YY_NO_INPUT
16*d83cc019SAndroid Build Coastguard Worker #define YY_USER_ACTION						\
17*d83cc019SAndroid Build Coastguard Worker 	yylloc.first_line = yylloc.last_line = yylineno;	\
18*d83cc019SAndroid Build Coastguard Worker 	yylloc.first_column = yycolumn;				\
19*d83cc019SAndroid Build Coastguard Worker 	yylloc.last_column = yycolumn+yyleng-1;			\
20*d83cc019SAndroid Build Coastguard Worker 	yycolumn += yyleng;
21*d83cc019SAndroid Build Coastguard Worker 
22*d83cc019SAndroid Build Coastguard Worker %}
23*d83cc019SAndroid Build Coastguard Worker %x BLOCK_COMMENT
24*d83cc019SAndroid Build Coastguard Worker %x CHANNEL
25*d83cc019SAndroid Build Coastguard Worker %x LINENUMBER
26*d83cc019SAndroid Build Coastguard Worker %x FILENAME
27*d83cc019SAndroid Build Coastguard Worker %x REG
28*d83cc019SAndroid Build Coastguard Worker %x DOTSEL
29*d83cc019SAndroid Build Coastguard Worker 
30*d83cc019SAndroid Build Coastguard Worker %%
31*d83cc019SAndroid Build Coastguard Worker \/\/.*[\r\n] { yycolumn = 1; } /* eat up single-line comments */
32*d83cc019SAndroid Build Coastguard Worker "\.kernel".*[\r\n] { yycolumn = 1; }
33*d83cc019SAndroid Build Coastguard Worker "\.end_kernel".*[\r\n] { yycolumn = 1; }
34*d83cc019SAndroid Build Coastguard Worker "\.code".*[\r\n] { yycolumn = 1; }
35*d83cc019SAndroid Build Coastguard Worker "\.end_code".*[\r\n] { yycolumn = 1; }
36*d83cc019SAndroid Build Coastguard Worker 
37*d83cc019SAndroid Build Coastguard Worker  /* eat up multi-line comments, non-nesting. */
38*d83cc019SAndroid Build Coastguard Worker \/\* {
39*d83cc019SAndroid Build Coastguard Worker 	saved_state = YYSTATE;
40*d83cc019SAndroid Build Coastguard Worker 	BEGIN(BLOCK_COMMENT);
41*d83cc019SAndroid Build Coastguard Worker }
42*d83cc019SAndroid Build Coastguard Worker <BLOCK_COMMENT>\*\/ {
43*d83cc019SAndroid Build Coastguard Worker 	BEGIN(saved_state);
44*d83cc019SAndroid Build Coastguard Worker }
45*d83cc019SAndroid Build Coastguard Worker <BLOCK_COMMENT>. { }
46*d83cc019SAndroid Build Coastguard Worker <BLOCK_COMMENT>[\r\n] { }
47*d83cc019SAndroid Build Coastguard Worker "#line"" "* {
48*d83cc019SAndroid Build Coastguard Worker 	yycolumn = 1;
49*d83cc019SAndroid Build Coastguard Worker 	saved_state = YYSTATE;
50*d83cc019SAndroid Build Coastguard Worker 	BEGIN(LINENUMBER);
51*d83cc019SAndroid Build Coastguard Worker }
52*d83cc019SAndroid Build Coastguard Worker <LINENUMBER>[0-9]+" "* {
53*d83cc019SAndroid Build Coastguard Worker 	yylineno = atoi (yytext) - 1;
54*d83cc019SAndroid Build Coastguard Worker 	BEGIN(FILENAME);
55*d83cc019SAndroid Build Coastguard Worker }
56*d83cc019SAndroid Build Coastguard Worker <FILENAME>\"[^\"]+\" {
57*d83cc019SAndroid Build Coastguard Worker 	char *name = malloc (yyleng - 1);
58*d83cc019SAndroid Build Coastguard Worker 	memmove (name, yytext + 1, yyleng - 2);
59*d83cc019SAndroid Build Coastguard Worker 	name[yyleng-1] = '\0';
60*d83cc019SAndroid Build Coastguard Worker 	input_filename = name;
61*d83cc019SAndroid Build Coastguard Worker 	BEGIN(saved_state);
62*d83cc019SAndroid Build Coastguard Worker }
63*d83cc019SAndroid Build Coastguard Worker 
64*d83cc019SAndroid Build Coastguard Worker <CHANNEL>"x" {
65*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_X;
66*d83cc019SAndroid Build Coastguard Worker 	return X;
67*d83cc019SAndroid Build Coastguard Worker }
68*d83cc019SAndroid Build Coastguard Worker <CHANNEL>"y" {
69*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_Y;
70*d83cc019SAndroid Build Coastguard Worker 	return Y;
71*d83cc019SAndroid Build Coastguard Worker }
72*d83cc019SAndroid Build Coastguard Worker <CHANNEL>"z" {
73*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_Z;
74*d83cc019SAndroid Build Coastguard Worker 	return Z;
75*d83cc019SAndroid Build Coastguard Worker }
76*d83cc019SAndroid Build Coastguard Worker <CHANNEL>"w" {
77*d83cc019SAndroid Build Coastguard Worker yylval.integer = BRW_CHANNEL_W;
78*d83cc019SAndroid Build Coastguard Worker 	return W;
79*d83cc019SAndroid Build Coastguard Worker }
80*d83cc019SAndroid Build Coastguard Worker <CHANNEL>. {
81*d83cc019SAndroid Build Coastguard Worker 	yyless(0);
82*d83cc019SAndroid Build Coastguard Worker 	BEGIN(INITIAL);
83*d83cc019SAndroid Build Coastguard Worker }
84*d83cc019SAndroid Build Coastguard Worker 
85*d83cc019SAndroid Build Coastguard Worker  /* used for both null send and null register. */
86*d83cc019SAndroid Build Coastguard Worker "null" { return NULL_TOKEN; }
87*d83cc019SAndroid Build Coastguard Worker 
88*d83cc019SAndroid Build Coastguard Worker  /* opcodes */
89*d83cc019SAndroid Build Coastguard Worker "mov" { yylval.integer = BRW_OPCODE_MOV; return MOV; }
90*d83cc019SAndroid Build Coastguard Worker "frc" { yylval.integer = BRW_OPCODE_FRC; return FRC; }
91*d83cc019SAndroid Build Coastguard Worker "rndu" { yylval.integer = BRW_OPCODE_RNDU; return RNDU; }
92*d83cc019SAndroid Build Coastguard Worker "rndd" { yylval.integer = BRW_OPCODE_RNDD; return RNDD; }
93*d83cc019SAndroid Build Coastguard Worker "rnde" { yylval.integer = BRW_OPCODE_RNDE; return RNDE; }
94*d83cc019SAndroid Build Coastguard Worker "rndz" { yylval.integer = BRW_OPCODE_RNDZ; return RNDZ; }
95*d83cc019SAndroid Build Coastguard Worker "not" { yylval.integer = BRW_OPCODE_NOT; return NOT; }
96*d83cc019SAndroid Build Coastguard Worker "lzd" { yylval.integer = BRW_OPCODE_LZD; return LZD; }
97*d83cc019SAndroid Build Coastguard Worker "f16to32" { yylval.integer = BRW_OPCODE_F16TO32; return F16TO32; }
98*d83cc019SAndroid Build Coastguard Worker "f32to16" { yylval.integer = BRW_OPCODE_F32TO16; return F32TO16; }
99*d83cc019SAndroid Build Coastguard Worker "fbh" { yylval.integer = BRW_OPCODE_FBH; return FBH; }
100*d83cc019SAndroid Build Coastguard Worker "fbl" { yylval.integer = BRW_OPCODE_FBL; return FBL; }
101*d83cc019SAndroid Build Coastguard Worker 
102*d83cc019SAndroid Build Coastguard Worker "mad" { yylval.integer = BRW_OPCODE_MAD; return MAD; }
103*d83cc019SAndroid Build Coastguard Worker "lrp" { yylval.integer = BRW_OPCODE_LRP; return LRP; }
104*d83cc019SAndroid Build Coastguard Worker "bfe" { yylval.integer = BRW_OPCODE_BFE; return BFE; }
105*d83cc019SAndroid Build Coastguard Worker "bfi1" { yylval.integer = BRW_OPCODE_BFI1; return BFI1; }
106*d83cc019SAndroid Build Coastguard Worker "bfi2" { yylval.integer = BRW_OPCODE_BFI2; return BFI2; }
107*d83cc019SAndroid Build Coastguard Worker "bfrev" { yylval.integer = BRW_OPCODE_BFREV; return BFREV; }
108*d83cc019SAndroid Build Coastguard Worker "mul" { yylval.integer = BRW_OPCODE_MUL; return MUL; }
109*d83cc019SAndroid Build Coastguard Worker "mac" { yylval.integer = BRW_OPCODE_MAC; return MAC; }
110*d83cc019SAndroid Build Coastguard Worker "mach" { yylval.integer = BRW_OPCODE_MACH; return MACH; }
111*d83cc019SAndroid Build Coastguard Worker "line" { yylval.integer = BRW_OPCODE_LINE; return LINE; }
112*d83cc019SAndroid Build Coastguard Worker "sad2" { yylval.integer = BRW_OPCODE_SAD2; return SAD2; }
113*d83cc019SAndroid Build Coastguard Worker "sada2" { yylval.integer = BRW_OPCODE_SADA2; return SADA2; }
114*d83cc019SAndroid Build Coastguard Worker "dp4" { yylval.integer = BRW_OPCODE_DP4; return DP4; }
115*d83cc019SAndroid Build Coastguard Worker "dph" { yylval.integer = BRW_OPCODE_DPH; return DPH; }
116*d83cc019SAndroid Build Coastguard Worker "dp3" { yylval.integer = BRW_OPCODE_DP3; return DP3; }
117*d83cc019SAndroid Build Coastguard Worker "dp2" { yylval.integer = BRW_OPCODE_DP2; return DP2; }
118*d83cc019SAndroid Build Coastguard Worker 
119*d83cc019SAndroid Build Coastguard Worker "cbit" { yylval.integer = BRW_OPCODE_CBIT; return CBIT; }
120*d83cc019SAndroid Build Coastguard Worker "avg" { yylval.integer = BRW_OPCODE_AVG; return AVG; }
121*d83cc019SAndroid Build Coastguard Worker "add" { yylval.integer = BRW_OPCODE_ADD; return ADD; }
122*d83cc019SAndroid Build Coastguard Worker "addc" { yylval.integer = BRW_OPCODE_ADDC; return ADDC; }
123*d83cc019SAndroid Build Coastguard Worker "sel" { yylval.integer = BRW_OPCODE_SEL; return SEL; }
124*d83cc019SAndroid Build Coastguard Worker "and" { yylval.integer = BRW_OPCODE_AND; return AND; }
125*d83cc019SAndroid Build Coastguard Worker "or" { yylval.integer = BRW_OPCODE_OR; return OR; }
126*d83cc019SAndroid Build Coastguard Worker "xor" { yylval.integer = BRW_OPCODE_XOR; return XOR; }
127*d83cc019SAndroid Build Coastguard Worker "shr" { yylval.integer = BRW_OPCODE_SHR; return SHR; }
128*d83cc019SAndroid Build Coastguard Worker "shl" { yylval.integer = BRW_OPCODE_SHL; return SHL; }
129*d83cc019SAndroid Build Coastguard Worker "asr" { yylval.integer = BRW_OPCODE_ASR; return ASR; }
130*d83cc019SAndroid Build Coastguard Worker "cmp" { yylval.integer = BRW_OPCODE_CMP; return CMP; }
131*d83cc019SAndroid Build Coastguard Worker "cmpn" { yylval.integer = BRW_OPCODE_CMPN; return CMPN; }
132*d83cc019SAndroid Build Coastguard Worker "subb" { yylval.integer = BRW_OPCODE_SUBB; return SUBB; }
133*d83cc019SAndroid Build Coastguard Worker 
134*d83cc019SAndroid Build Coastguard Worker "send" { yylval.integer = BRW_OPCODE_SEND; return SEND; }
135*d83cc019SAndroid Build Coastguard Worker "sendc" { yylval.integer = BRW_OPCODE_SENDC; return SENDC; }
136*d83cc019SAndroid Build Coastguard Worker "nop" { yylval.integer = BRW_OPCODE_NOP; return NOP; }
137*d83cc019SAndroid Build Coastguard Worker "jmpi" { yylval.integer = BRW_OPCODE_JMPI; return JMPI; }
138*d83cc019SAndroid Build Coastguard Worker "if" { yylval.integer = BRW_OPCODE_IF; return IF; }
139*d83cc019SAndroid Build Coastguard Worker "iff" { yylval.integer = BRW_OPCODE_IFF; return IFF; }
140*d83cc019SAndroid Build Coastguard Worker "while" { yylval.integer = BRW_OPCODE_WHILE; return WHILE; }
141*d83cc019SAndroid Build Coastguard Worker "else" { yylval.integer = BRW_OPCODE_ELSE; return ELSE; }
142*d83cc019SAndroid Build Coastguard Worker "break" { yylval.integer = BRW_OPCODE_BREAK; return BREAK; }
143*d83cc019SAndroid Build Coastguard Worker "cont" { yylval.integer = BRW_OPCODE_CONTINUE; return CONT; }
144*d83cc019SAndroid Build Coastguard Worker "halt" { yylval.integer = BRW_OPCODE_HALT; return HALT; }
145*d83cc019SAndroid Build Coastguard Worker "msave" { yylval.integer = BRW_OPCODE_MSAVE; return MSAVE; }
146*d83cc019SAndroid Build Coastguard Worker "push" { yylval.integer = BRW_OPCODE_PUSH; return PUSH; }
147*d83cc019SAndroid Build Coastguard Worker "mrest" { yylval.integer = BRW_OPCODE_MRESTORE; return MREST; }
148*d83cc019SAndroid Build Coastguard Worker "pop" { yylval.integer = BRW_OPCODE_POP; return POP; }
149*d83cc019SAndroid Build Coastguard Worker "wait" { yylval.integer = BRW_OPCODE_WAIT; return WAIT; }
150*d83cc019SAndroid Build Coastguard Worker "do" { yylval.integer = BRW_OPCODE_DO; return DO; }
151*d83cc019SAndroid Build Coastguard Worker "endif" { yylval.integer = BRW_OPCODE_ENDIF; return ENDIF; }
152*d83cc019SAndroid Build Coastguard Worker "call" { yylval.integer = BRW_OPCODE_CALL; return CALL; }
153*d83cc019SAndroid Build Coastguard Worker "ret" { yylval.integer = BRW_OPCODE_RET; return RET; }
154*d83cc019SAndroid Build Coastguard Worker "brd" { yylval.integer = BRW_OPCODE_BRD; return BRD; }
155*d83cc019SAndroid Build Coastguard Worker "brc" { yylval.integer = BRW_OPCODE_BRC; return BRC; }
156*d83cc019SAndroid Build Coastguard Worker 
157*d83cc019SAndroid Build Coastguard Worker "pln" { yylval.integer = BRW_OPCODE_PLN; return PLN; }
158*d83cc019SAndroid Build Coastguard Worker 
159*d83cc019SAndroid Build Coastguard Worker  /* send argument tokens */
160*d83cc019SAndroid Build Coastguard Worker "mlen" { return MSGLEN; }
161*d83cc019SAndroid Build Coastguard Worker "rlen" { return RETURNLEN; }
162*d83cc019SAndroid Build Coastguard Worker "math" { if (IS_GENp(6)) { yylval.integer = BRW_OPCODE_MATH; return MATH_INST; } else return MATH; }
163*d83cc019SAndroid Build Coastguard Worker "sampler" { return SAMPLER; }
164*d83cc019SAndroid Build Coastguard Worker "gateway" { return GATEWAY; }
165*d83cc019SAndroid Build Coastguard Worker "read" { return READ; }
166*d83cc019SAndroid Build Coastguard Worker "write" { return WRITE; }
167*d83cc019SAndroid Build Coastguard Worker "urb" { return URB; }
168*d83cc019SAndroid Build Coastguard Worker "thread_spawner" { return THREAD_SPAWNER; }
169*d83cc019SAndroid Build Coastguard Worker "vme" { return VME; }
170*d83cc019SAndroid Build Coastguard Worker "cre" { return CRE; }
171*d83cc019SAndroid Build Coastguard Worker "data_port" { return DATA_PORT; }
172*d83cc019SAndroid Build Coastguard Worker 
173*d83cc019SAndroid Build Coastguard Worker "allocate" { return ALLOCATE; }
174*d83cc019SAndroid Build Coastguard Worker "used" { return USED; }
175*d83cc019SAndroid Build Coastguard Worker "complete" { return COMPLETE; }
176*d83cc019SAndroid Build Coastguard Worker "transpose" { return TRANSPOSE; }
177*d83cc019SAndroid Build Coastguard Worker "interleave" { return INTERLEAVE; }
178*d83cc019SAndroid Build Coastguard Worker 
179*d83cc019SAndroid Build Coastguard Worker ";" { return SEMICOLON; }
180*d83cc019SAndroid Build Coastguard Worker "(" { return LPAREN; }
181*d83cc019SAndroid Build Coastguard Worker ")" { return RPAREN; }
182*d83cc019SAndroid Build Coastguard Worker "<" { return LANGLE; }
183*d83cc019SAndroid Build Coastguard Worker ">" { return RANGLE; }
184*d83cc019SAndroid Build Coastguard Worker "{" { return LCURLY; }
185*d83cc019SAndroid Build Coastguard Worker "}" { return RCURLY; }
186*d83cc019SAndroid Build Coastguard Worker "[" { return LSQUARE; }
187*d83cc019SAndroid Build Coastguard Worker "]" { return RSQUARE; }
188*d83cc019SAndroid Build Coastguard Worker "," { return COMMA; }
189*d83cc019SAndroid Build Coastguard Worker "." { BEGIN(CHANNEL); return DOT; }
190*d83cc019SAndroid Build Coastguard Worker "+" { return PLUS; }
191*d83cc019SAndroid Build Coastguard Worker "-" { return MINUS; }
192*d83cc019SAndroid Build Coastguard Worker "*" { return MULTIPLY;}
193*d83cc019SAndroid Build Coastguard Worker "/" { return DIVIDE; }
194*d83cc019SAndroid Build Coastguard Worker ":" { return COLON; }
195*d83cc019SAndroid Build Coastguard Worker "=" { return EQ; }
196*d83cc019SAndroid Build Coastguard Worker "(abs)" { return ABS; }
197*d83cc019SAndroid Build Coastguard Worker 
198*d83cc019SAndroid Build Coastguard Worker  /* Most register accesses are lexed as REGFILE[0-9]+, to prevent the register
199*d83cc019SAndroid Build Coastguard Worker   * with subreg from being lexed as REGFILE NUMBER instead of
200*d83cc019SAndroid Build Coastguard Worker   * REGISTER INTEGER DOT INTEGER like we want.  The alternative was to use a
201*d83cc019SAndroid Build Coastguard Worker   * start condition, which wasn't very clean-looking.
202*d83cc019SAndroid Build Coastguard Worker   *
203*d83cc019SAndroid Build Coastguard Worker   * However, this means we need to lex the general and message register file
204*d83cc019SAndroid Build Coastguard Worker   * characters as well, for register-indirect access which is formatted
205*d83cc019SAndroid Build Coastguard Worker   * like g[a#.#] or m[a#.#].
206*d83cc019SAndroid Build Coastguard Worker   */
207*d83cc019SAndroid Build Coastguard Worker "acc"[0-9]+ {
208*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 3);
209*d83cc019SAndroid Build Coastguard Worker 	return ACCREG;
210*d83cc019SAndroid Build Coastguard Worker }
211*d83cc019SAndroid Build Coastguard Worker "a"[0-9]+ {
212*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 1);
213*d83cc019SAndroid Build Coastguard Worker 	return ADDRESSREG;
214*d83cc019SAndroid Build Coastguard Worker }
215*d83cc019SAndroid Build Coastguard Worker "m"[0-9]+ {
216*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 1);
217*d83cc019SAndroid Build Coastguard Worker 	return MSGREG;
218*d83cc019SAndroid Build Coastguard Worker }
219*d83cc019SAndroid Build Coastguard Worker "m" {
220*d83cc019SAndroid Build Coastguard Worker 	return MSGREGFILE;
221*d83cc019SAndroid Build Coastguard Worker }
222*d83cc019SAndroid Build Coastguard Worker "mask"[0-9]+ {
223*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 4);
224*d83cc019SAndroid Build Coastguard Worker 	return MASKREG;
225*d83cc019SAndroid Build Coastguard Worker }
226*d83cc019SAndroid Build Coastguard Worker "ms"[0-9]+ {
227*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 2);
228*d83cc019SAndroid Build Coastguard Worker 	return MASKSTACKREG;
229*d83cc019SAndroid Build Coastguard Worker }
230*d83cc019SAndroid Build Coastguard Worker "msd"[0-9]+ {
231*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 3);
232*d83cc019SAndroid Build Coastguard Worker 	return MASKSTACKDEPTHREG;
233*d83cc019SAndroid Build Coastguard Worker }
234*d83cc019SAndroid Build Coastguard Worker 
235*d83cc019SAndroid Build Coastguard Worker "n0."[0-9]+ {
236*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 3);
237*d83cc019SAndroid Build Coastguard Worker 	return NOTIFYREG;
238*d83cc019SAndroid Build Coastguard Worker }
239*d83cc019SAndroid Build Coastguard Worker 
240*d83cc019SAndroid Build Coastguard Worker "n"[0-9]+ {
241*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 1);
242*d83cc019SAndroid Build Coastguard Worker 	return NOTIFYREG;
243*d83cc019SAndroid Build Coastguard Worker }
244*d83cc019SAndroid Build Coastguard Worker 
245*d83cc019SAndroid Build Coastguard Worker "f"[0-9] {
246*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 1);
247*d83cc019SAndroid Build Coastguard Worker 	return FLAGREG;
248*d83cc019SAndroid Build Coastguard Worker }
249*d83cc019SAndroid Build Coastguard Worker 
250*d83cc019SAndroid Build Coastguard Worker [gr][0-9]+ {
251*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 1);
252*d83cc019SAndroid Build Coastguard Worker 	BEGIN(REG);
253*d83cc019SAndroid Build Coastguard Worker 	return GENREG;
254*d83cc019SAndroid Build Coastguard Worker }
255*d83cc019SAndroid Build Coastguard Worker <REG>"<" { return LANGLE; }
256*d83cc019SAndroid Build Coastguard Worker <REG>[0-9][0-9]* {
257*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = strtoul(yytext, NULL, 10);
258*d83cc019SAndroid Build Coastguard Worker 	return INTEGER;
259*d83cc019SAndroid Build Coastguard Worker }
260*d83cc019SAndroid Build Coastguard Worker <REG>">" { return RANGLE; }
261*d83cc019SAndroid Build Coastguard Worker 
262*d83cc019SAndroid Build Coastguard Worker <REG>"," { return COMMA; }
263*d83cc019SAndroid Build Coastguard Worker <REG>"." { BEGIN(DOTSEL); return DOT; }
264*d83cc019SAndroid Build Coastguard Worker <REG>";" { return SEMICOLON; }
265*d83cc019SAndroid Build Coastguard Worker 
266*d83cc019SAndroid Build Coastguard Worker <DOTSEL>"x" {
267*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_X;
268*d83cc019SAndroid Build Coastguard Worker 	return X;
269*d83cc019SAndroid Build Coastguard Worker }
270*d83cc019SAndroid Build Coastguard Worker <DOTSEL>"y" {
271*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_Y;
272*d83cc019SAndroid Build Coastguard Worker 	return Y;
273*d83cc019SAndroid Build Coastguard Worker }
274*d83cc019SAndroid Build Coastguard Worker <DOTSEL>"z" {
275*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_Z;
276*d83cc019SAndroid Build Coastguard Worker 	return Z;
277*d83cc019SAndroid Build Coastguard Worker }
278*d83cc019SAndroid Build Coastguard Worker <DOTSEL>"w" {
279*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CHANNEL_W;
280*d83cc019SAndroid Build Coastguard Worker 	return W;
281*d83cc019SAndroid Build Coastguard Worker }
282*d83cc019SAndroid Build Coastguard Worker <DOTSEL>[0-9][0-9]* {
283*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = strtoul(yytext, NULL, 10);
284*d83cc019SAndroid Build Coastguard Worker 	BEGIN(REG);
285*d83cc019SAndroid Build Coastguard Worker 	return INTEGER;
286*d83cc019SAndroid Build Coastguard Worker }
287*d83cc019SAndroid Build Coastguard Worker <DOTSEL>. {
288*d83cc019SAndroid Build Coastguard Worker 	yyless(0);
289*d83cc019SAndroid Build Coastguard Worker 	BEGIN(INITIAL);
290*d83cc019SAndroid Build Coastguard Worker }
291*d83cc019SAndroid Build Coastguard Worker 
292*d83cc019SAndroid Build Coastguard Worker [gr] {
293*d83cc019SAndroid Build Coastguard Worker 	return GENREGFILE;
294*d83cc019SAndroid Build Coastguard Worker }
295*d83cc019SAndroid Build Coastguard Worker "cr"[0-9]+ {
296*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 2);
297*d83cc019SAndroid Build Coastguard Worker 	return CONTROLREG;
298*d83cc019SAndroid Build Coastguard Worker }
299*d83cc019SAndroid Build Coastguard Worker "sr"[0-9]+ {
300*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = atoi(yytext + 2);
301*d83cc019SAndroid Build Coastguard Worker 	return STATEREG;
302*d83cc019SAndroid Build Coastguard Worker }
303*d83cc019SAndroid Build Coastguard Worker "ip" {
304*d83cc019SAndroid Build Coastguard Worker 	return IPREG;
305*d83cc019SAndroid Build Coastguard Worker }
306*d83cc019SAndroid Build Coastguard Worker "amask" {
307*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_AMASK;
308*d83cc019SAndroid Build Coastguard Worker 	return AMASK;
309*d83cc019SAndroid Build Coastguard Worker }
310*d83cc019SAndroid Build Coastguard Worker "imask" {
311*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_IMASK;
312*d83cc019SAndroid Build Coastguard Worker 	return IMASK;
313*d83cc019SAndroid Build Coastguard Worker }
314*d83cc019SAndroid Build Coastguard Worker "lmask" {
315*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_LMASK;
316*d83cc019SAndroid Build Coastguard Worker 	return LMASK;
317*d83cc019SAndroid Build Coastguard Worker }
318*d83cc019SAndroid Build Coastguard Worker "cmask" {
319*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_CMASK;
320*d83cc019SAndroid Build Coastguard Worker 	return CMASK;
321*d83cc019SAndroid Build Coastguard Worker }
322*d83cc019SAndroid Build Coastguard Worker "imsd" {
323*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = 0;
324*d83cc019SAndroid Build Coastguard Worker 	return IMSD;
325*d83cc019SAndroid Build Coastguard Worker }
326*d83cc019SAndroid Build Coastguard Worker "lmsd" {
327*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = 1;
328*d83cc019SAndroid Build Coastguard Worker 	return LMSD;
329*d83cc019SAndroid Build Coastguard Worker }
330*d83cc019SAndroid Build Coastguard Worker "ims" {
331*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = 0;
332*d83cc019SAndroid Build Coastguard Worker 	return IMS;
333*d83cc019SAndroid Build Coastguard Worker }
334*d83cc019SAndroid Build Coastguard Worker "lms" {
335*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = 16;
336*d83cc019SAndroid Build Coastguard Worker 	return LMS;
337*d83cc019SAndroid Build Coastguard Worker }
338*d83cc019SAndroid Build Coastguard Worker 
339*d83cc019SAndroid Build Coastguard Worker <REG>. {
340*d83cc019SAndroid Build Coastguard Worker 	yyless(0);
341*d83cc019SAndroid Build Coastguard Worker 	BEGIN(INITIAL);
342*d83cc019SAndroid Build Coastguard Worker }
343*d83cc019SAndroid Build Coastguard Worker 
344*d83cc019SAndroid Build Coastguard Worker  /*
345*d83cc019SAndroid Build Coastguard Worker   * Lexing of register types should probably require the ":" symbol specified
346*d83cc019SAndroid Build Coastguard Worker   * in the BNF of the assembly, but our existing source didn't use that syntax.
347*d83cc019SAndroid Build Coastguard Worker   */
348*d83cc019SAndroid Build Coastguard Worker "UD" { return TYPE_UD; }
349*d83cc019SAndroid Build Coastguard Worker ":UD" { return TYPE_UD; }
350*d83cc019SAndroid Build Coastguard Worker "D" { return TYPE_D; }
351*d83cc019SAndroid Build Coastguard Worker ":D" { return TYPE_D; }
352*d83cc019SAndroid Build Coastguard Worker "UW" { return TYPE_UW; }
353*d83cc019SAndroid Build Coastguard Worker ":UW" { return TYPE_UW; }
354*d83cc019SAndroid Build Coastguard Worker "W" { return TYPE_W; }
355*d83cc019SAndroid Build Coastguard Worker ":W" { return TYPE_W; }
356*d83cc019SAndroid Build Coastguard Worker "UB" { return TYPE_UB; }
357*d83cc019SAndroid Build Coastguard Worker ":UB" { return TYPE_UB; }
358*d83cc019SAndroid Build Coastguard Worker "B" { return TYPE_B; }
359*d83cc019SAndroid Build Coastguard Worker ":B" { return TYPE_B; }
360*d83cc019SAndroid Build Coastguard Worker "F" { return TYPE_F; }
361*d83cc019SAndroid Build Coastguard Worker ":F" { return TYPE_F; }
362*d83cc019SAndroid Build Coastguard Worker "VF" {return TYPE_VF; }
363*d83cc019SAndroid Build Coastguard Worker ":VF" {return TYPE_VF; }
364*d83cc019SAndroid Build Coastguard Worker "V" { return TYPE_V; }
365*d83cc019SAndroid Build Coastguard Worker ":V" { return TYPE_V; }
366*d83cc019SAndroid Build Coastguard Worker 
367*d83cc019SAndroid Build Coastguard Worker #".kernel" { return KERNEL_PRAGMA;}
368*d83cc019SAndroid Build Coastguard Worker #".end_kernel" { return END_KERNEL_PRAGMA;}
369*d83cc019SAndroid Build Coastguard Worker #".code" { return CODE_PRAGMA;}
370*d83cc019SAndroid Build Coastguard Worker #".end_code" { return END_CODE_PRAGMA;}
371*d83cc019SAndroid Build Coastguard Worker ".reg_count_payload" { return REG_COUNT_PAYLOAD_PRAGMA; }
372*d83cc019SAndroid Build Coastguard Worker ".reg_count_total" { return REG_COUNT_TOTAL_PRAGMA; }
373*d83cc019SAndroid Build Coastguard Worker ".default_execution_size" { return DEFAULT_EXEC_SIZE_PRAGMA; }
374*d83cc019SAndroid Build Coastguard Worker ".default_register_type" { return DEFAULT_REG_TYPE_PRAGMA; }
375*d83cc019SAndroid Build Coastguard Worker ".declare" { return DECLARE_PRAGMA; }
376*d83cc019SAndroid Build Coastguard Worker "Base" { return BASE; }
377*d83cc019SAndroid Build Coastguard Worker "ElementSize" { return ELEMENTSIZE; }
378*d83cc019SAndroid Build Coastguard Worker "SrcRegion" { return SRCREGION; }
379*d83cc019SAndroid Build Coastguard Worker "DstRegion" { return DSTREGION; }
380*d83cc019SAndroid Build Coastguard Worker "Type" { return TYPE; }
381*d83cc019SAndroid Build Coastguard Worker 
382*d83cc019SAndroid Build Coastguard Worker 
383*d83cc019SAndroid Build Coastguard Worker ".sat" { return SATURATE; }
384*d83cc019SAndroid Build Coastguard Worker "align1" { return ALIGN1; }
385*d83cc019SAndroid Build Coastguard Worker "align16" { return ALIGN16; }
386*d83cc019SAndroid Build Coastguard Worker "sechalf" { return SECHALF; }
387*d83cc019SAndroid Build Coastguard Worker "compr" { return COMPR; }
388*d83cc019SAndroid Build Coastguard Worker "switch" { return SWITCH; }
389*d83cc019SAndroid Build Coastguard Worker "atomic" { return ATOMIC; }
390*d83cc019SAndroid Build Coastguard Worker "noddchk" { return NODDCHK; }
391*d83cc019SAndroid Build Coastguard Worker "noddclr" { return NODDCLR; }
392*d83cc019SAndroid Build Coastguard Worker "mask_disable" { return MASK_DISABLE; }
393*d83cc019SAndroid Build Coastguard Worker "nomask" { return MASK_DISABLE; }
394*d83cc019SAndroid Build Coastguard Worker "breakpoint" { return BREAKPOINT; }
395*d83cc019SAndroid Build Coastguard Worker "accwrctrl" { return ACCWRCTRL; }
396*d83cc019SAndroid Build Coastguard Worker "EOT" { return EOT; }
397*d83cc019SAndroid Build Coastguard Worker 
398*d83cc019SAndroid Build Coastguard Worker  /* extended math functions */
399*d83cc019SAndroid Build Coastguard Worker "inv" { yylval.integer = BRW_MATH_FUNCTION_INV; return SIN; }
400*d83cc019SAndroid Build Coastguard Worker "log" { yylval.integer = BRW_MATH_FUNCTION_LOG; return LOG; }
401*d83cc019SAndroid Build Coastguard Worker "exp" { yylval.integer = BRW_MATH_FUNCTION_EXP; return EXP; }
402*d83cc019SAndroid Build Coastguard Worker "sqrt" { yylval.integer = BRW_MATH_FUNCTION_SQRT; return SQRT; }
403*d83cc019SAndroid Build Coastguard Worker "rsq" { yylval.integer = BRW_MATH_FUNCTION_RSQ; return RSQ; }
404*d83cc019SAndroid Build Coastguard Worker "pow" { yylval.integer = BRW_MATH_FUNCTION_POW; return POW; }
405*d83cc019SAndroid Build Coastguard Worker "sin" { yylval.integer = BRW_MATH_FUNCTION_SIN; return SIN; }
406*d83cc019SAndroid Build Coastguard Worker "cos" { yylval.integer = BRW_MATH_FUNCTION_COS; return COS; }
407*d83cc019SAndroid Build Coastguard Worker "sincos" { yylval.integer = BRW_MATH_FUNCTION_SINCOS; return SINCOS; }
408*d83cc019SAndroid Build Coastguard Worker "intdiv" {
409*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT;
410*d83cc019SAndroid Build Coastguard Worker 	return INTDIV;
411*d83cc019SAndroid Build Coastguard Worker }
412*d83cc019SAndroid Build Coastguard Worker "intmod" {
413*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_MATH_FUNCTION_INT_DIV_REMAINDER;
414*d83cc019SAndroid Build Coastguard Worker 	return INTMOD;
415*d83cc019SAndroid Build Coastguard Worker }
416*d83cc019SAndroid Build Coastguard Worker "intdivmod" {
417*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER;
418*d83cc019SAndroid Build Coastguard Worker 	return INTDIVMOD;
419*d83cc019SAndroid Build Coastguard Worker }
420*d83cc019SAndroid Build Coastguard Worker 
421*d83cc019SAndroid Build Coastguard Worker "signed" { return SIGNED; }
422*d83cc019SAndroid Build Coastguard Worker "scalar" { return SCALAR; }
423*d83cc019SAndroid Build Coastguard Worker 
424*d83cc019SAndroid Build Coastguard Worker  /* predicate control */
425*d83cc019SAndroid Build Coastguard Worker ".anyv" { return ANYV; }
426*d83cc019SAndroid Build Coastguard Worker ".allv" { return ALLV; }
427*d83cc019SAndroid Build Coastguard Worker ".any2h" { return ANY2H; }
428*d83cc019SAndroid Build Coastguard Worker ".all2h" { return ALL2H; }
429*d83cc019SAndroid Build Coastguard Worker ".any4h" { return ANY4H; }
430*d83cc019SAndroid Build Coastguard Worker ".all4h" { return ALL4H; }
431*d83cc019SAndroid Build Coastguard Worker ".any8h" { return ANY8H; }
432*d83cc019SAndroid Build Coastguard Worker ".all8h" { return ALL8H; }
433*d83cc019SAndroid Build Coastguard Worker ".any16h" { return ANY16H; }
434*d83cc019SAndroid Build Coastguard Worker ".all16h" { return ALL16H; }
435*d83cc019SAndroid Build Coastguard Worker 
436*d83cc019SAndroid Build Coastguard Worker ".z" { yylval.integer = BRW_CONDITIONAL_Z; return ZERO; }
437*d83cc019SAndroid Build Coastguard Worker ".e" { yylval.integer = BRW_CONDITIONAL_Z; return EQUAL; }
438*d83cc019SAndroid Build Coastguard Worker ".nz" { yylval.integer = BRW_CONDITIONAL_NZ; return NOT_ZERO; }
439*d83cc019SAndroid Build Coastguard Worker ".ne" { yylval.integer = BRW_CONDITIONAL_NZ; return NOT_EQUAL; }
440*d83cc019SAndroid Build Coastguard Worker ".g" { yylval.integer = BRW_CONDITIONAL_G; return GREATER; }
441*d83cc019SAndroid Build Coastguard Worker ".ge" { yylval.integer = BRW_CONDITIONAL_GE; return GREATER_EQUAL; }
442*d83cc019SAndroid Build Coastguard Worker ".l" { yylval.integer = BRW_CONDITIONAL_L; return LESS; }
443*d83cc019SAndroid Build Coastguard Worker ".le" { yylval.integer = BRW_CONDITIONAL_LE; return LESS_EQUAL; }
444*d83cc019SAndroid Build Coastguard Worker ".r" { yylval.integer = BRW_CONDITIONAL_R; return ROUND_INCREMENT; }
445*d83cc019SAndroid Build Coastguard Worker ".o" { yylval.integer = BRW_CONDITIONAL_O; return OVERFLOW; }
446*d83cc019SAndroid Build Coastguard Worker ".u" { yylval.integer = BRW_CONDITIONAL_U; return UNORDERED; }
447*d83cc019SAndroid Build Coastguard Worker 
448*d83cc019SAndroid Build Coastguard Worker [a-zA-Z_][0-9a-zA-Z_]* {
449*d83cc019SAndroid Build Coastguard Worker            yylval.string = strdup(yytext);
450*d83cc019SAndroid Build Coastguard Worker            return STRING;
451*d83cc019SAndroid Build Coastguard Worker }
452*d83cc019SAndroid Build Coastguard Worker 
453*d83cc019SAndroid Build Coastguard Worker 0x[0-9a-fA-F][0-9a-fA-F]* {
454*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = strtoul(yytext + 2, NULL, 16);
455*d83cc019SAndroid Build Coastguard Worker 	return INTEGER;
456*d83cc019SAndroid Build Coastguard Worker }
457*d83cc019SAndroid Build Coastguard Worker [0-9][0-9]* {
458*d83cc019SAndroid Build Coastguard Worker 	yylval.integer = strtoul(yytext, NULL, 10);
459*d83cc019SAndroid Build Coastguard Worker 	return INTEGER;
460*d83cc019SAndroid Build Coastguard Worker }
461*d83cc019SAndroid Build Coastguard Worker 
462*d83cc019SAndroid Build Coastguard Worker <INITIAL>[-]?[0-9]+"."[0-9]+ {
463*d83cc019SAndroid Build Coastguard Worker 	yylval.number = strtod(yytext, NULL);
464*d83cc019SAndroid Build Coastguard Worker 	return NUMBER;
465*d83cc019SAndroid Build Coastguard Worker }
466*d83cc019SAndroid Build Coastguard Worker 
467*d83cc019SAndroid Build Coastguard Worker [ \t]+ { } /* eat up whitespace */
468*d83cc019SAndroid Build Coastguard Worker 
469*d83cc019SAndroid Build Coastguard Worker \n { yycolumn = 1; }
470*d83cc019SAndroid Build Coastguard Worker 
471*d83cc019SAndroid Build Coastguard Worker . {
472*d83cc019SAndroid Build Coastguard Worker 	fprintf(stderr, "%s: %d: %s at \"%s\"\n",
473*d83cc019SAndroid Build Coastguard Worker 		input_filename, yylineno, "unexpected token", lex_text());
474*d83cc019SAndroid Build Coastguard Worker   }
475*d83cc019SAndroid Build Coastguard Worker %%
476*d83cc019SAndroid Build Coastguard Worker 
477*d83cc019SAndroid Build Coastguard Worker char *
478*d83cc019SAndroid Build Coastguard Worker lex_text(void)
479*d83cc019SAndroid Build Coastguard Worker {
480*d83cc019SAndroid Build Coastguard Worker 	return yytext;
481*d83cc019SAndroid Build Coastguard Worker   (void) yyunput;
482*d83cc019SAndroid Build Coastguard Worker }
483*d83cc019SAndroid Build Coastguard Worker 
484*d83cc019SAndroid Build Coastguard Worker #ifndef yywrap
485*d83cc019SAndroid Build Coastguard Worker int yywrap() { return 1; }
486*d83cc019SAndroid Build Coastguard Worker #endif
487*d83cc019SAndroid Build Coastguard Worker 
488