[Libclc-dev] [PATCH 5/7] atomic: Provide function implementation of atomic_{dec, inc}

Jan Vesely via Libclc-dev libclc-dev at lists.llvm.org
Wed Jun 20 13:35:02 PDT 2018


Signed-off-by: Jan Vesely <jan.vesely at rutgers.edu>
---
 generic/include/clc/atomic/atomic_dec.h |  5 ++++-
 generic/include/clc/atomic/atomic_inc.h |  5 ++++-
 generic/lib/SOURCES                     |  2 ++
 generic/lib/atomic/atomic_dec.cl        | 12 ++++++++++++
 generic/lib/atomic/atomic_inc.cl        | 12 ++++++++++++
 5 files changed, 34 insertions(+), 2 deletions(-)
 create mode 100644 generic/lib/atomic/atomic_dec.cl
 create mode 100644 generic/lib/atomic/atomic_inc.cl

diff --git a/generic/include/clc/atomic/atomic_dec.h b/generic/include/clc/atomic/atomic_dec.h
index 15d0588..a2d82bb 100644
--- a/generic/include/clc/atomic/atomic_dec.h
+++ b/generic/include/clc/atomic/atomic_dec.h
@@ -1 +1,4 @@
-#define atomic_dec(p) atomic_sub(p, 1)
+_CLC_OVERLOAD _CLC_DECL int atomic_dec (volatile local int *);
+_CLC_OVERLOAD _CLC_DECL int atomic_dec (volatile global int *);
+_CLC_OVERLOAD _CLC_DECL uint atomic_dec (volatile local uint *);
+_CLC_OVERLOAD _CLC_DECL uint atomic_dec (volatile global uint *);
diff --git a/generic/include/clc/atomic/atomic_inc.h b/generic/include/clc/atomic/atomic_inc.h
index d8bc342..950a1e1 100644
--- a/generic/include/clc/atomic/atomic_inc.h
+++ b/generic/include/clc/atomic/atomic_inc.h
@@ -1 +1,4 @@
-#define atomic_inc(p) atomic_add(p, 1)
+_CLC_OVERLOAD _CLC_DECL int atomic_inc (volatile local int *);
+_CLC_OVERLOAD _CLC_DECL int atomic_inc (volatile global int *);
+_CLC_OVERLOAD _CLC_DECL uint atomic_inc (volatile local uint *);
+_CLC_OVERLOAD _CLC_DECL uint atomic_inc (volatile global uint *);
diff --git a/generic/lib/SOURCES b/generic/lib/SOURCES
index 565750e..788aee6 100644
--- a/generic/lib/SOURCES
+++ b/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/generic/lib/atomic/atomic_dec.cl b/generic/lib/atomic/atomic_dec.cl
new file mode 100644
index 0000000..829aff4
--- /dev/null
+++ b/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/generic/lib/atomic/atomic_inc.cl b/generic/lib/atomic/atomic_inc.cl
new file mode 100644
index 0000000..67a7e8d
--- /dev/null
+++ b/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
-- 
2.16.4



More information about the Libclc-dev mailing list