From e69ef5000b2b39ef65843a771f3dfeee52b2de7d Mon Sep 17 00:00:00 2001 From: Pierre d'Herbemont Date: Sat, 5 Jul 2008 21:27:00 +0200 Subject: [PATCH] vlc_threads: More barrier() support across toolchain and CPU. --- include/vlc_threads.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/include/vlc_threads.h b/include/vlc_threads.h index a31f004eea..2ce2302b72 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -567,10 +567,14 @@ static inline int vlc_spin_init (vlc_spinlock_t *spin) #endif static inline void barrier (void) { -#if defined (__APPLE__) - OSMemoryBarrier(); -#elif defined (__GNUC__) /* FIXME: || defined (ICC_whatever) */ +#if defined (__GNUC__) && (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) __sync_synchronize (); +#elif defined(__APPLE__) + OSMemoryBarrier (); +#elif defined(__powerpc__) + asm volatile ("sync":::"memory"); +#elif defined(__i386__) + asm volatile ("mfence":::"memory"); #elif defined (LIBVLC_USE_PTHREAD) static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock (&lock); -- 2.39.2