summaryrefslogtreecommitdiff
path: root/r600
diff options
context:
space:
mode:
authorAaron Watry <awatry@gmail.com>2013-09-05 16:04:01 +0000
committerAaron Watry <awatry@gmail.com>2013-09-05 16:04:01 +0000
commit795f6b000ad8ca4f8ab29c3bfa41fc2cf7e0e9d2 (patch)
treeebb5142f5aca6cca15ebe52a1f090e95c60ad386 /r600
parent14aec1e0486835f1c71fcfea13eb075ab30dd0ee (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/SOURCES1
-rw-r--r--r600/lib/atomic/atomic.cl20
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)