summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cuda-sim/instructions.cc2
-rw-r--r--src/cuda-sim/ptx_ir.cc2
-rw-r--r--src/cuda-sim/ptx_parser.cc69
3 files changed, 37 insertions, 36 deletions
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc
index 37438fa..08bf528 100644
--- a/src/cuda-sim/instructions.cc
+++ b/src/cuda-sim/instructions.cc
@@ -2291,7 +2291,7 @@ void div_impl( const ptx_instruction *pI, ptx_thread_info *thread )
void dp4a_impl( const ptx_instruction *pI, ptx_thread_info *thread )
{
- printf("instruction not implemented yet");
+ printf("DP4A instruction not implemented yet");
assert(0);
}
diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc
index be25dbe..016c600 100644
--- a/src/cuda-sim/ptx_ir.cc
+++ b/src/cuda-sim/ptx_ir.cc
@@ -1031,7 +1031,7 @@ static std::list<operand_info> check_operands( int opcode,
const std::list<operand_info> &operands )
{
static int g_warn_literal_operands_two_type_inst;
- if( (opcode == CVT_OP) || (opcode == SET_OP) || (opcode == SLCT_OP) || (opcode == TEX_OP) ) {
+ if( (opcode == CVT_OP) || (opcode == SET_OP) || (opcode == SLCT_OP) || (opcode == TEX_OP) || (opcode == DP4A_OP) ) {
// just make sure these do not have have const operands...
if( !g_warn_literal_operands_two_type_inst ) {
std::list<operand_info>::const_iterator o;
diff --git a/src/cuda-sim/ptx_parser.cc b/src/cuda-sim/ptx_parser.cc
index a51799a..06ca870 100644
--- a/src/cuda-sim/ptx_parser.cc
+++ b/src/cuda-sim/ptx_parser.cc
@@ -107,6 +107,34 @@ void read_parser_environment_variables()
}
}
+void init_directive_state()
+{
+ PTX_PARSE_DPRINTF("init_directive_state");
+ g_space_spec=undefined_space;
+ g_ptr_spec=undefined_space;
+ g_scalar_type_spec=-1;
+ g_vector_spec=-1;
+ g_opcode=-1;
+ g_alignment_spec = -1;
+ g_extern_spec = 0;
+ g_scalar_type.clear();
+ g_operands.clear();
+ g_last_symbol = NULL;
+}
+
+void init_instruction_state()
+{
+ PTX_PARSE_DPRINTF("init_instruction_state");
+ g_pred = NULL;
+ g_neg_pred = 0;
+ g_pred_mod = -1;
+ g_label = NULL;
+ g_opcode = -1;
+ g_options.clear();
+ g_return_var = operand_info();
+ init_directive_state();
+}
+
symbol_table *init_parser( const char *ptx_filename )
{
g_filename = strdup(ptx_filename);
@@ -114,9 +142,9 @@ symbol_table *init_parser( const char *ptx_filename )
g_global_allfiles_symbol_table = new symbol_table("global_allfiles", 0, NULL);
g_global_symbol_table = g_current_symbol_table = g_global_allfiles_symbol_table;
}
- else {
- g_global_symbol_table = g_current_symbol_table = new symbol_table("global",0,g_global_allfiles_symbol_table);
- }
+// else {
+// g_global_symbol_table = g_current_symbol_table = new symbol_table("global",0,g_global_allfiles_symbol_table);
+// }
ptx_lineno = 1;
#define DEF(X,Y) g_ptx_token_decode[X] = Y;
@@ -136,7 +164,8 @@ symbol_table *init_parser( const char *ptx_filename )
g_ptx_token_decode[global_space] = "global_space";
g_ptx_token_decode[generic_space] = "generic_space";
g_ptx_token_decode[instruction_space] = "instruction_space";
-
+ init_directive_state();
+ init_instruction_state();
ptx_in = fopen(ptx_filename, "r");
ptx_parse();
@@ -144,34 +173,6 @@ symbol_table *init_parser( const char *ptx_filename )
return g_global_symbol_table;
}
-void init_directive_state()
-{
- PTX_PARSE_DPRINTF("init_directive_state");
- g_space_spec=undefined_space;
- g_ptr_spec=undefined_space;
- g_scalar_type_spec=-1;
- g_vector_spec=-1;
- g_opcode=-1;
- g_alignment_spec = -1;
- g_extern_spec = 0;
- g_scalar_type.clear();
- g_operands.clear();
- g_last_symbol = NULL;
-}
-
-void init_instruction_state()
-{
- PTX_PARSE_DPRINTF("init_instruction_state");
- g_pred = NULL;
- g_neg_pred = 0;
- g_pred_mod = -1;
- g_label = NULL;
- g_opcode = -1;
- g_options.clear();
- g_return_var = operand_info();
- init_directive_state();
-}
-
static int g_entry_point;
void start_function( int entry_point )
@@ -621,8 +622,8 @@ void add_scalar_type_spec( int type_spec )
g_scalar_type.push_back( type_spec );
if ( g_scalar_type.size() > 1 ) {
parse_assert( (g_opcode == -1) || (g_opcode == CVT_OP) || (g_opcode == SET_OP) || (g_opcode == SLCT_OP)
- || (g_opcode == TEX_OP),
- "only cvt, set, slct, and tex can have more than one type specifier.");
+ || (g_opcode == TEX_OP)|| (g_opcode == DP4A_OP),
+ "only cvt, set, slct, tex, and dp4a can have more than one type specifier.");
}
g_scalar_type_spec = type_spec;
}