From b916cd600d109938a1621345bfc3c46da4bff4c6 Mon Sep 17 00:00:00 2001 From: Inderpreet Singh Date: Sun, 25 Dec 2011 22:21:01 -0800 Subject: Fix for Bug 123: Use of constant in shader_core_ctx::func_exec_inst function [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 11227] --- src/abstract_hardware_model.cc | 1 + src/abstract_hardware_model.h | 7 +++++-- src/gpgpu-sim/shader.cc | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/abstract_hardware_model.cc b/src/abstract_hardware_model.cc index a7da2ff..19c3091 100644 --- a/src/abstract_hardware_model.cc +++ b/src/abstract_hardware_model.cc @@ -316,6 +316,7 @@ void warp_inst_t::memory_coalescing_arch_13( bool is_write, mem_access_type acce // local memory can only be accessed in 4B chunks by one thread unsigned data_size_coales = (space.get_type() == local_space || space.get_type() == param_space_local ) ? 4 : data_size; unsigned num_accesses = (space.get_type() == local_space || space.get_type() == param_space_local ) ? data_size/4 : 1; + assert(num_accesses <= MAX_ACCESSES_PER_INSN_PER_THREAD); for(unsigned access=0; accesswarp_size); m_per_scalar_thread_valid=true; } + assert(num_addrs <= MAX_ACCESSES_PER_INSN_PER_THREAD); for(unsigned i=0; i m_per_scalar_thread; diff --git a/src/gpgpu-sim/shader.cc b/src/gpgpu-sim/shader.cc index b37ceef..7ef5140 100644 --- a/src/gpgpu-sim/shader.cc +++ b/src/gpgpu-sim/shader.cc @@ -608,7 +608,7 @@ void shader_core_ctx::func_exec_inst( warp_inst_t &inst ) if( inst.has_callback(t) ) m_warp[inst.warp_id()].inc_n_atomic(); if (inst.space.is_local() && (inst.is_load() || inst.is_store())) { - new_addr_type localaddrs[8]; + new_addr_type localaddrs[MAX_ACCESSES_PER_INSN_PER_THREAD]; unsigned num_addrs; num_addrs = translate_local_memaddr(inst.get_addr(t), tid, m_config->n_simt_clusters*m_config->n_simt_cores_per_cluster, inst.data_size, (new_addr_type*) localaddrs ); @@ -797,7 +797,7 @@ unsigned shader_core_ctx::translate_local_memaddr( address_type localaddr, unsig assert(datasize%4 == 0); assert(datasize >= 4); - assert(datasize <= 32); // max 32B + assert(datasize/4 <= MAX_ACCESSES_PER_INSN_PER_THREAD); // max 32B assert(localaddr%4 == 0); // Required if accessing 4B per request, otherwise access will overflow into next thread's space for(unsigned i=0; i