Changeset: 05066b241778 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=05066b241778
Modified Files:
        gdk/gdk_atomic.h
Branch: default
Log Message:

Use typedefs for atomic types; ATOMIC_BASE_TYPE is non-atomic version of 
ATOMIC_TYPE.


diffs (267 lines):

diff --git a/gdk/gdk_atomic.h b/gdk/gdk_atomic.h
--- a/gdk/gdk_atomic.h
+++ b/gdk/gdk_atomic.h
@@ -53,34 +53,34 @@
 #include <stdatomic.h>
 
 #if ATOMIC_LLONG_LOCK_FREE == 2
-#define ATOMIC_TYPE                    atomic_ullong
-#define ATOMIC_CAST                    unsigned long long
+typedef atomic_ullong ATOMIC_TYPE;
+typedef unsigned long long ATOMIC_BASE_TYPE;
 #elif ATOMIC_LONG_LOCK_FREE == 2
-#define ATOMIC_TYPE                    atomic_ulong
-#define ATOMIC_CAST                    unsigned long
+typedef atomic_ulong ATOMIC_TYPE;
+typedef unsigned long ATOMIC_BASE_TYPE;
 #elif ATOMIC_INT_LOCK_FREE == 2
-#define ATOMIC_TYPE                    atomic_uint
-#define ATOMIC_CAST                    unsigned int
+typedef atomic_uint ATOMIC_TYPE;
+typedef unsigned int ATOMIC_BASE_TYPE;
 #elif ATOMIC_LLONG_LOCK_FREE == 1
-#define ATOMIC_TYPE                    atomic_ullong
-#define ATOMIC_CAST                    unsigned long long
+typedef atomic_ullong ATOMIC_TYPE;
+typedef unsigned long long ATOMIC_BASE_TYPE;
 #elif ATOMIC_LONG_LOCK_FREE == 1
-#define ATOMIC_TYPE                    atomic_ulong
-#define ATOMIC_CAST                    unsigned long
+typedef atomic_ulong ATOMIC_TYPE;
+typedef unsigned long ATOMIC_BASE_TYPE;
 #elif ATOMIC_INT_LOCK_FREE == 1
-#define ATOMIC_TYPE                    atomic_uint
-#define ATOMIC_CAST                    unsigned int
+typedef atomic_uint ATOMIC_TYPE;
+typedef unsigned int ATOMIC_BASE_TYPE;
 #else
-#define ATOMIC_TYPE                    atomic_ullong
-#define ATOMIC_CAST                    unsigned long long
+typedef atomic_ullong ATOMIC_TYPE;
+typedef unsigned long long ATOMIC_BASE_TYPE;
 #endif
 
-#define ATOMIC_INIT(var, val)  atomic_init(var, (ATOMIC_CAST) (val))
+#define ATOMIC_INIT(var, val)  atomic_init(var, (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_GET(var)                atomic_load(var)
-#define ATOMIC_SET(var, val)   atomic_store(var, (ATOMIC_CAST) (val))
-#define ATOMIC_XCG(var, val)   atomic_exchange(var, (ATOMIC_CAST) (val))
-#define ATOMIC_ADD(var, val)   atomic_fetch_add(var, (ATOMIC_CAST) (val))
-#define ATOMIC_SUB(var, val)   atomic_fetch_sub(var, (ATOMIC_CAST) (val))
+#define ATOMIC_SET(var, val)   atomic_store(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_XCG(var, val)   atomic_exchange(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_ADD(var, val)   atomic_fetch_add(var, (ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_SUB(var, val)   atomic_fetch_sub(var, (ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_INC(var)                (atomic_fetch_add(var, 1) + 1)
 #define ATOMIC_DEC(var)                (atomic_fetch_sub(var, 1) - 1)
 
@@ -90,7 +90,7 @@
 #define ATOMIC_SET_PTR(var, val)       atomic_store(var, val)
 #define ATOMIC_XCG_PTR(var, val)       atomic_exchange(var, val)
 
-#define ATOMIC_FLAG            atomic_flag
+typedef atomic_flag ATOMIC_FLAG;
 /* ATOMIC_FLAG_INIT is already defined by the include file */
 #define ATOMIC_CLEAR(var)      atomic_flag_clear(var)
 #define ATOMIC_TAS(var)                atomic_flag_test_and_set(var)
@@ -116,7 +116,8 @@
 
 #if SIZEOF_SSIZE_T == 8
 
-#define ATOMIC_TYPE            volatile int64_t
+typedef volatile int64_t ATOMIC_TYPE;
+typedef int64_t ATOMIC_BASE_TYPE;
 #define ATOMIC_VAR_INIT(val)   (val)
 #define ATOMIC_INIT(var, val)  (*(var) = (val))
 
@@ -126,10 +127,10 @@
 #define ATOMIC_GET(var)                (*(var))
 /* should we use _InterlockedExchangeAdd64(var, 0) instead? */
 #endif
-#define ATOMIC_SET(var, val)   _InterlockedExchange64(var, (int64_t) (val))
-#define ATOMIC_XCG(var, val)   _InterlockedExchange64(var, (int64_t) (val))
-#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd64(var, (int64_t) (val))
-#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd64(var, -(int64_t) (val))
+#define ATOMIC_SET(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_XCG(var, val)   _InterlockedExchange64(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd64(var, 
(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd64(var, 
-(ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_INC(var)                _InterlockedIncrement64(var)
 #define ATOMIC_DEC(var)                _InterlockedDecrement64(var)
 
@@ -141,7 +142,8 @@
 
 #else
 
-#define ATOMIC_TYPE            volatile int
+typedef volatile int ATOMIC_TYPE;
+typedef int ATOMIC_BASE_TYPE;
 #define ATOMIC_VAR_INIT(val)   (val)
 #define ATOMIC_INIT(var, val)  (*(var) = (val))
 
@@ -151,10 +153,10 @@
 #define ATOMIC_GET(var)                (*(var))
 /* should we use _InterlockedExchangeAdd(var, 0) instead? */
 #endif
-#define ATOMIC_SET(var, val)   _InterlockedExchange(var, (int) (val))
-#define ATOMIC_XCG(var, val)   _InterlockedExchange(var, (int) (val))
-#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd(var, (int) (val))
-#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd(var, -(int) (val))
+#define ATOMIC_SET(var, val)   _InterlockedExchange(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_XCG(var, val)   _InterlockedExchange(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_ADD(var, val)   _InterlockedExchangeAdd(var, (ATOMIC_BASE_TYPE) 
(val))
+#define ATOMIC_SUB(var, val)   _InterlockedExchangeAdd(var, 
-(ATOMIC_BASE_TYPE) (val))
 #define ATOMIC_INC(var)                _InterlockedIncrement(var)
 #define ATOMIC_DEC(var)                _InterlockedDecrement(var)
 
@@ -171,7 +173,7 @@
 #define ATOMIC_SET_PTR(var, val)       _InterlockedExchangePointer((volatile 
PVOID*) (var), (PVOID) (val))
 #define ATOMIC_XCG_PTR(var, val)       _InterlockedExchangePointer((volatile 
PVOID*) (var), (PVOID) (val))
 
-#define ATOMIC_FLAG            int
+typedef int ATOMIC_FLAG;
 #define ATOMIC_FLAG_INIT       { 0 }
 #define ATOMIC_CLEAR(var)      _InterlockedExchange(var, 0)
 #define ATOMIC_TAS(var)                _InterlockedCompareExchange(var, 1, 0)
@@ -183,16 +185,16 @@
  * __sync_* primitives is not supported) */
 
 #if SIZEOF_SSIZE_T == 8
-#define ATOMIC_TYPE            int64_t
+typedef int64_t ATOMIC_TYPE;
 #else
-#define ATOMIC_TYPE            int
+typedef int ATOMIC_TYPE;
 #endif
 #define ATOMIC_VAR_INIT(val)   (val)
 #define ATOMIC_INIT(var, val)  (*(var) = (val))
 
 #define ATOMIC_GET(var)                __atomic_load_n(var, __ATOMIC_SEQ_CST)
 #define ATOMIC_SET(var, val)   __atomic_store_n(var, (ATOMIC_TYPE) (val), 
__ATOMIC_SEQ_CST)
-#define ATOMIC_XCG(var, val)   __atomic_exchange_n(var, (ATOMIC_TYPE) (val), 
__ATOMIC_SEQ_CST)
+#define ATOMIC_XCG(var, val)   __atomic_exchange_n(var, (ATOMIC_TYPE) (val), 
__ATOMIC_SEQ_CST
 #define ATOMIC_ADD(var, val)   __atomic_fetch_add(var, (ATOMIC_TYPE) (val), 
__ATOMIC_SEQ_CST)
 #define ATOMIC_SUB(var, val)   __atomic_fetch_sub(var, (ATOMIC_TYPE) (val), 
__ATOMIC_SEQ_CST)
 #define ATOMIC_INC(var)                __atomic_add_fetch(var, 1, 
__ATOMIC_SEQ_CST)
@@ -204,7 +206,7 @@
 #define ATOMIC_SET_PTR(var, val)       __atomic_store_n(var, (val), 
__ATOMIC_SEQ_CST)
 #define ATOMIC_XCG_PTR(var, val)       __atomic_exchange_n(var, (val), 
__ATOMIC_SEQ_CST)
 
-#define ATOMIC_FLAG            char
+typedef char ATOMIC_FLAG;
 #define ATOMIC_FLAG_INIT       { 0 }
 #define ATOMIC_CLEAR(var)      __atomic_clear(var, __ATOMIC_SEQ_CST)
 #define ATOMIC_TAS(var)                __atomic_test_and_set(var, 
__ATOMIC_SEQ_CST)
@@ -213,24 +215,25 @@
 
 /* emulate using mutexes */
 
+typedef size_t ATOMIC_BASE_TYPE;
 typedef struct {
-       size_t val;
+       ATOMIC_BASE_TYPE val;
        pthread_mutex_t lck;
 } ATOMIC_TYPE;
 #define ATOMIC_VAR_INIT(v)     { .val = (v), .lck = PTHREAD_MUTEX_INITIALIZER }
 
 static inline void
-ATOMIC_INIT(ATOMIC_TYPE *var, size_t val)
+ATOMIC_INIT(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
 {
        pthread_mutex_init(&var->lck, 0);
        var->val = val;
 }
-#define ATOMIC_INIT(var, val)  ATOMIC_INIT((var), (size_t) (val))
+#define ATOMIC_INIT(var, val)  ATOMIC_INIT((var), (ATOMIC_BASE_TYPE) (val))
 
-static inline size_t
+static inline ATOMIC_BASE_TYPE
 ATOMIC_GET(ATOMIC_TYPE *var)
 {
-       size_t old;
+       ATOMIC_BASE_TYPE old;
        pthread_mutex_lock(&var->lck);
        old = var->val;
        pthread_mutex_unlock(&var->lck);
@@ -238,63 +241,63 @@ ATOMIC_GET(ATOMIC_TYPE *var)
 }
 
 static inline void
-ATOMIC_SET(ATOMIC_TYPE *var, size_t val)
+ATOMIC_SET(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
 {
        pthread_mutex_lock(&var->lck);
        var->val = val;
        pthread_mutex_unlock(&var->lck);
 }
-#define ATOMIC_SET(var, val)   ATOMIC_SET(var, (size_t) (val))
+#define ATOMIC_SET(var, val)   ATOMIC_SET(var, (ATOMIC_BASE_TYPE) (val))
 
-static inline size_t
-ATOMIC_XCG(ATOMIC_TYPE *var, size_t val)
+static inline ATOMIC_BASE_TYPE
+ATOMIC_XCG(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
 {
-       size_t new;
+       ATOMIC_BASE_TYPE new;
        pthread_mutex_lock(&var->lck);
        new = var->val = val;
        pthread_mutex_unlock(&var->lck);
        return new;
 }
-#define ATOMIC_XCG(var, val)   ATOMIC_XCG(var, (size_t) (val))
+#define ATOMIC_XCG(var, val)   ATOMIC_XCG(var, (ATOMIC_BASE_TYPE) (val))
 
-static inline size_t
-ATOMIC_ADD(ATOMIC_TYPE *var, size_t val)
+static inline ATOMIC_BASE_TYPE
+ATOMIC_ADD(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
 {
-       size_t old;
+       ATOMIC_BASE_TYPE old;
        pthread_mutex_lock(&var->lck);
        old = var->val;
        var->val += val;
        pthread_mutex_unlock(&var->lck);
        return old;
 }
-#define ATOMIC_ADD(var, val)   ATOMIC_ADD(var, (size_t) (val))
+#define ATOMIC_ADD(var, val)   ATOMIC_ADD(var, (ATOMIC_BASE_TYPE) (val))
 
-static inline size_t
-ATOMIC_SUB(ATOMIC_TYPE *var, size_t val)
+static inline ATOMIC_BASE_TYPE
+ATOMIC_SUB(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE val)
 {
-       size_t old;
+       ATOMIC_BASE_TYPE old;
        pthread_mutex_lock(&var->lck);
        old = var->val;
        var->val -= val;
        pthread_mutex_unlock(&var->lck);
        return old;
 }
-#define ATOMIC_SUB(var, val)   ATOMIC_SUB(var, (size_t) (val))
+#define ATOMIC_SUB(var, val)   ATOMIC_SUB(var, (ATOMIC_BASE_TYPE) (val))
 
-static inline size_t
+static inline ATOMIC_BASE_TYPE
 ATOMIC_INC(ATOMIC_TYPE *var)
 {
-       size_t new;
+       ATOMIC_BASE_TYPE new;
        pthread_mutex_lock(&var->lck);
        new = var->val += 1;
        pthread_mutex_unlock(&var->lck);
        return new;
 }
 
-static inline size_t
+static inline ATOMIC_BASE_TYPE
 ATOMIC_DEC(ATOMIC_TYPE *var)
 {
-       size_t new;
+       ATOMIC_BASE_TYPE new;
        pthread_mutex_lock(&var->lck);
        new = var->val -= 1;
        pthread_mutex_unlock(&var->lck);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to