mirror of
https://github.com/tiagovignatti/intel-gpu-tools.git
synced 2025-06-10 17:36:11 +00:00
This avoids the need for a start condition to prevent for example g1.8<0,1,0>UW being lexed as GENREG NUMBER LANGLE etc. rather than GENREG INTEGER DOT INTEGER LANGLE etc.
177 lines
3.6 KiB
Plaintext
177 lines
3.6 KiB
Plaintext
%option yylineno
|
|
%{
|
|
#include "gen4asm.h"
|
|
#include "y.tab.h"
|
|
#include "brw_defines.h"
|
|
|
|
int saved_state = INITIAL;
|
|
|
|
%}
|
|
%x BLOCK_COMMENT
|
|
|
|
%%
|
|
\/\/.*[\r\n] { } /* eat up single-line comments */
|
|
|
|
/* eat up multi-line comments, non-nesting. */
|
|
\/\* {
|
|
saved_state = YYSTATE;
|
|
BEGIN(BLOCK_COMMENT);
|
|
}
|
|
<BLOCK_COMMENT>\*\/ {
|
|
BEGIN(saved_state);
|
|
}
|
|
<BLOCK_COMMENT>. { }
|
|
<BLOCK_COMMENT>[\r\n] { }
|
|
|
|
/* used for both null send and null register. */
|
|
"null" { return NULL_TOKEN; }
|
|
|
|
/* opcodes */
|
|
"mov" { return MOV; }
|
|
|
|
"mul" { return MUL; }
|
|
"mac" { return MAC; }
|
|
"mach" { return MACH; }
|
|
"line" { return LINE; }
|
|
"sad2" { return SAD2; }
|
|
"sada2" { return SADA2; }
|
|
"dp4" { return DP4; }
|
|
"dph" { return DPH; }
|
|
"dp3" { return DP3; }
|
|
"dp2" { return DP2; }
|
|
|
|
"add" { return ADD; }
|
|
|
|
"nop" { return NOP; }
|
|
|
|
"send" { return SEND; }
|
|
"mlen" { return MSGLEN; }
|
|
"rlen" { return RETURNLEN; }
|
|
"math" { return MATH; }
|
|
"sampler" { return SAMPLER; }
|
|
"gateway" { return GATEWAY; }
|
|
"read" { return READ; }
|
|
"write" { return WRITE; }
|
|
"urb" { return URB; }
|
|
"thread_spawner" { return THREAD_SPAWNER; }
|
|
|
|
"allocate" { return ALLOCATE; }
|
|
"used" { return USED; }
|
|
"complete" { return COMPLETE; }
|
|
"transpose" { return TRANSPOSE; }
|
|
"interleave" { return INTERLEAVE; }
|
|
|
|
";" { return SEMICOLON; }
|
|
"(" { return LPAREN; }
|
|
")" { return RPAREN; }
|
|
"<" { return LANGLE; }
|
|
">" { return RANGLE; }
|
|
"{" { return LCURLY; }
|
|
"}" { return RCURLY; }
|
|
"," { return COMMA; }
|
|
"." { return DOT; }
|
|
"-" { return MINUS; }
|
|
"(abs)" { return ABS; }
|
|
|
|
"acc"[0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return ACCREG;
|
|
}
|
|
"a"[0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return ADDRESSREG;
|
|
}
|
|
"m"[0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return MSGREG;
|
|
}
|
|
"f"[0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return FLAGREG;
|
|
}
|
|
[gr][0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return GENREG;
|
|
}
|
|
"cr"[0-9]+ {
|
|
yylval.integer = atoi(yytext + 1);
|
|
return CONTROLREG;
|
|
}
|
|
"ip" {
|
|
return IPREG;
|
|
}
|
|
|
|
/*
|
|
* Lexing of register types should probably require the ":" symbol specified
|
|
* in the BNF of the assembly, but our existing source didn't use that syntax.
|
|
*/
|
|
"UD" { return TYPE_UD; }
|
|
"D" { return TYPE_D; }
|
|
"UW" { return TYPE_UW; }
|
|
"W" { return TYPE_W; }
|
|
"UB" { return TYPE_UB; }
|
|
"B" { return TYPE_B; }
|
|
"F" { return TYPE_F; }
|
|
|
|
"sat" { return SATURATE; }
|
|
"align1" { return ALIGN1; }
|
|
"align16" { return ALIGN16; }
|
|
"mask_disable" { return MASK_DISABLE; }
|
|
"EOT" { return EOT; }
|
|
|
|
/* extended math functions */
|
|
"inv" { yylval.integer = BRW_MATH_FUNCTION_INV; return SIN; }
|
|
"log" { yylval.integer = BRW_MATH_FUNCTION_LOG; return LOG; }
|
|
"exp" { yylval.integer = BRW_MATH_FUNCTION_EXP; return EXP; }
|
|
"sqrt" { yylval.integer = BRW_MATH_FUNCTION_SQRT; return SQRT; }
|
|
"rsq" { yylval.integer = BRW_MATH_FUNCTION_RSQ; return RSQ; }
|
|
"pow" { yylval.integer = BRW_MATH_FUNCTION_POW; return POW; }
|
|
"sin" { yylval.integer = BRW_MATH_FUNCTION_SIN; return SIN; }
|
|
"cos" { yylval.integer = BRW_MATH_FUNCTION_COS; return COS; }
|
|
"sincos" { yylval.integer = BRW_MATH_FUNCTION_SINCOS; return SINCOS; }
|
|
"intdiv" {
|
|
yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT;
|
|
return INTDIV;
|
|
}
|
|
"intmod" {
|
|
yylval.integer = BRW_MATH_FUNCTION_INT_DIV_REMAINDER;
|
|
return INTMOD;
|
|
}
|
|
"intdivmod" {
|
|
yylval.integer = BRW_MATH_FUNCTION_INT_DIV_QUOTIENT_AND_REMAINDER;
|
|
return INTDIVMOD;
|
|
}
|
|
|
|
"signed" { return SIGNED; }
|
|
"scalar" { return SCALAR; }
|
|
|
|
[0-9]* {
|
|
yylval.integer = atoi(yytext);
|
|
return INTEGER;
|
|
}
|
|
|
|
<INITIAL>[-]?[0-9]+"."[0-9]+ {
|
|
yylval.number = strtod(yytext, NULL);
|
|
return NUMBER;
|
|
}
|
|
|
|
[ \t\n]+ { } /* eat up whitespace */
|
|
|
|
. {
|
|
printf("parse error at line %d: unexpected \"%s\"\n",
|
|
yylineno, yytext);
|
|
exit(1);
|
|
}
|
|
%%
|
|
|
|
char *
|
|
lex_text(void)
|
|
{
|
|
return yytext;
|
|
}
|
|
|
|
#ifndef yywrap
|
|
int yywrap() { return 1; }
|
|
#endif
|
|
|