summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilson Fung <[email protected]>2012-04-08 17:41:45 -0800
committerAndrew Boktor <[email protected]>2014-08-14 13:19:05 -0700
commit163d057e0a771b236a452b01d656b72175350234 (patch)
treeffb37a98e4965d4516877b762ced4bf15ecd0a61
parent05b7b2485886db63dc901f73c226d93c16a43abe (diff)
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]
-rw-r--r--src/cuda-sim/instructions.cc22
1 files 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;
}