check that the version of __sync_sub_and_fetch that returns a value is supported, not just the void one

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50480 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
2007-12-05 10:51:28 +00:00
parent c615a3f57b
commit 9d5507f7a2
2 changed files with 11 additions and 5 deletions

View File

@@ -6,14 +6,17 @@ AC_DEFUN([WX_ATOMIC_BUILTINS],
[ [
AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_PROG_CC])
if test -n "$GCC"; then if test -n "$GCC"; then
AC_MSG_CHECKING([for __sync_fetch_* builtins]) AC_MSG_CHECKING([for __sync_fetch_and_add and __sync_sub_and_fetch builtins])
AC_CACHE_VAL(wx_cv_cc_gcc_atomic_builtins, [ AC_CACHE_VAL(wx_cv_cc_gcc_atomic_builtins, [
AC_TRY_LINK( AC_TRY_LINK(
[], [],
[ [
unsigned int value=0; unsigned int value=0;
__sync_fetch_and_add(&value, 1); /* wxAtomicInc doesn't use return value here */
__sync_fetch_and_add(&value, 2);
__sync_sub_and_fetch(&value, 1); __sync_sub_and_fetch(&value, 1);
/* but wxAtomicDec does, so mimic that: */
unsigned int r2 = __sync_sub_and_fetch(&value, 1);
], ],
wx_cv_cc_gcc_atomic_builtins=yes, wx_cv_cc_gcc_atomic_builtins=yes,
wx_cv_cc_gcc_atomic_builtins=no) wx_cv_cc_gcc_atomic_builtins=no)

9
configure vendored
View File

@@ -24772,8 +24772,8 @@ fi
if test -n "$GCC"; then if test -n "$GCC"; then
{ echo "$as_me:$LINENO: checking for __sync_fetch_* builtins" >&5 { echo "$as_me:$LINENO: checking for __sync_fetch_and_add and __sync_sub_and_fetch builtins" >&5
echo $ECHO_N "checking for __sync_fetch_* builtins... $ECHO_C" >&6; } echo $ECHO_N "checking for __sync_fetch_and_add and __sync_sub_and_fetch builtins... $ECHO_C" >&6; }
if test "${wx_cv_cc_gcc_atomic_builtins+set}" = set; then if test "${wx_cv_cc_gcc_atomic_builtins+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
@@ -24790,8 +24790,11 @@ main ()
{ {
unsigned int value=0; unsigned int value=0;
__sync_fetch_and_add(&value, 1); /* wxAtomicInc doesn't use return value here */
__sync_fetch_and_add(&value, 2);
__sync_sub_and_fetch(&value, 1); __sync_sub_and_fetch(&value, 1);
/* but wxAtomicDec does, so mimic that: */
unsigned int r2 = __sync_sub_and_fetch(&value, 1);
; ;
return 0; return 0;