qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 2/2] meson: fix CONFIG_ATOMIC128 check


From: Richard Henderson
Subject: Re: [PATCH v2 2/2] meson: fix CONFIG_ATOMIC128 check
Date: Mon, 28 Feb 2022 11:20:36 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0

On 2/28/22 10:00, marcandre.lureau@redhat.com wrote:
-# See if 64-bit atomic operations are supported.
-# Note that without __atomic builtins, we can only
-# assume atomic loads/stores max at pointer size.
-config_host_data.set('CONFIG_ATOMIC64', cc.links('''
+atomic_test = '''
    #include <stdint.h>
    int main(void)
    {
-    uint64_t x = 0, y = 0;
+    @0@ x = 0, y = 0;
      y = __atomic_load_n(&x, __ATOMIC_RELAXED);
      __atomic_store_n(&x, y, __ATOMIC_RELAXED);
      __atomic_compare_exchange_n(&x, &y, x, 0, __ATOMIC_RELAXED, 
__ATOMIC_RELAXED);
      __atomic_exchange_n(&x, y, __ATOMIC_RELAXED);
      __atomic_fetch_add(&x, y, __ATOMIC_RELAXED);
      return 0;
-  }'''))
+  }'''
+
+# See if 64-bit atomic operations are supported.
+# Note that without __atomic builtins, we can only
+# assume atomic loads/stores max at pointer size.
+config_host_data.set('CONFIG_ATOMIC64', 
cc.links(atomic_test.format('uint64_t')))
has_int128 = cc.links('''
    __int128_t a;
@@ -1837,15 +1839,10 @@ has_int128 = cc.links('''
  config_host_data.set('CONFIG_INT128', has_int128)
if has_int128
-  has_atomic128 = cc.links('''
-    int main(void)
-    {
-      unsigned __int128 x = 0, y = 0;
-      y = __atomic_load(&x, 0);
-      __atomic_store(&x, y, 0);
-      __atomic_compare_exchange(&x, &y, x, 0, 0, 0);
-      return 0;
-    }''')
+  # "do we have 128-bit atomics which are handled inline and specifically not
+  # via libatomic". The reason we can't use libatomic is documented in the
+  # comment starting "GCC is a house divided" in include/qemu/atomic128.h.
+  has_atomic128 = cc.links(atomic_test.format('unsigned __int128'))

Nice fix.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]