]> granicus.if.org Git - libatomic_ops/commitdiff
Implement compiler_barrier using C11 __atomic_signal_fence (GCC)
authorHans Boehm <boehm@acm.org>
Thu, 26 Jan 2017 07:16:54 +0000 (10:16 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Thu, 26 Jan 2017 07:18:38 +0000 (10:18 +0300)
Use __atomic_signal_fence(__ATOMIC_SEQ_CST) as AO_compiler_barrier.
That was the intended use of __atomic_signal_fence.  The only
standards-relevant context in which you can tell apart a compiler and
real fence is in the case if signal handlers.

* src/atomic_ops/sysdeps/gcc/generic.h (AO_compiler_barrier): Redefine
using GCC atomic intrinsic (__atomic_signal_fence).

src/atomic_ops/sysdeps/gcc/generic.h

index ba82e0d293cdb54716888148f11785aa4ae91db9..3f736ef82f2bae7b1faf94e51f5b9bb839117f92 100644 (file)
@@ -45,6 +45,9 @@
 # define AO_GCC_HAVE_SYNC_CAS
 #endif
 
+#undef AO_compiler_barrier
+#define AO_compiler_barrier() __atomic_signal_fence(__ATOMIC_SEQ_CST)
+
 #ifdef AO_UNIPROCESSOR
   /* If only a single processor (core) is used, AO_UNIPROCESSOR could   */
   /* be defined by the client to avoid unnecessary memory barrier.      */