From 163d057e0a771b236a452b01d656b72175350234 Mon Sep 17 00:00:00 2001 From: Wilson Fung Date: Sun, 8 Apr 2012 17:41:45 -0800 Subject: Adding 64-bit support for atomicAdd, atomicExch, atomicCAS and created a brief directed test. Added floating point support for atomicAdd without testing. [git-p4: depot-paths = "//depot/gpgpu_sim_research/fermi/distribution/": change = 11894] --- src/cuda-sim/instructions.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/cuda-sim/instructions.cc b/src/cuda-sim/instructions.cc index 74e3bd2..550a076 100644 --- a/src/cuda-sim/instructions.cc +++ b/src/cuda-sim/instructions.cc @@ -910,12 +910,17 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.u32 = MY_CAS_I(data.u32, src2_data.u32, src3_data.u32); data_ready = true; break; + case B64_TYPE: + case U64_TYPE: + op_result.u64 = MY_CAS_I(data.u64, src2_data.u64, src3_data.u64); + data_ready = true; + break; case S32_TYPE: op_result.s32 = MY_CAS_I(data.s32, src2_data.s32, src3_data.s32); data_ready = true; break; default: - printf("Execution error: type mismatch (%x) with instruction\natom.CAS only accepts b32\n", to_type); + printf("Execution error: type mismatch (%x) with instruction\natom.CAS only accepts b32 and b64\n", to_type); assert(0); break; } @@ -931,6 +936,11 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.u32 = MY_EXCH(data.u32, src2_data.u32); data_ready = true; break; + case B64_TYPE: + case U64_TYPE: + op_result.u64 = MY_EXCH(data.u64, src2_data.u64); + data_ready = true; + break; case S32_TYPE: op_result.s32 = MY_EXCH(data.s32, src2_data.s32); data_ready = true; @@ -956,8 +966,16 @@ void atom_callback( const inst_t* inst, ptx_thread_info* thread ) op_result.s32 = data.s32 + src2_data.s32; data_ready = true; break; + case U64_TYPE: + op_result.u64 = data.u64 + src2_data.u64; + data_ready = true; + break; + case F32_TYPE: + op_result.f32 = data.f32 + src2_data.f32; + data_ready = true; + break; default: - printf("Execution error: type mismatch with instruction\natom.ADD only accepts u32 and s32\n"); + printf("Execution error: type mismatch with instruction\natom.ADD only accepts u32, s32, u64, and f32\n"); assert(0); break; } -- cgit v1.3