ax_atomic.m4 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  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