mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-19 00:01:21 +08:00
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:
parent
acb69f1c02
commit
9268b7cb5f
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
9
libstdc++-v3/configure
vendored
9
libstdc++-v3/configure
vendored
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user