|
| 1 | +# AC_C___ATOMIC |
| 2 | +# ------------- |
| 3 | +# Define HAVE_C___ATOMIC if __atomic works. |
| 4 | +AN_IDENTIFIER([__atomic], [AC_C___ATOMIC]) |
| 5 | +AC_DEFUN([AC_C___ATOMIC], |
| 6 | +[AC_CACHE_CHECK([for __atomic], ac_cv_c___atomic, |
| 7 | +[AC_LINK_IFELSE( |
| 8 | + [AC_LANG_SOURCE( |
| 9 | + [[int |
| 10 | + main (int argc, char **argv) |
| 11 | + { |
| 12 | + volatile unsigned long ul1 = 1, ul2 = 0, ul3 = 2; |
| 13 | + __atomic_load_n(&ul1, __ATOMIC_SEQ_CST); |
| 14 | + __atomic_compare_exchange(&ul1, &ul2, &ul3, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); |
| 15 | + __atomic_fetch_add(&ul1, 1, __ATOMIC_SEQ_CST); |
| 16 | + __atomic_fetch_sub(&ul3, 1, __ATOMIC_SEQ_CST); |
| 17 | + __atomic_or_fetch(&ul1, ul2, __ATOMIC_SEQ_CST); |
| 18 | + __atomic_and_fetch(&ul1, ul2, __ATOMIC_SEQ_CST); |
| 19 | + volatile unsigned long long ull1 = 1, ull2 = 0, ull3 = 2; |
| 20 | + __atomic_load_n(&ull1, __ATOMIC_SEQ_CST); |
| 21 | + __atomic_compare_exchange(&ull1, &ull2, &ull3, 1, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); |
| 22 | + __atomic_fetch_add(&ull1, 1, __ATOMIC_SEQ_CST); |
| 23 | + __atomic_fetch_sub(&ull3, 1, __ATOMIC_SEQ_CST); |
| 24 | + __atomic_or_fetch(&ull1, ull2, __ATOMIC_SEQ_CST); |
| 25 | + __atomic_and_fetch(&ull1, ull2, __ATOMIC_SEQ_CST); |
| 26 | + return 0; |
| 27 | + } |
| 28 | + ]])], |
| 29 | + [ac_cv_c___atomic=yes], |
| 30 | + [ac_cv_c___atomic=no])]) |
| 31 | +if test $ac_cv_c___atomic = yes; then |
| 32 | + AC_DEFINE([HAVE_C___ATOMIC], 1, |
| 33 | + [Define to 1 if __atomic operations work.]) |
| 34 | +fi |
| 35 | +])# AC_C___ATOMIC |
0 commit comments