]> granicus.if.org Git - libatomic_ops/commitdiff
Do not disallow to define double_load using built-in atomics (Aarch64)
authorIvan Maidanski <ivmai@mail.ru>
Tue, 5 Dec 2017 08:27:47 +0000 (11:27 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Tue, 5 Dec 2017 08:30:21 +0000 (11:30 +0300)
(fix commit 03a0465)

Clang 3.8 (and later) and GCC have the correct implementation of
double-word atomic load (containing STXP instruction) for Aarch64.

* src/atomic_ops/sysdeps/gcc/aarch64.h [AO_PREFER_BUILTIN_ATOMICS]
(AO_SKIPATOMIC_double_load, AO_SKIPATOMIC_double_load_acquire): Do not
define for GCC and if AO_CLANG_PREREQ(3, 8).

src/atomic_ops/sysdeps/gcc/aarch64.h

index 3c3de1ccfce5c4530fbbb996ca0268fd93be0549..afbe035414fea0acf34d2542f2476076b20c2458 100644 (file)
 # define AO_HAVE_nop_write
 #endif
 
-#ifdef AO_PREFER_BUILTIN_ATOMICS
-  /* As of clang 3.6 (and gcc 5.0), load atomics for double word are    */
-  /* translated to incorrect code lacking STXP (see the note below).    */
+/* Atomics for loading double word in Clang were translated to an       */
+/* incorrect code lacking STXP (see the note in AO_double_load below).  */
+#if defined(AO_PREFER_BUILTIN_ATOMICS) \
+    && defined(__clang__) && !AO_CLANG_PREREQ(3, 8)
 # define AO_SKIPATOMIC_double_load
 # define AO_SKIPATOMIC_double_load_acquire
-#else
+#endif
+
+#if !defined(AO_PREFER_BUILTIN_ATOMICS)
 
   AO_INLINE AO_double_t
   AO_double_load(const volatile AO_double_t *addr)