You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.0 KiB

dnl Check for the __sync_add_and_fetch() and __sync_sub_and_fetch()
dnl compiler built-ins.
AC_DEFUN([AX__SYNC],
[
AH_TEMPLATE([HAVE___SYNC_ADD_AND_FETCH],
[Defined if the compiler provides __sync_add_and_fetch().])
AC_CACHE_CHECK([for __sync_add_and_fetch], [ac_cv___sync_add_and_fetch],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdlib.h>
]],
[[
volatile int x = 1;
volatile int y = __sync_add_and_fetch (&x, 1);
if (x != 2 || y != 2)
abort ();
]])],
[ac_cv___sync_add_and_fetch=yes],
[ac_cv___sync_add_and_fetch=no])
])
AS_IF([test "x$ac_cv___sync_add_and_fetch" = "xyes"],
[AC_DEFINE([HAVE___SYNC_ADD_AND_FETCH], [1])])
AH_TEMPLATE([HAVE___SYNC_SUB_AND_FETCH],
[Defined if the compiler provides __sync_sub_and_fetch().])
AC_CACHE_CHECK([for __sync_sub_and_fetch], [ac_cv___sync_sub_and_fetch],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <stdlib.h>
]],
[[
volatile int x = 2;
volatile int y = __sync_sub_and_fetch (&x, 1);
if (x != 1 || y != 1)
abort ();
]])],
[ac_cv___sync_sub_and_fetch=yes],
[ac_cv___sync_sub_and_fetch=no])
])
AS_IF([test "x$ac_cv___sync_sub_and_fetch" = "xyes"],
[AC_DEFINE([HAVE___SYNC_SUB_AND_FETCH], [1])])
AH_TEMPLATE([HAVE_CXX11_ATOMICS], [Defined if the compiler provides
C++11 <atomic> header and increment, decrement operations.])
AC_CACHE_CHECK([for C++11 atomics], [ac_cv_cxx11_atomics],
[
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <atomic>
]],
[[
#define TEST_ATOMIC(type) do { \
std::atomic<type> x (0); \
std::atomic_fetch_add_explicit (&x, static_cast<type>(1), std::memory_order_acquire); \
std::atomic_fetch_sub_explicit (&x, static_cast<type>(1), std::memory_order_release); \
} while (0)
TEST_ATOMIC(int);
TEST_ATOMIC(unsigned int);
TEST_ATOMIC(long);
TEST_ATOMIC(unsigned long);
std::atomic_thread_fence (std::memory_order_acquire);
]])],
[ac_cv_cxx11_atomics=yes],
[ac_cv_cxx11_atomics=no])
])
AS_IF([test "x$ac_cv_cxx11_atomics" = "xyes"],
[AC_DEFINE([HAVE_CXX11_ATOMICS], [1])])
])