summaryrefslogtreecommitdiff
path: root/src/cuda-sim
diff options
context:
space:
mode:
Diffstat (limited to 'src/cuda-sim')
-rw-r--r--src/cuda-sim/cuda-sim.cc17
-rw-r--r--src/cuda-sim/ptx_ir.cc13
2 files changed, 30 insertions, 0 deletions
diff --git a/src/cuda-sim/cuda-sim.cc b/src/cuda-sim/cuda-sim.cc
index 252b230..e17877b 100644
--- a/src/cuda-sim/cuda-sim.cc
+++ b/src/cuda-sim/cuda-sim.cc
@@ -499,6 +499,23 @@ void ptx_instruction::set_opcode_and_latency()
case ATOM_OP: op = LOAD_OP; break;
case BAR_OP: op = BARRIER_OP; break;
case MEMBAR_OP: op = MEMORY_BARRIER_OP; break;
+ case CALL_OP:
+ {
+ if(m_is_printf)
+ op = ALU_OP;
+ else
+ op = CALL_OPS;
+ break;
+ }
+ case CALLP_OP:
+ {
+ if(m_is_printf)
+ op = ALU_OP;
+ else
+ op = CALL_OPS;
+ break;
+ }
+ case RET_OP: op = RET_OPS;break;
case ADD_OP: case ADDP_OP: case ADDC_OP: case SUB_OP: case SUBC_OP:
//ADD,SUB latency
switch(get_type()){
diff --git a/src/cuda-sim/ptx_ir.cc b/src/cuda-sim/ptx_ir.cc
index 102ae40..61b45e3 100644
--- a/src/cuda-sim/ptx_ir.cc
+++ b/src/cuda-sim/ptx_ir.cc
@@ -1162,6 +1162,19 @@ ptx_instruction::ptx_instruction( int opcode,
m_source_file = file?file:"<unknown>";
m_source_line = line;
m_source = source;
+
+ if (opcode == CALL_OP) {
+ const operand_info &target = func_addr();
+ assert( target.is_function_address() );
+ const symbol *func_addr = target.get_symbol();
+ const function_info *target_func = func_addr->get_pc();
+ std::string fname = target_func->get_name();
+
+ if (fname =="vprintf"){
+ m_is_printf = true;
+ }
+
+ }
}
void ptx_instruction::print_insn() const