From a4d6731ac208ccb98aeac4e0fe9073abd99dc892 Mon Sep 17 00:00:00 2001 From: Wilson Fung Date: Thu, 23 Aug 2012 06:19:53 -0800 Subject: Adding single element vector operands to support tex.1d instructions in CUDA 4.1 and later. KMN-FT should pass with this changelist. [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 13833] --- cuobjdump_to_ptxplus/ptx_parser.h | 1 + src/cuda-sim/ptx.y | 2 ++ src/cuda-sim/ptx_parser.cc | 9 +++++++++ src/cuda-sim/ptx_parser.h | 1 + 4 files changed, 13 insertions(+) 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 ); -- cgit v1.3