diff options
author | Benjamin Kosnik <bkoz@redhat.com> | 2006-07-14 22:41:43 +0000 |
---|---|---|
committer | Benjamin Kosnik <bkoz@gcc.gnu.org> | 2006-07-14 22:41:43 +0000 |
commit | 701a3eeeef11809f8fcdc2415d846521cde329f3 (patch) | |
tree | 255b82cf13b2db9f241b86c199799552ea061f57 /libstdc++-v3/acinclude.m4 | |
parent | 8fce9db0148391e5bc6853c413867a9810c68e75 (diff) | |
download | gcc-701a3eeeef11809f8fcdc2415d846521cde329f3.tar.gz |
acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): New.
2006-07-14 Benjamin Kosnik <bkoz@redhat.com>
* acinclude.m4 (GLIBCXX_ENABLE_ATOMIC_BUILTINS): New.
* configure.ac: Use it.
* configure: Regenerated.
* config.h.in: Regenerated.
* configure.host: Simplify.
* include/bits/atomicity.h: Adjust macros.
* config/cpu/generic/atomicity.h: Move...
* config/cpu/generic/atomicity_mutex: New.
* config/cpu/generic/atomicity_mutex/atomicity.h: ...here.
* config/cpu/generic/atomic_builtins: Rename...
* config/cpu/generic/atomicity_builtins: ...to this.
* config/cpu/generic/atomicity_builtins/atomicity.h: Moved.
* config/cpu/mips/atomicity.h: Comment MIPS II requirement.
* scripts/testsuite_flags.in: Make --cxxflags reflect CXXFLAGS.
From-SVN: r115456
Diffstat (limited to 'libstdc++-v3/acinclude.m4')
-rw-r--r-- | libstdc++-v3/acinclude.m4 | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 349566466ac..c160a1a3366 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -1967,6 +1967,69 @@ AC_DEFUN([GLIBCXX_ENABLE_PCH], [ dnl +dnl Check for atomic builtins. +dnl See: +dnl http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html#Atomic-Builtins +dnl +dnl This checks to see if the host supports the compiler-generated +dnl builtins for atomic operations. Note, this is intended to be an +dnl all-or-nothing switch, so all the atomic operations that are used +dnl should be checked. +dnl +dnl Note: +dnl libgomp and libgfortran do this with a link test, instead of an asm test. +dnl see: CHECK_SYNC_FETCH_AND_ADD +dnl +dnl Defines: +dnl _GLIBCXX_ATOMIC_BUILTINS if the compiler on this target supports atomics. +dnl +AC_DEFUN([GLIBCXX_ENABLE_ATOMIC_BUILTINS], [ + AC_MSG_CHECKING([for atomic builtins]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + + # Fake what AC_TRY_COMPILE does. XXX Look at redoing this new-style. + cat > conftest.$ac_ext << EOF +[#]line __oline__ "configure" +int main() +{ + // NB: _Atomic_word not necessarily int. + typedef int atomic_type; + atomic_type c1; + atomic_type c2; + const atomic_type c3(0); + if (__sync_fetch_and_add(&c1, c2) == c3) + { + // Do something. + } + return 0; +} +EOF + old_CXXFLAGS="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -S" + if AC_TRY_EVAL(ac_compile); then + if grep __sync_fetch_and_add conftest.s >/dev/null 2>&1 ; then + enable_atomic_builtins=no + else + AC_DEFINE(_GLIBCXX_ATOMIC_BUILTINS, 1, + [Define if builtin atomic operations are supported on this host.]) + enable_atomic_builtins=yes + atomicity_dir=cpu/generic/atomicity_builtins + fi + fi + CXXFLAGS="$old_CXXFLAGS" + rm -f conftest* + + # Now, if still generic, set to mutex. + if test $atomicity_dir = "cpu/generic" ; then + atomicity_dir=cpu/generic/atomicity_mutex + fi + AC_LANG_RESTORE + AC_MSG_RESULT($enable_atomic_builtins) +]) + + +dnl dnl Check for exception handling support. If an explicit enable/disable dnl sjlj exceptions is given, we don't have to detect. Otherwise the dnl target may or may not support call frame exceptions. |