Module: wine Branch: master Commit: ae8408f1477837236cec3f278ed75546a20dc7e8 URL: http://source.winehq.org/git/wine.git/?a=commit;h=ae8408f1477837236cec3f278e...
Author: Grazvydas Ignotas notasas@gmail.com Date: Tue May 12 03:17:36 2015 +0300
port.h: Make use of compiler support for 64bit atomic ops.
---
include/wine/port.h | 12 +++++++++--- libs/port/interlocked.c | 2 ++ 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/include/wine/port.h b/include/wine/port.h index 16127e0..4910f34 100644 --- a/include/wine/port.h +++ b/include/wine/port.h @@ -367,8 +367,6 @@ extern int _spawnvp(int mode, const char *cmdname, const char * const argv[]);
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
-extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); - static inline int interlocked_cmpxchg( int *dest, int xchg, int compare ) { int ret; @@ -459,7 +457,6 @@ extern int interlocked_xchg( int *dest, int val ); #endif
extern void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ); -extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); extern void *interlocked_xchg_ptr( void **dest, void *val ); #if defined(__x86_64__) || defined(__aarch64__) || defined(_WIN64) extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high, @@ -468,6 +465,15 @@ extern unsigned char interlocked_cmpxchg128( __int64 *dest, __int64 xchg_high,
#endif /* __GNUC__ */
+#ifdef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 +static inline __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) +{ + return __sync_val_compare_and_swap( dest, compare, xchg ); +} +#else +extern __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ); +#endif + #else /* NO_LIBWINE_PORT */
#define __WINE_NOT_PORTABLE(func) func##_is_not_portable func##_is_not_portable diff --git a/libs/port/interlocked.c b/libs/port/interlocked.c index e5b1bb9..b63c50a 100644 --- a/libs/port/interlocked.c +++ b/libs/port/interlocked.c @@ -302,6 +302,7 @@ void *interlocked_cmpxchg_ptr( void **dest, void *xchg, void *compare ) return compare; }
+#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) { pthread_mutex_lock( &interlocked_mutex ); @@ -314,6 +315,7 @@ __int64 interlocked_cmpxchg64( __int64 *dest, __int64 xchg, __int64 compare ) pthread_mutex_unlock( &interlocked_mutex ); return compare; } +#endif
#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 int interlocked_xchg( int *dest, int val )