summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.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_cond_timedwait.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_cond_timedwait.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S15
1 files changed, 9 insertions, 6 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
index 6ad987d005..5de20dd799 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_cond_timedwait.S
@@ -58,6 +58,10 @@ __pthread_cond_timedwait:
bra 1f
nop
2:
+ /* Store the reference to the mutex. If there is already a
+ different value in there this is a bad user bug. */
+ mov.l r9, @(dep_mutex,r8)
+
/* Unlock the mutex. */
mov.l .Lmunlock1, r1
bsrf r1
@@ -117,12 +121,11 @@ __pthread_cond_timedwait:
bra 3f
nop
4:
- mov r15, r4
mov.l .Lenable1, r1
bsrf r1
- add #8, r4
-
+ nop
.Lenable1b:
+ mov.l r0, @(8,r15)
/* Get current time. */
mov r15, r4
@@ -258,7 +261,7 @@ __pthread_cond_timedwait:
mov r9, r4
mov.l .Lmlocki1, r1
bsrf r1
- mov #0, r5
+ nop
.Lmlocki1b:
/* We return the result of the mutex_lock operation if it failed. */
@@ -293,13 +296,13 @@ __pthread_cond_timedwait:
.Lccpush1:
.long __pthread_cleanup_push-.Lccpush1b
.Lenable1:
- .long __pthread_enable_asynccancel_2-.Lenable1b
+ .long __pthread_enable_asynccancel-.Lenable1b
.Ldisable1:
.long __pthread_disable_asynccancel-.Ldisable1b
.Lcpop1:
.long __pthread_cleanup_pop-.Lcpop1b
.Lmlocki1:
- .long __pthread_mutex_lock_internal-.Lmlocki1b
+ .long __pthread_mutex_cond_lock-.Lmlocki1b
.L1g:
.long 1000000000