From e460aa3282962aa3e89f19e207ec13b501187949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Storsj=C3=B6?= Date: Fri, 8 Mar 2013 12:32:38 +0200 Subject: [PATCH] atomic: Check for __sync_val_compare_and_swap instead of __sync_synchronize MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Not all gcc configurations have an implementation of all the atomic operations, and some gcc configurations have some atomic builtins implemented but not all. Thus check for the most essential function, whose presence should indicate that all others are present as well, since it can be used to implement all the other ones. Signed-off-by: Martin Storsjö --- configure | 4 ++-- libavutil/atomic.c | 4 ++-- libavutil/atomic.h | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/configure b/configure index a4b12c6b2d..01bfbb15ed 100755 --- a/configure +++ b/configure @@ -1324,7 +1324,7 @@ HAVE_LIST=" struct_v4l2_frmivalenum_discrete symver_asm_label symver_gnu_asm - sync_synchronize + sync_val_compare_and_swap sysconf sysctl sys_mman_h @@ -3456,7 +3456,7 @@ check_func strerror_r check_func strptime check_func strtok_r check_func sched_getaffinity -check_builtin sync_synchronize "" "__sync_synchronize()" +check_builtin sync_val_compare_and_swap "" "int *ptr; int oldval, newval; __sync_val_compare_and_swap(ptr, oldval, newval)" check_builtin machine_rw_barrier mbarrier.h "__machine_rw_barrier()" check_builtin MemoryBarrier windows.h "MemoryBarrier()" check_func sysconf diff --git a/libavutil/atomic.c b/libavutil/atomic.c index 8fa2532fd6..37e796f05f 100644 --- a/libavutil/atomic.c +++ b/libavutil/atomic.c @@ -20,7 +20,7 @@ #include "atomic.h" -#if !HAVE_MEMORYBARRIER && !HAVE_SYNC_SYNCHRONIZE && !HAVE_MACHINE_RW_BARRIER +#if !HAVE_MEMORYBARRIER && !HAVE_SYNC_VAL_COMPARE_AND_SWAP && !HAVE_MACHINE_RW_BARRIER #if HAVE_PTHREADS @@ -102,7 +102,7 @@ void *avpriv_atomic_ptr_cas(void * volatile *ptr, void *oldval, void *newval) #endif /* HAVE_PTHREADS */ -#endif /* !HAVE_MEMORYBARRIER && !HAVE_SYNC_SYNCHRONIZE && !HAVE_MACHINE_RW_BARRIER */ +#endif /* !HAVE_MEMORYBARRIER && !HAVE_SYNC_VAL_COMPARE_AND_SWAP && !HAVE_MACHINE_RW_BARRIER */ #ifdef TEST #include diff --git a/libavutil/atomic.h b/libavutil/atomic.h index dad93bd1aa..577e471462 100644 --- a/libavutil/atomic.h +++ b/libavutil/atomic.h @@ -25,7 +25,7 @@ #if HAVE_MEMORYBARRIER #include "atomic_win32.h" -#elif HAVE_SYNC_SYNCHRONIZE +#elif HAVE_SYNC_VAL_COMPARE_AND_SWAP #include "atomic_gcc.h" #elif HAVE_MACHINE_RW_BARRIER #include "atomic_suncc.h"