Changeset: 257e0ed28a78 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=257e0ed28a78 Modified Files: gdk/gdk_atomic.h Branch: default Log Message:
With Intel compiler on Windows, use VS-compatible Interlocked functions. diffs (56 lines): diff --git a/gdk/gdk_atomic.h b/gdk/gdk_atomic.h --- a/gdk/gdk_atomic.h +++ b/gdk/gdk_atomic.h @@ -95,7 +95,7 @@ #define ATOMIC_CLEAR(var) atomic_flag_clear(var) #define ATOMIC_TAS(var) atomic_flag_test_and_set(var) -#elif defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(NO_ATOMIC_INSTRUCTIONS) +#elif defined(_MSC_VER) && !defined(NO_ATOMIC_INSTRUCTIONS) #include <intrin.h> @@ -109,6 +109,9 @@ * * See * https://docs.microsoft.com/en-us/windows/desktop/Sync/synchronization-and-multiprocessor-issues + * + * This does not go for the Intel compiler, so there we use + * _InterlockedExchangeAdd to load the value of an atomic variable. */ #if SIZEOF_SSIZE_T == 8 @@ -117,8 +120,12 @@ #define ATOMIC_VAR_INIT(val) (val) #define ATOMIC_INIT(var, val) (*(var) = (val)) +#ifdef __INTEL_COMPILER +#define ATOMIC_GET(var) _InterlockedExchangeAdd64(var, 0) +#else #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)) @@ -138,8 +145,12 @@ #define ATOMIC_VAR_INIT(val) (val) #define ATOMIC_INIT(var, val) (*(var) = (val)) +#ifdef __INTEL_COMPILER +#define ATOMIC_GET(var) _InterlockedExchangeAdd(var, 0) +#else #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)) @@ -359,6 +370,6 @@ ATOMIC_CLEAR(ATOMIC_FLAG *var) #define USE_PTHREAD_LOCKS /* must use pthread locks */ -#endif /* LIBATOMIC_OPS */ +#endif #endif /* _GDK_ATOMIC_H_ */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list