summaryrefslogtreecommitdiff
path: root/libstdc++-v3/acinclude.m4
diff options
context:
space:
mode:
authorbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-14 22:41:43 +0000
committerbkoz <bkoz@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-14 22:41:43 +0000
commit3ba82d605ce2a86abb9b2dd0ca3b4b660117417d (patch)
tree255b82cf13b2db9f241b86c199799552ea061f57 /libstdc++-v3/acinclude.m4
parenta77c6e01766312bf00f7c4949cdeaaf5532301ce (diff)
downloadgcc-3ba82d605ce2a86abb9b2dd0ca3b4b660117417d.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115456 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/acinclude.m4')
-rw-r--r--libstdc++-v3/acinclude.m463
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.