|
From: <sv...@va...> - 2008-06-26 08:34:48
|
Author: bart
Date: 2008-06-26 09:34:53 +0100 (Thu, 26 Jun 2008)
New Revision: 8282
Log:
Added ppc implementation of atomic compare and swap.
Modified:
trunk/helgrind/tests/tc11_XCHG.c
Modified: trunk/helgrind/tests/tc11_XCHG.c
===================================================================
--- trunk/helgrind/tests/tc11_XCHG.c 2008-06-26 07:31:15 UTC (rev 8281)
+++ trunk/helgrind/tests/tc11_XCHG.c 2008-06-26 08:34:53 UTC (rev 8282)
@@ -45,6 +45,18 @@
: /*in*/ "m"(_addr) \
: "memory", "cc" \
)
+#elif defined(PLAT_ppc32_linux) || defined(PLAT_ppc64_linux) \
+ || defined(PLAT_ppc32_aix5) || defined(PLAT_ppc64_aix5)
+# define XCHG_M_R(_addr,_lval) \
+ do { \
+ int tmp; \
+ while ((tmp = *(int*)(& _addr)), \
+ ! __sync_bool_compare_and_swap((int*)&_addr, tmp, _lval)) \
+ ; \
+ _lval = tmp; \
+ } while (0)
+# define XCHG_M_R_with_redundant_LOCK(_addr,_lval) \
+ XCHG_M_R(_addr,_lval)
#else
# define XCHG_M_R(_addr,_lval) \
do { int tmp = *(int*)(& _addr); \
|