configure.ac: Test for __atomic_add_fetch in atomic checks
authorAndrew Galante <spock128@gmail.com>
Mon, 11 Jun 2018 22:05:25 +0000 (15:05 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 13 Jun 2018 17:09:46 +0000 (10:09 -0700)
Some platforms have 64-bit __atomic_load_n but not 64-bit
__atomic_add_fetch, so test for both of them.

Bug: https://bugs.gentoo.org/655616
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Dylan Baker <dylan@pnwbakers.com>
configure.ac

index 75ee1a7c01c9663250e32a6c788edb255e9d4e50..3f747bf38cc88251d093e48d94f05429acaca30f 100644 (file)
@@ -445,7 +445,8 @@ int main() {
     struct {
         uint64_t *v;
     } x;
-    return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE);
+    return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
+           (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
 }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=yes, GCC_ATOMIC_BUILTINS_SUPPORTED=no)
 
 dnl If that didn't work, we try linking with -latomic, which is needed on some
@@ -459,7 +460,8 @@ if test "x$GCC_ATOMIC_BUILTINS_SUPPORTED" != xyes; then
         struct {
             uint64_t *v;
         } x;
-        return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE);
+        return (int)__atomic_load_n(x.v, __ATOMIC_ACQUIRE) &
+               (int)__atomic_add_fetch(x.v, (uint64_t)1, __ATOMIC_ACQ_REL);
    }]])], GCC_ATOMIC_BUILTINS_SUPPORTED=yes LIBATOMIC_LIBS="-latomic",
           GCC_ATOMIC_BUILTINS_SUPPORTED=no)
    LDFLAGS=$save_LDFLAGS