re PR libstdc++/24692 (Atomic builtins for v3)

2006-05-29  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/24692
	* include/bits/atomicity.h (__exchange_and_add_multi,
	__atomic_add_multi): New, depending on _GLIBCXX_ATOMIC_BUILTINS,
	inline the atomic builtins.
	(__exchange_and_add_dispatch, __atomic_add_dispatch): Adjust.
	* configure.ac: Define _GLIBCXX_ATOMIC_BUILTINS when the atomic
	builtins are available.
	* configure: Regenerate.
	* config.h.in: Likewise.

From-SVN: r114215
This commit is contained in:
Paolo Carlini 2006-05-29 20:00:29 +00:00 committed by Paolo Carlini
parent acb69f1c02
commit 9268b7cb5f
5 changed files with 60 additions and 2 deletions

View File

@ -1,3 +1,15 @@
2006-05-29 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/24692
* include/bits/atomicity.h (__exchange_and_add_multi,
__atomic_add_multi): New, depending on _GLIBCXX_ATOMIC_BUILTINS,
inline the atomic builtins.
(__exchange_and_add_dispatch, __atomic_add_dispatch): Adjust.
* configure.ac: Define _GLIBCXX_ATOMIC_BUILTINS when the atomic
builtins are available.
* configure: Regenerate.
* config.h.in: Likewise.
2006-05-27 Paolo Carlini <pcarlini@suse.de>
* configure.host: If the CPU provides atomic builtins select

View File

@ -655,6 +655,9 @@
/* Version number of package */
#undef VERSION
/* Define if atomic builtins are provided for this platform. */
#undef _GLIBCXX_ATOMIC_BUILTINS
/* Define to use concept checking code from the boost libraries. */
#undef _GLIBCXX_CONCEPT_CHECKS

View File

@ -109856,6 +109856,15 @@ ABI_TWEAKS_SRCDIR=config/${abi_tweaks_dir}
# Atomic builtins can be inlined in bits/atomicity.h.
if test $atomicity_dir = cpu/generic/atomic_builtins ; then
cat >>confdefs.h <<\_ACEOF
#define _GLIBCXX_ATOMIC_BUILTINS 1
_ACEOF
fi
# Determine cross-compile flags and AM_CONDITIONALs.
#AC_SUBST(GLIBCXX_IS_NATIVE)
#AM_CONDITIONAL(CANADIAN, test $CANADIAN = yes)

View File

@ -318,6 +318,12 @@ AC_SUBST(CPU_DEFINES_SRCDIR)
AC_SUBST(ABI_TWEAKS_SRCDIR)
AC_SUBST(OS_INC_SRCDIR)
# Atomic builtins can be inlined in bits/atomicity.h.
if test $atomicity_dir = cpu/generic/atomic_builtins ; then
AC_DEFINE([_GLIBCXX_ATOMIC_BUILTINS], 1,
[Define if atomic builtins are provided for this platform.])
fi
# Determine cross-compile flags and AM_CONDITIONALs.
#AC_SUBST(GLIBCXX_IS_NATIVE)
#AM_CONDITIONAL(CANADIAN, test $CANADIAN = yes)

View File

@ -49,6 +49,34 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
__attribute__ ((__unused__))
__atomic_add(volatile _Atomic_word* __mem, int __val);
static inline _Atomic_word
__exchange_and_add_multi(volatile _Atomic_word* __mem, int __val)
{
#ifdef _GLIBCXX_ATOMIC_BUILTINS
return __sync_fetch_and_add(__mem, __val);
#else
return __exchange_and_add(__mem, __val);
#endif
}
static inline void
__atomic_add_multi(volatile _Atomic_word* __mem, int __val)
{
#ifdef _GLIBCXX_ATOMIC_BUILTINS
__sync_fetch_and_add(__mem, __val);
#else
__atomic_add(__mem, __val);
#endif
}
static inline _Atomic_word
__exchange_and_add_single(volatile _Atomic_word* __mem, int __val)
{
@ -68,7 +96,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#ifdef __GTHREADS
if (__gthread_active_p())
return __exchange_and_add(__mem, __val);
return __exchange_and_add_multi(__mem, __val);
else
return __exchange_and_add_single(__mem, __val);
@ -86,7 +114,7 @@ _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx)
#ifdef __GTHREADS
if (__gthread_active_p())
__atomic_add(__mem, __val);
__atomic_add_multi(__mem, __val);
else
__atomic_add_single(__mem, __val);