summaryrefslogtreecommitdiff
path: root/src/cuda-sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuda-sim')
-rw-r--r--src/cuda-sim/ptx.l17
-rw-r--r--src/cuda-sim/ptx.y6
-rw-r--r--src/cuda-sim/ptx_parser.cc4
-rw-r--r--src/cuda-sim/ptx_parser.h3
4 files changed, 17 insertions, 13 deletions
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 <string.h>
#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
-<INITIAL,NOT_OPCODE,IN_FUNC_DECL>. TC;
+<INITIAL,NOT_OPCODE,IN_FUNC_DECL>. 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_value> STRING
@@ -232,7 +230,7 @@ class ptx_recognizer;
#include <math.h>
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 );