summaryrefslogtreecommitdiff
path: root/cuobjdump_to_ptxplus/sass.l
diff options
context:
space:
mode:
Diffstat (limited to 'cuobjdump_to_ptxplus/sass.l')
-rw-r--r--cuobjdump_to_ptxplus/sass.l324
1 files changed, 324 insertions, 0 deletions
diff --git a/cuobjdump_to_ptxplus/sass.l b/cuobjdump_to_ptxplus/sass.l
new file mode 100644
index 0000000..a4beeb1
--- /dev/null
+++ b/cuobjdump_to_ptxplus/sass.l
@@ -0,0 +1,324 @@
+%{
+#include <stdio.h>
+#include "sass_parser.hpp"
+#include <string.h>
+
+
+/* Not sure if this is needed*/
+#define YY_NEVER_INTERACTIVE 1
+
+#define yylval sass_lval
+
+void sass_error(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*/
+
+ /*constant memory directives*/
+
+ /*guard predicate*/
+
+ /*label*/
+
+"[" yylval.string_value = strdup(yytext); return OSQBRACKET;
+"]" yylval.string_value = strdup(yytext); return CSQBRACKET;
+
+ /*base instructions*/
+"BAR.ARV.WAIT b0, 0xfff" yylval.string_value = strdup(yytext); return BAR;
+ADA yylval.string_value = strdup(yytext); return ADA;
+BRA yylval.string_value = strdup(yytext); return BRA;
+CAL yylval.string_value = strdup(yytext); return CAL;
+COS yylval.string_value = strdup(yytext); return COS;
+DADD yylval.string_value = strdup(yytext); return DADD;
+DFMA yylval.string_value = strdup(yytext); return DFMA;
+DMUL yylval.string_value = strdup(yytext); return DMUL;
+EX2 yylval.string_value = strdup(yytext); return EX2;
+F2F yylval.string_value = strdup(yytext); return F2F;
+F2I yylval.string_value = strdup(yytext); return F2I;
+FADD yylval.string_value = strdup(yytext); return FADD;
+FADD32 yylval.string_value = strdup(yytext); return FADD32;
+FADD32I yylval.string_value = strdup(yytext); return FADD32I;
+FMAD yylval.string_value = strdup(yytext); return FMAD;
+FMAD32I yylval.string_value = strdup(yytext); return FMAD32I;
+FMUL yylval.string_value = strdup(yytext); return FMUL;
+FMUL32 yylval.string_value = strdup(yytext); return FMUL32;
+FMUL32I yylval.string_value = strdup(yytext); return FMUL32I;
+FSET yylval.string_value = strdup(yytext); return FSET;
+G2R yylval.string_value = strdup(yytext); return G2R;
+GLD yylval.string_value = strdup(yytext); return GLD;
+GST yylval.string_value = strdup(yytext); return GST;
+I2F yylval.string_value = strdup(yytext); return I2F;
+I2I yylval.string_value = strdup(yytext); return I2I;
+S2R yylval.string_value = strdup(yytext); return S2R;
+STS yylval.string_value = strdup(yytext); return STS;
+LD yylval.string_value = strdup(yytext); return LD;
+ST yylval.string_value = strdup(yytext); return ST;
+IADD yylval.string_value = strdup(yytext); return IADD;
+IADD32 yylval.string_value = strdup(yytext); return IADD32;
+IADD32I yylval.string_value = strdup(yytext); return IADD32I;
+IMAD yylval.string_value = strdup(yytext); return IMAD;
+IMAD\.U24 yylval.string_value = strdup(yytext); return IMAD24;
+IMAD\.S24 yylval.string_value = strdup(yytext); return IMAD24;
+IMAD32 yylval.string_value = strdup(yytext); return IMAD32;
+IMAD32I yylval.string_value = strdup(yytext); return IMAD32I;
+IMUL yylval.string_value = strdup(yytext); return IMUL;
+IMUL\.U24\.U24 yylval.string_value = strdup(yytext); return IMUL24;
+IMUL\.S24\.S24 yylval.string_value = strdup(yytext); return IMULS24;
+IMUL32 yylval.string_value = strdup(yytext); return IMUL32;
+IMUL32\.S24\.S24 yylval.string_value = strdup(yytext); return IMUL32S24;
+IMUL32\.U24\.U24 yylval.string_value = strdup(yytext); return IMUL32U24;
+IMUL32I\.S24\.S24 yylval.string_value = strdup(yytext); return IMUL32IS24;
+IMUL32I yylval.string_value = strdup(yytext); return IMUL32I;
+IMUL32I\.U24\.U24 yylval.string_value = strdup(yytext); return IMUL32I24;
+ISET yylval.string_value = strdup(yytext); return ISET;
+LG2 yylval.string_value = strdup(yytext); return LG2;
+LLD yylval.string_value = strdup(yytext); return LLD;
+LOP\.AND yylval.string_value = strdup(yytext); return AND;
+LOP\.OR yylval.string_value = strdup(yytext); return OR;
+LOP\.PASS_B yylval.string_value = strdup(yytext); return NOT;
+LOP\.XOR yylval.string_value = strdup(yytext); return XOR;
+LOP\.S\.AND yylval.string_value = strdup(yytext); return ANDS;
+LOP\.S\.OR yylval.string_value = strdup(yytext); return ORS;
+LOP\.S\.PASS_B yylval.string_value = strdup(yytext); return NOTS;
+LOP\.S\.XOR yylval.string_value = strdup(yytext); return XORS;
+LST yylval.string_value = strdup(yytext); return LST;
+MOV yylval.string_value = strdup(yytext); return MOV;
+MOV32 yylval.string_value = strdup(yytext); return MOV32;
+MVC yylval.string_value = strdup(yytext); return MVC;
+MVI yylval.string_value = strdup(yytext); return MVI;
+NOP yylval.string_value = strdup(yytext); return NOP;
+R2A yylval.string_value = strdup(yytext); return R2A;
+R2G yylval.string_value = strdup(yytext); return R2G;
+R2G.U16.U8 yylval.string_value = strdup(yytext); return R2GU16U8;
+RCP yylval.string_value = strdup(yytext); return RCP;
+RCP32 yylval.string_value = strdup(yytext); return RCP32;
+RET yylval.string_value = strdup(yytext); return RET;
+RRO yylval.string_value = strdup(yytext); return RRO;
+RSQ yylval.string_value = strdup(yytext); return RSQ;
+SIN yylval.string_value = strdup(yytext); return SIN;
+SHL yylval.string_value = strdup(yytext); return SHL;
+SHR yylval.string_value = strdup(yytext); return SHR;
+SSY yylval.string_value = strdup(yytext); return SSY;
+BAR yylval.string_value = strdup(yytext); return BAR;
+LDS yylval.string_value = strdup(yytext); return LDS;
+IMIN yylval.string_value = strdup(yytext); return IMIN;
+IMAX yylval.string_value = strdup(yytext); return IMAX;
+FMAX yylval.string_value = strdup(yytext); return FMAX;
+FMIN yylval.string_value = strdup(yytext); return FMIN;
+C2R yylval.string_value = strdup(yytext); return C2R;
+R2C yylval.string_value = strdup(yytext); return R2C;
+A2R yylval.string_value = strdup(yytext); return A2R;
+TEX yylval.string_value = strdup(yytext); return TEX;
+TEX32 yylval.string_value = strdup(yytext); return TEX32;
+EXIT yylval.string_value = strdup(yytext); return EXIT;
+GRED yylval.string_value = strdup(yytext); return GRED;
+GATOM yylval.string_value = strdup(yytext); return GATOM;
+PBK yylval.string_value = strdup(yytext); return PBK;
+BRK yylval.string_value = strdup(yytext); return BRK;
+
+ /*instruction modifiers*/
+EQ yylval.string_value = strdup(yytext); return EQ;
+EQU yylval.string_value = strdup(yytext); return EQU;
+GE yylval.string_value = strdup(yytext); return GE;
+GEU yylval.string_value = strdup(yytext); return GEU;
+GT yylval.string_value = strdup(yytext); return GT;
+GTU yylval.string_value = strdup(yytext); return GTU;
+LE yylval.string_value = strdup(yytext); return LE;
+LEU yylval.string_value = strdup(yytext); return LEU;
+LT yylval.string_value = strdup(yytext); return LT;
+LTU yylval.string_value = strdup(yytext); return LTU;
+NE yylval.string_value = strdup(yytext); return NE;
+NEU yylval.string_value = strdup(yytext); return NEU;
+\.BEXT yylval.string_value = strdup(yytext); return DOTBEXT;
+\.S yylval.string_value = strdup(yytext); return DOTS;
+\.SFU yylval.string_value = strdup(yytext); return DOTSFU;
+\.TRUNC yylval.string_value = strdup(yytext); return DOTTRUNC;
+\.IR yylval.string_value = strdup(yytext); /*return DOTIR;*/
+\.UN yylval.string_value = strdup(yytext); return DOTUN;
+\.NODEP yylval.string_value = strdup(yytext); return DOTNODEP;
+\.CARRY0 yylval.string_value = strdup(yytext); return DOTCARRY0;
+\.SAT yylval.string_value = strdup(yytext);
+
+
+ /* comparison operators */
+\.EQ yylval.string_value = strdup(yytext); return DOTEQ;
+\.EQU yylval.string_value = strdup(yytext); return DOTEQU;
+\.GE yylval.string_value = strdup(yytext); return DOTGE;
+\.GEU yylval.string_value = strdup(yytext); return DOTGEU;
+\.GT yylval.string_value = strdup(yytext); return DOTGT;
+\.GTU yylval.string_value = strdup(yytext); return DOTGTU;
+\.LE yylval.string_value = strdup(yytext); return DOTLE;
+\.LEU yylval.string_value = strdup(yytext); return DOTLEU;
+\.LT yylval.string_value = strdup(yytext); return DOTLT;
+\.LTU yylval.string_value = strdup(yytext); return DOTLTU;
+\.NE yylval.string_value = strdup(yytext); return DOTNE;
+\.NEU yylval.string_value = strdup(yytext); return DOTNEU;
+\.NOT_SIGN yylval.string_value = strdup(yytext); return DOTNSF;
+\.SIGN yylval.string_value = strdup(yytext); return DOTSF;
+\.CARRY yylval.string_value = strdup(yytext); return DOTCARRY;
+\.CC yylval.string_value = strdup(yytext); return DOTCC;
+\.X yylval.string_value = strdup(yytext); return DOTX;
+\.E yylval.string_value = strdup(yytext); return DOTE;
+\.RED yylval.string_value = strdup(yytext); return DOTRED;
+\.POPC yylval.string_value = strdup(yytext); return DOTPOPC;
+
+ /*operand types*/
+\.F16 yylval.string_value = strdup(yytext); return DOTF16;
+\.F32 yylval.string_value = strdup(yytext); return DOTF32;
+\.F64 yylval.string_value = strdup(yytext); return DOTF64;
+\.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;
+\.S128 yylval.string_value = strdup(yytext); return DOTS128;
+\.U8 yylval.string_value = strdup(yytext); return DOTU8;
+\.U16 yylval.string_value = strdup(yytext); return DOTU16;
+\.U32 yylval.string_value = strdup(yytext); return DOTU32;
+\.U24 yylval.string_value = strdup(yytext); return DOTU24;
+\.U64 yylval.string_value = strdup(yytext); return DOTU64;
+\.HI yylval.string_value = strdup(yytext); return DOTHI;
+\.NOINC yylval.string_value = strdup(yytext); return DOTNOINC;
+
+ /*geometries*/
+
+ /*register operands*/
+[\-]?R{numeric}+ yylval.string_value = strdup(yytext); return REGISTER;
+[\-]?R{numeric}+L yylval.string_value = strdup(yytext); return REGISTERLO;
+[\-]?R{numeric}+H yylval.string_value = strdup(yytext); return REGISTERHI;
+A{numeric}+ yylval.string_value = strdup(yytext); return OFFSETREGISTER;
+\.C{numeric} yylval.string_value = strdup(yytext); return PREDREGISTER;
+"o ["{hexliteral}\] yylval.string_value = strdup(yytext); return PREDREGISTER2;
+C{numeric} yylval.string_value = strdup(yytext); return PREDREGISTER3;
+"SR_"[^\.; \t]+ yylval.string_value = strdup(yytext); return SREGISTER;
+
+ /*tex operand*/
+
+ /*vector operands*/
+
+ /*special registers*/
+
+ /* cuobjdump header */
+"Fatbin ptx code:" yylval.string_value = strdup(yytext); return PTXHEADER;
+"Fatbin elf code:" yylval.string_value = strdup(yytext); return ELFHEADER;
+"================"
+"arch = " yylval.string_value = strdup(yytext); return INFOARCHVERSION;
+"code version = " yylval.string_value = strdup(yytext); return INFOCODEVERSION_HEADER;
+\[{numeric},{numeric}\] yylval.string_value = strdup(yytext); return INFOCODEVERSION;
+"producer = " yylval.string_value = strdup(yytext); return INFOPRODUCER;
+"host = " yylval.string_value = strdup(yytext); return INFOHOST;
+{numeric}{numeric}"bit" yylval.string_value = strdup(yytext); return INFOCOMPILESIZE;
+"compile_size = " yylval.string_value = strdup(yytext); return INFOCOMPILESIZE_HEADER;
+"identifier = " yylval.string_value = strdup(yytext); return INFOIDENTIFIER;
+"code for " yylval.string_value = strdup(yytext); return VERSIONHEADER;
+"Function : " yylval.string_value = strdup(yytext); return FUNCTIONHEADER;
+"/*"{hexliteral}{whitespace}*"*/" yylval.string_value = strdup(yytext); return INSTHEX;
+"." yylval.string_value = strdup(yytext); return DOT;
+
+ /*memory location operands*/
+[\-]?"|g| ["{hexliteral}"]"".U16"? yylval.string_value = strdup(yytext); return ABSSMEMLOCATION;
+[\-]?"|g| [R"{numeric}+\]".U16"? yylval.string_value = strdup(yytext); return ABSSMEMLOCATION;
+[\-]?"|g| [A"{numeric}+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return ABSSMEMLOCATION;
+[\-]?"|g| [A"{numeric}+\+\+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return ABSSMEMLOCATION;
+
+[\-]?"g ["{hexliteral}"]"".U16"? yylval.string_value = strdup(yytext); return SMEMLOCATION;
+[\-]?"g [R"{numeric}+\]".U16"? yylval.string_value = strdup(yytext); return SMEMLOCATION;
+[\-]?"g [A"{numeric}+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return SMEMLOCATION;
+[\-]?"g [A"{numeric}+\+\+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return SMEMLOCATION;
+
+[\-]?"global14 ["{hexliteral}"]"".U16"? yylval.string_value = strdup(yytext); return GMEMLOCATION;
+[\-]?"global14 [R"{numeric}+\]".U16"? yylval.string_value = strdup(yytext); return GMEMLOCATION;
+[\-]?"global14 [A"{numeric}+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return GMEMLOCATION;
+[\-]?"global14 [A"{numeric}+\+\+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return GMEMLOCATION;
+
+[\-]?"c ["{hexliteral}"] ["{hexliteral}"]"".U16"? yylval.string_value = strdup(yytext); return CMEMLOCATION;
+[\-]?"c ["{hexliteral}"] [R"{numeric}+\]".U16"? yylval.string_value = strdup(yytext); return CMEMLOCATION;
+[\-]?"c ["{hexliteral}"] [A"{numeric}+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return CMEMLOCATION;
+[\-]?"c ["{hexliteral}"] [A"{numeric}+\+\+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return CMEMLOCATION;
+
+[\-]?"local ["{hexliteral}"]"".U16"? yylval.string_value = strdup(yytext); return LMEMLOCATION;
+[\-]?"local [R"{numeric}+\]".U16"? yylval.string_value = strdup(yytext); return LMEMLOCATION;
+[\-]?"local [A"{numeric}+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return LMEMLOCATION;
+[\-]?"local [A"{numeric}+\+\+\+{hexliteral}\]".U16"? yylval.string_value = strdup(yytext); return LMEMLOCATION;
+
+ /*identifier + literals*/
+
+{identifier} yylval.string_value = strdup(yytext); return IDENTIFIER;
+[\-]?{hexliteral} yylval.string_value = strdup(yytext); return HEXLITERAL; //change to int later?
+
+ /*label ends*/
+"/*" yylval.string_value = strdup(yytext); return LABELSTART;
+"*/" yylval.string_value = strdup(yytext); return LABELEND;
+{hexdigit}{hexdigit}{hexdigit}{hexdigit} yylval.string_value = strdup(yytext); return LABEL;
+
+ /*braces*/
+
+ /*brackets*/
+\( yylval.string_value = strdup(yytext); return LEFTBRACKET;
+\) yylval.string_value = strdup(yytext); return RIGHTBRACKET;
+
+ /* pound sign*/
+
+ /* comma*/
+"," /*yylval.string_value = strdup(yytext); return COMMA;*/
+
+ /* underscore sign*/
+
+ /* pipe*/
+"|" yylval.string_value = strdup(yytext); return PIPE;
+"~" yylval.string_value = strdup(yytext); return TILDE;
+
+ /*Need to create to newline tokens*/
+{newline}+ return NEWLINE;
+
+ /* semicolon */
+; return SEMICOLON;
+
+ /*discard whitespace*/
+{whitespace}+
+ /*discard comments*/
+"//"{anycharbutnewline}*
+ /*discard dividers*/
+"-----"[\-]+
+"....."[\.]+
+
+
+ /*reached end of file*/
+<<EOF>> return 0;
+
+ /*None of the rules matched. Throw error*/
+. sass_error("Invalid token");
+
+%%
+
+void sass_error(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");
+ exit(1);
+}