summaryrefslogtreecommitdiff
path: root/src/cuda-sim/ptx_sim.cc
diff options
context:
space:
mode:
authorTor Aamodt <[email protected]>2010-07-18 13:31:02 -0800
committerTor Aamodt <[email protected]>2010-07-18 13:31:02 -0800
commitde305b7d6871110ad72037fb5e0a274c047838f3 (patch)
tree9ff56f02dff12f6a0b90900dee86a08886d789b8 /src/cuda-sim/ptx_sim.cc
parent00425f48461fa05aa17aef3e6e3a68ccae48a5e2 (diff)
refactoring call/return ABI code (want unified interface for call/return reg/param)
[git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 6883]
Diffstat (limited to 'src/cuda-sim/ptx_sim.cc')
-rw-r--r--src/cuda-sim/ptx_sim.cc10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/cuda-sim/ptx_sim.cc b/src/cuda-sim/ptx_sim.cc
index dffc128..cf0236a 100644
--- a/src/cuda-sim/ptx_sim.cc
+++ b/src/cuda-sim/ptx_sim.cc
@@ -370,8 +370,6 @@ bool ptx_thread_info::callstack_pop()
{
assert( !m_callstack.empty() );
assert( m_local_mem_stack_pointer >= m_func_info->local_mem_framesize() );
- m_func_info = m_callstack.back().m_func_info;
- m_local_mem_stack_pointer -= m_func_info->local_mem_framesize();
m_symbol_table = m_callstack.back().m_symbol_table;
m_NPC = m_callstack.back().m_PC;
m_RPC_updated = true;
@@ -380,13 +378,21 @@ bool ptx_thread_info::callstack_pop()
const symbol *rv_src = m_callstack.back().m_return_var_src;
const symbol *rv_dst = m_callstack.back().m_return_var_dst;
assert( !((rv_src != NULL) ^ (rv_dst != NULL)) );
+
+ // TODO: read param local memory source
ptx_reg_t rval;
if( rv_src != NULL )
rval = get_operand_value(rv_src);
+
+ m_func_info = m_callstack.back().m_func_info;
+ m_local_mem_stack_pointer -= m_func_info->local_mem_framesize();
m_callstack.pop_back();
m_regs.pop_back();
+
+ // TODO: write param local memory destination
if( rv_dst != NULL )
set_operand_value(rv_dst,rval);
+
return m_callstack.empty();
}