diff options
| author | Tor Aamodt <[email protected]> | 2010-07-18 12:23:55 -0800 |
|---|---|---|
| committer | Tor Aamodt <[email protected]> | 2010-07-18 12:23:55 -0800 |
| commit | 00425f48461fa05aa17aef3e6e3a68ccae48a5e2 (patch) | |
| tree | b7f275f592179f388c358d39232c0a09874e4228 /src/cuda-sim/instructions.cc | |
| parent | e8d009c324a6ed40f2c894dbac43ab9e7ee58b33 (diff) | |
finished moving cuda printf stuff to seperate file (step 2)
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6882]
Diffstat (limited to 'src/cuda-sim/instructions.cc')
| -rw-r--r-- | src/cuda-sim/instructions.cc | 83 |
1 files changed, 1 insertions, 82 deletions
diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc index 46bc52b..c7885a4 100644 --- a/src/cuda-sim/instructions.cc +++ b/src/cuda-sim/instructions.cc @@ -685,88 +685,7 @@ void brkpt_impl( const ptx_instruction *pI, ptx_thread_info *thread ) { inst_not extern int gpgpu_simd_model; #define POST_DOMINATOR 1 /* must match enum value in shader.h */ void get_pdom_stack_top_info( unsigned sid, unsigned tid, unsigned *npc, unsigned *rpc ); -void decode_space( memory_space_t &space, const ptx_thread_info *thread, const operand_info &op, memory_space *&mem, addr_t &addr); - -void my_cuda_printf(const char *fmtstr,const char *arg_list) -{ - FILE *fp = stdout; - unsigned i=0,j=0; - unsigned arg_offset=0; - char buf[64]; - bool in_fmt=false; - while( fmtstr[i] ) { - char c = fmtstr[i++]; - if( !in_fmt ) { - if( c != '%' ) { - fprintf(fp,"%c",c); - } else { - in_fmt=true; - buf[0] = c; - j=1; - } - } else { - if(!( c == 'u' || c == 'f' || c == 'd' )) { - printf("GPGPU-Sim PTX: ERROR ** printf parsing support is limited to %%u, %%f, %%d at present"); - abort(); - } - buf[j] = c; - buf[j+1] = 0; - unsigned long long value = ((unsigned long long*)arg_list)[arg_offset]; - if( c == 'u' || c == 'd' ) { - fprintf(fp,buf,value); - } else if( c == 'f' ) { - double tmp = *(double*)(void*)&value; - fprintf(fp,buf,tmp); - } - arg_offset++; - in_fmt=false; - } - } -} - - -void gpgpusim_cuda_vprintf(const ptx_instruction * pI, const ptx_thread_info * thread, const function_info * target_func, unsigned n_return, unsigned n_args ) -{ - char *fmtstr = NULL; - char *arg_list = NULL; - assert( n_args == 2 ); - for( unsigned arg=0; arg < n_args; arg ++ ) { - const operand_info &actual_param_op = pI->operand_lookup(n_return+1+arg); - const symbol *formal_param = target_func->get_arg(arg); - unsigned size=formal_param->get_size_in_bytes(); - assert( formal_param->is_param_local() ); - assert( actual_param_op.is_param_local() ); - addr_t from_addr = actual_param_op.get_symbol()->get_address(); - char buffer[1024]; - assert(size<1024); - thread->m_local_mem->read(from_addr,size,buffer); - addr_t addr = (addr_t)*(unsigned long long*)((void*)buffer); // should be pointer to generic memory location - memory_space *mem=NULL; - memory_space_t space = generic_space; - decode_space(space,thread,actual_param_op,mem,addr); // figure out which space - if( arg == 0 ) { - unsigned len = 0; - char b = 0; - do { // figure out length - mem->read(addr+len,1,&b); - len++; - } while(b); - fmtstr = (char*)malloc(len+64); - for( int i=0; i < len; i++ ) - mem->read(addr+i,1,fmtstr+i); - //mem->read(addr,len,fmtstr); - } else { - unsigned len = thread->get_finfo()->local_mem_framesize(); - arg_list = (char*)malloc(len+64); - for( int i=0; i < len; i++ ) - mem->read(addr+i,1,arg_list+i); - //mem->read(addr,len,arg_list); - } - } - my_cuda_printf(fmtstr,arg_list); - free(fmtstr); - free(arg_list); -} +void gpgpusim_cuda_vprintf(const ptx_instruction * pI, const ptx_thread_info * thread, const function_info * target_func, unsigned n_return, unsigned n_args ); void call_impl( const ptx_instruction *pI, ptx_thread_info *thread ) { |
