Patchwork [committed] Define HAVE_sync_compare_and_swap* on hppa-linux

login
register
mail settings
Submitter John David Anglin
Date July 17, 2014, 11:50 p.m.
Message ID <BLU436-SMTP57FB2B921773D3F6ED32EA97F40@phx.gbl>
Download mbox | patch
Permalink /patch/371284/
State New
Headers show

Comments

John David Anglin - July 17, 2014, 11:50 p.m.
The attached change enables future support using the kernel assisted  
atomic support.  It's a bit
of a fudge since the libcall routines are not lock free, but  
everything appears to work.

Tested on hppa-unknown-linux-gnu.  Committed to trunk.

Dave
--
John David Anglin	dave.anglin@bell.net
2014-07-17  John David Anglin  <danglin@gcc.gnu.org>

	* config/pa/pa-linux.h (TARGET_OS_CPP_BUILTINS): Remove defines for
	__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1, __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2
	and __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4.
	(HAVE_sync_compare_and_swapqi): Define.
	(HAVE_sync_compare_and_swaphi): Likewise.
	(HAVE_sync_compare_and_swapsi): Likewise.

Patch

Index: config/pa/pa-linux.h
===================================================================
--- config/pa/pa-linux.h	(revision 212767)
+++ config/pa/pa-linux.h	(working copy)
@@ -22,9 +22,6 @@ 
 #define TARGET_OS_CPP_BUILTINS()		\
   do						\
     {						\
-	builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1");	\
-	builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2");	\
-	builtin_define ("__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4");	\
 	GNU_USER_TARGET_OS_CPP_BUILTINS();	\
 	builtin_assert ("machine=bigendian");	\
     }						\
@@ -133,3 +130,13 @@ 
 
 #undef TARGET_SYNC_LIBCALL
 #define TARGET_SYNC_LIBCALL 1
+
+/* The SYNC operations are implemented as library functions, not
+   INSN patterns.  As a result, the HAVE defines for the patterns are
+   not defined.  We need to define them to generate the corresponding
+   __GCC_HAVE_SYNC_COMPARE_AND_SWAP_* and __GCC_ATOMIC_*_LOCK_FREE
+   defines.  */
+
+#define HAVE_sync_compare_and_swapqi 1
+#define HAVE_sync_compare_and_swaphi 1
+#define HAVE_sync_compare_and_swapsi 1