mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-02-16 18:21:41 +01:00
Use __sync builtin atomics on all architectures if available
We can use the __sync builtin atomics also on other architectures than IA64. GCC 4.7 documentation notes that these builtins are ``legacy'' -- adding support for the newer GCC __atomic atomics should be fairly easy.
This commit is contained in:
parent
9a3565ddc1
commit
c2d6f85a0a
2 changed files with 20 additions and 6 deletions
14
configure.ac
14
configure.ac
|
@ -283,6 +283,20 @@ if test x$have__builtin___clear_cache = xyes; then
|
|||
fi
|
||||
AC_MSG_RESULT([$have__builtin___clear_cache])
|
||||
|
||||
AC_MSG_CHECKING([for __sync atomics])
|
||||
AC_LINK_IFELSE(
|
||||
[AC_LANG_PROGRAM([[]], [[
|
||||
__sync_bool_compare_and_swap((int *)0, 0, 1);
|
||||
__sync_fetch_and_add((int *)0, 1);
|
||||
]])],
|
||||
[have_sync_atomics=yes],
|
||||
[have_sync_atomics=no])
|
||||
if test x$have_sync_atomics = xyes; then
|
||||
AC_DEFINE([HAVE_SYNC_ATOMICS], [1],
|
||||
[Defined if __sync atomics are available])
|
||||
fi
|
||||
AC_MSG_RESULT([$have_sync_atomics])
|
||||
|
||||
CCASFLAGS="${CCASFLAGS} ${CPPFLAGS}"
|
||||
|
||||
arch="$target_arch"
|
||||
|
|
|
@ -116,9 +116,10 @@ cmpxchg_ptr (void *addr, void *old, void *new)
|
|||
# define HAVE_CMPXCHG
|
||||
# endif
|
||||
# define HAVE_FETCH_AND_ADD
|
||||
#else
|
||||
#elif defined(HAVE_SYNC_ATOMICS) || defined(HAVE_IA64INTRIN_H)
|
||||
# ifdef HAVE_IA64INTRIN_H
|
||||
# include <ia64intrin.h>
|
||||
# endif
|
||||
static inline int
|
||||
cmpxchg_ptr (void *addr, void *old, void *new)
|
||||
{
|
||||
|
@ -137,7 +138,6 @@ cmpxchg_ptr (void *addr, void *old, void *new)
|
|||
# define HAVE_CMPXCHG
|
||||
# define HAVE_FETCH_AND_ADD
|
||||
#endif
|
||||
#endif
|
||||
#define atomic_read(ptr) (*(ptr))
|
||||
|
||||
#define UNWI_OBJ(fn) UNW_PASTE(UNW_PREFIX,UNW_PASTE(I,fn))
|
||||
|
|
Loading…
Add table
Reference in a new issue