diff options
Diffstat (limited to 'src/cuda-sim')
| -rw-r--r-- | src/cuda-sim/cuda-sim.cc | 17 | ||||
| -rw-r--r-- | src/cuda-sim/ptx_ir.cc | 13 |
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 |
