diff options
| author | Jimmy Kwa <[email protected]> | 2010-10-28 12:07:29 -0800 |
|---|---|---|
| committer | Jimmy Kwa <[email protected]> | 2010-10-28 12:07:29 -0800 |
| commit | 0586c55d7688f492d5264cb9299cf00ff73d3df7 (patch) | |
| tree | ef1ecc58933398e333f16dc56915bdffc64ef422 /decuda_to_ptxplus/decuda.l | |
| parent | 0efd3c00f5611bfa82b01d87d175122388d621cc (diff) | |
used p4 integrate to copy decuda_to_ptxplus into the distribtion folder. Edited baseline_ptxplus.config so the ptxplus regression runs properly.
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 7942]
Diffstat (limited to 'decuda_to_ptxplus/decuda.l')
| -rw-r--r-- | decuda_to_ptxplus/decuda.l | 273 |
1 files changed, 273 insertions, 0 deletions
diff --git a/decuda_to_ptxplus/decuda.l b/decuda_to_ptxplus/decuda.l new file mode 100644 index 0000000..e47a4c7 --- /dev/null +++ b/decuda_to_ptxplus/decuda.l @@ -0,0 +1,273 @@ +%{ +#include <iostream> +#include "decudaParser.hpp" +#include <string.h> + +/* not sure if this is needed*/ +#define YY_NEVER_INTERACTIVE 1 + +void yyerror(const char*); +%} +%option noyywrap +%option yylineno + +/*Regular expresions go here*/ +alpha [a-zA-Z] +numeric [0-9] +hexalpha [A-Fa-f] +alphanum ({alpha}|{numeric}) +hexdigit ({numeric}|{hexalpha}) +whitespace [ \t] +newline [\n] +anycharbutnewline [^\n] +anychar ({newline}|{anycharbutnewline}) +pipe \| + +identifier ({alpha}({alphanum}|["_$"])*)|([_$%]({alphanum}|["_$"])+) +hexliteral 0[xX]{hexdigit}+U? +octliteral 0[0-7]+U? +binliteral 0[bB][01]+U? +decliteral ([1-9][0-9]*U?)|0U? +fltliteral [0-9]+\.[0-9]+ + +%% + /*Translation rules*/ + + /*Compiler directives*/ +\.entry yylval.string_value = strdup(yytext); return DOTENTRY; +\.lmem yylval.string_value = strdup(yytext); return DOTLMEM; +\.smem yylval.string_value = strdup(yytext); return DOTSMEM; +\.reg yylval.string_value = strdup(yytext); return DOTREG; +\.bar yylval.string_value = strdup(yytext); return DOTBAR; + + /*constant memory directives*/ +\.constseg return DOTCONSTSEG; +const return CONST; +d\.u32 return DDOTU32; +d\.f32 return DDOTF32; + + /*guard predicate*/ +@!?\$p{numeric}+ yylval.string_value = strdup(yytext); return GUARDPRED; + + /*label*/ +label{numeric}+ yylval.string_value = strdup(yytext); return LABEL; + + /*base instructions*/ +cvt yylval.string_value = strdup(yytext); return CVT; +shl yylval.string_value = strdup(yytext); return SHL; +shr yylval.string_value = strdup(yytext); return SHR; +add yylval.string_value = strdup(yytext); return ADD; +addc yylval.string_value = strdup(yytext); return ADDC; +sub yylval.string_value = strdup(yytext); return SUB; +subr yylval.string_value = strdup(yytext); return SUBR; +movsh yylval.string_value = strdup(yytext); return MOVSH; +mov yylval.string_value = strdup(yytext); return MOV; +bar\.sync yylval.string_value = strdup(yytext); return BARSYNC; +mul yylval.string_value = strdup(yytext); return MUL; +mad24 yylval.string_value = strdup(yytext); return MAD24; +mad24c1 yylval.string_value = strdup(yytext); return MAD24C1; +set yylval.string_value = strdup(yytext); return SET; +mad yylval.string_value = strdup(yytext); return MAD; +mul24 yylval.string_value = strdup(yytext); return MUL24; +set\?{numeric}+\? yylval.string_value = strdup(yytext); return SETUNKNOWN; +rcp yylval.string_value = strdup(yytext); return RCP; +pre\.ex2 yylval.string_value = strdup(yytext); return PREEX2; +pre\.sin yylval.string_value = strdup(yytext); return PRESIN; +ex2 yylval.string_value = strdup(yytext); return EX2; +sin yylval.string_value = strdup(yytext); return SIN; +cos yylval.string_value = strdup(yytext); return COS; +lg2 yylval.string_value = strdup(yytext); return LG2; +rsqrt yylval.string_value = strdup(yytext); return RSQRT; +mac yylval.string_value = strdup(yytext); return MAC; +and yylval.string_value = strdup(yytext); return AND; +andn yylval.string_value = strdup(yytext); return ANDN; +nandn yylval.string_value = strdup(yytext); return NANDN; +xor yylval.string_value = strdup(yytext); return XOR; +or yylval.string_value = strdup(yytext); return OR; +orn yylval.string_value = strdup(yytext); return ORN; +min yylval.string_value = strdup(yytext); return MIN; +tex yylval.string_value = strdup(yytext); return TEX; +bra\.label yylval.string_value = strdup(yytext); return BRA; +join\.label yylval.string_value = strdup(yytext); return JOIN; +breakaddr.label yylval.string_value = strdup(yytext); return BREAKADDR; +nop\.end yylval.string_value = strdup(yytext); return NOPEND; +nop\.join yylval.string_value = strdup(yytext); return NOPJOIN; +nop yylval.string_value = strdup(yytext); return NOP; +call.label yylval.string_value = strdup(yytext); return CALL; +not yylval.string_value = strdup(yytext); return NOT; +max yylval.string_value = strdup(yytext); return MAX; +delta yylval.string_value = strdup(yytext); return DELTA; +break yylval.string_value = strdup(yytext); return BREAK; +inc yylval.string_value = strdup(yytext); return INC; +exch yylval.string_value = strdup(yytext); return EXCH; +cas yylval.string_value = strdup(yytext); return CAS; +norn yylval.string_value = strdup(yytext); return NORN; +nxor yylval.string_value = strdup(yytext); return NXOR; +sad yylval.string_value = strdup(yytext); return SAD; +op\.13 yylval.string_value = strdup(yytext); return OP13; +op\.e5 yylval.string_value = strdup(yytext); return OPE5; +op\.e6 yylval.string_value = strdup(yytext); return OPE6; +op\.d0 yylval.string_value = strdup(yytext); return OPD0; + +return yylval.string_value = strdup(yytext); return RETURN; + + /*instruction modifiers*/ +\.rp yylval.string_value = strdup(yytext); return DOTRP; +\.rm yylval.string_value = strdup(yytext); return DOTRM; +\.rn yylval.string_value = strdup(yytext); return DOTRN; +\.rni yylval.string_value = strdup(yytext); return DOTRNI; +\.rz yylval.string_value = strdup(yytext); return DOTRZ; +\.rzi yylval.string_value = strdup(yytext); return DOTRZI; +\.half yylval.string_value = strdup(yytext); return DOTHALF; +\.end yylval.string_value = strdup(yytext); return DOTEND; +\.lo yylval.string_value = strdup(yytext); return DOTLO; +\.abs yylval.string_value = strdup(yytext); return DOTABS; +\.join yylval.string_value = strdup(yytext); return DOTJOIN; +\.neg yylval.string_value = strdup(yytext); return DOTNEG; +\.sat yylval.string_value = strdup(yytext); return DOTSAT; + + /* comparison operators */ +\.eq yylval.string_value = strdup(yytext); return DOTEQ; +\.ne yylval.string_value = strdup(yytext); return DOTNE; +\.lt yylval.string_value = strdup(yytext); return DOTLT; +\.le yylval.string_value = strdup(yytext); return DOTLE; +\.gt yylval.string_value = strdup(yytext); return DOTGT; +\.ge yylval.string_value = strdup(yytext); return DOTGE; +\.lo yylval.string_value = strdup(yytext); return DOTLO; +\.ls yylval.string_value = strdup(yytext); return DOTLS; +\.hi yylval.string_value = strdup(yytext); return DOTHI; +\.hs yylval.string_value = strdup(yytext); return DOTHS; +\.equ yylval.string_value = strdup(yytext); return DOTEQU; +\.neu yylval.string_value = strdup(yytext); return DOTNEU; +\.ltu yylval.string_value = strdup(yytext); return DOTLTU; +\.leu yylval.string_value = strdup(yytext); return DOTLEU; +\.gtu yylval.string_value = strdup(yytext); return DOTGTU; +\.geu yylval.string_value = strdup(yytext); return DOTGEU; +\.num yylval.string_value = strdup(yytext); return DOTNUM; +\.nan yylval.string_value = strdup(yytext); return DOTNAN; +\.nsf yylval.string_value = strdup(yytext); return DOTNSF; +\.sf yylval.string_value = strdup(yytext); return DOTSF; +\.cf yylval.string_value = strdup(yytext); return DOTCF; + + /*operand types*/ +\.s8 yylval.string_value = strdup(yytext); return DOTS8; +\.s16 yylval.string_value = strdup(yytext); return DOTS16; +\.s32 yylval.string_value = strdup(yytext); return DOTS32; +\.s64 yylval.string_value = strdup(yytext); return DOTS64; +\.u8 yylval.string_value = strdup(yytext); return DOTU8; +\.u16 yylval.string_value = strdup(yytext); return DOTU16; +\.u32 yylval.string_value = strdup(yytext); return DOTU32; +\.u64 yylval.string_value = strdup(yytext); return DOTU64; +\.b8 yylval.string_value = strdup(yytext); return DOTB8; +\.b16 yylval.string_value = strdup(yytext); return DOTB16; +\.b32 yylval.string_value = strdup(yytext); return DOTB32; +\.b64 yylval.string_value = strdup(yytext); return DOTB64; +\.b128 yylval.string_value = strdup(yytext); return DOTB128; +\.f16 yylval.string_value = strdup(yytext); return DOTF16; +\.f32 yylval.string_value = strdup(yytext); return DOTF32; +\.f64 yylval.string_value = strdup(yytext); return DOTF64; + + /*geometries*/ +\.1d yylval.string_value = strdup(yytext); return DOT1D; +\.2d yylval.string_value = strdup(yytext); return DOT2D; +\.3d yylval.string_value = strdup(yytext); return DOT3D; + + /*register operands*/ +[\-]?\$r{numeric}+ yylval.string_value = strdup(yytext); return REGISTER; +[\-]?\$r{numeric}+\.lo yylval.string_value = strdup(yytext); return REGISTERLO; +[\-]?\$r{numeric}+\.hi yylval.string_value = strdup(yytext); return REGISTERHI; +[\-]?\$ofs{numeric}+ yylval.string_value = strdup(yytext); return OFFSETREGISTER; +\$p{numeric}+ yylval.string_value = strdup(yytext); return PREDREGISTER; +\$o{numeric}+ yylval.string_value = strdup(yytext); return PREDREGISTER2; + + /*tex operand*/ +[\-]?\$tex{numeric}+ yylval.string_value = strdup(yytext); return TEXOP; + + /*vector operands*/ +\{($r{numeric}+|_)\} yylval.string_value = strdup(yytext); return VECTOR1D; +\{($r{numeric}+|_)\,($r{numeric}+|_)\} yylval.string_value = strdup(yytext); return VECTOR2D; +\{($r{numeric}+|_)\,($r{numeric}+|_)\,($r{numeric}+|_)\} yylval.string_value = strdup(yytext); return VECTOR3D; +\{($r{numeric}+|_)\,($r{numeric}+|_)\,($r{numeric}+|_)\,($r{numeric}+|_)\} yylval.string_value = strdup(yytext); return VECTOR4D; + + /*special registers*/ +"%ntid.x" return NTIDXREGISTER; +"%ntid.y" return NTIDYREGISTER; +"%ctaid.x" return CTAIDXREGISTER; +"%nctaid.x" return NCTAIDXREGISTER; +"%ctaid.y" return CTAIDYREGISTER; +"%nctaid.y" return NCTAIDYREGISTER; +"%clock" return CLOCKREGISTER; + + /*memory location operands*/ +[\-]?l\[{hexliteral}\] yylval.string_value = strdup(yytext); return LMEMLOCATION; +[\-]?l\[\$r{numeric}+\] yylval.string_value = strdup(yytext); return LMEMLOCATION; +[\-]?l\[\$ofs{numeric}+\+{hexliteral}\] yylval.string_value = strdup(yytext); return LMEMLOCATION; +[\-]?l\[\$ofs{numeric}+\+={hexliteral}\] yylval.string_value = strdup(yytext); return LMEMLOCATION; + +[\-]?s\[{hexliteral}\] yylval.string_value = strdup(yytext); return SMEMLOCATION; +[\-]?s\[\$r{numeric}+\] yylval.string_value = strdup(yytext); return SMEMLOCATION; +[\-]?s\[\$ofs{numeric}+\+{hexliteral}\] yylval.string_value = strdup(yytext); return SMEMLOCATION; +[\-]?s\[\$ofs{numeric}+\+={hexliteral}\] yylval.string_value = strdup(yytext); return SMEMLOCATION; + +[\-]?g\[{hexliteral}\] yylval.string_value = strdup(yytext); return GMEMLOCATION; +[\-]?g\[\$r{numeric}+\] yylval.string_value = strdup(yytext); return GMEMLOCATION; +[\-]?g\[\$ofs{numeric}+\+{hexliteral}\] yylval.string_value = strdup(yytext); return GMEMLOCATION; +[\-]?g\[\$ofs{numeric}+\+={hexliteral}\] yylval.string_value = strdup(yytext); return GMEMLOCATION; + + +[\-]?c{numeric}+\[{hexliteral}\] yylval.string_value = strdup(yytext); return CMEMLOCATION; +[\-]?c{numeric}+\[\$r{numeric}+\] yylval.string_value = strdup(yytext); return CMEMLOCATION; +[\-]?c{numeric}+\[\$ofs{numeric}+\+{hexliteral}\] yylval.string_value = strdup(yytext); return CMEMLOCATION; +[\-]?c{numeric}+\[\$ofs{numeric}+\+={hexliteral}\] yylval.string_value = strdup(yytext); return CMEMLOCATION; + + + /*identifier + literals*/ +{identifier} yylval.string_value = strdup(yytext); return IDENTIFER; +{hexliteral} yylval.string_value = strdup(yytext); return HEXLITERAL; //change to int later? +{octliteral} yylval.string_value = strdup(yytext); return OCTLITERAL; //change to int later? +{binliteral} yylval.string_value = strdup(yytext); return BINLITERAL; //change to int later? +{decliteral} yylval.string_value = strdup(yytext); return DECLITERAL; //change to int later? +{fltliteral} yylval.string_value = strdup(yytext); return FLTLITERAL; + +\: return COLON; + +{pipe} return PIPE; + + /*braces*/ +\{ yylval.string_value = strdup(yytext); return LEFTBRACE; +\} yylval.string_value = strdup(yytext); return RIGHTBRACE; + + /* pound sign*/ +"#" yylval.string_value = strdup(yytext); return POUND; + + /* comma*/ +"," yylval.string_value = strdup(yytext); return COMMA; + + /* underscore sign*/ +"_" yylval.string_value = strdup(yytext); return UNDERSCORE; + + /*Need to create to newline tokens*/ +{newline}+ return NEWLINE; + + + /*discard whitespace*/ +{whitespace}+ + /*discard comments*/ +"//"{anycharbutnewline}* + + + /*reached end of file*/ +<<EOF>> return 0; + + /*None of the rules matched. Throw error*/ +. yyerror("Invalid token"); + +%% + +void yyerror(const char* message) +{ + printf(" "); printf(message); printf(" near \""); printf(yytext); printf("\""); + printf(" on line "); + char line[5]; sprintf(line, "%i", yylineno); printf(line); + printf("\n"); +} |
