diff options
Diffstat (limited to 'cuobjdump_to_ptxplus/cuobjdumpInst.cc')
| -rw-r--r-- | cuobjdump_to_ptxplus/cuobjdumpInst.cc | 75 |
1 files changed, 70 insertions, 5 deletions
diff --git a/cuobjdump_to_ptxplus/cuobjdumpInst.cc b/cuobjdump_to_ptxplus/cuobjdumpInst.cc index a18bd04..c74d2d8 100644 --- a/cuobjdump_to_ptxplus/cuobjdumpInst.cc +++ b/cuobjdump_to_ptxplus/cuobjdumpInst.cc @@ -280,6 +280,8 @@ void cuobjdumpInst::printCuobjdumpPredicate() output(".sf"); } else if(modString3 == ".carry") { output(".cf"); + } else if(modString3 == ".false") { + output(".false"); //TODO: Need to find out what this is. } else { output(modString3); } @@ -496,7 +498,7 @@ void cuobjdumpInst::printCuobjdumpOperand(std::string currentPiece, std::string } // Make it lower case - if(mod.substr(0,9)!= "constant1") + if(mod.substr(0,9)!= "constant1" && mod.substr(0,9) != "varglobal") for(unsigned i=0; i<mod.length(); i++) { mod[i] = tolower(mod[i]); @@ -712,7 +714,11 @@ void cuobjdumpInst::printCuobjdumpOperand(std::string currentPiece, std::string output(outputhex.c_str()); } else if(mod.substr(0,3) == "l0x") { //label output(mod.c_str()); + } else if(mod.substr(0,9) == "varglobal") { //global variable + output(mod.substr(9).c_str()); } else {//variable name + printf("Unrecognized Operand: %s\n", mod.c_str()); + assert(0); output(mod.c_str()); } } @@ -794,6 +800,20 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } + else if(m_base == "BRX") + { + printCuobjdumpPredicate(); + output("brx"); + printCuobjdumpBaseModifiers(); + + if(m_typeModifiers->size() == 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(m_base == "CAL") { printCuobjdumpPredicate(); @@ -1180,7 +1200,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } - else if(m_base == "IADD.CARRY"){ + else if( m_base.find("IADD.CARRY") == 0){ //searches for IADD.CARRY at the start to match IADD.CARRY{numeric} std::string pred = "C0"; pred[1] = m_base[10]; this->addOperand(pred.c_str()); @@ -1196,7 +1216,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } - else if(m_base == "IADD") + else if(m_base == "IADD" || m_base == "IADD32I") { printCuobjdumpPredicate(); output("add"); @@ -1210,7 +1230,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } - else if(m_base == "IADD32" || m_base == "IADD32I") + else if(m_base == "IADD32") { printCuobjdumpPredicate(); output("add.half"); @@ -1347,6 +1367,42 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } + else if(m_base == "IMUL.HI.U24.U24") + { + printCuobjdumpPredicate(); + output("mul24.hi"); + printCuobjdumpBaseModifiers(); + + if(m_typeModifiers->size() == 0) + { + output(".u32"); //TODO: setting default type modifier but I'm not sure if this is right. + } + else if(m_typeModifiers->size() == 2) + { + std::string type1, type2, type; + int type1Size, type2Size; + char tempString[5]; + + std::list<std::string>::iterator curr = m_typeModifiers->begin(); + type1 = (*curr).c_str(); + curr++; + type2 = (*curr).c_str(); + + type1Size = atoi(type1.substr(2, type1.size()-2).c_str()); + type2Size = atoi(type2.substr(2, type2.size()-2).c_str()); + type = (type1Size > type2Size) ? type1 : type2; + strcpy(tempString, type.c_str()); + if(tempString[1] >= 'A' && tempString[1] <= 'Z') + tempString[1] += 32; + output(tempString); + } + else + { + printCuobjdumpTypeModifiers(); + } + printCuobjdumpOperands(); + output(";"); + } else if(m_base == "IMUL" || m_base == "IMUL32I") { printCuobjdumpPredicate(); @@ -1550,7 +1606,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } - else if(m_base == "NOP" || m_base == "SSY") + else if(m_base == "NOP") { printCuobjdumpPredicate(); output("nop"); @@ -1831,6 +1887,15 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpOperands(); output(";"); } + else if( m_base == "SSY") + { + printCuobjdumpPredicate(); + output("ssy"); + printCuobjdumpBaseModifiers(); + printCuobjdumpTypeModifiers(); + printCuobjdumpOperands(); + output(";"); + } else if(m_base == "LD") { printCuobjdumpPredicate(); |
