This commit is contained in:
Evghenii
2014-02-19 11:38:15 +01:00
parent 4d61c04e5c
commit a10be8087f
4 changed files with 38 additions and 31 deletions

View File

@@ -1,4 +1,4 @@
all: dePTX
all: dePTX ptxc
ptxgrammar.cc : ptxgrammar.yy
bison -d -v -t ptxgrammar.yy -o ptxgrammar.cc
@@ -7,20 +7,24 @@ ptx.cc: ptx.ll ptxgrammar.cc
flex -t ptx.ll > ptx.cc
%.o: %.cc
clang++ -O3 -c $< -o $@ -I/opt/local/include
clang++ -O3 -c $< -o $@ -I/opt/local/include
%.o: %.cpp
clang++ -O3 -c $< -o $@ -I/opt/local/include
clang++ -O3 -c $< -o $@ -I/opt/local/include
OBJ= dePTX.o \
ptx.o \
OBJ= ptx.o \
ptxgrammar.o
dePTX: $(OBJ)
dePTX: dePTX.o $(OBJ)
clang++ $^ -o $@ -L/opt/local/lib
ptxc: ptxc.o $(OBJ)
clang++ $^ -o $@ -L/opt/local/lib
clean:
/bin/rm -f dePTX $(OBJ) ptxgrammar.hh ptxgrammar.cc ptx.cc ptxgrammar.output
$(OBJ): ptxgrammar.cc ptx.cc PTXParser.h PTXLexer.h
dePTX.o: PTXParser.h PTXLexer.h
ptxc.o: PTXParser.h PTXLexer.h

View File

@@ -71,7 +71,7 @@ namespace parser
s << "typedef float f32_t; \n";
s << "typedef double f64_t; \n";
s << " \n";
std::cout << s.str();
out << s.str();
}
#define LOC YYLTYPE& location
@@ -166,7 +166,7 @@ namespace parser
s << "\n";
argumentList.clear();
std::cout << s.str();
out << s.str();
}
void visibleFunctionDeclaration(const std::string &calleeName, LOC)
@@ -193,7 +193,7 @@ namespace parser
argumentList.clear();
returnArgumentList.clear();
std::cout << s.str();
out << s.str();
}
void visibleInitializableDeclaration(const std::string &name, LOC)
@@ -208,7 +208,7 @@ namespace parser
s << name << ";\n\n";
else
s << name << "[" << arrayDimensionsList[0] << "] = {0};\n\n";
std::cout << s.str();
out << s.str();
arrayDimensionsList.clear();
}

View File

@@ -6,7 +6,7 @@
#include <algorithm>
#include "PTXParser.h"
static char lRandomChar()
static char lRandomAlNum()
{
const char charset[] =
"0123456789"
@@ -19,11 +19,10 @@ static char lRandomChar()
static std::string lRandomString(const size_t length)
{
std::string str(length,0);
std::generate_n( str.begin(), length, lRandomChar);
std::generate_n( str.begin(), length, lRandomAlNum);
return str;
}
static void lGetAllArgs(int Argc, char *Argv[], int &argc, char *argv[128])
{
// Copy over the command line arguments (passed in)
@@ -49,8 +48,14 @@ static std::vector<std::string> lSplitString(const std::string &s, char delim)
return elems;
}
static void usage(const int ret)
static void lUsage(const int ret)
{
fprintf(stderr, "\nusage: ptxc\n");
fprintf(stderr, " [--help]\t\t\t\t This help\n");
fprintf(stderr, " [--arch={%s}]\t\t\t GPU target architecture\n", "sm_35");
fprintf(stderr, " [-o <name>]\t\t\t\t Output file name\n");
fprintf(stderr, " [-Xnvcc=<arguments>]\t\t Arguments to pass through to \"nvcc\"\n");
fprintf(stderr, " \n");
exit(ret);
}
@@ -65,38 +70,39 @@ int main(int _argc, char * _argv[])
std::string fileOBJ;
std::string extString = ".ptx";
bool keepTemporaries = false;
std::string nvccArguments;
std::vector<std::string> nvccArgumentList;
for (int i = 1; i < argc; ++i)
{
if (!strcmp(argv[i], "--help"))
usage(0);
lUsage(0);
else if (!strncmp(argv[i], "--arch=", 7))
arch = std::string(argv[i]+7);
else if (!strncmp(argv[i], "--keep-temporaries", 11))
keepTemporaries = true;
else if (!strncmp(argv[i], "-Xnvcc=", 7))
nvccArguments = std::string(argv[i]+7);
else if (!strcmp(argv[i], "-o"))
{
if (++i == argc)
{
fprintf(stderr, "No output file specified after -o option.\n");
usage(1);
lUsage(1);
}
fileOBJ = std::string(argv[i]);
}
else if (strncmp(argv[i], "-", 1))
else
{
const char * ext = strrchr(argv[i], '.');
if (ext == NULL)
{
fprintf(stderr, " Unknown argument: %s \n", argv[i]);
exit(1);
lUsage(1);
}
else if (strncmp(ext, extString.c_str(), 4))
{
fprintf(stderr, " Unkown extension of the input file: %s \n", ext);
exit(1);
lUsage(1);
}
else if (filePTX.empty())
{
@@ -110,8 +116,6 @@ int main(int _argc, char * _argv[])
fileOBJ += ".o";
}
}
else
nvccArgumentList.push_back(argv[i]);
}
#if 0
fprintf(stderr, " fileOBJ= %s\n", fileOBJ.c_str());
@@ -172,8 +176,7 @@ int main(int _argc, char * _argv[])
nvccCmd += "-dc ";
nvccCmd += std::string("-arch=") + arch + std::string(" ");
nvccCmd += "-dryrun ";
for (int i = 0; i < (int)nvccArgumentList.size(); i++)
nvccCmd += nvccArgumentList[i] + std::string(" ");
nvccCmd += nvccArguments + std::string(" ");
nvccCmd += std::string("-o ") + fileOBJ + std::string(" ");
nvccCmd += fileCU + std::string(" ");
nvccCmd += std::string("2> ") + fileSH;

View File

@@ -74,16 +74,16 @@ ptxsource:
header:
version target address_size
{
std::cerr << "Done reading PTX \n" << std::endl;
// std::cerr << "Done reading PTX \n" << std::endl;
state.printHeader();
};
version:
TOKEN_VERSION TOKEN_FLOAT { std::cerr << "Reading PTX version " << $2 << std::endl; };
TOKEN_VERSION TOKEN_FLOAT { assert($2 >= 3.0); } ;//std::cerr << "Reading PTX version " << $2 << std::endl; };
target:
TOKEN_TARGET TOKEN_STRING { std::cerr << "Target " << $2 << std::endl; };
TOKEN_TARGET TOKEN_STRING { assert(std::string($2) == std::string("sm_35")); } //std::cerr << "Target " << $2 << std::endl; };
address_size:
TOKEN_ADDRESS_SIZE TOKEN_INT { std::cerr << "Address_Size " << $2 << std::endl; };
TOKEN_ADDRESS_SIZE TOKEN_INT { assert($2 == 64); } //std::cerr << "Address_Size " << $2 << std::endl; };
dataTypeId :
@@ -208,8 +208,8 @@ void yyerror( YYLTYPE* location, parser::PTXLexer& lexer,
std::stringstream stream;
stream << toString( *location, state )
<< " " << message;
fprintf(stderr, "--ERROR-- %s %s \n", toString(*location, state).c_str(), message);
assert(0);
fprintf(stderr, "--Parser ERROR-- %s %s \n", toString(*location, state).c_str(), message);
exit(-1);
}
}