diff options
author | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-01 21:23:07 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2011-02-01 21:23:07 +0000 |
commit | a7c48c8ec55d482e95dddd840a9bdd0fbfad9e33 (patch) | |
tree | 8a6b7bdf2b2fc6e41472c4ee699757979c05301d /libgo | |
parent | 56490b740618d572e9a4cd205b058db8d5831eb9 (diff) | |
download | gcc-a7c48c8ec55d482e95dddd840a9bdd0fbfad9e33.zip gcc-a7c48c8ec55d482e95dddd840a9bdd0fbfad9e33.tar.gz gcc-a7c48c8ec55d482e95dddd840a9bdd0fbfad9e33.tar.bz2 |
Test whether libgcc or kernel defines __sync_bool_compare_and_swap_4.
From-SVN: r169504
Diffstat (limited to 'libgo')
-rw-r--r-- | libgo/config.h.in | 4 | ||||
-rw-r--r-- | libgo/configure | 28 | ||||
-rw-r--r-- | libgo/configure.ac | 14 | ||||
-rw-r--r-- | libgo/runtime/thread.c | 2 |
4 files changed, 47 insertions, 1 deletions
diff --git a/libgo/config.h.in b/libgo/config.h.in index 5422bda..382362b 100644 --- a/libgo/config.h.in +++ b/libgo/config.h.in @@ -39,6 +39,10 @@ /* Define to 1 if you have the `strsignal' function. */ #undef HAVE_STRSIGNAL +/* Define to 1 if the compiler provides the __sync_bool_compare_and_swap + function for uint32 */ +#undef HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4 + /* Define to 1 if you have the <syscall.h> header file. */ #undef HAVE_SYSCALL_H diff --git a/libgo/configure b/libgo/configure index dc5ad3f..ad4cc25 100644 --- a/libgo/configure +++ b/libgo/configure @@ -14099,6 +14099,34 @@ fi done +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __sync_bool_compare_and_swap_4" >&5 +$as_echo_n "checking for __sync_bool_compare_and_swap_4... " >&6; } +if test "${libgo_cv_func___sync_bool_compare_and_swap_4+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +typedef unsigned int uint32 __attribute__ ((mode (SI))); +uint32 i; +int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + libgo_cv_func___sync_bool_compare_and_swap_4=yes +else + libgo_cv_func___sync_bool_compare_and_swap_4=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgo_cv_func___sync_bool_compare_and_swap_4" >&5 +$as_echo "$libgo_cv_func___sync_bool_compare_and_swap_4" >&6; } +if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then + $as_echo "#define HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4 1" >>confdefs.h + +fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -minline-all-stringops" >&5 $as_echo_n "checking whether compiler supports -minline-all-stringops... " >&6; } if test "${libgo_cv_c_stringops+set}" = set; then : diff --git a/libgo/configure.ac b/libgo/configure.ac index e1c0dd0..6cd04d2 100644 --- a/libgo/configure.ac +++ b/libgo/configure.ac @@ -332,6 +332,20 @@ AC_CHECK_HEADERS(sys/mman.h syscall.h sys/epoll.h sys/ptrace.h sys/user.h sys/ut AM_CONDITIONAL(HAVE_SYS_MMAN_H, test "$ac_cv_header_sys_mman_h" = yes) AC_CHECK_FUNCS(srandom random strsignal) +AC_CACHE_CHECK([for __sync_bool_compare_and_swap_4], +[libgo_cv_func___sync_bool_compare_and_swap_4], +[AC_LINK_IFELSE([ +typedef unsigned int uint32 __attribute__ ((mode (SI))); +uint32 i; +int main() { return __sync_bool_compare_and_swap (&i, 0, 1); } +], +[libgo_cv_func___sync_bool_compare_and_swap_4=yes], +[libgo_cv_func___sync_bool_compare_and_swap_4=no])]) +if test "$libgo_cv_func___sync_bool_compare_and_swap_4" = "yes"; then + AC_DEFINE(HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4, 1, + [Define to 1 if the compiler provides the __sync_bool_compare_and_swap function for uint32]) +fi + dnl For x86 we want to use the -minline-all-stringops option to avoid dnl forcing a stack split when calling memcpy and friends. AC_CACHE_CHECK([whether compiler supports -minline-all-stringops], diff --git a/libgo/runtime/thread.c b/libgo/runtime/thread.c index 3f1c8d5..b600754 100644 --- a/libgo/runtime/thread.c +++ b/libgo/runtime/thread.c @@ -77,7 +77,7 @@ runtime_destroylock(Lock *l) sem_destroy(&l->sem); } -#ifndef __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 +#ifndef HAVE_SYNC_BOOL_COMPARE_AND_SWAP_4 // For targets which don't have the required sync support. Really // this should be provided by gcc itself. FIXME. |