From 625680f978077a09e210e5dcfc66e5700db26dad Mon Sep 17 00:00:00 2001 From: Daniel Jacobowitz Date: Fri, 28 Mar 2008 17:41:20 +0000 Subject: [PATCH] * sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Added memory barriers to enforce strict ordering on weakly ordered systems. --- ChangeLog.mips | 5 +++++ sysdeps/unix/sysv/linux/mips/sys/tas.h | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog.mips b/ChangeLog.mips index 711f23b730..0ca16cc546 100644 --- a/ChangeLog.mips +++ b/ChangeLog.mips @@ -1,3 +1,8 @@ +2008-03-27 Robin Randhawa + + * sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Added memory + barriers to enforce strict ordering on weakly ordered systems. + 2008-03-26 David Stephenson Daniel Jacobowitz diff --git a/sysdeps/unix/sysv/linux/mips/sys/tas.h b/sysdeps/unix/sysv/linux/mips/sys/tas.h index 309438d78a..b370ee4993 100644 --- a/sysdeps/unix/sysv/linux/mips/sys/tas.h +++ b/sysdeps/unix/sysv/linux/mips/sys/tas.h @@ -40,17 +40,19 @@ __NTH (_test_and_set (int *p, int v)) __asm__ __volatile__ ("/* Inline test and set */\n" - "1:\n\t" ".set push\n\t" #if _MIPS_SIM == _ABIO32 ".set mips2\n\t" #endif + "sync\n\t" + "1:\n\t" "ll %0,%3\n\t" "move %1,%4\n\t" "beq %0,%4,2f\n\t" "sc %1,%2\n\t" - ".set pop\n\t" "beqz %1,1b\n" + "sync\n\t" + ".set pop\n\t" "2:\n\t" "/* End test and set */" : "=&r" (r), "=&r" (t), "=m" (*p)