summaryrefslogtreecommitdiff
path: root/cuobjdump_to_ptxplus
diff options
context:
space:
mode:
Diffstat (limited to 'cuobjdump_to_ptxplus')
-rw-r--r--cuobjdump_to_ptxplus/cuobjdumpInst.cc107
-rw-r--r--cuobjdump_to_ptxplus/sass.l16
-rw-r--r--cuobjdump_to_ptxplus/sass.y22
3 files changed, 121 insertions, 24 deletions
diff --git a/cuobjdump_to_ptxplus/cuobjdumpInst.cc b/cuobjdump_to_ptxplus/cuobjdumpInst.cc
index b392aa1..fa011ab 100644
--- a/cuobjdump_to_ptxplus/cuobjdumpInst.cc
+++ b/cuobjdump_to_ptxplus/cuobjdumpInst.cc
@@ -154,8 +154,6 @@ void cuobjdumpInst::printCuobjdumpBaseModifiers()
output(".ne");
else if( strcmp(modString, "NEU")==0 )
output(".neu");
- else if( strcmp(modString, ".exit")==0 )
- output(modString);
else if( strcmp(modString, ".abs")==0 )
{
if((strcmp(m_base, "F2F")!=0) && (strcmp(m_base, "I2I")!=0))
@@ -163,14 +161,16 @@ void cuobjdumpInst::printCuobjdumpBaseModifiers()
output(modString);
}
}
- else if( strcmp(modString, "ex2")==0 )
- output(modString);
- else if( strcmp(modString, "sin")==0 )
- output(modString);
- else if( strcmp(modString, "cos")==0 )
- output(modString);
- else if( strcmp(modString, ".rz")==0 )
- output(modString);
+ else if( strcmp(modString, "ex2")==0 ||
+ strcmp(modString, ".exit")==0 ||
+ strcmp(modString, "sin")==0 ||
+ strcmp(modString, "cos")==0 ||
+ strcmp(modString, ".rz")==0 ||
+ strcmp(modString, ".rp")==0 ||
+ strcmp(modString, ".rm")==0 ||
+ strcmp(modString, ".any")==0 ||
+ strcmp(modString, ".all")==0 )
+ output(modString);
else if( strcmp(modString, ".bext")==0 )
{
//".bext" is a modifier that indicated u8 to u16 type conversion, I think
@@ -323,6 +323,8 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st
output("%%ctaid.x");
} else if(mod == "g [0x7].u16") {//handling special register case: %ctaid.y
output("%%ctaid.y");
+ } else if(mod == "sr1") {//handling special register case: %clock
+ output("%%clock");
} else if(mod[0]=='r') { //basic register
if( (strcmp(m_base, "DADD")==0) ||
(strcmp(m_base, "DMUL")==0) ||
@@ -576,13 +578,12 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
//output(" //cos");
output("cos");
printCuobjdumpBaseModifiers();
-
if(m_typeModifiers->getSize() == 0)
output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right.
else
printCuobjdumpTypeModifiers();
-
printCuobjdumpOperands();
+ output(";");
}
else if(strcmp(m_base, "DADD")==0)
{
@@ -598,6 +599,37 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
printCuobjdumpOperands();
output(";");
}
+ else if(strcmp(m_base, "DMIN")==0)
+ {
+ printCuobjdumpPredicate();
+ output("min");
+ printCuobjdumpBaseModifiers();
+
+ if(m_typeModifiers->getSize() == 0)
+ output(".f64"); //TODO: setting default type modifier but I'm not sure if this is right.
+ else
+ printCuobjdumpTypeModifiers();
+
+ printCuobjdumpOperands();
+ output(";");
+ }
+ else if(strcmp(m_base, "DMAX")==0)
+ {
+ printCuobjdumpPredicate();
+ output("max");
+ printCuobjdumpBaseModifiers();
+
+ if(m_typeModifiers->getSize() == 0)
+ output(".f64"); //TODO: setting default type modifier but I'm not sure if this is right.
+ else
+ printCuobjdumpTypeModifiers();
+
+ printCuobjdumpOperands();
+ output(";");
+ }
+
+
+ /*
else if(strcmp(m_base, "DFMA")==0)
{
printCuobjdumpPredicate();
@@ -612,6 +644,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
printCuobjdumpOperands();
output(";");
}
+ */
else if(strcmp(m_base, "DMUL")==0)
{
printCuobjdumpPredicate();
@@ -765,7 +798,23 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
if(m_typeModifiers->getSize() == 0)
{
- output(".f32"); output(".f32");
+ output(".f32.f32");
+ }
+ else
+ printCuobjdumpTypeModifiers();
+
+ printCuobjdumpOperands();
+ output(";");
+ }
+ else if(strcmp(m_base, "DSET")==0)
+ {
+ printCuobjdumpPredicate();
+ output("set");
+ printCuobjdumpBaseModifiers();
+
+ if(m_typeModifiers->getSize() == 0)
+ {
+ output(".f64.f64");
}
else
printCuobjdumpTypeModifiers();
@@ -1009,6 +1058,21 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
printCuobjdumpOperands();
output(";");
}
+ else if(strcmp(m_base, "ISAD")==0)
+ {
+ printCuobjdumpPredicate();
+ output("sad");
+ printCuobjdumpBaseModifiers();
+
+ if(m_typeModifiers->getSize() == 0)
+ output(int_default_mod()); //TODO: setting default type modifier but I'm not sure if this is right.
+ else
+ printCuobjdumpTypeModifiers();
+
+ printCuobjdumpOperands();
+ output(";");
+ }
+
else if(strcmp(m_base, "IMAD.U24")==0)
{
printCuobjdumpPredicate();
@@ -1523,6 +1587,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
printCuobjdumpTypeModifiers();
printCuobjdumpOperands();
+ output(";");
}
else if(strcmp(m_base, "S2R")==0)
{
@@ -1535,6 +1600,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
else
printCuobjdumpTypeModifiers();
printCuobjdumpOperands();
+ output(";");
}
else if(strcmp(m_base, "LD")==0)
{
@@ -1706,6 +1772,21 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std:
output("mov.pred");
printCuobjdumpOperands();
output(";");
+ } else if(strcmp(m_base, "VOTE")==0) {
+ printCuobjdumpPredicate();
+ output("vote");
+ printCuobjdumpBaseModifiers();
+ printCuobjdumpTypeModifiers();
+ printCuobjdumpOperands();
+ output(";");
+ }
+ else if(strcmp(m_base, "DFMA")==0)
+ {
+ printCuobjdumpPredicate();
+ output("fma.rz.f64");
+ printCuobjdumpBaseModifiers();
+ printCuobjdumpOperands();
+ output(";");
}
else
{
diff --git a/cuobjdump_to_ptxplus/sass.l b/cuobjdump_to_ptxplus/sass.l
index 88187f5..e665770 100644
--- a/cuobjdump_to_ptxplus/sass.l
+++ b/cuobjdump_to_ptxplus/sass.l
@@ -54,6 +54,8 @@ 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;
+DMIN yylval.string_value = strdup(yytext); return DMIN;
+DMAX yylval.string_value = strdup(yytext); return DMAX;
DFMA yylval.string_value = strdup(yytext); return DFMA;
DMUL yylval.string_value = strdup(yytext); return DMUL;
EX2 yylval.string_value = strdup(yytext); return EX2;
@@ -68,6 +70,7 @@ 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;
+DSET yylval.string_value = strdup(yytext); return DSET;
G2R yylval.string_value = strdup(yytext); return G2R;
GLD yylval.string_value = strdup(yytext); return GLD;
GST yylval.string_value = strdup(yytext); return GST;
@@ -82,6 +85,7 @@ IADD\.CARRY{numeric} yylval.string_value = strdup(yytext); return IADDCARRY;
IADD32 yylval.string_value = strdup(yytext); return IADD32;
IADD32I yylval.string_value = strdup(yytext); return IADD32I;
IMAD yylval.string_value = strdup(yytext); return IMAD;
+ISAD yylval.string_value = strdup(yytext); return ISAD;
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;
@@ -140,6 +144,7 @@ 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;
+VOTE yylval.string_value = strdup(yytext); return VOTE;
/*instruction modifiers*/
EQ yylval.string_value = strdup(yytext); return EQ;
@@ -158,10 +163,16 @@ NEU yylval.string_value = strdup(yytext); return NEU;
\.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;*/
+\.CEIL yylval.string_value = strdup(yytext); return DOTCEIL;
+\.FLOOR yylval.string_value = strdup(yytext); return DOTFLOOR;
+\.IR yylval.string_value = strdup(yytext); /*unknown*/
\.UN yylval.string_value = strdup(yytext); return DOTUN;
\.NODEP yylval.string_value = strdup(yytext); return DOTNODEP;
-\.SAT yylval.string_value = strdup(yytext);
+\.SAT yylval.string_value = strdup(yytext); /*unknown*/
+\.ANY yylval.string_value = strdup(yytext); return DOTANY;
+\.ALL yylval.string_value = strdup(yytext); return DOTALL;
+\.MAD yylval.string_value = strdup(yytext); /*unknown*/
+
/* comparison operators */
@@ -180,6 +191,7 @@ NEU yylval.string_value = strdup(yytext); return NEU;
\.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;
+\.CARRY{numeric} yylval.string_value = strdup(yytext); /*unknown*/
\.CC yylval.string_value = strdup(yytext); return DOTCC;
\.X yylval.string_value = strdup(yytext); return DOTX;
\.E yylval.string_value = strdup(yytext); return DOTE;
diff --git a/cuobjdump_to_ptxplus/sass.y b/cuobjdump_to_ptxplus/sass.y
index 33785a0..7d23765 100644
--- a/cuobjdump_to_ptxplus/sass.y
+++ b/cuobjdump_to_ptxplus/sass.y
@@ -20,18 +20,18 @@ cuobjdumpInst *instEntry;
}
%token <string_value> BAR
-%token <string_value> ADA AND ANDS BRA CAL COS DADD DFMA DMUL EX2 F2F F2I FADD
-%token <string_value> FADD32 FADD32I FMAD FMAD32I FMUL FMUL32 FMUL32I FSET G2R
-%token <string_value> GLD GST I2F I2I IADD IADD32 IADD32I IMAD IMAD24 IMAD32I IMAD32 IADDCARRY
+%token <string_value> ADA AND ANDS BRA CAL COS DADD DMIN DMAX DFMA DMUL EX2 F2F F2I FADD
+%token <string_value> FADD32 FADD32I FMAD FMAD32I FMUL FMUL32 FMUL32I FSET DSET G2R
+%token <string_value> GLD GST I2F I2I IADD IADD32 IADD32I IMAD ISAD IMAD24 IMAD32I IMAD32 IADDCARRY
%token <string_value> IMUL IMUL24 IMULS24 IMUL32 IMUL32S24 IMUL32U24 IMUL32I IMUL32I24 IMUL32IS24
%token <string_value> ISET LG2 LLD LST MOV MOV32 MVC MVI NOP NOT NOTS OR ORS
%token <string_value> R2A R2G R2GU16U8 RCP RCP32 RET RRO RSQ SIN SHL SHR SSY XOR XORS
%token <string_value> S2R SASS_LD STS LDS SASS_ST IMIN IMAX A2R FMAX FMIN TEX TEX32 C2R EXIT
-%token <string_value> GRED PBK BRK R2C GATOM
+%token <string_value> GRED PBK BRK R2C GATOM VOTE
%token <string_value> EQ EQU GE GEU GT GTU LE LEU LT LTU NE NEU
%token <string_value> DOTBEXT DOTS DOTSFU
-%token <string_value> DOTTRUNC DOTIR DOTUN DOTNODEP DOTSAT
+%token <string_value> DOTTRUNC DOTCEIL DOTFLOOR DOTIR DOTUN DOTNODEP DOTSAT DOTANY DOTALL
%token <string_value> DOTF16 DOTF32 DOTF64 DOTS8 DOTS16 DOTS32 DOTS64 DOTS128 DOTU8 DOTU16 DOTU32 DOTU24 DOTU64
%token <string_value> DOTHI DOTNOINC
%token <string_value> DOTEQ DOTEQU DOTGE DOTGEU DOTGT DOTGTU DOTLE DOTLEU DOTLT DOTLTU DOTNE DOTNEU DOTNSF DOTSF DOTCARRY
@@ -137,17 +137,17 @@ baseInstruction : simpleInstructions { printf($1); instEntry->setBase($1); g_ins
| pbkInstruction
;
-simpleInstructions : ADA | AND | ANDS | COS | DADD | DFMA | DMUL | EX2 | F2F
+simpleInstructions : ADA | AND | ANDS | COS | DADD | DMIN | DMAX | DFMA | DMUL | EX2 | F2F
| F2I | FADD | FADD32 | FADD32I | FMAD | FMAD32I | FMUL
- | FMUL32 | FMUL32I | FSET | G2R | GLD | GST | I2F | I2I
- | IADD | IADD32 | IADD32I | IMAD | IMAD24 | IMAD32I | IMAD32 | IMUL
+ | FMUL32 | FMUL32I | FSET | DSET | G2R | GLD | GST | I2F | I2I
+ | IADD | IADD32 | IADD32I | IMAD | ISAD | IMAD24 | IMAD32I | IMAD32 | IMUL
| IMUL24 | IMULS24 | IMUL32 | IMUL32S24 | IMUL32I | IMUL32I24 | IMUL32IS24
| IMUL32U24
| ISET | LG2 | LLD | LST | MOV | MOV32 | MVC | MVI | NOP
| NOT | NOTS | OR | ORS | R2A | R2G | R2GU16U8 | RCP | RCP32 | RET | RRO
| RSQ | SHL | SHR | SIN | SSY | XOR | XORS | S2R | SASS_LD | STS
| LDS | SASS_ST | EXIT | BAR | IMIN | IMAX | A2R | FMAX | FMIN
- | TEX | TEX32 | C2R | BRK | R2C | IADDCARRY
+ | TEX | TEX32 | C2R | BRK | R2C | IADDCARRY | VOTE
;
pbkInstruction : PBK {
@@ -258,6 +258,8 @@ modifier : opTypes { printf($1); g_instList->getListEnd().addTypeModifier($1);}
| DOTS { g_instList->getListEnd().addBaseModifier(".s"); }
| DOTSFU { g_instList->getListEnd().addBaseModifier(".sfu"); }
| DOTTRUNC { g_instList->getListEnd().addBaseModifier(".rz"); }
+ | DOTCEIL { g_instList->getListEnd().addBaseModifier(".rp"); }
+ | DOTFLOOR { g_instList->getListEnd().addBaseModifier(".rm"); }
| DOTX { g_instList->getListEnd().addBaseModifier(".x"); }
| DOTE { g_instList->getListEnd().addBaseModifier(".e"); }
| DOTRED { g_instList->getListEnd().addBaseModifier(".red"); }
@@ -265,6 +267,8 @@ modifier : opTypes { printf($1); g_instList->getListEnd().addTypeModifier($1);}
| DOTIR { g_instList->getListEnd().addBaseModifier(".ir"); }
| DOTUN { /*g_instList->getListEnd().addBaseModifier(".un"); */}
| DOTNODEP { /*g_instList->getListEnd().addBaseModifier(".nodep"); */}
+ | DOTANY { g_instList->getListEnd().addBaseModifier(".any"); }
+ | DOTALL { g_instList->getListEnd().addBaseModifier(".all"); }
;
opTypes : DOTF16 //{ printf($1); g_instList->getListEnd().addTypeModifier($1);}