* 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.
This commit is contained in:
Roland McGrath 2003-03-20 09:51:17 +00:00
parent 7d0878cc83
commit 100a7100a7
5 changed files with 23 additions and 10 deletions

View 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.

View 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;
}

View 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)

View File

@ -48,7 +48,9 @@ typedef struct
#endif
} tcbhead_t;
# ifndef __s390x__
# define TLS_MULTIPLE_THREADS_IN_TCB 1
# endif
#else /* __ASSEMBLER__ */
# include <tcb-offsets.h>

View 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__