diff options
author | Aaron Watry <awatry@gmail.com> | 2013-09-05 16:04:01 +0000 |
---|---|---|
committer | Aaron Watry <awatry@gmail.com> | 2013-09-05 16:04:01 +0000 |
commit | 795f6b000ad8ca4f8ab29c3bfa41fc2cf7e0e9d2 (patch) | |
tree | ebb5142f5aca6cca15ebe52a1f090e95c60ad386 /r600 | |
parent | 14aec1e0486835f1c71fcfea13eb075ab30dd0ee (diff) |
Add atomic_inc and atomic_add builtins
Reviewed-by: Aaron Watry <awatry@gmail.com>
git-svn-id: https://llvm.org/svn/llvm-project/libclc/trunk@190058 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'r600')
-rw-r--r-- | r600/lib/SOURCES | 1 | ||||
-rw-r--r-- | r600/lib/atomic/atomic.cl | 20 |
2 files changed, 21 insertions, 0 deletions
diff --git a/r600/lib/SOURCES b/r600/lib/SOURCES index 38919ab..de30f6e 100644 --- a/r600/lib/SOURCES +++ b/r600/lib/SOURCES @@ -1,3 +1,4 @@ +atomic/atomic.cl workitem/get_num_groups.ll workitem/get_group_id.ll workitem/get_local_size.ll diff --git a/r600/lib/atomic/atomic.cl b/r600/lib/atomic/atomic.cl new file mode 100644 index 0000000..e80180c --- /dev/null +++ b/r600/lib/atomic/atomic.cl @@ -0,0 +1,20 @@ +#include <clc/clc.h> + +#define ATOMIC_FUNC_TYPE(SIGN, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ +_CLC_OVERLOAD _CLC_DEF SIGN TYPE FUNCTION (volatile CL_ADDRSPACE SIGN TYPE *p, SIGN TYPE val) { \ + return (SIGN TYPE)__clc_##FUNCTION##_addr##LLVM_ADDRSPACE((volatile CL_ADDRSPACE signed TYPE*)p, (signed TYPE)val); \ +} + +#define ATOMIC_FUNC_SIGN(TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ + _CLC_DECL signed TYPE __clc_##FUNCTION##_addr##LLVM_ADDRSPACE(volatile CL_ADDRSPACE signed TYPE*, signed TYPE); \ + ATOMIC_FUNC_TYPE(signed, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \ + ATOMIC_FUNC_TYPE(unsigned, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) + +#define ATOMIC_FUNC_ADDRSPACE(TYPE, FUNCTION) \ + ATOMIC_FUNC_SIGN(TYPE, FUNCTION, global, 1) \ + ATOMIC_FUNC_SIGN(TYPE, FUNCTION, local, 3) + +#define ATOMIC_FUNC(FUNCTION) \ + ATOMIC_FUNC_ADDRSPACE(int, FUNCTION) + +ATOMIC_FUNC(atomic_add) |