mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 19:00:07 +00:00
* 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:
parent
7d0878cc83
commit
100a7100a7
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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>
|
||||
|
@ -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__
|
||||
|
Loading…
Reference in New Issue
Block a user