@ -28,40 +28,27 @@
# define avpriv_atomic_int_get atomic_int_get_gcc
# define avpriv_atomic_int_get atomic_int_get_gcc
static inline int atomic_int_get_gcc ( volatile int * ptr )
static inline int atomic_int_get_gcc ( volatile int * ptr )
{
{
# if HAVE_ATOMIC_COMPARE_EXCHANGE
return __atomic_load_n ( ptr , __ATOMIC_SEQ_CST ) ;
# else
__sync_synchronize ( ) ;
__sync_synchronize ( ) ;
return * ptr ;
return * ptr ;
# endif
}
}
# define avpriv_atomic_int_set atomic_int_set_gcc
# define avpriv_atomic_int_set atomic_int_set_gcc
static inline void atomic_int_set_gcc ( volatile int * ptr , int val )
static inline void atomic_int_set_gcc ( volatile int * ptr , int val )
{
{
# if HAVE_ATOMIC_COMPARE_EXCHANGE
__atomic_store_n ( ptr , val , __ATOMIC_SEQ_CST ) ;
# else
* ptr = val ;
* ptr = val ;
__sync_synchronize ( ) ;
__sync_synchronize ( ) ;
# endif
}
}
# define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_gcc
# define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_gcc
static inline int atomic_int_add_and_fetch_gcc ( volatile int * ptr , int inc )
static inline int atomic_int_add_and_fetch_gcc ( volatile int * ptr , int inc )
{
{
# if HAVE_ATOMIC_COMPARE_EXCHANGE
return __atomic_add_fetch ( ptr , inc , __ATOMIC_SEQ_CST ) ;
# else
return __sync_add_and_fetch ( ptr , inc ) ;
return __sync_add_and_fetch ( ptr , inc ) ;
# endif
}
}
# define avpriv_atomic_ptr_cas atomic_ptr_cas_gcc
# define avpriv_atomic_ptr_cas atomic_ptr_cas_gcc
static inline void * atomic_ptr_cas_gcc ( void * volatile * ptr ,
static inline void * atomic_ptr_cas_gcc ( void * volatile * ptr ,
void * oldval , void * newval )
void * oldval , void * newval )
{
{
# if HAVE_SYNC_VAL_COMPARE_AND_SWAP
# ifdef __ARMCC_VERSION
# ifdef __ARMCC_VERSION
// armcc will throw an error if ptr is not an integer type
// armcc will throw an error if ptr is not an integer type
volatile uintptr_t * tmp = ( volatile uintptr_t * ) ptr ;
volatile uintptr_t * tmp = ( volatile uintptr_t * ) ptr ;
@ -69,10 +56,6 @@ static inline void *atomic_ptr_cas_gcc(void * volatile *ptr,
# else
# else
return __sync_val_compare_and_swap ( ptr , oldval , newval ) ;
return __sync_val_compare_and_swap ( ptr , oldval , newval ) ;
# endif
# endif
# else
__atomic_compare_exchange_n ( ptr , & oldval , newval , 0 , __ATOMIC_SEQ_CST , __ATOMIC_SEQ_CST ) ;
return oldval ;
# endif
}
}
# endif /* AVUTIL_ATOMIC_GCC_H */
# endif /* AVUTIL_ATOMIC_GCC_H */