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