diff options
| author | Andrew M. B. Boktor <[email protected]> | 2012-05-09 00:31:43 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:19:38 -0700 |
| commit | c3d979dfb163ead1bd17eefcb7c0b879fb2efea2 (patch) | |
| tree | 32a3d630bfa33c3cd2a6e67bd8ffb1e9bd3eb187 /cuobjdump_to_ptxplus/cuobjdumpInst.cc | |
| parent | 319d541210cf1c5c00d11f8f9bb41dee7d7d8f76 (diff) | |
Adding support for a big number of instructions and modifiers that were not supported before
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 12372]
Diffstat (limited to 'cuobjdump_to_ptxplus/cuobjdumpInst.cc')
| -rw-r--r-- | cuobjdump_to_ptxplus/cuobjdumpInst.cc | 107 |
1 files changed, 94 insertions, 13 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 { |
