]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Added ppc implementation of atomic compare and swap.
authorBart Van Assche <bvanassche@acm.org>
Thu, 26 Jun 2008 08:34:53 +0000 (08:34 +0000)
committerBart Van Assche <bvanassche@acm.org>
Thu, 26 Jun 2008 08:34:53 +0000 (08:34 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8282

helgrind/tests/tc11_XCHG.c

index 5b46c7ed809bff94a2a732148139d2c59c689065..1d9df4c281b5de64216321cb48e15f7c7cd3acca 100644 (file)
         : /*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); \