--- 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")