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