1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright (c) 2013 Rob Clark <[email protected]>
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21*61046927SAndroid Build Coastguard Worker * SOFTWARE.
22*61046927SAndroid Build Coastguard Worker */
23*61046927SAndroid Build Coastguard Worker
24*61046927SAndroid Build Coastguard Worker %{
25*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
26*61046927SAndroid Build Coastguard Worker #include "util/ralloc.h"
27*61046927SAndroid Build Coastguard Worker #include "ir3/ir3.h"
28*61046927SAndroid Build Coastguard Worker #include "ir3_parser.h"
29*61046927SAndroid Build Coastguard Worker
30*61046927SAndroid Build Coastguard Worker #define YY_NO_INPUT
31*61046927SAndroid Build Coastguard Worker #define YY_NO_UNPUT
32*61046927SAndroid Build Coastguard Worker #define TOKEN(t) (ir3_yylval.tok = t)
33*61046927SAndroid Build Coastguard Worker extern YYSTYPE ir3_yylval;
34*61046927SAndroid Build Coastguard Worker extern void *ir3_parser_dead_ctx;
35*61046927SAndroid Build Coastguard Worker
36*61046927SAndroid Build Coastguard Worker void ir3_yyset_input(FILE *f);
37*61046927SAndroid Build Coastguard Worker
ir3_yyset_input(FILE * f)38*61046927SAndroid Build Coastguard Worker void ir3_yyset_input(FILE *f)
39*61046927SAndroid Build Coastguard Worker {
40*61046927SAndroid Build Coastguard Worker YY_FLUSH_BUFFER;
41*61046927SAndroid Build Coastguard Worker ir3_yyin = f;
42*61046927SAndroid Build Coastguard Worker }
43*61046927SAndroid Build Coastguard Worker
parse_wrmask(const char * src)44*61046927SAndroid Build Coastguard Worker static int parse_wrmask(const char *src)
45*61046927SAndroid Build Coastguard Worker {
46*61046927SAndroid Build Coastguard Worker int i, num = 0;
47*61046927SAndroid Build Coastguard Worker for (i = 0; i < 4; i++) {
48*61046927SAndroid Build Coastguard Worker if ("xyzw"[i] == src[1]) {
49*61046927SAndroid Build Coastguard Worker num |= (1 << i);
50*61046927SAndroid Build Coastguard Worker src++;
51*61046927SAndroid Build Coastguard Worker }
52*61046927SAndroid Build Coastguard Worker }
53*61046927SAndroid Build Coastguard Worker return num;
54*61046927SAndroid Build Coastguard Worker }
55*61046927SAndroid Build Coastguard Worker
parse_reg(const char * str)56*61046927SAndroid Build Coastguard Worker static int parse_reg(const char *str)
57*61046927SAndroid Build Coastguard Worker {
58*61046927SAndroid Build Coastguard Worker int num = 0;
59*61046927SAndroid Build Coastguard Worker if (str[0] == 'h') {
60*61046927SAndroid Build Coastguard Worker str++;
61*61046927SAndroid Build Coastguard Worker num++;
62*61046927SAndroid Build Coastguard Worker }
63*61046927SAndroid Build Coastguard Worker str++;
64*61046927SAndroid Build Coastguard Worker num += strtol(str, (char **)&str, 10) << 3;
65*61046927SAndroid Build Coastguard Worker switch (str[1]) {
66*61046927SAndroid Build Coastguard Worker case 'x': num += 0; break;
67*61046927SAndroid Build Coastguard Worker case 'y': num += 2; break;
68*61046927SAndroid Build Coastguard Worker case 'z': num += 4; break;
69*61046927SAndroid Build Coastguard Worker case 'w': num += 6; break;
70*61046927SAndroid Build Coastguard Worker default: assert(0); break;
71*61046927SAndroid Build Coastguard Worker }
72*61046927SAndroid Build Coastguard Worker return num;
73*61046927SAndroid Build Coastguard Worker }
74*61046927SAndroid Build Coastguard Worker
75*61046927SAndroid Build Coastguard Worker %}
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker %option noyywrap
78*61046927SAndroid Build Coastguard Worker %option prefix="ir3_yy"
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Worker %%
81*61046927SAndroid Build Coastguard Worker "\n" yylineno++;
82*61046927SAndroid Build Coastguard Worker [ \t] ; /* ignore whitespace */
83*61046927SAndroid Build Coastguard Worker ";"[^\n]*"\n" yylineno++; /* ignore comments */
84*61046927SAndroid Build Coastguard Worker "(0.0)" ir3_yylval.num = 0; return T_FLUT_0_0;
85*61046927SAndroid Build Coastguard Worker "(0.5)" ir3_yylval.num = 1; return T_FLUT_0_5;
86*61046927SAndroid Build Coastguard Worker "(1.0)" ir3_yylval.num = 2; return T_FLUT_1_0;
87*61046927SAndroid Build Coastguard Worker "(2.0)" ir3_yylval.num = 3; return T_FLUT_2_0;
88*61046927SAndroid Build Coastguard Worker "(e)" ir3_yylval.num = 4; return T_FLUT_E;
89*61046927SAndroid Build Coastguard Worker "(pi)" ir3_yylval.num = 5; return T_FLUT_PI;
90*61046927SAndroid Build Coastguard Worker "(1/pi)" ir3_yylval.num = 6; return T_FLUT_INV_PI;
91*61046927SAndroid Build Coastguard Worker "(1/log2(e))" ir3_yylval.num = 7; return T_FLUT_INV_LOG2_E;
92*61046927SAndroid Build Coastguard Worker "(log2(e))" ir3_yylval.num = 8; return T_FLUT_LOG2_E;
93*61046927SAndroid Build Coastguard Worker "(1/log2(10))" ir3_yylval.num = 9; return T_FLUT_INV_LOG2_10;
94*61046927SAndroid Build Coastguard Worker "(log2(10))" ir3_yylval.num = 10; return T_FLUT_LOG2_10;
95*61046927SAndroid Build Coastguard Worker "(4.0)" ir3_yylval.num = 11; return T_FLUT_4_0;
96*61046927SAndroid Build Coastguard Worker [0-9]+"."[0-9]+ ir3_yylval.flt = strtod(yytext, NULL); return T_FLOAT;
97*61046927SAndroid Build Coastguard Worker [0-9]* ir3_yylval.num = strtoul(yytext, NULL, 0); return T_INT;
98*61046927SAndroid Build Coastguard Worker "0x"[0-9a-fA-F]* ir3_yylval.num = strtoul(yytext, NULL, 0); return T_HEX;
99*61046927SAndroid Build Coastguard Worker "raw 0x"[0-9a-fA-F]* ir3_yylval.u64 = strtoull(yytext + 4, NULL, 0); return T_RAW;
100*61046927SAndroid Build Coastguard Worker "@localsize" return TOKEN(T_A_LOCALSIZE);
101*61046927SAndroid Build Coastguard Worker "@const" return TOKEN(T_A_CONST);
102*61046927SAndroid Build Coastguard Worker "@buf" return TOKEN(T_A_BUF);
103*61046927SAndroid Build Coastguard Worker "@invocationid" return TOKEN(T_A_INVOCATIONID);
104*61046927SAndroid Build Coastguard Worker "@wgid" return TOKEN(T_A_WGID);
105*61046927SAndroid Build Coastguard Worker "@numwg" return TOKEN(T_A_NUMWG);
106*61046927SAndroid Build Coastguard Worker "@branchstack" return TOKEN(T_A_BRANCHSTACK);
107*61046927SAndroid Build Coastguard Worker "@in" return TOKEN(T_A_IN);
108*61046927SAndroid Build Coastguard Worker "@out" return TOKEN(T_A_OUT);
109*61046927SAndroid Build Coastguard Worker "@tex" return TOKEN(T_A_TEX);
110*61046927SAndroid Build Coastguard Worker "@pvtmem" return TOKEN(T_A_PVTMEM);
111*61046927SAndroid Build Coastguard Worker "@earlypreamble" return TOKEN(T_A_EARLYPREAMBLE);
112*61046927SAndroid Build Coastguard Worker "(sy)" return TOKEN(T_SY);
113*61046927SAndroid Build Coastguard Worker "(ss)" return TOKEN(T_SS);
114*61046927SAndroid Build Coastguard Worker "(absneg)" return TOKEN(T_ABSNEG);
115*61046927SAndroid Build Coastguard Worker "(neg)" return TOKEN(T_NEG);
116*61046927SAndroid Build Coastguard Worker "(abs)" return TOKEN(T_ABS);
117*61046927SAndroid Build Coastguard Worker "(r)" return TOKEN(T_R);
118*61046927SAndroid Build Coastguard Worker "(last)" return TOKEN(T_LAST);
119*61046927SAndroid Build Coastguard Worker "(ul)" return TOKEN(T_UL);
120*61046927SAndroid Build Coastguard Worker "(even)" return TOKEN(T_EVEN);
121*61046927SAndroid Build Coastguard Worker "(pos_infinity)" return TOKEN(T_POS_INFINITY);
122*61046927SAndroid Build Coastguard Worker "(neg_infinity)" return TOKEN(T_NEG_INFINITY);
123*61046927SAndroid Build Coastguard Worker "(ei)" return TOKEN(T_EI);
124*61046927SAndroid Build Coastguard Worker "(jp)" return TOKEN(T_JP);
125*61046927SAndroid Build Coastguard Worker "(eq)" return TOKEN(T_EQ_FLAG);
126*61046927SAndroid Build Coastguard Worker "(sat)" return TOKEN(T_SAT);
127*61046927SAndroid Build Coastguard Worker "(rpt"[0-7]")" ir3_yylval.num = strtol(yytext+4, NULL, 10); return T_RPT;
128*61046927SAndroid Build Coastguard Worker "(nop"[0-7]")" ir3_yylval.num = strtol(yytext+4, NULL, 10); return T_NOP;
129*61046927SAndroid Build Coastguard Worker "("[x]?[y]?[z]?[w]?")" ir3_yylval.num = parse_wrmask(yytext); return T_WRMASK;
130*61046927SAndroid Build Coastguard Worker
131*61046927SAndroid Build Coastguard Worker [h]?"r"[0-9]+"."[xyzw] ir3_yylval.num = parse_reg(yytext); return T_REGISTER;
132*61046927SAndroid Build Coastguard Worker [h]?"c"[0-9]+"."[xyzw] ir3_yylval.num = parse_reg(yytext); return T_CONSTANT;
133*61046927SAndroid Build Coastguard Worker "a0.x" return T_A0;
134*61046927SAndroid Build Coastguard Worker "a1.x" return T_A1;
135*61046927SAndroid Build Coastguard Worker "p0."[xyzw] ir3_yylval.num = parse_reg(yytext); return T_P0;
136*61046927SAndroid Build Coastguard Worker "w"[0-9]+ ir3_yylval.num = strtol(yytext+1, NULL, 10); return T_W;
137*61046927SAndroid Build Coastguard Worker "s#"[0-9]+ ir3_yylval.num = strtol(yytext+2, NULL, 10); return T_SAMP;
138*61046927SAndroid Build Coastguard Worker "t#"[0-9]+ ir3_yylval.num = strtol(yytext+2, NULL, 10); return T_TEX;
139*61046927SAndroid Build Coastguard Worker
140*61046927SAndroid Build Coastguard Worker /* category 0: */
141*61046927SAndroid Build Coastguard Worker "nop" return TOKEN(T_OP_NOP);
142*61046927SAndroid Build Coastguard Worker "br" return TOKEN(T_OP_BR);
143*61046927SAndroid Build Coastguard Worker "brao" return TOKEN(T_OP_BRAO);
144*61046927SAndroid Build Coastguard Worker "braa" return TOKEN(T_OP_BRAA);
145*61046927SAndroid Build Coastguard Worker "brac" return TOKEN(T_OP_BRAC);
146*61046927SAndroid Build Coastguard Worker "bany" return TOKEN(T_OP_BANY);
147*61046927SAndroid Build Coastguard Worker "ball" return TOKEN(T_OP_BALL);
148*61046927SAndroid Build Coastguard Worker "brax" return TOKEN(T_OP_BRAX);
149*61046927SAndroid Build Coastguard Worker "jump" return TOKEN(T_OP_JUMP);
150*61046927SAndroid Build Coastguard Worker "call" return TOKEN(T_OP_CALL);
151*61046927SAndroid Build Coastguard Worker "ret" return TOKEN(T_OP_RET);
152*61046927SAndroid Build Coastguard Worker "kill" return TOKEN(T_OP_KILL);
153*61046927SAndroid Build Coastguard Worker "end" return TOKEN(T_OP_END);
154*61046927SAndroid Build Coastguard Worker "emit" return TOKEN(T_OP_EMIT);
155*61046927SAndroid Build Coastguard Worker "cut" return TOKEN(T_OP_CUT);
156*61046927SAndroid Build Coastguard Worker "chmask" return TOKEN(T_OP_CHMASK);
157*61046927SAndroid Build Coastguard Worker "chsh" return TOKEN(T_OP_CHSH);
158*61046927SAndroid Build Coastguard Worker "flow_rev" return TOKEN(T_OP_FLOW_REV);
159*61046927SAndroid Build Coastguard Worker "bkt" return TOKEN(T_OP_BKT);
160*61046927SAndroid Build Coastguard Worker "stks" return TOKEN(T_OP_STKS);
161*61046927SAndroid Build Coastguard Worker "stkr" return TOKEN(T_OP_STKR);
162*61046927SAndroid Build Coastguard Worker "xset" return TOKEN(T_OP_XSET);
163*61046927SAndroid Build Coastguard Worker "xclr" return TOKEN(T_OP_XCLR);
164*61046927SAndroid Build Coastguard Worker "getlast" return TOKEN(T_OP_GETLAST);
165*61046927SAndroid Build Coastguard Worker "getone" return TOKEN(T_OP_GETONE);
166*61046927SAndroid Build Coastguard Worker "dbg" return TOKEN(T_OP_DBG);
167*61046927SAndroid Build Coastguard Worker "shps" return TOKEN(T_OP_SHPS);
168*61046927SAndroid Build Coastguard Worker "shpe" return TOKEN(T_OP_SHPE);
169*61046927SAndroid Build Coastguard Worker "predt" return TOKEN(T_OP_PREDT);
170*61046927SAndroid Build Coastguard Worker "predf" return TOKEN(T_OP_PREDF);
171*61046927SAndroid Build Coastguard Worker "prede" return TOKEN(T_OP_PREDE);
172*61046927SAndroid Build Coastguard Worker
173*61046927SAndroid Build Coastguard Worker /* category 1: */
174*61046927SAndroid Build Coastguard Worker "movmsk" return TOKEN(T_OP_MOVMSK);
175*61046927SAndroid Build Coastguard Worker "mova1" return TOKEN(T_OP_MOVA1);
176*61046927SAndroid Build Coastguard Worker "mova" return TOKEN(T_OP_MOVA);
177*61046927SAndroid Build Coastguard Worker "mov" return TOKEN(T_OP_MOV);
178*61046927SAndroid Build Coastguard Worker "cov" return TOKEN(T_OP_COV);
179*61046927SAndroid Build Coastguard Worker "swz" return TOKEN(T_OP_SWZ);
180*61046927SAndroid Build Coastguard Worker "gat" return TOKEN(T_OP_GAT);
181*61046927SAndroid Build Coastguard Worker "sct" return TOKEN(T_OP_SCT);
182*61046927SAndroid Build Coastguard Worker
183*61046927SAndroid Build Coastguard Worker ("f16"|"f32"|"u16"|"u32"|"s16"|"s32"|"u8"|"u8_32"){2} ir3_yylval.str = yytext; return T_CAT1_TYPE_TYPE;
184*61046927SAndroid Build Coastguard Worker
185*61046927SAndroid Build Coastguard Worker /* category 2: */
186*61046927SAndroid Build Coastguard Worker "add.f" return TOKEN(T_OP_ADD_F);
187*61046927SAndroid Build Coastguard Worker "min.f" return TOKEN(T_OP_MIN_F);
188*61046927SAndroid Build Coastguard Worker "max.f" return TOKEN(T_OP_MAX_F);
189*61046927SAndroid Build Coastguard Worker "mul.f" return TOKEN(T_OP_MUL_F);
190*61046927SAndroid Build Coastguard Worker "sign.f" return TOKEN(T_OP_SIGN_F);
191*61046927SAndroid Build Coastguard Worker "cmps.f" return TOKEN(T_OP_CMPS_F);
192*61046927SAndroid Build Coastguard Worker "absneg.f" return TOKEN(T_OP_ABSNEG_F);
193*61046927SAndroid Build Coastguard Worker "cmpv.f" return TOKEN(T_OP_CMPV_F);
194*61046927SAndroid Build Coastguard Worker "floor.f" return TOKEN(T_OP_FLOOR_F);
195*61046927SAndroid Build Coastguard Worker "ceil.f" return TOKEN(T_OP_CEIL_F);
196*61046927SAndroid Build Coastguard Worker "rndne.f" return TOKEN(T_OP_RNDNE_F);
197*61046927SAndroid Build Coastguard Worker "rndaz.f" return TOKEN(T_OP_RNDAZ_F);
198*61046927SAndroid Build Coastguard Worker "trunc.f" return TOKEN(T_OP_TRUNC_F);
199*61046927SAndroid Build Coastguard Worker "add.u" return TOKEN(T_OP_ADD_U);
200*61046927SAndroid Build Coastguard Worker "add.s" return TOKEN(T_OP_ADD_S);
201*61046927SAndroid Build Coastguard Worker "sub.u" return TOKEN(T_OP_SUB_U);
202*61046927SAndroid Build Coastguard Worker "sub.s" return TOKEN(T_OP_SUB_S);
203*61046927SAndroid Build Coastguard Worker "cmps.u" return TOKEN(T_OP_CMPS_U);
204*61046927SAndroid Build Coastguard Worker "cmps.s" return TOKEN(T_OP_CMPS_S);
205*61046927SAndroid Build Coastguard Worker "min.u" return TOKEN(T_OP_MIN_U);
206*61046927SAndroid Build Coastguard Worker "min.s" return TOKEN(T_OP_MIN_S);
207*61046927SAndroid Build Coastguard Worker "max.u" return TOKEN(T_OP_MAX_U);
208*61046927SAndroid Build Coastguard Worker "max.s" return TOKEN(T_OP_MAX_S);
209*61046927SAndroid Build Coastguard Worker "absneg.s" return TOKEN(T_OP_ABSNEG_S);
210*61046927SAndroid Build Coastguard Worker "and.b" return TOKEN(T_OP_AND_B);
211*61046927SAndroid Build Coastguard Worker "or.b" return TOKEN(T_OP_OR_B);
212*61046927SAndroid Build Coastguard Worker "not.b" return TOKEN(T_OP_NOT_B);
213*61046927SAndroid Build Coastguard Worker "xor.b" return TOKEN(T_OP_XOR_B);
214*61046927SAndroid Build Coastguard Worker "cmpv.u" return TOKEN(T_OP_CMPV_U);
215*61046927SAndroid Build Coastguard Worker "cmpv.s" return TOKEN(T_OP_CMPV_S);
216*61046927SAndroid Build Coastguard Worker "mul.u24" return TOKEN(T_OP_MUL_U24);
217*61046927SAndroid Build Coastguard Worker "mul.s24" return TOKEN(T_OP_MUL_S24);
218*61046927SAndroid Build Coastguard Worker "mull.u" return TOKEN(T_OP_MULL_U);
219*61046927SAndroid Build Coastguard Worker "bfrev.b" return TOKEN(T_OP_BFREV_B);
220*61046927SAndroid Build Coastguard Worker "clz.s" return TOKEN(T_OP_CLZ_S);
221*61046927SAndroid Build Coastguard Worker "clz.b" return TOKEN(T_OP_CLZ_B);
222*61046927SAndroid Build Coastguard Worker "shl.b" return TOKEN(T_OP_SHL_B);
223*61046927SAndroid Build Coastguard Worker "shr.b" return TOKEN(T_OP_SHR_B);
224*61046927SAndroid Build Coastguard Worker "ashr.b" return TOKEN(T_OP_ASHR_B);
225*61046927SAndroid Build Coastguard Worker "bary.f" return TOKEN(T_OP_BARY_F);
226*61046927SAndroid Build Coastguard Worker "flat.b" return TOKEN(T_OP_FLAT_B);
227*61046927SAndroid Build Coastguard Worker "mgen.b" return TOKEN(T_OP_MGEN_B);
228*61046927SAndroid Build Coastguard Worker "getbit.b" return TOKEN(T_OP_GETBIT_B);
229*61046927SAndroid Build Coastguard Worker "setrm" return TOKEN(T_OP_SETRM);
230*61046927SAndroid Build Coastguard Worker "cbits.b" return TOKEN(T_OP_CBITS_B);
231*61046927SAndroid Build Coastguard Worker "shb" return TOKEN(T_OP_SHB);
232*61046927SAndroid Build Coastguard Worker "msad" return TOKEN(T_OP_MSAD);
233*61046927SAndroid Build Coastguard Worker
234*61046927SAndroid Build Coastguard Worker /* category 3: */
235*61046927SAndroid Build Coastguard Worker "mad.u16" return TOKEN(T_OP_MAD_U16);
236*61046927SAndroid Build Coastguard Worker "madsh.u16" return TOKEN(T_OP_MADSH_U16);
237*61046927SAndroid Build Coastguard Worker "mad.s16" return TOKEN(T_OP_MAD_S16);
238*61046927SAndroid Build Coastguard Worker "madsh.m16" return TOKEN(T_OP_MADSH_M16);
239*61046927SAndroid Build Coastguard Worker "mad.u24" return TOKEN(T_OP_MAD_U24);
240*61046927SAndroid Build Coastguard Worker "mad.s24" return TOKEN(T_OP_MAD_S24);
241*61046927SAndroid Build Coastguard Worker "mad.f16" return TOKEN(T_OP_MAD_F16);
242*61046927SAndroid Build Coastguard Worker "mad.f32" return TOKEN(T_OP_MAD_F32);
243*61046927SAndroid Build Coastguard Worker "sel.b16" return TOKEN(T_OP_SEL_B16);
244*61046927SAndroid Build Coastguard Worker "sel.b32" return TOKEN(T_OP_SEL_B32);
245*61046927SAndroid Build Coastguard Worker "sel.s16" return TOKEN(T_OP_SEL_S16);
246*61046927SAndroid Build Coastguard Worker "sel.s32" return TOKEN(T_OP_SEL_S32);
247*61046927SAndroid Build Coastguard Worker "sel.f16" return TOKEN(T_OP_SEL_F16);
248*61046927SAndroid Build Coastguard Worker "sel.f32" return TOKEN(T_OP_SEL_F32);
249*61046927SAndroid Build Coastguard Worker "sad.s16" return TOKEN(T_OP_SAD_S16);
250*61046927SAndroid Build Coastguard Worker "sad.s32" return TOKEN(T_OP_SAD_S32);
251*61046927SAndroid Build Coastguard Worker "shrm" return TOKEN(T_OP_SHRM);
252*61046927SAndroid Build Coastguard Worker "shlm" return TOKEN(T_OP_SHLM);
253*61046927SAndroid Build Coastguard Worker "shrg" return TOKEN(T_OP_SHRG);
254*61046927SAndroid Build Coastguard Worker "shlg" return TOKEN(T_OP_SHLG);
255*61046927SAndroid Build Coastguard Worker "andg" return TOKEN(T_OP_ANDG);
256*61046927SAndroid Build Coastguard Worker "dp2acc" return TOKEN(T_OP_DP2ACC);
257*61046927SAndroid Build Coastguard Worker "dp4acc" return TOKEN(T_OP_DP4ACC);
258*61046927SAndroid Build Coastguard Worker "wmm" return TOKEN(T_OP_WMM);
259*61046927SAndroid Build Coastguard Worker "wmm.accu" return TOKEN(T_OP_WMM_ACCU);
260*61046927SAndroid Build Coastguard Worker
261*61046927SAndroid Build Coastguard Worker /* category 4: */
262*61046927SAndroid Build Coastguard Worker "rcp" return TOKEN(T_OP_RCP);
263*61046927SAndroid Build Coastguard Worker "rsq" return TOKEN(T_OP_RSQ);
264*61046927SAndroid Build Coastguard Worker "log2" return TOKEN(T_OP_LOG2);
265*61046927SAndroid Build Coastguard Worker "exp2" return TOKEN(T_OP_EXP2);
266*61046927SAndroid Build Coastguard Worker "sin" return TOKEN(T_OP_SIN);
267*61046927SAndroid Build Coastguard Worker "cos" return TOKEN(T_OP_COS);
268*61046927SAndroid Build Coastguard Worker "sqrt" return TOKEN(T_OP_SQRT);
269*61046927SAndroid Build Coastguard Worker "hrsq" return TOKEN(T_OP_HRSQ);
270*61046927SAndroid Build Coastguard Worker "hlog2" return TOKEN(T_OP_HLOG2);
271*61046927SAndroid Build Coastguard Worker "hexp2" return TOKEN(T_OP_HEXP2);
272*61046927SAndroid Build Coastguard Worker
273*61046927SAndroid Build Coastguard Worker /* category 5: */
274*61046927SAndroid Build Coastguard Worker "isam" return TOKEN(T_OP_ISAM);
275*61046927SAndroid Build Coastguard Worker "isaml" return TOKEN(T_OP_ISAML);
276*61046927SAndroid Build Coastguard Worker "isamm" return TOKEN(T_OP_ISAMM);
277*61046927SAndroid Build Coastguard Worker "sam" return TOKEN(T_OP_SAM);
278*61046927SAndroid Build Coastguard Worker "samb" return TOKEN(T_OP_SAMB);
279*61046927SAndroid Build Coastguard Worker "saml" return TOKEN(T_OP_SAML);
280*61046927SAndroid Build Coastguard Worker "samgq" return TOKEN(T_OP_SAMGQ);
281*61046927SAndroid Build Coastguard Worker "getlod" return TOKEN(T_OP_GETLOD);
282*61046927SAndroid Build Coastguard Worker "conv" return TOKEN(T_OP_CONV);
283*61046927SAndroid Build Coastguard Worker "convm" return TOKEN(T_OP_CONVM);
284*61046927SAndroid Build Coastguard Worker "getsize" return TOKEN(T_OP_GETSIZE);
285*61046927SAndroid Build Coastguard Worker "getbuf" return TOKEN(T_OP_GETBUF);
286*61046927SAndroid Build Coastguard Worker "getpos" return TOKEN(T_OP_GETPOS);
287*61046927SAndroid Build Coastguard Worker "getinfo" return TOKEN(T_OP_GETINFO);
288*61046927SAndroid Build Coastguard Worker "dsx" return TOKEN(T_OP_DSX);
289*61046927SAndroid Build Coastguard Worker "dsy" return TOKEN(T_OP_DSY);
290*61046927SAndroid Build Coastguard Worker "gather4r" return TOKEN(T_OP_GATHER4R);
291*61046927SAndroid Build Coastguard Worker "gather4g" return TOKEN(T_OP_GATHER4G);
292*61046927SAndroid Build Coastguard Worker "gather4b" return TOKEN(T_OP_GATHER4B);
293*61046927SAndroid Build Coastguard Worker "gather4a" return TOKEN(T_OP_GATHER4A);
294*61046927SAndroid Build Coastguard Worker "samgp0" return TOKEN(T_OP_SAMGP0);
295*61046927SAndroid Build Coastguard Worker "samgp1" return TOKEN(T_OP_SAMGP1);
296*61046927SAndroid Build Coastguard Worker "samgp2" return TOKEN(T_OP_SAMGP2);
297*61046927SAndroid Build Coastguard Worker "samgp3" return TOKEN(T_OP_SAMGP3);
298*61046927SAndroid Build Coastguard Worker "dsxpp.1" return TOKEN(T_OP_DSXPP_1);
299*61046927SAndroid Build Coastguard Worker "dsypp.1" return TOKEN(T_OP_DSYPP_1);
300*61046927SAndroid Build Coastguard Worker "rgetpos" return TOKEN(T_OP_RGETPOS);
301*61046927SAndroid Build Coastguard Worker "rgetinfo" return TOKEN(T_OP_RGETINFO);
302*61046927SAndroid Build Coastguard Worker "brcst.active" return TOKEN(T_OP_BRCST_A);
303*61046927SAndroid Build Coastguard Worker "quad_shuffle.brcst" return TOKEN(T_OP_QSHUFFLE_BRCST);
304*61046927SAndroid Build Coastguard Worker "quad_shuffle.horiz" return TOKEN(T_OP_QSHUFFLE_H);
305*61046927SAndroid Build Coastguard Worker "quad_shuffle.vert" return TOKEN(T_OP_QSHUFFLE_V);
306*61046927SAndroid Build Coastguard Worker "quad_shuffle.diag" return TOKEN(T_OP_QSHUFFLE_DIAG);
307*61046927SAndroid Build Coastguard Worker "tcinv" return TOKEN(T_OP_TCINV);
308*61046927SAndroid Build Coastguard Worker
309*61046927SAndroid Build Coastguard Worker /* category 6: */
310*61046927SAndroid Build Coastguard Worker "ldg" return TOKEN(T_OP_LDG);
311*61046927SAndroid Build Coastguard Worker "ldg.a" return TOKEN(T_OP_LDG_A);
312*61046927SAndroid Build Coastguard Worker "ldg.k" return TOKEN(T_OP_LDG_K);
313*61046927SAndroid Build Coastguard Worker "ldl" return TOKEN(T_OP_LDL);
314*61046927SAndroid Build Coastguard Worker "ldp" return TOKEN(T_OP_LDP);
315*61046927SAndroid Build Coastguard Worker "stg" return TOKEN(T_OP_STG);
316*61046927SAndroid Build Coastguard Worker "stg.a" return TOKEN(T_OP_STG_A);
317*61046927SAndroid Build Coastguard Worker "stl" return TOKEN(T_OP_STL);
318*61046927SAndroid Build Coastguard Worker "stp" return TOKEN(T_OP_STP);
319*61046927SAndroid Build Coastguard Worker "ldib" return TOKEN(T_OP_LDIB);
320*61046927SAndroid Build Coastguard Worker "g2l" return TOKEN(T_OP_G2L);
321*61046927SAndroid Build Coastguard Worker "l2g" return TOKEN(T_OP_L2G);
322*61046927SAndroid Build Coastguard Worker "prefetch" return TOKEN(T_OP_PREFETCH);
323*61046927SAndroid Build Coastguard Worker "ldlw" return TOKEN(T_OP_LDLW);
324*61046927SAndroid Build Coastguard Worker "stlw" return TOKEN(T_OP_STLW);
325*61046927SAndroid Build Coastguard Worker "resfmt" return TOKEN(T_OP_RESFMT);
326*61046927SAndroid Build Coastguard Worker "resinfo" return TOKEN(T_OP_RESINFO);
327*61046927SAndroid Build Coastguard Worker "atomic.add" return TOKEN(T_OP_ATOMIC_ADD);
328*61046927SAndroid Build Coastguard Worker "atomic.sub" return TOKEN(T_OP_ATOMIC_SUB);
329*61046927SAndroid Build Coastguard Worker "atomic.xchg" return TOKEN(T_OP_ATOMIC_XCHG);
330*61046927SAndroid Build Coastguard Worker "atomic.inc" return TOKEN(T_OP_ATOMIC_INC);
331*61046927SAndroid Build Coastguard Worker "atomic.dec" return TOKEN(T_OP_ATOMIC_DEC);
332*61046927SAndroid Build Coastguard Worker "atomic.cmpxchg" return TOKEN(T_OP_ATOMIC_CMPXCHG);
333*61046927SAndroid Build Coastguard Worker "atomic.min" return TOKEN(T_OP_ATOMIC_MIN);
334*61046927SAndroid Build Coastguard Worker "atomic.max" return TOKEN(T_OP_ATOMIC_MAX);
335*61046927SAndroid Build Coastguard Worker "atomic.and" return TOKEN(T_OP_ATOMIC_AND);
336*61046927SAndroid Build Coastguard Worker "atomic.or" return TOKEN(T_OP_ATOMIC_OR);
337*61046927SAndroid Build Coastguard Worker "atomic.xor" return TOKEN(T_OP_ATOMIC_XOR);
338*61046927SAndroid Build Coastguard Worker "resinfo.b" return TOKEN(T_OP_RESINFO_B);
339*61046927SAndroid Build Coastguard Worker "ldib.b" return TOKEN(T_OP_LDIB_B);
340*61046927SAndroid Build Coastguard Worker "stib.b" return TOKEN(T_OP_STIB_B);
341*61046927SAndroid Build Coastguard Worker "atomic.b.add" return TOKEN(T_OP_ATOMIC_B_ADD);
342*61046927SAndroid Build Coastguard Worker "atomic.b.sub" return TOKEN(T_OP_ATOMIC_B_SUB);
343*61046927SAndroid Build Coastguard Worker "atomic.b.xchg" return TOKEN(T_OP_ATOMIC_B_XCHG);
344*61046927SAndroid Build Coastguard Worker "atomic.b.inc" return TOKEN(T_OP_ATOMIC_B_INC);
345*61046927SAndroid Build Coastguard Worker "atomic.b.dec" return TOKEN(T_OP_ATOMIC_B_DEC);
346*61046927SAndroid Build Coastguard Worker "atomic.b.cmpxchg" return TOKEN(T_OP_ATOMIC_B_CMPXCHG);
347*61046927SAndroid Build Coastguard Worker "atomic.b.min" return TOKEN(T_OP_ATOMIC_B_MIN);
348*61046927SAndroid Build Coastguard Worker "atomic.b.max" return TOKEN(T_OP_ATOMIC_B_MAX);
349*61046927SAndroid Build Coastguard Worker "atomic.b.and" return TOKEN(T_OP_ATOMIC_B_AND);
350*61046927SAndroid Build Coastguard Worker "atomic.b.or" return TOKEN(T_OP_ATOMIC_B_OR);
351*61046927SAndroid Build Coastguard Worker "atomic.b.xor" return TOKEN(T_OP_ATOMIC_B_XOR);
352*61046927SAndroid Build Coastguard Worker "atomic.s.add" return TOKEN(T_OP_ATOMIC_S_ADD);
353*61046927SAndroid Build Coastguard Worker "atomic.s.sub" return TOKEN(T_OP_ATOMIC_S_SUB);
354*61046927SAndroid Build Coastguard Worker "atomic.s.xchg" return TOKEN(T_OP_ATOMIC_S_XCHG);
355*61046927SAndroid Build Coastguard Worker "atomic.s.inc" return TOKEN(T_OP_ATOMIC_S_INC);
356*61046927SAndroid Build Coastguard Worker "atomic.s.dec" return TOKEN(T_OP_ATOMIC_S_DEC);
357*61046927SAndroid Build Coastguard Worker "atomic.s.cmpxchg" return TOKEN(T_OP_ATOMIC_S_CMPXCHG);
358*61046927SAndroid Build Coastguard Worker "atomic.s.min" return TOKEN(T_OP_ATOMIC_S_MIN);
359*61046927SAndroid Build Coastguard Worker "atomic.s.max" return TOKEN(T_OP_ATOMIC_S_MAX);
360*61046927SAndroid Build Coastguard Worker "atomic.s.and" return TOKEN(T_OP_ATOMIC_S_AND);
361*61046927SAndroid Build Coastguard Worker "atomic.s.or" return TOKEN(T_OP_ATOMIC_S_OR);
362*61046927SAndroid Build Coastguard Worker "atomic.s.xor" return TOKEN(T_OP_ATOMIC_S_XOR);
363*61046927SAndroid Build Coastguard Worker "atomic.g.add" return TOKEN(T_OP_ATOMIC_G_ADD);
364*61046927SAndroid Build Coastguard Worker "atomic.g.sub" return TOKEN(T_OP_ATOMIC_G_SUB);
365*61046927SAndroid Build Coastguard Worker "atomic.g.xchg" return TOKEN(T_OP_ATOMIC_G_XCHG);
366*61046927SAndroid Build Coastguard Worker "atomic.g.inc" return TOKEN(T_OP_ATOMIC_G_INC);
367*61046927SAndroid Build Coastguard Worker "atomic.g.dec" return TOKEN(T_OP_ATOMIC_G_DEC);
368*61046927SAndroid Build Coastguard Worker "atomic.g.cmpxchg" return TOKEN(T_OP_ATOMIC_G_CMPXCHG);
369*61046927SAndroid Build Coastguard Worker "atomic.g.min" return TOKEN(T_OP_ATOMIC_G_MIN);
370*61046927SAndroid Build Coastguard Worker "atomic.g.max" return TOKEN(T_OP_ATOMIC_G_MAX);
371*61046927SAndroid Build Coastguard Worker "atomic.g.and" return TOKEN(T_OP_ATOMIC_G_AND);
372*61046927SAndroid Build Coastguard Worker "atomic.g.or" return TOKEN(T_OP_ATOMIC_G_OR);
373*61046927SAndroid Build Coastguard Worker "atomic.g.xor" return TOKEN(T_OP_ATOMIC_G_XOR);
374*61046927SAndroid Build Coastguard Worker
375*61046927SAndroid Build Coastguard Worker "ldgb" return TOKEN(T_OP_LDGB);
376*61046927SAndroid Build Coastguard Worker "stgb" return TOKEN(T_OP_STGB);
377*61046927SAndroid Build Coastguard Worker "stib" return TOKEN(T_OP_STIB);
378*61046927SAndroid Build Coastguard Worker "ldc" return TOKEN(T_OP_LDC);
379*61046927SAndroid Build Coastguard Worker "ldlv" return TOKEN(T_OP_LDLV);
380*61046927SAndroid Build Coastguard Worker "getspid" return TOKEN(T_OP_GETSPID);
381*61046927SAndroid Build Coastguard Worker "getwid" return TOKEN(T_OP_GETWID);
382*61046927SAndroid Build Coastguard Worker "getfiberid" return TOKEN(T_OP_GETFIBERID);
383*61046927SAndroid Build Coastguard Worker "stc" return TOKEN(T_OP_STC);
384*61046927SAndroid Build Coastguard Worker "stsc" return TOKEN(T_OP_STSC);
385*61046927SAndroid Build Coastguard Worker
386*61046927SAndroid Build Coastguard Worker ("b16"|"b32"){1} ir3_yylval.str = yytext; return T_INSTR_TYPE;
387*61046927SAndroid Build Coastguard Worker
388*61046927SAndroid Build Coastguard Worker /* category 7: */
389*61046927SAndroid Build Coastguard Worker "bar" return TOKEN(T_OP_BAR);
390*61046927SAndroid Build Coastguard Worker "fence" return TOKEN(T_OP_FENCE);
391*61046927SAndroid Build Coastguard Worker "sleep.l" return TOKEN(T_OP_SLEEP);
392*61046927SAndroid Build Coastguard Worker "icinv" return TOKEN(T_OP_ICINV);
393*61046927SAndroid Build Coastguard Worker "dccln.all" return TOKEN(T_OP_DCCLN);
394*61046927SAndroid Build Coastguard Worker "dcinv.all" return TOKEN(T_OP_DCINV);
395*61046927SAndroid Build Coastguard Worker "dcflu.all" return TOKEN(T_OP_DCFLU);
396*61046927SAndroid Build Coastguard Worker "ccinv" return TOKEN(T_OP_CCINV);
397*61046927SAndroid Build Coastguard Worker "lock" return TOKEN(T_OP_LOCK);
398*61046927SAndroid Build Coastguard Worker "unlock" return TOKEN(T_OP_UNLOCK);
399*61046927SAndroid Build Coastguard Worker "alias" return TOKEN(T_OP_ALIAS);
400*61046927SAndroid Build Coastguard Worker
401*61046927SAndroid Build Coastguard Worker "print" return TOKEN(T_OP_PRINT);
402*61046927SAndroid Build Coastguard Worker
403*61046927SAndroid Build Coastguard Worker "f16" return TOKEN(T_TYPE_F16);
404*61046927SAndroid Build Coastguard Worker "f32" return TOKEN(T_TYPE_F32);
405*61046927SAndroid Build Coastguard Worker "u16" return TOKEN(T_TYPE_U16);
406*61046927SAndroid Build Coastguard Worker "u32" return TOKEN(T_TYPE_U32);
407*61046927SAndroid Build Coastguard Worker "s16" return TOKEN(T_TYPE_S16);
408*61046927SAndroid Build Coastguard Worker "s32" return TOKEN(T_TYPE_S32);
409*61046927SAndroid Build Coastguard Worker "u8" return TOKEN(T_TYPE_U8);
410*61046927SAndroid Build Coastguard Worker "u8_32" return TOKEN(T_TYPE_U8_32);
411*61046927SAndroid Build Coastguard Worker
412*61046927SAndroid Build Coastguard Worker "untyped" return TOKEN(T_UNTYPED);
413*61046927SAndroid Build Coastguard Worker "typed" return TOKEN(T_TYPED);
414*61046927SAndroid Build Coastguard Worker
415*61046927SAndroid Build Coastguard Worker "unsigned" return TOKEN(T_UNSIGNED);
416*61046927SAndroid Build Coastguard Worker "mixed" return TOKEN(T_MIXED);
417*61046927SAndroid Build Coastguard Worker "low" return TOKEN(T_LOW);
418*61046927SAndroid Build Coastguard Worker "high" return TOKEN(T_HIGH);
419*61046927SAndroid Build Coastguard Worker
420*61046927SAndroid Build Coastguard Worker "1d" return TOKEN(T_1D);
421*61046927SAndroid Build Coastguard Worker "2d" return TOKEN(T_2D);
422*61046927SAndroid Build Coastguard Worker "3d" return TOKEN(T_3D);
423*61046927SAndroid Build Coastguard Worker "4d" return TOKEN(T_4D);
424*61046927SAndroid Build Coastguard Worker
425*61046927SAndroid Build Coastguard Worker "lt" return TOKEN(T_LT);
426*61046927SAndroid Build Coastguard Worker "le" return TOKEN(T_LE);
427*61046927SAndroid Build Coastguard Worker "gt" return TOKEN(T_GT);
428*61046927SAndroid Build Coastguard Worker "ge" return TOKEN(T_GE);
429*61046927SAndroid Build Coastguard Worker "eq" return TOKEN(T_EQ);
430*61046927SAndroid Build Coastguard Worker "ne" return TOKEN(T_NE);
431*61046927SAndroid Build Coastguard Worker
432*61046927SAndroid Build Coastguard Worker "a" return 'a';
433*61046927SAndroid Build Coastguard Worker "o" return 'o';
434*61046927SAndroid Build Coastguard Worker "p" return 'p';
435*61046927SAndroid Build Coastguard Worker "s2en" return TOKEN(T_S2EN);
436*61046927SAndroid Build Coastguard Worker "s" return 's';
437*61046927SAndroid Build Coastguard Worker "k" return 'k';
438*61046927SAndroid Build Coastguard Worker "u" return 'u';
439*61046927SAndroid Build Coastguard Worker "v" return 'v';
440*61046927SAndroid Build Coastguard Worker "base"[0-9]+ ir3_yylval.num = strtol(yytext+4, NULL, 10); return T_BASE;
441*61046927SAndroid Build Coastguard Worker "offset"[0-9]+ ir3_yylval.num = strtol(yytext+6, NULL, 10); return T_OFFSET;
442*61046927SAndroid Build Coastguard Worker "uniform" return T_UNIFORM;
443*61046927SAndroid Build Coastguard Worker "nonuniform" return T_NONUNIFORM;
444*61046927SAndroid Build Coastguard Worker "imm" return T_IMM;
445*61046927SAndroid Build Coastguard Worker
446*61046927SAndroid Build Coastguard Worker "tex" return T_MOD_TEX;
447*61046927SAndroid Build Coastguard Worker "mem" return T_MOD_MEM;
448*61046927SAndroid Build Coastguard Worker "rt" return T_MOD_RT;
449*61046927SAndroid Build Coastguard Worker
450*61046927SAndroid Build Coastguard Worker "h" return 'h';
451*61046927SAndroid Build Coastguard Worker "=" return '=';
452*61046927SAndroid Build Coastguard Worker "(" return '(';
453*61046927SAndroid Build Coastguard Worker ")" return ')';
454*61046927SAndroid Build Coastguard Worker "[" return '[';
455*61046927SAndroid Build Coastguard Worker "]" return ']';
456*61046927SAndroid Build Coastguard Worker "," return ',';
457*61046927SAndroid Build Coastguard Worker "." return '.';
458*61046927SAndroid Build Coastguard Worker "-" return '-';
459*61046927SAndroid Build Coastguard Worker "+" return '+';
460*61046927SAndroid Build Coastguard Worker "|" return '|';
461*61046927SAndroid Build Coastguard Worker "c" return 'c';
462*61046927SAndroid Build Coastguard Worker "r" return 'r';
463*61046927SAndroid Build Coastguard Worker "hc" return TOKEN(T_HC);
464*61046927SAndroid Build Coastguard Worker "hr" return TOKEN(T_HR);
465*61046927SAndroid Build Coastguard Worker "g" return 'g';
466*61046927SAndroid Build Coastguard Worker "w" return 'w';
467*61046927SAndroid Build Coastguard Worker "l" return 'l';
468*61046927SAndroid Build Coastguard Worker "<" return '<';
469*61046927SAndroid Build Coastguard Worker ">" return '>';
470*61046927SAndroid Build Coastguard Worker "!" return '!';
471*61046927SAndroid Build Coastguard Worker "#" return '#';
472*61046927SAndroid Build Coastguard Worker ":" return ':';
473*61046927SAndroid Build Coastguard Worker
474*61046927SAndroid Build Coastguard Worker "nan" return TOKEN(T_NAN);
475*61046927SAndroid Build Coastguard Worker "inf" return TOKEN(T_INF);
476*61046927SAndroid Build Coastguard Worker
477*61046927SAndroid Build Coastguard Worker [a-zA-Z_][a-zA-Z_0-9]* ir3_yylval.str = ralloc_strdup(ir3_parser_dead_ctx, yytext); return T_IDENTIFIER;
478*61046927SAndroid Build Coastguard Worker . fprintf(stderr, "error at line %d: Unknown token: %s\n", ir3_yyget_lineno(), yytext); yyterminate();
479*61046927SAndroid Build Coastguard Worker %%
480