uatomic/x86: Remove redundant memory barriers
[urcu.git] / m4 / ae_cc_atomic_builtins.m4
1 # SPDX-License-Identifier: GPL-2.0-or-later WITH LicenseRef-Autoconf-exception-macro
2 # SPDX-FileCopyrightText: 2023 Michael Jeanson <mjeanson@efficios.com>
3 #
4 # SYNOPSIS
5 #
6 # AE_CC_ATOMIC_BUILTINS([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
7 #
8
9 #serial 1
10
11 AC_DEFUN([AE_CC_ATOMIC_BUILTINS], [
12 AC_REQUIRE([AC_PROG_CC])
13 AC_LANG_PUSH([C])
14
15 AC_CACHE_CHECK(
16 [whether $CC supports atomic builtins],
17 [ae_cv_cc_atomic_builtins],
18 [
19 AC_LINK_IFELSE([
20 AC_LANG_PROGRAM([
21 int x, y;
22 ],[
23 __atomic_store_n(&x, 0, __ATOMIC_RELAXED);
24 __atomic_load_n(&x, __ATOMIC_RELAXED);
25 y = __atomic_exchange_n(&x, 1, __ATOMIC_RELAXED);
26 __atomic_compare_exchange_n(&x, &y, 0, 0, __ATOMIC_RELAXED, __ATOMIC_RELAXED);
27 __atomic_add_fetch(&x, 1, __ATOMIC_RELAXED);
28 __atomic_sub_fetch(&x, 1, __ATOMIC_RELAXED);
29 __atomic_and_fetch(&x, 0x01, __ATOMIC_RELAXED);
30 __atomic_or_fetch(&x, 0x01, __ATOMIC_RELAXED);
31 __atomic_thread_fence(__ATOMIC_RELAXED);
32 __atomic_signal_fence(__ATOMIC_RELAXED);
33 ])
34 ],[
35 ae_cv_cc_atomic_builtins=yes
36 ],[
37 ae_cv_cc_atomic_builtins=no
38 ])
39 ]
40 )
41
42 # Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
43 if test "x$ae_cv_cc_atomic_builtins" = "xyes"; then
44 $1
45 :
46 else
47 $2
48 :
49 fi
50
51 AC_LANG_POP
52 ])dnl AE_CC_ATOMIC_BUILTINS
This page took 0.030216 seconds and 4 git commands to generate.