aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads/sysdeps/mips/pspinlock.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-02-03 02:26:37 +0000
committerUlrich Drepper <drepper@redhat.com>2002-02-03 02:26:37 +0000
commit5c1159b6a9303f5c9f93e8e048d52acc630c2a86 (patch)
tree2a7f252291a88632101388dd44a6c3786b2f4cb9 /linuxthreads/sysdeps/mips/pspinlock.c
parentb5ef404e0897450bbe1caaff867d8daf40ba0e35 (diff)
downloadglibc-5c1159b6a9303f5c9f93e8e048d52acc630c2a86.zip
glibc-5c1159b6a9303f5c9f93e8e048d52acc630c2a86.tar.gz
glibc-5c1159b6a9303f5c9f93e8e048d52acc630c2a86.tar.bz2
Update.
2002-02-01 H.J. Lu <hjl@gnu.org> * sysdeps/mips/atomicity.h (exchange_and_add): Use branch likely. (atomic_add): Likewise. (compare_and_swap): Return 0 only when failed to compare. Use branch likely. * sysdeps/unix/sysv/linux/mips/sys/tas.h (_test_and_set): Use branch likely. 2002-02-03 kaz Kojima <kkojima@rr.iij4u.or.jp> * sysdeps/sh/dl-machine.h (elf_machine_rela): Fix a typo. 2002-02-02 Ulrich Drepper <drepper@redhat.com> * elf/dl-minimal.c (__strsep): New minimal implementation.
Diffstat (limited to 'linuxthreads/sysdeps/mips/pspinlock.c')
-rw-r--r--linuxthreads/sysdeps/mips/pspinlock.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/linuxthreads/sysdeps/mips/pspinlock.c b/linuxthreads/sysdeps/mips/pspinlock.c
index 8c832ae..bf0a2c8 100644
--- a/linuxthreads/sysdeps/mips/pspinlock.c
+++ b/linuxthreads/sysdeps/mips/pspinlock.c
@@ -29,20 +29,21 @@
int
__pthread_spin_lock (pthread_spinlock_t *lock)
{
- unsigned int tmp;
+ unsigned int tmp1, tmp2;
asm volatile
("\t\t\t# spin_lock\n\t"
+ "ll %1,%3\n"
"1:\n\t"
- "ll %1,%2\n\t"
".set push\n\t"
".set noreorder\n\t"
"bnez %1,1b\n\t"
- " li %1,1\n\t"
- ".set pop\n\t"
- "sc %1,%0\n\t"
- "beqz %1,1b"
- : "=m" (*lock), "=&r" (tmp)
+ " li %2,1\n\t"
+ "sc %2,%0\n\t"
+ "beqzl %2,1b\n\t"
+ " ll %1,%3\n\t"
+ ".set pop"
+ : "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2)
: "m" (*lock)
: "memory");