[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(
[[
*/
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)