diff options
-rw-r--r-- | configure.ac | 19 | ||||
-rw-r--r-- | src/libstrongswan/utils/utils.h | 7 |
2 files changed, 7 insertions, 19 deletions
diff --git a/configure.ac b/configure.ac index 4aae79dc5..1bd68d66d 100644 --- a/configure.ac +++ b/configure.ac @@ -668,25 +668,6 @@ AC_COMPILE_IFELSE( [AC_MSG_RESULT([no])] ) -AC_MSG_CHECKING([for GCC __atomic operations]) -AC_RUN_IFELSE([AC_LANG_SOURCE( - [[ - int main() { - int ref = 1, val; - __atomic_fetch_add(&ref, 1, __ATOMIC_RELAXED); - val = __atomic_sub_fetch(&ref, 1, __ATOMIC_RELAXED); - __atomic_compare_exchange_n(&ref, &val, 0, 0, __ATOMIC_RELAXED, - __ATOMIC_RELAXED); - return ref; - } - ]])], - [AC_MSG_RESULT([yes]); - AC_DEFINE([HAVE_GCC_ATOMIC_OPERATIONS], [], - [have GCC __atomic_* operations])], - [AC_MSG_RESULT([no])], - [AC_MSG_RESULT([no])] -) - AC_MSG_CHECKING([for GCC __sync operations]) AC_RUN_IFELSE([AC_LANG_SOURCE( [[ diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h index 8f91e8431..75b31ec1b 100644 --- a/src/libstrongswan/utils/utils.h +++ b/src/libstrongswan/utils/utils.h @@ -748,6 +748,13 @@ static inline size_t round_down(size_t size, size_t alignment) */ typedef u_int refcount_t; +/* use __atomic* built-ins with GCC 4.7 and newer */ +#ifdef __GNUC__ +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 6)) +# define HAVE_GCC_ATOMIC_OPERATIONS +# endif +#endif + #ifdef HAVE_GCC_ATOMIC_OPERATIONS #define ref_get(ref) __atomic_add_fetch(ref, 1, __ATOMIC_RELAXED) |