diff options
author | Ulrich Drepper <drepper@redhat.com> | 2002-07-16 01:02:04 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2002-07-16 01:02:04 +0000 |
commit | a99bfa85d82aecc3eb780779377a9e178e7189d2 (patch) | |
tree | 682a57a683bcf9e64cf0230f4a3648d20aa49217 /linuxthreads/sysdeps/mips | |
parent | 807bce82b385e7542f94a2fef994725b368a13b4 (diff) | |
download | glibc-a99bfa85d82aecc3eb780779377a9e178e7189d2.zip glibc-a99bfa85d82aecc3eb780779377a9e178e7189d2.tar.gz glibc-a99bfa85d82aecc3eb780779377a9e178e7189d2.tar.bz2 |
Update.
2002-07-02 H.J. Lu <hjl@gnu.org>
* sysdeps/mips/atomicity.h: Don't include <sgidefs.h>. Always
use ll/sc.
* sysdeps/unix/sysv/linux/mips/sys/tas.h: Likewise.
* sysdeps/unix/sysv/linux/configure.in: Set arch_minimum_kernel
to 2.4.0 for mips.
TLS fail if USE_TLS is not defined.
Diffstat (limited to 'linuxthreads/sysdeps/mips')
-rw-r--r-- | linuxthreads/sysdeps/mips/pspinlock.c | 17 | ||||
-rw-r--r-- | linuxthreads/sysdeps/mips/pt-machine.h | 8 |
2 files changed, 6 insertions, 19 deletions
diff --git a/linuxthreads/sysdeps/mips/pspinlock.c b/linuxthreads/sysdeps/mips/pspinlock.c index 1aa372b..7dd66af 100644 --- a/linuxthreads/sysdeps/mips/pspinlock.c +++ b/linuxthreads/sysdeps/mips/pspinlock.c @@ -19,12 +19,9 @@ #include <errno.h> #include <pthread.h> -#include <sgidefs.h> #include <sys/tas.h> #include "internals.h" -#if (_MIPS_ISA >= _MIPS_ISA_MIPS2) - /* This implementation is similar to the one used in the Linux kernel. */ int __pthread_spin_lock (pthread_spinlock_t *lock) @@ -34,10 +31,13 @@ __pthread_spin_lock (pthread_spinlock_t *lock) asm volatile ("\t\t\t# spin_lock\n" "1:\n\t" + ".set push\n\t" + ".set mips2\n\t" "ll %1,%3\n\t" "li %2,1\n\t" "bnez %1,1b\n\t" "sc %2,%0\n\t" + ".set pop\n\t" "beqz %2,1b" : "=m" (*lock), "=&r" (tmp1), "=&r" (tmp2) : "m" (*lock) @@ -46,17 +46,6 @@ __pthread_spin_lock (pthread_spinlock_t *lock) return 0; } -#else /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */ - -int -__pthread_spin_lock (pthread_spinlock_t *lock) -{ - while (_test_and_set ((int *) lock, 1)); - return 0; -} - -#endif /* !(_MIPS_ISA >= _MIPS_ISA_MIPS2) */ - weak_alias (__pthread_spin_lock, pthread_spin_lock) diff --git a/linuxthreads/sysdeps/mips/pt-machine.h b/linuxthreads/sysdeps/mips/pt-machine.h index 31a3421..2bad942 100644 --- a/linuxthreads/sysdeps/mips/pt-machine.h +++ b/linuxthreads/sysdeps/mips/pt-machine.h @@ -23,7 +23,6 @@ #ifndef _PT_MACHINE_H #define _PT_MACHINE_H 1 -#include <sgidefs.h> #include <sys/tas.h> #ifndef PT_EI @@ -51,8 +50,6 @@ register char * stack_pointer __asm__ ("$29"); /* Compare-and-swap for semaphores. */ -#if (_MIPS_ISA >= _MIPS_ISA_MIPS2) - #define HAS_COMPARE_AND_SWAP PT_EI int __compare_and_swap (long int *p, long int oldval, long int newval) @@ -62,11 +59,14 @@ __compare_and_swap (long int *p, long int oldval, long int newval) __asm__ __volatile__ ("/* Inline compare & swap */\n" "1:\n\t" + ".set push\n\t" + ".set mips2\n\t" "ll %1,%5\n\t" "move %0,$0\n\t" "bne %1,%3,2f\n\t" "move %0,%4\n\t" "sc %0,%2\n\t" + ".set pop\n\t" "beqz %0,1b\n" "2:\n\t" "/* End compare & swap */" @@ -77,6 +77,4 @@ __compare_and_swap (long int *p, long int oldval, long int newval) return ret; } -#endif /* (_MIPS_ISA >= _MIPS_ISA_MIPS2) */ - #endif /* pt-machine.h */ |