--- iaxclient-2.1beta3/lib/ringbuffer.c 2008-04-07 19:05:42.000000000 +0300 +++ iaxclient-2.1beta3-portable/lib/ringbuffer.c 2014-06-16 13:01:13.766101686 +0300 @@ -98,9 +98,14 @@ # define rb_ReadMemoryBarrier() OSMemoryBarrier() # define rb_WriteMemoryBarrier() OSMemoryBarrier() #elif defined(__GNUC__) + /* GCC >= 4.1 has built-in intrinsics. We'll use those */ +# if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) +# define rb_FullMemoryBarrier() __sync_synchronize() +# define rb_ReadMemoryBarrier() __sync_synchronize() +# define rb_WriteMemoryBarrier() __sync_synchronize() /* GCC understands volatile asm and "memory" to mean it * should not reorder memory read/writes */ -# if defined( __ppc__ ) || defined( __powerpc__ ) +# elif defined( __ppc__ ) || defined( __powerpc__ ) # define rb_FullMemoryBarrier() asm volatile("sync":::"memory") # define rb_ReadMemoryBarrier() asm volatile("sync":::"memory") # define rb_WriteMemoryBarrier() asm volatile("sync":::"memory")