dnl
AC_MSG_CHECKING([for GNU atomic operations support])
AC_RUN_IFELSE([AC_LANG_PROGRAM([[
- int n = 0;
+ int32_t n_32 = 0;
+ uint64_t n_64 = 0;
]],[[
- __sync_add_and_fetch(&n, 10); // n becomes 10
- __sync_fetch_and_add(&n, 20); // n becomes 30
- __sync_sub_and_fetch(&n, 15); // n becomes 15
- __sync_bool_compare_and_swap(&n, 15, 201); // n becomes 201
- __sync_fetch_and_and(&n, 200); // n becomes 200
- return (n == 200) ? 0 : -1;
+ // 32-bit
+ __sync_add_and_fetch(&n_32, 10); // n becomes 10
+ __sync_fetch_and_add(&n_32, 20); // n becomes 30
+ __sync_sub_and_fetch(&n_32, 15); // n becomes 15
+ __sync_bool_compare_and_swap(&n_32, 15, 201); // n becomes 201
+ __sync_fetch_and_and(&n_32, 200); // n becomes 200
+ if (n != 200) return -1;
+
+ // 64-bit
+ __sync_add_and_fetch(&n_64, 10); // n becomes 10
+ __sync_fetch_and_add(&n_64, 20); // n becomes 30
+ __sync_sub_and_fetch(&n_64, 15); // n becomes 15
+ __sync_bool_compare_and_swap(&n_64, 15, 201); // n becomes 201
+ __sync_fetch_and_and(&n_64, 200); // n becomes 200
+ if (n_64 != 200) return -1;
+
+ // seems to be okay.
+ return 0;
]])],
[
- AC_DEFINE(HAVE_ATOMIC_OPS,1,[Define to 1 if you have __sync_add_and_fetch() and such])
+ AC_DEFINE(HAVE_ATOMIC_OPS,1,[Define to 1 if you have GCC __sync_add_and_fetch() and such])
AC_MSG_RESULT(yes)
],[
AC_MSG_RESULT(no)