Fix testcase for s390x. Provide implementation of XCHG_M_R.
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@12018 a5019735-40e9-0310-863c-91ae7b9d1cf9
diff --git a/helgrind/tests/tc11_XCHG.c b/helgrind/tests/tc11_XCHG.c
index f7fe47f..ac85d82 100644
--- a/helgrind/tests/tc11_XCHG.c
+++ b/helgrind/tests/tc11_XCHG.c
@@ -54,8 +54,25 @@
: "memory", "cc" \
)
+#elif defined(PLAT_s390x_linux)
+# define XCHG_M_R(_addr,_lval) \
+ do { \
+ __asm__ __volatile__( \
+ "0: l 0,%[global]\n\t" \
+ " cs 0,%[local],%[global]\n\t" \
+ " bne 0b\n\t" \
+ " lr %[local],0\n\t" \
+ : /*out*/ [global]"+m"(_addr), [local]"+d"(_lval) \
+ : /*in*/ \
+ : "0", "memory", "cc" \
+ ); \
+ } while (0)
+
+# define XCHG_M_R_with_redundant_LOCK(_addr,_lval) \
+ XCHG_M_R(_addr,_lval)
+
#elif defined(PLAT_ppc32_linux) || defined(PLAT_ppc64_linux) \
- || defined(PLAT_arm_linux) || defined(PLAT_s390x_linux)
+ || defined(PLAT_arm_linux)
# if defined(HAVE_BUILTIN_ATOMIC)
# define XCHG_M_R(_addr,_lval) \
do { \