swt2c / rpms / iaxclient

Forked from rpms/iaxclient 5 years ago
Clone
Blob Blame History Raw
--- 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")