* sysdeps/s390/pthread_spin_lock.c (pthread_spin_lock): Use type
authorRoland McGrath <roland@gnu.org>
Thu, 20 Mar 2003 09:51:17 +0000 (09:51 +0000)
committerRoland McGrath <roland@gnu.org>
Thu, 20 Mar 2003 09:51:17 +0000 (09:51 +0000)
int for variable OLDVAL and correct inline assembler contraint.
* sysdeps/s390/pthread_spin_trylock.c (pthread_spin_trylock): Use
type int for variable OLD.

* sysdeps/s390/tls.h (TLS_MULTIPLE_THREADS_IN_TCB): Define it
only for s390-32.
* sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
(SINGLE_THREAD_P): Use global variable __local_multiple_threads
instead of multiple_threads field in the TCB.

nptl/ChangeLog
nptl/sysdeps/s390/pthread_spin_lock.c
nptl/sysdeps/s390/pthread_spin_trylock.c
nptl/sysdeps/s390/tls.h
nptl/sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h

index ccdc2da..36361c6 100644 (file)
@@ -1,3 +1,16 @@
+2003-03-20  Martin Schwidefsky  <sky@mschwid3.boeblingen.de.ibm.com>
+
+       * sysdeps/s390/pthread_spin_lock.c (pthread_spin_lock): Use type
+       int for variable OLDVAL and correct inline assembler contraint.
+       * sysdeps/s390/pthread_spin_trylock.c (pthread_spin_trylock): Use
+       type int for variable OLD.
+
+       * sysdeps/s390/tls.h (TLS_MULTIPLE_THREADS_IN_TCB): Define it
+       only for s390-32.
+       * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h
+       (SINGLE_THREAD_P): Use global variable __local_multiple_threads
+       instead of multiple_threads field in the TCB.
+
 2003-03-19  Ulrich Drepper  <drepper@redhat.com>
 
        * sysdeps/i386/i686/bits/atomic.h: Removed.
index 7d0067b..f0fddf4 100644 (file)
@@ -23,12 +23,12 @@ int
 pthread_spin_lock (lock)
      pthread_spinlock_t *lock;
 {
-  unsigned long int oldval;
+  int oldval;
 
   __asm __volatile ("0: lhi %0,0\n"
                    "   cs  %0,%2,%1\n"
                    "   jl  0b"
-                   : "=d" (oldval), "=Q" (*lock)
+                   : "=&d" (oldval), "=Q" (*lock)
                    : "d" (1), "m" (*lock) : "cc" );
   return 0;
 }
index 8ed0a36..0153b65 100644 (file)
@@ -24,7 +24,7 @@ int
 pthread_spin_trylock (lock)
      pthread_spinlock_t *lock;
 {
-  unsigned long int old;
+  int old;
 
   __asm __volatile ("cs %0,%3,%1"
                    : "=d" (old), "=Q" (*lock)
index 4151f7f..3f31823 100644 (file)
@@ -48,7 +48,9 @@ typedef struct
 #endif
 } tcbhead_t;
 
-# define TLS_MULTIPLE_THREADS_IN_TCB 1
+# ifndef __s390x__
+#  define TLS_MULTIPLE_THREADS_IN_TCB 1
+# endif
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 5a3ae51..c07c044 100644 (file)
@@ -79,15 +79,13 @@ L(pseudo_end):
 #define LM_5           lmg %r2,%r5,16+160(%r15);
 
 # ifndef __ASSEMBLER__
+extern int __local_multiple_threads attribute_hidden;
 #  define SINGLE_THREAD_P \
-  __builtin_expect (THREAD_GETMEM (THREAD_SELF,                                      \
-                                  header.multiple_threads) == 0, 1)
+  __builtin_expect (__local_multiple_threads == 0, 1)
 # else
 #  define SINGLE_THREAD_P \
-       ear     %r1,%a0;                                                      \
-       sllg    %r1,%r1,32;                                                   \
-       ear     %r1,%a1;                                                      \
-       icm     %r1,15,MULTIPLE_THREADS_OFFSET(%r1);
+       larl    %r1,__local_multiple_threads;                                 \
+       icm     %r0,15,0(%r1);
 # endif
 
 #elif !defined __ASSEMBLER__