From 579047c1dd9fec1b69e7904aeb6a25553c8dbd69 Mon Sep 17 00:00:00 2001 From: Mengchi Zhang Date: Mon, 20 May 2019 02:17:58 -0400 Subject: Fix col and linebuf Signed-off-by: Mengchi Zhang --- src/cuda-sim/ptx.l | 17 +++++++++-------- src/cuda-sim/ptx.y | 6 ++---- src/cuda-sim/ptx_parser.cc | 4 +++- src/cuda-sim/ptx_parser.h | 3 +++ 4 files changed, 17 insertions(+), 13 deletions(-) (limited to 'src/cuda-sim') diff --git a/src/cuda-sim/ptx.l b/src/cuda-sim/ptx.l index cc83bd1..2546a99 100644 --- a/src/cuda-sim/ptx.l +++ b/src/cuda-sim/ptx.l @@ -37,17 +37,19 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %{ #include "opcodes.h" -class ptx_recognizer; +#include "ptx_parser.h" #include "ptx.tab.h" #include #define LINEBUF_SIZE (4*1024) -#define TC yylval->col+=strlen(yytext); +#define TC recognizer->col+=strlen(yytext); #define CHECK_UNSIGNED \ if( yytext[strlen(yytext)-1]=='U' ) { \ printf("GPGPU-Sim: ERROR ** U modifier not implemented\n"); \ abort(); \ } +#define YY_DECL int ptx_lex \ + (YYSTYPE * yylval_param , yyscan_t yyscanner, ptx_recognizer* recognizer) int ptx_error( yyscan_t yyscanner, ptx_recognizer* recognizer, const char *s ); %} @@ -414,7 +416,7 @@ breakaddr TC; yylval->int_value = BREAKADDR_OP; return OPCODE; "//"[^\n]* TC; // eat single -\n.* yylval->col=0; strncpy(yylval->linebuf, yytext + 1, LINEBUF_SIZE); yyless( 1 ); +\n.* recognizer->col=0; strncpy(recognizer->linebuf, yytext + 1, LINEBUF_SIZE); yyless( 1 ); " " TC; "\t" TC; @@ -447,9 +449,8 @@ breakaddr TC; yylval->int_value = BREAKADDR_OP; return OPCODE; <*>\t@@DWARF.*\n -. TC; +. TC; ptx_error(yyscanner, recognizer, (const char*)NULL); %% -//ptx_error(yyscanner, (const char*)NULL); extern int g_error_detected; extern const char *g_filename; @@ -462,10 +463,10 @@ int ptx_error( yyscan_t yyscanner, ptx_recognizer* recognizer, const char *s ) fflush(stdout); if( s != NULL ) printf("%s:%u Syntax error:\n\n", g_filename, yylineno ); - printf(" %s\n", yylval->linebuf ); + printf(" %s\n", recognizer->linebuf ); printf(" "); - for( i=0; i < yylval->col-1; i++ ) { - if( yylval->linebuf[i] == '\t' ) printf("\t"); + for( i=0; i < recognizer->col-1; i++ ) { + if( recognizer->linebuf[i] == '\t' ) printf("\t"); else printf(" "); } diff --git a/src/cuda-sim/ptx.y b/src/cuda-sim/ptx.y index 38a627f..8447693 100644 --- a/src/cuda-sim/ptx.y +++ b/src/cuda-sim/ptx.y @@ -36,6 +36,7 @@ class ptx_recognizer; %parse-param {yyscan_t scanner} %parse-param {ptx_recognizer* recognizer} %lex-param {yyscan_t scanner} +%lex-param {ptx_recognizer* recognizer} %union { double double_value; @@ -43,9 +44,6 @@ class ptx_recognizer; int int_value; char * string_value; void * ptr_value; -#define LINEBUF_SIZE (4*1024) - char linebuf[LINEBUF_SIZE]; - unsigned col; } %token STRING @@ -232,7 +230,7 @@ class ptx_recognizer; #include void syntax_not_implemented(yyscan_t yyscanner, ptx_recognizer* recognizer); extern int g_func_decl; - int ptx_lex(YYSTYPE * yylval_param, yyscan_t yyscanner); + int ptx_lex(YYSTYPE * yylval_param, yyscan_t yyscanner, ptx_recognizer* recognizer); int ptx_error( yyscan_t yyscanner, ptx_recognizer* recognizer, const char *s ); %} diff --git a/src/cuda-sim/ptx_parser.cc b/src/cuda-sim/ptx_parser.cc index 2ec8386..c4cc911 100644 --- a/src/cuda-sim/ptx_parser.cc +++ b/src/cuda-sim/ptx_parser.cc @@ -37,6 +37,7 @@ extern YYSTYPE* ptx_get_lval (yyscan_t yyscanner ); extern int ptx_error( yyscan_t yyscanner, const char *s ); extern int ptx_lex_init(yyscan_t* scanner); extern void ptx_set_in(FILE * _in_str ,yyscan_t yyscanner ); +extern FILE *ptx_get_in (yyscan_t yyscanner ); extern int ptx_parse(yyscan_t scanner, ptx_recognizer* recognizer); extern int ptx_lex_destroy(yyscan_t scanner); @@ -182,6 +183,7 @@ symbol_table *init_parser( const char *ptx_filename ) ptx_in = fopen(ptx_filename, "r"); ptx_set_in(ptx_in, recognizer.scanner); ptx_parse(recognizer.scanner, &recognizer); + ptx_in = ptx_get_in(recognizer.scanner); ptx_lex_destroy(recognizer.scanner); fclose(ptx_in); return g_global_symbol_table; @@ -325,7 +327,7 @@ void ptx_recognizer::add_instruction() g_space_spec, g_filename, ptx_get_lineno(scanner), - ptx_get_lval(scanner)->linebuf, + linebuf, g_shader_core_config ); g_instructions.push_back(i); g_inst_lookup[g_filename][ptx_get_lineno(scanner)] = i; diff --git a/src/cuda-sim/ptx_parser.h b/src/cuda-sim/ptx_parser.h index 70c4dfb..fdff6ce 100644 --- a/src/cuda-sim/ptx_parser.h +++ b/src/cuda-sim/ptx_parser.h @@ -44,6 +44,9 @@ class ptx_recognizer { scanner = NULL; } yyscan_t scanner; +#define LINEBUF_SIZE (4*1024) + char linebuf[LINEBUF_SIZE]; + unsigned col; void init_directive_state(); void init_instruction_state(); void start_function( int entry_point ); -- cgit v1.3