diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2009-05-03 16:13:59 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2009-05-03 16:13:59 +0000 |
commit | bd67512af1cd143d69c499b570fd06a3e1924ac1 (patch) | |
tree | d4efc2f18c07f0069a7d9c025bc591078d4a1911 /libstdc++-v3/configure | |
parent | fa5da7dee34affe9a2bbf01350845b803e493e0c (diff) | |
download | gcc-bd67512af1cd143d69c499b570fd06a3e1924ac1.zip gcc-bd67512af1cd143d69c499b570fd06a3e1924ac1.tar.gz gcc-bd67512af1cd143d69c499b570fd06a3e1924ac1.tar.bz2 |
acinclude.m4 ([GLIBCXX_ENABLE_ATOMIC_BUILTINS]): Do link tests when possible.
2009-05-03 Paolo Carlini <paolo.carlini@oracle.com>
* acinclude.m4 ([GLIBCXX_ENABLE_ATOMIC_BUILTINS]): Do link tests when
possible.
* configure: Regenerate.
From-SVN: r147076
Diffstat (limited to 'libstdc++-v3/configure')
-rwxr-xr-x | libstdc++-v3/configure | 369 |
1 files changed, 346 insertions, 23 deletions
diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 31678eb..98429fb 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -14757,14 +14757,336 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu old_CXXFLAGS="$CXXFLAGS" + # Do link tests if possible, instead asm tests. + if test x$gcc_no_link != xyes; then + + # Can do link tests. + + CXXFLAGS="$CXXFLAGS -fno-exceptions" + + echo "$as_me:$LINENO: checking for atomic builtins for bool" >&5 +echo $ECHO_N "checking for atomic builtins for bool... $ECHO_C" >&6 + if test "${glibcxx_cv_atomic_bool+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +typedef bool atomic_type; + atomic_type c1; + atomic_type c2; + const atomic_type c3(0); + __sync_fetch_and_add(&c1, c2); + __sync_val_compare_and_swap(&c1, c3, c2); + __sync_lock_test_and_set(&c1, c3); + __sync_lock_release(&c1); + __sync_synchronize(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + glibcxx_cv_atomic_bool=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +glibcxx_cv_atomic_bool=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi + + if test $glibcxx_cv_atomic_bool = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _GLIBCXX_ATOMIC_BUILTINS_1 1 +_ACEOF + + fi + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_bool" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_bool" >&6 + + echo "$as_me:$LINENO: checking for atomic builtins for short" >&5 +echo $ECHO_N "checking for atomic builtins for short... $ECHO_C" >&6 + if test "${glibcxx_cv_atomic_short+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +typedef short atomic_type; + atomic_type c1; + atomic_type c2; + const atomic_type c3(0); + __sync_fetch_and_add(&c1, c2); + __sync_val_compare_and_swap(&c1, c3, c2); + __sync_lock_test_and_set(&c1, c3); + __sync_lock_release(&c1); + __sync_synchronize(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + glibcxx_cv_atomic_short=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +glibcxx_cv_atomic_short=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi + + if test $glibcxx_cv_atomic_short = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _GLIBCXX_ATOMIC_BUILTINS_2 1 +_ACEOF + + fi + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_short" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_short" >&6 + + echo "$as_me:$LINENO: checking for atomic builtins for int" >&5 +echo $ECHO_N "checking for atomic builtins for int... $ECHO_C" >&6 + if test "${glibcxx_cv_atomic_int+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +typedef int atomic_type; + atomic_type c1; + atomic_type c2; + const atomic_type c3(0); + __sync_fetch_and_add(&c1, c2); + __sync_val_compare_and_swap(&c1, c3, c2); + __sync_lock_test_and_set(&c1, c3); + __sync_lock_release(&c1); + __sync_synchronize(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + glibcxx_cv_atomic_int=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +glibcxx_cv_atomic_int=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi + + if test $glibcxx_cv_atomic_int = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _GLIBCXX_ATOMIC_BUILTINS_4 1 +_ACEOF + + fi + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_int" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_int" >&6 + + echo "$as_me:$LINENO: checking for atomic builtins for long long" >&5 +echo $ECHO_N "checking for atomic builtins for long long... $ECHO_C" >&6 + if test "${glibcxx_cv_atomic_long_long+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + if test x$gcc_no_link = xyes; then + { { echo "$as_me:$LINENO: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&5 +echo "$as_me: error: Link tests are not allowed after GCC_NO_EXECUTABLES." >&2;} + { (exit 1); exit 1; }; } +fi +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +typedef long long atomic_type; + atomic_type c1; + atomic_type c2; + const atomic_type c3(0); + __sync_fetch_and_add(&c1, c2); + __sync_val_compare_and_swap(&c1, c3, c2); + __sync_lock_test_and_set(&c1, c3); + __sync_lock_release(&c1); + __sync_synchronize(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_cxx_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + glibcxx_cv_atomic_long_long=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +glibcxx_cv_atomic_long_long=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi + + if test $glibcxx_cv_atomic_long_long = yes; then + +cat >>confdefs.h <<\_ACEOF +#define _GLIBCXX_ATOMIC_BUILTINS_8 1 +_ACEOF + + fi + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_long_long" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_long_long" >&6 + + else + + # Do asm tests. + # Compile unoptimized. CXXFLAGS='-O0 -S' - # Fake what AC_TRY_COMPILE does, without linking as this is - # unnecessary for a builtins test. + # Fake what AC_TRY_COMPILE does. cat > conftest.$ac_ext << EOF -#line 14767 "configure" +#line 15089 "configure" int main() { typedef bool atomic_type; @@ -14788,22 +15110,22 @@ echo $ECHO_N "checking for atomic builtins for bool... $ECHO_C" >&6 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if grep __sync_ conftest.s >/dev/null 2>&1 ; then - enable_atomic_builtinsb=no + glibcxx_cv_atomic_bool=no else cat >>confdefs.h <<\_ACEOF #define _GLIBCXX_ATOMIC_BUILTINS_1 1 _ACEOF - enable_atomic_builtinsb=yes + glibcxx_cv_atomic_bool=yes fi fi - echo "$as_me:$LINENO: result: $enable_atomic_builtinsb" >&5 -echo "${ECHO_T}$enable_atomic_builtinsb" >&6 + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_bool" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_bool" >&6 rm -f conftest* cat > conftest.$ac_ext << EOF -#line 14806 "configure" +#line 15128 "configure" int main() { typedef short atomic_type; @@ -14827,22 +15149,22 @@ echo $ECHO_N "checking for atomic builtins for short... $ECHO_C" >&6 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if grep __sync_ conftest.s >/dev/null 2>&1 ; then - enable_atomic_builtinss=no + glibcxx_cv_atomic_short=no else cat >>confdefs.h <<\_ACEOF #define _GLIBCXX_ATOMIC_BUILTINS_2 1 _ACEOF - enable_atomic_builtinss=yes + glibcxx_cv_atomic_short=yes fi fi - echo "$as_me:$LINENO: result: $enable_atomic_builtinss" >&5 -echo "${ECHO_T}$enable_atomic_builtinss" >&6 + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_short" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_short" >&6 rm -f conftest* cat > conftest.$ac_ext << EOF -#line 14845 "configure" +#line 15167 "configure" int main() { // NB: _Atomic_word not necessarily int. @@ -14867,22 +15189,22 @@ echo $ECHO_N "checking for atomic builtins for int... $ECHO_C" >&6 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if grep __sync_ conftest.s >/dev/null 2>&1 ; then - enable_atomic_builtinsi=no + glibcxx_cv_atomic_int=no else cat >>confdefs.h <<\_ACEOF #define _GLIBCXX_ATOMIC_BUILTINS_4 1 _ACEOF - enable_atomic_builtinsi=yes + glibcxx_cv_atomic_int=yes fi fi - echo "$as_me:$LINENO: result: $enable_atomic_builtinsi" >&5 -echo "${ECHO_T}$enable_atomic_builtinsi" >&6 + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_int" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_int" >&6 rm -f conftest* cat > conftest.$ac_ext << EOF -#line 14885 "configure" +#line 15207 "configure" int main() { typedef long long atomic_type; @@ -14906,20 +15228,21 @@ echo $ECHO_N "checking for atomic builtins for long long... $ECHO_C" >&6 echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; then if grep __sync_ conftest.s >/dev/null 2>&1 ; then - enable_atomic_builtinsll=no + glibcxx_cv_atomic_long_long=no else cat >>confdefs.h <<\_ACEOF #define _GLIBCXX_ATOMIC_BUILTINS_8 1 _ACEOF - enable_atomic_builtinsll=yes + glibcxx_cv_atomic_long_long=yes fi fi - echo "$as_me:$LINENO: result: $enable_atomic_builtinsll" >&5 -echo "${ECHO_T}$enable_atomic_builtinsll" >&6 + echo "$as_me:$LINENO: result: $glibcxx_cv_atomic_long_long" >&5 +echo "${ECHO_T}$glibcxx_cv_atomic_long_long" >&6 rm -f conftest* + fi CXXFLAGS="$old_CXXFLAGS" ac_ext=c @@ -14930,7 +15253,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu # Set atomicity_dir to builtins if either of above tests pass. - if test $enable_atomic_builtinsi = yes || test $enable_atomic_builtinsb = yes ; then + if test $glibcxx_cv_atomic_int = yes || test $glibcxx_cv_atomic_bool = yes ; then atomicity_dir=cpu/generic/atomicity_builtins fi |