diff options
| author | Andrew M. B. Boktor <[email protected]> | 2012-05-27 23:43:22 -0800 |
|---|---|---|
| committer | Andrew Boktor <[email protected]> | 2014-08-14 13:47:32 -0700 |
| commit | 7d029b6129048cddbb0895565befcc452ef0aa5b (patch) | |
| tree | 7923cf7144b83725d95256922b15cc4b9573dd62 /cuobjdump_to_ptxplus | |
| parent | db7a2172c8d483436c66ff0dc38ca4f0b935b270 (diff) | |
Removing stringList and replacing it with std::list
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 12799]
Diffstat (limited to 'cuobjdump_to_ptxplus')
| -rw-r--r-- | cuobjdump_to_ptxplus/Makefile | 91 | ||||
| -rw-r--r-- | cuobjdump_to_ptxplus/cuobjdumpInst.cc | 575 | ||||
| -rw-r--r-- | cuobjdump_to_ptxplus/cuobjdumpInst.h | 18 | ||||
| -rw-r--r-- | cuobjdump_to_ptxplus/cuobjdumpInstList.cc | 8 | ||||
| -rw-r--r-- | cuobjdump_to_ptxplus/stringList.cc | 128 | ||||
| -rw-r--r-- | cuobjdump_to_ptxplus/stringList.h | 64 |
6 files changed, 343 insertions, 541 deletions
diff --git a/cuobjdump_to_ptxplus/Makefile b/cuobjdump_to_ptxplus/Makefile index 2bdca27..f9c7386 100644 --- a/cuobjdump_to_ptxplus/Makefile +++ b/cuobjdump_to_ptxplus/Makefile @@ -1,7 +1,7 @@ LEX = flex LEXFLAGS = -B YACC = bison -YFLAGS = -t -d -v --report=all +YFLAGS = -t -d --report=all --verbose CC = gcc CCFLAGS = -ggdb -fPIC -Wall -Wno-unused-function -Wno-sign-compare CXX = g++ @@ -22,8 +22,8 @@ MAKEFLAGS += --no-builtin-rules .SUFFIXES: .SECONDARY: -cuobjdump_to_ptxplus: stringList.o cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) - ${LD} ${LDFLAGS} -o $@ stringList.o cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) +cuobjdump_to_ptxplus: cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) + ${LD} ${LDFLAGS} -o $@ cuobjdumpInst.o cuobjdumpInstList.o cuobjdump_to_ptxplus.o $(PTX_PARSER_OBJECTS) $(SASS_PARSER_OBJECTS) $(ELF_PARSER_OBJECTS) $(HEADER_PARSER_OBJECTS) lex.ptx_.c : ../src/cuda-sim/ptx.l ${LEX} ${LEXFLAGS} ../src/cuda-sim/ptx.l @@ -87,13 +87,13 @@ cuobjdumpInst.o: /usr/include/bits/typesizes.h /usr/include/libio.h cuobjdumpInst.o: /usr/include/_G_config.h /usr/include/wchar.h cuobjdumpInst.o: /usr/include/bits/stdio_lim.h cuobjdumpInst.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h -cuobjdumpInst.o: /usr/include/sys/types.h /usr/include/time.h +cuobjdumpInst.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h cuobjdumpInst.o: /usr/include/endian.h /usr/include/bits/endian.h -cuobjdumpInst.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +cuobjdumpInst.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +cuobjdumpInst.o: /usr/include/time.h /usr/include/sys/select.h cuobjdumpInst.o: /usr/include/bits/select.h /usr/include/bits/sigset.h cuobjdumpInst.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h cuobjdumpInst.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h -cuobjdumpInst.o: stringList.h cuobjdumpInstList.o: cuobjdumpInstList.h cuobjdumpInst.h cuobjdumpInstList.o: /usr/include/string.h /usr/include/features.h cuobjdumpInstList.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h @@ -103,13 +103,14 @@ cuobjdumpInstList.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h cuobjdumpInstList.o: /usr/include/libio.h /usr/include/_G_config.h cuobjdumpInstList.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h cuobjdumpInstList.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h +cuobjdumpInstList.o: /usr/include/bits/waitflags.h +cuobjdumpInstList.o: /usr/include/bits/waitstatus.h /usr/include/endian.h +cuobjdumpInstList.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h cuobjdumpInstList.o: /usr/include/sys/types.h /usr/include/time.h -cuobjdumpInstList.o: /usr/include/endian.h /usr/include/bits/endian.h -cuobjdumpInstList.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h -cuobjdumpInstList.o: /usr/include/bits/select.h /usr/include/bits/sigset.h -cuobjdumpInstList.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h +cuobjdumpInstList.o: /usr/include/sys/select.h /usr/include/bits/select.h +cuobjdumpInstList.o: /usr/include/bits/sigset.h /usr/include/bits/time.h +cuobjdumpInstList.o: /usr/include/sys/sysmacros.h cuobjdumpInstList.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h -cuobjdumpInstList.o: stringList.h cuobjdump_to_ptxplus.o: /usr/include/stdio.h /usr/include/features.h cuobjdump_to_ptxplus.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h cuobjdump_to_ptxplus.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -120,14 +121,15 @@ cuobjdump_to_ptxplus.o: /usr/include/bits/stdio_lim.h cuobjdump_to_ptxplus.o: /usr/include/bits/sys_errlist.h cuobjdumpInstList.h cuobjdump_to_ptxplus.o: cuobjdumpInst.h /usr/include/string.h cuobjdump_to_ptxplus.o: /usr/include/xlocale.h /usr/include/stdlib.h -cuobjdump_to_ptxplus.o: /usr/include/sys/types.h /usr/include/time.h -cuobjdump_to_ptxplus.o: /usr/include/endian.h /usr/include/bits/endian.h -cuobjdump_to_ptxplus.o: /usr/include/bits/byteswap.h -cuobjdump_to_ptxplus.o: /usr/include/sys/select.h /usr/include/bits/select.h -cuobjdump_to_ptxplus.o: /usr/include/bits/sigset.h /usr/include/bits/time.h -cuobjdump_to_ptxplus.o: /usr/include/sys/sysmacros.h +cuobjdump_to_ptxplus.o: /usr/include/bits/waitflags.h +cuobjdump_to_ptxplus.o: /usr/include/bits/waitstatus.h /usr/include/endian.h +cuobjdump_to_ptxplus.o: /usr/include/bits/endian.h +cuobjdump_to_ptxplus.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +cuobjdump_to_ptxplus.o: /usr/include/time.h /usr/include/sys/select.h +cuobjdump_to_ptxplus.o: /usr/include/bits/select.h /usr/include/bits/sigset.h +cuobjdump_to_ptxplus.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h cuobjdump_to_ptxplus.o: /usr/include/bits/pthreadtypes.h -cuobjdump_to_ptxplus.o: /usr/include/alloca.h stringList.h +cuobjdump_to_ptxplus.o: /usr/include/alloca.h elf_lexer.o: /usr/include/stdio.h /usr/include/features.h elf_lexer.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h elf_lexer.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -139,15 +141,16 @@ elf_lexer.o: /usr/include/xlocale.h /usr/include/errno.h elf_lexer.o: /usr/include/bits/errno.h /usr/include/linux/errno.h elf_lexer.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h elf_lexer.o: /usr/include/asm-generic/errno-base.h /usr/include/stdlib.h -elf_lexer.o: /usr/include/sys/types.h /usr/include/time.h +elf_lexer.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h elf_lexer.o: /usr/include/endian.h /usr/include/bits/endian.h -elf_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +elf_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +elf_lexer.o: /usr/include/time.h /usr/include/sys/select.h elf_lexer.o: /usr/include/bits/select.h /usr/include/bits/sigset.h elf_lexer.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h elf_lexer.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h elf_lexer.o: elf_parser.hh /usr/include/unistd.h -elf_lexer.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h -elf_lexer.o: /usr/include/getopt.h +elf_lexer.o: /usr/include/bits/posix_opt.h /usr/include/bits/environments.h +elf_lexer.o: /usr/include/bits/confname.h /usr/include/getopt.h elf_parser.o: /usr/include/stdio.h /usr/include/features.h elf_parser.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h elf_parser.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -156,13 +159,14 @@ elf_parser.o: /usr/include/libio.h /usr/include/_G_config.h elf_parser.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h elf_parser.o: /usr/include/bits/sys_errlist.h cuobjdumpInstList.h elf_parser.o: cuobjdumpInst.h /usr/include/string.h /usr/include/xlocale.h -elf_parser.o: /usr/include/stdlib.h /usr/include/sys/types.h -elf_parser.o: /usr/include/time.h /usr/include/endian.h +elf_parser.o: /usr/include/stdlib.h /usr/include/bits/waitflags.h +elf_parser.o: /usr/include/bits/waitstatus.h /usr/include/endian.h elf_parser.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +elf_parser.o: /usr/include/sys/types.h /usr/include/time.h elf_parser.o: /usr/include/sys/select.h /usr/include/bits/select.h elf_parser.o: /usr/include/bits/sigset.h /usr/include/bits/time.h elf_parser.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h -elf_parser.o: /usr/include/alloca.h stringList.h +elf_parser.o: /usr/include/alloca.h header_lexer.o: /usr/include/stdio.h /usr/include/features.h header_lexer.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h header_lexer.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -174,14 +178,16 @@ header_lexer.o: /usr/include/xlocale.h /usr/include/errno.h header_lexer.o: /usr/include/bits/errno.h /usr/include/linux/errno.h header_lexer.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h header_lexer.o: /usr/include/asm-generic/errno-base.h /usr/include/stdlib.h -header_lexer.o: /usr/include/sys/types.h /usr/include/time.h +header_lexer.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h header_lexer.o: /usr/include/endian.h /usr/include/bits/endian.h -header_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +header_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +header_lexer.o: /usr/include/time.h /usr/include/sys/select.h header_lexer.o: /usr/include/bits/select.h /usr/include/bits/sigset.h header_lexer.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h header_lexer.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h header_lexer.o: header_parser.hh /usr/include/unistd.h -header_lexer.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h +header_lexer.o: /usr/include/bits/posix_opt.h +header_lexer.o: /usr/include/bits/environments.h /usr/include/bits/confname.h header_lexer.o: /usr/include/getopt.h header_parser.o: cuobjdumpInstList.h cuobjdumpInst.h /usr/include/string.h header_parser.o: /usr/include/features.h /usr/include/sys/cdefs.h @@ -192,13 +198,13 @@ header_parser.o: /usr/include/bits/typesizes.h /usr/include/libio.h header_parser.o: /usr/include/_G_config.h /usr/include/wchar.h header_parser.o: /usr/include/bits/stdio_lim.h header_parser.o: /usr/include/bits/sys_errlist.h /usr/include/stdlib.h -header_parser.o: /usr/include/sys/types.h /usr/include/time.h +header_parser.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h header_parser.o: /usr/include/endian.h /usr/include/bits/endian.h -header_parser.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +header_parser.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +header_parser.o: /usr/include/time.h /usr/include/sys/select.h header_parser.o: /usr/include/bits/select.h /usr/include/bits/sigset.h header_parser.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h header_parser.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h -header_parser.o: stringList.h sass_lexer.o: /usr/include/stdio.h /usr/include/features.h sass_lexer.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h sass_lexer.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -210,15 +216,16 @@ sass_lexer.o: /usr/include/xlocale.h /usr/include/errno.h sass_lexer.o: /usr/include/bits/errno.h /usr/include/linux/errno.h sass_lexer.o: /usr/include/asm/errno.h /usr/include/asm-generic/errno.h sass_lexer.o: /usr/include/asm-generic/errno-base.h /usr/include/stdlib.h -sass_lexer.o: /usr/include/sys/types.h /usr/include/time.h +sass_lexer.o: /usr/include/bits/waitflags.h /usr/include/bits/waitstatus.h sass_lexer.o: /usr/include/endian.h /usr/include/bits/endian.h -sass_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/select.h +sass_lexer.o: /usr/include/bits/byteswap.h /usr/include/sys/types.h +sass_lexer.o: /usr/include/time.h /usr/include/sys/select.h sass_lexer.o: /usr/include/bits/select.h /usr/include/bits/sigset.h sass_lexer.o: /usr/include/bits/time.h /usr/include/sys/sysmacros.h sass_lexer.o: /usr/include/bits/pthreadtypes.h /usr/include/alloca.h sass_lexer.o: sass_parser.hh /usr/include/unistd.h -sass_lexer.o: /usr/include/bits/posix_opt.h /usr/include/bits/confname.h -sass_lexer.o: /usr/include/getopt.h +sass_lexer.o: /usr/include/bits/posix_opt.h /usr/include/bits/environments.h +sass_lexer.o: /usr/include/bits/confname.h /usr/include/getopt.h sass_parser.o: /usr/include/stdio.h /usr/include/features.h sass_parser.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h sass_parser.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h @@ -227,17 +234,11 @@ sass_parser.o: /usr/include/libio.h /usr/include/_G_config.h sass_parser.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h sass_parser.o: /usr/include/bits/sys_errlist.h cuobjdumpInstList.h sass_parser.o: cuobjdumpInst.h /usr/include/string.h /usr/include/xlocale.h -sass_parser.o: /usr/include/stdlib.h /usr/include/sys/types.h -sass_parser.o: /usr/include/time.h /usr/include/endian.h +sass_parser.o: /usr/include/stdlib.h /usr/include/bits/waitflags.h +sass_parser.o: /usr/include/bits/waitstatus.h /usr/include/endian.h sass_parser.o: /usr/include/bits/endian.h /usr/include/bits/byteswap.h +sass_parser.o: /usr/include/sys/types.h /usr/include/time.h sass_parser.o: /usr/include/sys/select.h /usr/include/bits/select.h sass_parser.o: /usr/include/bits/sigset.h /usr/include/bits/time.h sass_parser.o: /usr/include/sys/sysmacros.h /usr/include/bits/pthreadtypes.h -sass_parser.o: /usr/include/alloca.h stringList.h -stringList.o: stringList.h /usr/include/stdio.h /usr/include/features.h -stringList.o: /usr/include/sys/cdefs.h /usr/include/bits/wordsize.h -stringList.o: /usr/include/gnu/stubs.h /usr/include/gnu/stubs-64.h -stringList.o: /usr/include/bits/types.h /usr/include/bits/typesizes.h -stringList.o: /usr/include/libio.h /usr/include/_G_config.h -stringList.o: /usr/include/wchar.h /usr/include/bits/stdio_lim.h -stringList.o: /usr/include/bits/sys_errlist.h +sass_parser.o: /usr/include/alloca.h diff --git a/cuobjdump_to_ptxplus/cuobjdumpInst.cc b/cuobjdump_to_ptxplus/cuobjdumpInst.cc index dde6f8a..06a4f3e 100644 --- a/cuobjdump_to_ptxplus/cuobjdumpInst.cc +++ b/cuobjdump_to_ptxplus/cuobjdumpInst.cc @@ -38,16 +38,25 @@ extern void output(const char * text); extern void output(const std::string text); //Constructor -cuobjdumpInst::cuobjdumpInst() -{ +cuobjdumpInst::cuobjdumpInst() { //initilize everything to empty m_label = ""; - m_predicate = new stringList(); + m_predicate = new std::list<std::string>(); m_base = ""; - m_baseModifiers = new stringList(); - m_typeModifiers = new stringList(); - m_operands = new stringList(); - m_predicateModifiers = new stringList(); + m_baseModifiers = new std::list<std::string>(); + m_typeModifiers = new std::list<std::string>(); + m_operands = new std::list<std::string>(); + m_predicateModifiers = new std::list<std::string>(); +} + +cuobjdumpInst::~cuobjdumpInst() { + /* + delete m_predicate; + delete m_baseModifiers; + delete m_typeModifiers; + delete m_operands; + delete m_predicateModifiers; + */ } void cuobjdumpInst::printCuobjdumpInst() @@ -69,33 +78,40 @@ void cuobjdumpInst::printCuobjdumpInst() std::cout << "\n\n";*/ std::cout << m_base << " "; - m_baseModifiers->printStringList(); + cuobjdumpInst::printStringList(m_baseModifiers); std::cout << " "; - m_typeModifiers->printStringList(); + cuobjdumpInst::printStringList(m_typeModifiers); std::cout << " "; - m_operands->printStringList(); + cuobjdumpInst::printStringList(m_operands); std::cout << "\n"; } +//static +void cuobjdumpInst::printStringList(std::list<std::string>* strlist) { + for ( std::list<std::string>::iterator iter = strlist->begin(); + iter != strlist->end(); + iter++) { + std::cout << *iter << " "; + } +} + // Just prints the base and operands void cuobjdumpInst::printHeaderPtx() { - output(m_base); output(" "); - - stringListPiece* currentPiece; - - currentPiece = m_baseModifiers->getListStart(); - for(int i=0; (i<m_baseModifiers->getSize())&&(currentPiece!=NULL); i++) - { - output(" "); output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + output(m_base); + output(" "); + for ( std::list<std::string>::iterator basemod = m_baseModifiers->begin(); + basemod != m_baseModifiers->end(); + basemod++) { + output(" "); + output(*basemod); } - currentPiece = m_operands->getListStart(); - for(int i=0; (i<m_operands->getSize())&&(currentPiece!=NULL); i++) - { - output(" "); output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + for ( std::list<std::string>::iterator operand = m_operands->begin(); + operand != m_operands->end(); + operand++) { + output(" "); + output(*operand); } } @@ -105,9 +121,9 @@ const char* cuobjdumpInst::getBase() return m_base; } -stringList* cuobjdumpInst::getTypeModifiers() +std::list<std::string>* cuobjdumpInst::getTypeModifiers() { - return m_typeModifiers; + return m_typeModifiers; } //print out .version and .target header lines @@ -115,31 +131,33 @@ bool cuobjdumpInst::printHeaderInst() { if(strcmp(m_base, ".version")==0) { - output(m_base); output(" "); + output(m_base); + output(" "); - stringListPiece* currentPiece = m_operands->getListStart(); - output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + std::list<std::string>::iterator operand = m_operands->begin(); + output(*operand); + operand ++; - if(currentPiece!=NULL) - { - output("."); output(currentPiece->stringText); + if(operand != m_operands->end()) { + output("."); + output(*operand); } output("+"); output("\n"); } else if(strcmp(m_base, ".target")==0) { - output(m_base); output(" "); + output(m_base); + output(" "); - stringListPiece* currentPiece = m_operands->getListStart(); - output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + std::list<std::string>::iterator operand = m_operands->begin(); + output(*operand); + operand ++; - while(currentPiece!=NULL) - { - output(", "); output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + while(operand != m_operands->end()) { + output(", "); + output(*operand); + operand++; } output("\n"); } @@ -147,27 +165,25 @@ bool cuobjdumpInst::printHeaderInst() { output(m_base); output(" "); - stringListPiece* currentPiece; - - - currentPiece = m_baseModifiers->getListStart(); - output(currentPiece->stringText); output(" "); - currentPiece = currentPiece->nextString; + std::list<std::string>::iterator curr = m_baseModifiers->begin(); + output(*curr); + output(" "); + curr++; - while(currentPiece!=NULL) + while(curr != m_baseModifiers->end()) { - output(" "); output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + output(" "); + output(*curr); } - currentPiece = m_operands->getListStart(); - output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + std::list<std::string>::iterator operand = m_operands->begin(); + output(*operand); + operand++; - while(currentPiece!=NULL) - { - output(" "); output(currentPiece->stringText); - currentPiece = currentPiece->nextString; + while(operand != m_operands->end()) { + output(", "); + output(*operand); + operand++; } output(";\n"); } @@ -185,47 +201,32 @@ void cuobjdumpInst::setBase(const char* setBaseValue) void cuobjdumpInst::addBaseModifier(const char* addBaseMod) { - stringListPiece* tempPiece = new stringListPiece; - tempPiece->stringText = addBaseMod; - - m_baseModifiers->add(tempPiece); + m_baseModifiers->push_back(addBaseMod); } void cuobjdumpInst::addTypeModifier(const char* addTypeMod) { //We cannot have more than two modifiers, replace the last //This will be the case if we have memory operand modifiers - if (m_typeModifiers->getSize() == 2) { - m_typeModifiers->getListEnd()->stringText = addTypeMod; - }else { - stringListPiece* tempPiece = new stringListPiece; - tempPiece->stringText = addTypeMod; - m_typeModifiers->add(tempPiece); + if (m_typeModifiers->size() == 2){ + m_typeModifiers->pop_back(); } + m_typeModifiers->push_back(addTypeMod); } void cuobjdumpInst::addOperand(const char* addOp) { - stringListPiece* tempPiece = new stringListPiece; - tempPiece->stringText = addOp; - - m_operands->add(tempPiece); + m_operands->push_back(addOp); } void cuobjdumpInst::setPredicate(const char* setPredicateValue) { - stringListPiece* tempPiece = new stringListPiece; - tempPiece->stringText = setPredicateValue; - - m_predicate->add(tempPiece); + m_predicate->push_back(setPredicateValue); } void cuobjdumpInst::addPredicateModifier(const char* addPredicateMod) { - stringListPiece* tempPiece = new stringListPiece; - tempPiece->stringText = addPredicateMod; - - m_predicateModifiers->add(tempPiece); + m_predicateModifiers->push_back(addPredicateMod); } void cuobjdumpInst::setLabel(const char* setLabelValue) @@ -259,18 +260,15 @@ void cuobjdumpInst::printCuobjdumpLabel(std::list<std::string> labelList) void cuobjdumpInst::printCuobjdumpPredicate() { - stringListPiece* currentPiece = m_predicate->getListStart(); - if(currentPiece!=NULL) + std::list<std::string>::iterator pred = m_predicate->begin(); + if(pred != m_predicate->end()) { output("@$p"); - char modString[2]; - modString[0]=currentPiece->stringText[1]; - modString[1]='\0'; - output(modString); - stringListPiece* currentPiece2 = m_predicateModifiers->getListStart(); - for(int i=0; (i<m_predicateModifiers->getSize())&&(currentPiece2!=NULL); i++) - { - std::string modString3 = currentPiece2->stringText; + output((*pred).substr(1,1)); + for ( std::list<std::string>::iterator predmod = m_predicateModifiers->begin(); + predmod != m_predicateModifiers->end(); + predmod++) { + std::string modString3 = *predmod; for(unsigned i=0; i<modString3.length(); i++) { @@ -285,7 +283,6 @@ void cuobjdumpInst::printCuobjdumpPredicate() } else { output(modString3); } - currentPiece = currentPiece2->nextString; } output(" "); } @@ -293,143 +290,135 @@ void cuobjdumpInst::printCuobjdumpPredicate() void cuobjdumpInst::printCuobjdumpTypeModifiers() { - stringListPiece* currentPiece = m_typeModifiers->getListStart(); - for(int i=0; (i<m_typeModifiers->getSize())&&(currentPiece!=NULL); i++) - { - const char* modString = currentPiece->stringText; - if( strcmp(modString, ".F16")==0 ) + for ( std::list<std::string>::iterator typemod = m_typeModifiers->begin(); + typemod != m_typeModifiers->end(); + typemod++) { + if (*typemod == ".F16") output(".f16"); - else if( strcmp(modString, ".F32")==0 ) + else if(*typemod == ".F32") output(".f32"); - else if( strcmp(modString, ".F64")==0 ){ + else if(*typemod == ".F64"){ if( strcmp(m_base, "F2I") == 0|| strcmp(m_base, "F2F") == 0) output(".f64"); else output(".ff64"); } - else if( strcmp(modString, ".S8")==0 ) + else if(*typemod == ".S8") output(".s8"); - else if( strcmp(modString, ".S16")==0 ) + else if(*typemod == ".S16") output(".s16"); - else if( strcmp(modString, ".S32")==0 ) + else if(*typemod == ".S32") output(".s32"); - else if( strcmp(modString, ".S64")==0 ) + else if(*typemod == ".S64") output(".bb64"); //TODO: might have to change to .ss64 in the future. - else if( strcmp(modString, ".S128")==0 ) + else if(*typemod == ".S128") output(".bb128"); //TODO: might have to change to .ss64 in the future. - else if( strcmp(modString, ".U8")==0 ) + else if(*typemod == ".U8") output(".u8"); - else if( strcmp(modString, ".U16")==0 ) + else if(*typemod == ".U16") output(".u16"); - else if( strcmp(modString, ".U32")==0 ) + else if(*typemod == ".U32") output(".u32"); - else if( strcmp(modString, ".U64")==0 ) + else if(*typemod == ".U64") output(".bb64"); //TODO: might have to change to .ss64 in the future. - else if( strcmp(modString, ".HI")==0 ) + else if(*typemod == ".HI") output(".hi"); else { printf("Unknown Type: "); - printf(modString); + printf((*typemod).c_str()); printf("\n"); - output("Unknown Type: "); output(modString); + output("Unknown Type: "); + output(*typemod); assert(0); } - - currentPiece = currentPiece->nextString; } } void cuobjdumpInst::printCuobjdumpBaseModifiers() { - stringListPiece* currentPiece = m_baseModifiers->getListStart(); - for(int i=0; (i<m_baseModifiers->getSize())&&(currentPiece!=NULL); i++) + for ( std::list<std::string>::iterator basemod = m_baseModifiers->begin(); + basemod != m_baseModifiers->end(); + basemod++) { - const char* modString = currentPiece->stringText; - if( strcmp(modString, "EQ")==0 ) + if( *basemod == "EQ") output(".eq"); - else if( strcmp(modString, "EQU")==0 ) + else if( *basemod == "EQU") output(".equ"); - else if( strcmp(modString, "GE")==0 ) + else if( *basemod == "GE") output(".ge"); - else if( strcmp(modString, "GEU")==0 ) + else if( *basemod == "GEU") output(".geu"); - else if( strcmp(modString, "GT")==0 ) + else if( *basemod == "GT") output(".gt"); - else if( strcmp(modString, "GTU")==0 ) + else if( *basemod == "GTU") output(".gtu"); - else if( strcmp(modString, "LE")==0 ) + else if( *basemod == "LE") output(".le"); - else if( strcmp(modString, "LEU")==0 ) + else if( *basemod == "LEU") output(".leu"); - else if( strcmp(modString, "LT")==0 ) + else if( *basemod == "LT") output(".lt"); - else if( strcmp(modString, "LTU")==0 ) + else if( *basemod == "LTU") output(".ltu"); - else if( strcmp(modString, "NE")==0 ) + else if( *basemod == "NE") output(".ne"); - else if( strcmp(modString, "NEU")==0 ) + else if( *basemod == "NEU") output(".neu"); - else if( strcmp(modString, ".abs")==0 ) + else if( *basemod == ".abs") { if((strcmp(m_base, "F2F")!=0) && (strcmp(m_base, "I2I")!=0)) { - output(modString); + output(*basemod); } } - 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 ) + else if( (*basemod == "ex2") || + (*basemod == ".exit") || + (*basemod == "sin") || + (*basemod == "cos") || + (*basemod == ".rz") || + (*basemod == ".rp") || + (*basemod == ".rm") || + (*basemod == ".any") || + (*basemod == ".all") ) + output(*basemod); + else if( *basemod == ".bext") { //".bext" is a modifier that indicated u8 to u16 type conversion, I think } - else if( strcmp(modString, ".s")==0 ) + else if( *basemod == ".s") { //".s" is the same as ".join" in cuobjdump. } - else if( strcmp(modString, ".sfu")==0 ) + else if( *basemod == ".sfu") { //".sfu" is an unknown base modifier, TODO: find out what it is } - else if( strcmp(modString, ".x")==0 ) + else if( *basemod == ".x") { //".x" is an unknown base modifier, TODO: find out what it is - output(modString); + output(*basemod); } - else if( strcmp(modString, ".e")==0 ) + else if( *basemod == ".e") { //".e" is an unknown base modifier, TODO: find out what it is - output(modString); + output(*basemod); } - else if( strcmp(modString, ".ir")==0 ) + else if( *basemod == ".ir") { //".ir" is an unknown base modifier, TODO: find out what it is - output(modString); + output(*basemod); } - else if(strcmp(modString, "IADD")==0 || - strcmp(modString, "IMIN")==0 || - strcmp(modString, "IMAX")==0 - //strcmp(modString, "INC")==0 || - //strcmp(modString, "DEC")==0 || - //strcmp(modString, "IAND")==0 || - //strcmp(modString, "IOR")==0 || - //strcmp(modString, "IXOR")==0 - ) + else if((*basemod == "IADD") || + (*basemod == "IMIN") || + (*basemod == "IMAX")) { /* * This is the case of a GRED or GATOM operation */ output("."); - std::string modstr = modString; + std::string modstr = *basemod; modstr = modstr.substr(1); for (unsigned i=0; i<modstr.length(); i++){ modstr[i] = tolower(modstr[i]); @@ -439,14 +428,12 @@ void cuobjdumpInst::printCuobjdumpBaseModifiers() else { printf("Unknown Base Mod: "); - printf(modString); + printf((*basemod).c_str()); printf("\n"); output("Unknown Base Mod: "); - output(modString); + output(*basemod); assert(0); } - - currentPiece = currentPiece->nextString; } } @@ -465,14 +452,14 @@ void cuobjdumpInst::printCuobjdumpOperandlohi(std::string op) { } } -void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::string operandDelimiter, const char* base) +void cuobjdumpInst::printCuobjdumpOperand(std::string currentPiece, std::string operandDelimiter, const char* base) { - output(operandDelimiter.c_str()); + output(operandDelimiter); output(" "); //Current piece - std::string currp = currentPiece->stringText; + std::string currp = currentPiece; std::string mod; if(currp[0] == '-') { @@ -546,8 +533,8 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st if( (strcmp(m_base, "DADD")==0) || (strcmp(m_base, "DMUL")==0) || (strcmp(m_base, "DFMA")==0) || - ( (m_typeModifiers->getSize()==1) && - (strcmp((m_typeModifiers->getListStart()->stringText), ".S64")==0) && + ( (m_typeModifiers->size()==1) && + (m_typeModifiers->front() == ".S64") && ( (strcmp(m_base, "G2R")==0) || (strcmp(m_base, "R2G")==0) || (strcmp(m_base, "GLD")==0) || @@ -558,8 +545,8 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st std::stringstream temp; temp << "{$r" << (regNumInt) << ",$r"<< (regNumInt+1) << "}"; output(temp.str().c_str()); - } else if( (m_typeModifiers->getSize()==1) && - (strcmp((m_typeModifiers->getListStart()->stringText), ".S128")==0)) { + } else if( (m_typeModifiers->size()==1) && + (m_typeModifiers->front() == ".S128")) { std::string modsub = mod.substr(1); int regNumInt = atoi(modsub.c_str()); std::stringstream temp; @@ -650,12 +637,12 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st hexStringConvert << std::hex << modsub2; hexStringConvert >> addrValue; unsigned chunksize = 4; - if ( this->m_typeModifiers->getSize()>0 && - ( strcmp((m_typeModifiers->getListEnd()->stringText), ".S16")==0 || - strcmp((m_typeModifiers->getListEnd()->stringText), ".U16")==0 )) chunksize = 2; - if ( this->m_typeModifiers->getSize()>0 && - ( strcmp((m_typeModifiers->getListEnd()->stringText), ".U8")==0 || - strcmp((m_typeModifiers->getListEnd()->stringText), ".S8")==0 )) chunksize = 1; + if ( this->m_typeModifiers->size()>0 && + ( m_typeModifiers->back() == ".S16" || + m_typeModifiers->back() == ".U16")) chunksize = 2; + if ( this->m_typeModifiers->size()>0 && + ( m_typeModifiers->back() == ".U8" || + m_typeModifiers->back() == ".S8")) chunksize = 1; addrValue = addrValue*chunksize; char outputHex[10]; sprintf(outputHex, "%x", addrValue); @@ -685,12 +672,12 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st if(localFlag == 0) { unsigned chunksize = 4; - if ( m_typeModifiers->getSize()>0 && - ( strcmp((m_typeModifiers->getListEnd()->stringText), ".S16")==0 || - strcmp((m_typeModifiers->getListEnd()->stringText), ".U16")==0 )) chunksize = 2; - if ( this->m_typeModifiers->getSize()>0 && - ( strcmp((m_typeModifiers->getListEnd()->stringText), ".U8")==0 || - strcmp((m_typeModifiers->getListEnd()->stringText), ".S8")==0 )) chunksize = 1; + if ( m_typeModifiers->size()>0 && + ( m_typeModifiers->back() == ".S16" || + m_typeModifiers->back() == ".U16")) chunksize = 2; + if ( this->m_typeModifiers->size()>0 && + ( m_typeModifiers->back() == ".U8" || + m_typeModifiers->back() == ".S8")) chunksize = 1; addrValue = addrValue*chunksize; } std::stringstream outputhex; @@ -721,17 +708,15 @@ void cuobjdumpInst::printCuobjdumpOperand(stringListPiece* currentPiece, std::st void cuobjdumpInst::printCuobjdumpOperands() { - stringListPiece* currentPiece = m_operands->getListStart(); std::string delimiter = ""; - for(int i=0; (i<m_operands->getSize())&&(currentPiece!=NULL); i++) - { - if((strcmp(m_base, "LOP.PASS_B")==0 || strcmp(m_base, "LOP.S.PASS_B")==0) && (i==1)) - { - currentPiece = currentPiece->nextString; + unsigned i=0; + for ( std::list<std::string>::iterator operand = m_operands->begin(); + operand != m_operands->end(); + operand++, i++) { + if((strcmp(m_base, "LOP.PASS_B")==0 || strcmp(m_base, "LOP.S.PASS_B")==0) && (i==1)) { continue; } - printCuobjdumpOperand(currentPiece, delimiter, m_base); - currentPiece = currentPiece->nextString; + printCuobjdumpOperand(*operand, delimiter, m_base); delimiter = ","; } } @@ -763,7 +748,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -796,7 +781,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: //output(" //cos"); output("cos"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -809,7 +794,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".ff64"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -823,7 +808,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("min"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f64"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -837,7 +822,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("max"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f64"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -854,7 +839,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".ff64"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -869,7 +854,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".ff64"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -885,7 +870,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("ex2"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -898,17 +883,16 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); int absFlag = 0; - stringListPiece* currentPiece = m_baseModifiers->getListStart(); - while(currentPiece != NULL) - { - if(strcmp(currentPiece->stringText, ".abs")==0) + for ( std::list<std::string>::iterator basemod = m_baseModifiers->begin(); + basemod != m_baseModifiers->end(); + basemod++){ + if( *basemod == ".abs") { output("abs"); absFlag = 1; break; } - currentPiece = currentPiece->nextString; } if(absFlag == 0) { @@ -945,7 +929,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -959,7 +943,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add.half"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -973,7 +957,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -987,7 +971,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1001,7 +985,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul.half"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1015,7 +999,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("set"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) { output(".f32.f32"); } @@ -1031,7 +1015,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("set"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) { output(".f64.f64"); } @@ -1047,12 +1031,13 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mov"); printCuobjdumpBaseModifiers(); - if( m_typeModifiers->getSize() == 2 ) { + if( m_typeModifiers->size() == 2 ) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1084,7 +1069,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output(".bb64"); else output(type.c_str()); - } else if( m_typeModifiers->getSize() == 1 ) { + } else if( m_typeModifiers->size() == 1 ) { printCuobjdumpTypeModifiers(); } else { output("Error: unsupported number of type modifiers. "); @@ -1098,9 +1083,9 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: //output("mov"); output("ld.global"); printCuobjdumpBaseModifiers(); - if (strcmp(m_typeModifiers->getListStart()->stringText, ".S128")==0) { + if (m_typeModifiers->front() == ".S128") { output(".v4.u32"); - } else if (strcmp(m_typeModifiers->getListStart()->stringText, ".S64")==0) { + } else if (m_typeModifiers->front() == ".S64") { output(".v2.u32"); } else { printCuobjdumpTypeModifiers(); @@ -1114,9 +1099,9 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: //output("mov"); output("st.global"); printCuobjdumpBaseModifiers(); - if (strcmp(m_typeModifiers->getListStart()->stringText, ".S128")==0) { + if (m_typeModifiers->front() == ".S128") { output(".v4.u32"); - } else if (strcmp(m_typeModifiers->getListStart()->stringText, ".S64")==0) { + } else if (m_typeModifiers->front() == ".S64") { output(".v2.u32"); } else { printCuobjdumpTypeModifiers(); @@ -1138,17 +1123,16 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); int absFlag = 0; - stringListPiece* currentPiece = m_baseModifiers->getListStart(); - while(currentPiece != NULL) - { - if(strcmp(currentPiece->stringText, ".abs")==0) + for ( std::list<std::string>::iterator basemod = m_baseModifiers->begin(); + basemod != m_baseModifiers->end(); + basemod++) { + if(*basemod == ".abs") { output("abs"); absFlag = 1; break; } - currentPiece = currentPiece->nextString; } if(absFlag == 0) { @@ -1158,7 +1142,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0 || absFlag) + if(m_typeModifiers->size() == 0 || absFlag) output(int_default_mod()); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1175,7 +1159,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("addp"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1189,7 +1173,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1203,7 +1187,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("add.half"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".u32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1216,7 +1200,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1230,7 +1214,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad.wide"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1244,7 +1228,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("sad"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1259,7 +1243,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad24.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".u32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1272,7 +1256,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mad24.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".s32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1290,19 +1274,20 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul24.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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->getSize() == 2) + else if(m_typeModifiers->size() == 2) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); char tempString[5]; - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1327,19 +1312,22 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) { output(int_default_mod()); //TODO: setting default type modifier but I'm not sure if this is right. } - else if(m_typeModifiers->getSize() == 2) + else if(m_typeModifiers->size() == 2) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); + char tempString[5]; - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1364,15 +1352,16 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul.half.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 2) + if(m_typeModifiers->size() == 2) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); char tempString[5]; - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1397,19 +1386,20 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mul24.half.lo"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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->getSize() == 2) + else if(m_typeModifiers->size() == 2) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); char tempString[5]; - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1434,9 +1424,9 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("set"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".u32.u32"); //TODO: setting default type modifier but I'm not sure if this is right. - else if(m_typeModifiers->getSize() == 1) + else if(m_typeModifiers->size() == 1) { printCuobjdumpTypeModifiers(); printCuobjdumpTypeModifiers(); } @@ -1451,7 +1441,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("lg2"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1471,14 +1461,14 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: else if(strcmp(m_base, "MVC")==0){ printCuobjdumpPredicate(); //Use cvt if there is conversion involved (2 modifiers) otherwise mov - if(m_typeModifiers->getSize() < 2) + if(m_typeModifiers->size() < 2) output("mov"); else output("cvt"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1491,7 +1481,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mov"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1504,7 +1494,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mov.half"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".u32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1533,7 +1523,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("and"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".b32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1547,7 +1537,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("or"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".b32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1561,7 +1551,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("not"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".b32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1575,7 +1565,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("xor"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".b32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1589,12 +1579,12 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("shl"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".b32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); printCuobjdumpOperands(); - if(m_operands->getSize() == 2) + if(m_operands->size() == 2) output(", 0x0"); output(";"); } @@ -1604,11 +1594,12 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: */ printCuobjdumpPredicate(); output("mov.u8"); - stringListPiece* currentPiece = m_operands->getListStart(); + std::list<std::string>::iterator operand = m_operands->begin(); std::string delimiter = ""; - printCuobjdumpOperand(currentPiece, delimiter, m_base); + printCuobjdumpOperand(*operand, delimiter, m_base); + operand++; output(", "); - std::string curr = currentPiece->nextString->stringText; + std::string curr = *operand; curr = curr.substr(1); int regnum; std::istringstream(curr)>>regnum; @@ -1625,12 +1616,14 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("mov"); printCuobjdumpBaseModifiers(); - if( m_typeModifiers->getSize() == 2 ) { + if( m_typeModifiers->size() == 2 ) { std::string type1, type2, type; int type1Size, type2Size; - stringListPiece* currentPiece = m_typeModifiers->getListStart(); - type1 = currentPiece->stringText; - type2 = currentPiece->nextString->stringText; + 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()); @@ -1662,7 +1655,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output(".bb64"); else output(type.c_str()); - } else if( m_typeModifiers->getSize() == 1 ) { + } else if( m_typeModifiers->size() == 1 ) { printCuobjdumpTypeModifiers(); } else { output("Error: unsupported number of type modifiers. "); @@ -1677,7 +1670,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("rcp"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1691,7 +1684,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("rcp.half"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); else printCuobjdumpTypeModifiers(); @@ -1709,7 +1702,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1723,7 +1716,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("rsqrt"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1737,7 +1730,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("shl"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1751,7 +1744,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("shr"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1765,7 +1758,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: output("sin"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1828,7 +1821,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); output("min"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".s32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1838,7 +1831,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); output("max"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".s32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1848,7 +1841,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); output("min"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1859,7 +1852,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); output("max"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + if(m_typeModifiers->size() == 0) output(".f32"); //TODO: setting default type modifier but I'm not sure if this is right. else printCuobjdumpTypeModifiers(); @@ -1870,7 +1863,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: printCuobjdumpPredicate(); output("mov"); printCuobjdumpBaseModifiers(); - if(m_typeModifiers->getSize() == 0) + 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(); @@ -1881,16 +1874,14 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: (strcmp(m_base, "TEX32")==0)) { printCuobjdumpPredicate(); output("tex.1d.v4.f32.s32 "); - stringListPiece *currPiece; - stringListPiece reg; std::string addrReg, tex_id; - currPiece = m_operands->getListStart(); + std::list<std::string>::iterator operand = m_operands->begin(); output("{"); - printCuobjdumpOperand(currPiece, "", ""); + printCuobjdumpOperand(*operand, "", ""); output(",_,_,_} , "); - reg = *currPiece; - currPiece = currPiece->nextString; - tex_id = currPiece->stringText; + std::string reg = *operand; + operand++; + tex_id = *operand; unsigned int tex_id_int; std::stringstream ss; ss << std::hex << tex_id; @@ -1902,7 +1893,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: } output((*texIter).c_str()); output(",{"); - printCuobjdumpOperand(®, "", ""); + printCuobjdumpOperand(reg, "", ""); output(",_,_,_};"); } else if(strcmp(m_base, "EXIT")==0) { @@ -1931,7 +1922,7 @@ void cuobjdumpInst::printCuobjdumpPtxPlus(std::list<std::string> labelList, std: //PKB specifies the target of later BRK (break) instructions // Here we convert it to nop and store the target output("nop;"); - breaktarget = m_operands->getListStart()->stringText; + breaktarget = m_operands->front(); } else if(strcmp(m_base, "BRK")==0) { printCuobjdumpPredicate(); /* diff --git a/cuobjdump_to_ptxplus/cuobjdumpInst.h b/cuobjdump_to_ptxplus/cuobjdumpInst.h index 75053f2..d8f75ab 100644 --- a/cuobjdump_to_ptxplus/cuobjdumpInst.h +++ b/cuobjdump_to_ptxplus/cuobjdumpInst.h @@ -36,27 +36,27 @@ // Local includes //#include "cuobjdumpInstList.h" -#include "stringList.h" class cuobjdumpInst { protected: //instruction data const char* m_label; //instruction label - stringList* m_predicate; //instruction predicate + std::list<std::string>* m_predicate; //instruction predicate const char* m_base; //instruction mnemonic - stringList* m_baseModifiers; //base modifiers - stringList* m_typeModifiers; //operand types - stringList* m_operands; //operands - stringList* m_predicateModifiers; //predicate modifiers + std::list<std::string>* m_baseModifiers; //base modifiers + std::list<std::string>* m_typeModifiers; //operand types + std::list<std::string>* m_operands; //operands + std::list<std::string>* m_predicateModifiers; //predicate modifiers public: //Constructor cuobjdumpInst(); + ~cuobjdumpInst(); //accessors const char* getBase(); - stringList* getTypeModifiers(); + std::list<std::string>* getTypeModifiers(); //Mutators void setLabel(const char* setLabelValue); @@ -73,7 +73,7 @@ public: void printCuobjdumpPredicate(); void printCuobjdumpTypeModifiers(); void printCuobjdumpBaseModifiers(); - void printCuobjdumpOperand(stringListPiece* currentPiece, std::string operandDelimiter, const char* base); + void printCuobjdumpOperand(std::string currentPiece, std::string operandDelimiter, const char* base); void printCuobjdumpOperandlohi(std::string op); void printCuobjdumpOperands(); @@ -83,6 +83,8 @@ public: bool printHeaderInst(); void printCuobjdumpInst(); void printHeaderPtx(); + + static void printStringList(std::list<std::string>* strlist); }; #endif //_CUOBJDUMPINST_H_ diff --git a/cuobjdump_to_ptxplus/cuobjdumpInstList.cc b/cuobjdump_to_ptxplus/cuobjdumpInstList.cc index 1197b51..a996667 100644 --- a/cuobjdump_to_ptxplus/cuobjdumpInstList.cc +++ b/cuobjdump_to_ptxplus/cuobjdumpInstList.cc @@ -340,20 +340,20 @@ void cuobjdumpInstList::addCuobjdumpRegister(std::string reg, bool lo) char * regString; regString = new char [reg.size()+1]; - stringList* typeModifiers = getListEnd().getTypeModifiers(); + std::list<std::string>* typeModifiers = getListEnd().getTypeModifiers(); const char* baseInst = getListEnd().getBase(); //TODO: support for 64bit vectors and 128bit vectors if((strcmp(baseInst, "DADD")==0) || (strcmp(baseInst, "DMUL")==0) || (strcmp(baseInst, "DFMA")==0) || - ((typeModifiers->getSize()==1) && - (strcmp((typeModifiers->getListStart()->stringText), ".S64")==0) && + ((typeModifiers->size()==1) && + (typeModifiers->front() == ".S64") && ((strcmp(baseInst, "G2R")==0)||(strcmp(baseInst, "R2G")==0)|| (strcmp(baseInst, "GLD")==0)||(strcmp(baseInst, "GST")==0)|| (strcmp(baseInst, "LST")==0)))) { vectorFlag = 64; } - else if((typeModifiers->getSize()==1) && (strcmp((typeModifiers->getListStart()->stringText), ".S128")==0)) + else if((typeModifiers->size()==1) && (typeModifiers->front() == ".S128")) { vectorFlag = 128; } diff --git a/cuobjdump_to_ptxplus/stringList.cc b/cuobjdump_to_ptxplus/stringList.cc deleted file mode 100644 index 8d1ae42..0000000 --- a/cuobjdump_to_ptxplus/stringList.cc +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright (c) 2009-2011, Jimmy Kwa, -// The University of British Columbia -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// Neither the name of The University of British Columbia nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#include "stringList.h" -#include <stdio.h> -#include <iostream> - -//Constructor -stringList::stringList() -{ - //initilize everything to empty - m_size = 0; - m_listStart = NULL; - m_listEnd = NULL; -} - -//retrieve list size -int stringList::getSize() -{ - return m_size; -} - -//retrieve pointer to list start -stringListPiece* stringList::getListStart() -{ - return m_listStart; -} - -//retrieve point to list end -stringListPiece* stringList::getListEnd() -{ - return m_listEnd; -} - -//add string to end of the list -//initilize list starting point if this is the first entry -//increment list size count -int stringList::add(stringListPiece* newString) -{ - - if(m_listStart==NULL) - m_listStart=newString; - else - m_listEnd->nextString = newString; - - m_listEnd = newString; - m_listEnd->nextString = NULL; - - return m_size++; -} - -bool stringList::remove(int index) -{ - if(index >= m_size ) return false; - - stringListPiece* m_remove; - stringListPiece* currentPiece; - - if(m_size == 1) { - m_remove = m_listStart; - m_listStart = NULL; - m_listEnd = NULL; - } else { - - if(index == 0) { - m_remove = m_listStart; - m_listStart = m_remove->nextString; - } else if(index == m_size - 1) { - m_remove = m_listEnd; - currentPiece = m_listStart; - for(int i=1; i<m_size-1; i++) - { - currentPiece = currentPiece->nextString; - } - currentPiece->nextString = NULL; - m_listEnd = currentPiece; - } else { - currentPiece = m_listStart; - for(int i=1; i<=index-1; i++) - { - currentPiece = currentPiece->nextString; - } - m_remove = currentPiece->nextString; - currentPiece->nextString = m_remove->nextString; - } - } - - delete m_remove; - m_size -= 1; - return true; -} - -//print out all the cuobjdump Instructions in the list -void stringList::printStringList() -{ - stringListPiece* currentPiece = m_listStart; - - for(int i=0; (i<m_size)&&(currentPiece!=NULL); i++) - { - std::cout << currentPiece->stringText << " "; - currentPiece = currentPiece->nextString; - } -} diff --git a/cuobjdump_to_ptxplus/stringList.h b/cuobjdump_to_ptxplus/stringList.h deleted file mode 100644 index fe0139e..0000000 --- a/cuobjdump_to_ptxplus/stringList.h +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2009-2011, Jimmy Kwa, -// The University of British Columbia -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// Redistributions of source code must retain the above copyright notice, this -// list of conditions and the following disclaimer. -// Redistributions in binary form must reproduce the above copyright notice, this -// list of conditions and the following disclaimer in the documentation and/or -// other materials provided with the distribution. -// Neither the name of The University of British Columbia nor the names of its -// contributors may be used to endorse or promote products derived from this -// software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef _STRINGLIST_H_ -#define _STRINGLIST_H_ -struct stringListPiece -{ - const char* stringText; - - stringListPiece* nextString; -}; - - -class stringList -{ - -private: - //List size - int m_size; - - //Start is the first entry, end is the last entry - stringListPiece* m_listStart; - stringListPiece* m_listEnd; -public: - //constructor - stringList(); - - //accessors - int getSize(); - stringListPiece* getListStart(); - stringListPiece* getListEnd(); - - //mutator - int add(stringListPiece* newString); //add String to list - bool remove(int index); //remove string at index - - //print representation - void printStringList(); -}; -#endif //_STRINGLIST_H_ |
