summaryrefslogtreecommitdiffstats
path: root/libclc/generic/lib
diff options
context:
space:
mode:
Diffstat (limited to 'libclc/generic/lib')
-rw-r--r--libclc/generic/lib/SOURCES2
-rw-r--r--libclc/generic/lib/atomic/atomic_dec.cl12
-rw-r--r--libclc/generic/lib/atomic/atomic_inc.cl12
3 files changed, 26 insertions, 0 deletions
diff --git a/libclc/generic/lib/SOURCES b/libclc/generic/lib/SOURCES
index 565750e08c8..788aee6cd3b 100644
--- a/libclc/generic/lib/SOURCES
+++ b/libclc/generic/lib/SOURCES
@@ -7,6 +7,8 @@ async/wait_group_events.cl
atomic/atomic_add.cl
atomic/atomic_and.cl
atomic/atomic_cmpxchg.cl
+atomic/atomic_dec.cl
+atomic/atomic_inc.cl
atomic/atomic_max.cl
atomic/atomic_min.cl
atomic/atomic_or.cl
diff --git a/libclc/generic/lib/atomic/atomic_dec.cl b/libclc/generic/lib/atomic/atomic_dec.cl
new file mode 100644
index 00000000000..829aff4e80f
--- /dev/null
+++ b/libclc/generic/lib/atomic/atomic_dec.cl
@@ -0,0 +1,12 @@
+#include <clc/clc.h>
+
+#define IMPL(TYPE, AS) \
+_CLC_OVERLOAD _CLC_DEF TYPE atomic_dec(volatile AS TYPE *p) { \
+ return __sync_fetch_and_sub(p, (TYPE)1); \
+}
+
+IMPL(int, global)
+IMPL(unsigned int, global)
+IMPL(int, local)
+IMPL(unsigned int, local)
+#undef IMPL
diff --git a/libclc/generic/lib/atomic/atomic_inc.cl b/libclc/generic/lib/atomic/atomic_inc.cl
new file mode 100644
index 00000000000..67a7e8d44ab
--- /dev/null
+++ b/libclc/generic/lib/atomic/atomic_inc.cl
@@ -0,0 +1,12 @@
+#include <clc/clc.h>
+
+#define IMPL(TYPE, AS) \
+_CLC_OVERLOAD _CLC_DEF TYPE atomic_inc(volatile AS TYPE *p) { \
+ return __sync_fetch_and_add(p, (TYPE)1); \
+}
+
+IMPL(int, global)
+IMPL(unsigned int, global)
+IMPL(int, local)
+IMPL(unsigned int, local)
+#undef IMPL
OpenPOWER on IntegriCloud