summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cuobjdump_to_ptxplus/ptx_parser.h1
-rw-r--r--src/cuda-sim/ptx.y2
-rw-r--r--src/cuda-sim/ptx_parser.cc9
-rw-r--r--src/cuda-sim/ptx_parser.h1
4 files changed, 13 insertions, 0 deletions
diff --git a/cuobjdump_to_ptxplus/ptx_parser.h b/cuobjdump_to_ptxplus/ptx_parser.h
index ce77c2f..dc7c7c0 100644
--- a/cuobjdump_to_ptxplus/ptx_parser.h
+++ b/cuobjdump_to_ptxplus/ptx_parser.h
@@ -95,6 +95,7 @@ void change_operand_lohi( int a ) {DPRINTF(" ");}
void change_double_operand_type( int a ) {DPRINTF(" ");}
void change_operand_neg( ) {DPRINTF(" ");}
void add_double_operand( const char *a, const char *b ) {DPRINTF(" ");}
+void add_1vector_operand( const char *a ) {DPRINTF(" ");}
void add_2vector_operand( const char *a, const char *b ) {DPRINTF(" ");}
void add_3vector_operand( const char *a, const char *b, const char *c ) {DPRINTF(" ");}
void add_4vector_operand( const char *a, const char *b, const char *c, const char *d ) {DPRINTF(" ");}
diff --git a/src/cuda-sim/ptx.y b/src/cuda-sim/ptx.y
index 5b69975..751d398 100644
--- a/src/cuda-sim/ptx.y
+++ b/src/cuda-sim/ptx.y
@@ -493,11 +493,13 @@ operand: IDENTIFIER { add_scalar_operand( $1 ); }
vector_operand: LEFT_BRACE IDENTIFIER COMMA IDENTIFIER RIGHT_BRACE { add_2vector_operand($2,$4); }
| LEFT_BRACE IDENTIFIER COMMA IDENTIFIER COMMA IDENTIFIER RIGHT_BRACE { add_3vector_operand($2,$4,$6); }
| LEFT_BRACE IDENTIFIER COMMA IDENTIFIER COMMA IDENTIFIER COMMA IDENTIFIER RIGHT_BRACE { add_4vector_operand($2,$4,$6,$8); }
+ | LEFT_BRACE IDENTIFIER RIGHT_BRACE { add_1vector_operand($2); }
;
tex_operand: LEFT_SQUARE_BRACKET IDENTIFIER COMMA { add_scalar_operand($2); }
vector_operand
RIGHT_SQUARE_BRACKET
+ ;
builtin_operand: SPECIAL_REGISTER DIMENSION_MODIFIER { add_builtin_operand($1,$2); }
| SPECIAL_REGISTER { add_builtin_operand($1,-1); }
diff --git a/src/cuda-sim/ptx_parser.cc b/src/cuda-sim/ptx_parser.cc
index 76d9a9c..ddc67c1 100644
--- a/src/cuda-sim/ptx_parser.cc
+++ b/src/cuda-sim/ptx_parser.cc
@@ -602,6 +602,15 @@ void add_double_operand( const char *d1, const char *d2 )
g_operands.push_back( operand_info(s1,s2) );
}
+void add_1vector_operand( const char *d1 )
+{
+ // handles the single element vector operand ({%v1}) found in tex.1d instructions
+ DPRINTF("add_1vector_operand");
+ const symbol *s1 = g_current_symbol_table->lookup(d1);
+ parse_assert( s1 != NULL, "component(s) missing declarations.");
+ g_operands.push_back( operand_info(s1,NULL,NULL,NULL) );
+}
+
void add_2vector_operand( const char *d1, const char *d2 )
{
DPRINTF("add_2vector_operand");
diff --git a/src/cuda-sim/ptx_parser.h b/src/cuda-sim/ptx_parser.h
index 57d763e..edaa7af 100644
--- a/src/cuda-sim/ptx_parser.h
+++ b/src/cuda-sim/ptx_parser.h
@@ -54,6 +54,7 @@ void add_variables();
void set_variable_type();
void add_opcode( int opcode );
void add_pred( const char *identifier, int negate, int predModifier );
+void add_1vector_operand( const char *d1 );
void add_2vector_operand( const char *d1, const char *d2 );
void add_3vector_operand( const char *d1, const char *d2, const char *d3 );
void add_4vector_operand( const char *d1, const char *d2, const char *d3, const char *d4 );