From 2d6c2e51297fc010d9031db598eace7a5ff0b34a Mon Sep 17 00:00:00 2001 From: doko Date: Sun, 13 Dec 2009 22:44:27 +0000 Subject: [PATCH] 2009-12-09 Matthias Klose * include/private/gc_locks.h: For __ARM_EABI__ define GC_test_and_set GC_clear to use the atomic builtins. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@155198 138bc75d-0d04-0410-961f-82ee72b054a4 --- ChangeLog | 5 +++++ include/private/gc_locks.h | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index dd875027..542ddc1e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2009-12-09 Matthias Klose + + * include/private/gc_locks.h: For __ARM_EABI__ define + GC_test_and_set GC_clear to use the atomic builtins. + 2009-12-05 Ralf Wildenhues * Makefile.in: Regenerate. diff --git a/include/private/gc_locks.h b/include/private/gc_locks.h index d1bb2e45..54cfdb92 100644 --- a/include/private/gc_locks.h +++ b/include/private/gc_locks.h @@ -207,6 +207,12 @@ # define GC_CLEAR_DEFINED # endif /* ALPHA */ # ifdef ARM32 +# define GC_TEST_AND_SET_DEFINED +# if (__GNUC__>4)||((__GNUC__==4)&&(__GNUC_MINOR__>=5)) && defined(__ARM_EABI__) +# define GC_CLEAR_DEFINED +# define GC_test_and_set(addr) __sync_lock_test_and_set (addr, 1) +# define GC_clear(addr) __sync_lock_release (addr) +# else inline static int GC_test_and_set(volatile unsigned int *addr) { int oldval; /* SWP on ARM is very similar to XCHG on x86. Doesn't lock the @@ -219,7 +225,7 @@ : "memory"); return oldval; } -# define GC_TEST_AND_SET_DEFINED +# endif # endif /* ARM32 */ # ifdef CRIS inline static int GC_test_and_set(volatile unsigned int *addr) { -- 2.40.0