meson: Test for __atomic_add_fetch in atomic checks
authorAndrew Galante <spock128@gmail.com>
Mon, 11 Jun 2018 22:03:36 +0000 (15:03 -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>
meson.build

index 375751bce10d62bc93a2fdb4da56fd8c6d5dd3fb..22e7a6d6cdac11f255d2423ed023c51bd0269916 100644 (file)
@@ -835,7 +835,9 @@ if cc.compiles('''#include <stdint.h>
                     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);
+
                   }''',
                name : 'GCC atomic builtins')
   pre_args += '-DUSE_GCC_ATOMIC_BUILTINS'
@@ -851,7 +853,8 @@ if cc.compiles('''#include <stdint.h>
                        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);
                      }''',
                   name : 'GCC atomic builtins required -latomic')
     dep_atomic = cc.find_library('atomic')