summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-05-29 05:38:43 +0000
committerUlrich Drepper <drepper@redhat.com>2003-05-29 05:38:43 +0000
commitea2630c63292c4c376c392dcbc6625a6aefa0d1e (patch)
tree7b2cfc0e31180b1de468f82bc1fa98ff0fb9b392 /nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
parent5a77f1501d9031c0fd8bad1d5a04b0379a99c029 (diff)
Update.
2003-05-28 Kaz Kojima <kkojima@rr.iij4u.or.jp> * sysdeps/sh/tcb-offsets.sym: Define MUTEX_FUTEX. * sysdeps/unix/sysv/linux/sh/bits/pthreadtypes.h (pthread_cond_t): Add __mutex field. * sysdeps/unix/sysv/linux/sh/lowlevellock.h (SYSCALL_WITH_INST_PAD): Define. (lll_futex_wait, lll_futex_wake): Define. * sysdeps/unix/sysv/linux/sh/sh4/lowlevellock.h: New file. * sysdeps/unix/sysv/linux/sh/pthread_cond_broadcast.S: Try using FUTEX_REQUEUE instead of FUTEX_WAIT. * sysdeps/unix/sysv/linux/sh/pthread_cond_signal.S: Likewise. * sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S: Remember mutex which was used in condvar structure. Call __pthread_mutex_cond_lock instead of __pthread_mutex_lock_internal. * sysdeps/unix/sysv/linux/sh/pthread_cond_wait.S: Likewise. * sysdeps/unix/sysv/linux/sh/pthread_rwlock_rdlock.S: Don't include tcb-offsets.h. Read wakeup value in locked region. Use the value of gbr register as THREAD_ID. * sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S: Likewise. * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S: Likewise. * sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S: Likewise. * sysdeps/unix/sysv/linux/sh/sem_trywait.S: Remove futex related macros.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S13
1 files changed, 5 insertions, 8 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
index 1456292a73..b923c8846b 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_wrlock.S
@@ -18,7 +18,6 @@
#include <sysdep.h>
#include <lowlevelrwlock.h>
-#include <tcb-offsets.h>
#include <pthread-errnos.h>
#include "lowlevel-atomic.h"
@@ -34,6 +33,7 @@
.align 5
__pthread_rwlock_wrlock:
mov.l r12, @-r15
+ mov.l r9, @-r15
mov.l r8, @-r15
sts.l pr, @-r15
mov r4, r8
@@ -61,6 +61,8 @@ __pthread_rwlock_wrlock:
tst r0, r0
bt 4f
+ mov.l @(WRITERS_WAKEUP,r8), r9
+
#if MUTEX == 0
DEC (@r8, r2)
#else
@@ -72,7 +74,7 @@ __pthread_rwlock_wrlock:
mov r8, r4
add #WRITERS_WAKEUP, r4
mov #FUTEX_WAIT, r5
- mov.l @(WRITERS_WAKEUP,r8), r6
+ mov r9, r6
mov #0, r7
mov #SYS_futex, r3
extu.b r3, r3
@@ -97,8 +99,6 @@ __pthread_rwlock_wrlock:
5:
mov #0, r3
stc gbr, r0
- mov.w .Ltcboff,r2
- sub r2,r0
mov.l r0, @(WRITER,r8)
9:
#if MUTEX == 0
@@ -111,6 +111,7 @@ __pthread_rwlock_wrlock:
7:
lds.l @r15+, pr
mov.l @r15+, r8
+ mov.l @r15+, r9
mov.l @r15+, r12
rts
mov r3, r0
@@ -129,8 +130,6 @@ __pthread_rwlock_wrlock:
nop
14:
stc gbr, r1
- mov.w .Ltcboff,r2
- sub r2,r1
cmp/eq r1, r0
bf 3b
bra 9b
@@ -179,8 +178,6 @@ __pthread_rwlock_wrlock:
bra 13b
nop
-.Ltcboff:
- .word TLS_PRE_TCB_SIZE
.align 2
.Lwait4:
.long __lll_mutex_lock_wait-.Lwait4b