diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-03-29 01:24:20 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-03-29 01:24:20 +0000 |
commit | dd731d53dcdbb24cd2a3f299a2ba4362505d3f55 (patch) | |
tree | 9db2cc09616d8073cc8c2888036e01cc60970d5b /nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S | |
parent | 10e717a20778341a2e8c7d11e3cb1cc90e943602 (diff) | |
download | glibc-dd731d53dcdbb24cd2a3f299a2ba4362505d3f55.tar.gz glibc-dd731d53dcdbb24cd2a3f299a2ba4362505d3f55.tar.xz glibc-dd731d53dcdbb24cd2a3f299a2ba4362505d3f55.zip |
Update.
2003-03-28 Kaz Kojima <kkojima@rr.iij4u.or.jp> * sysdeps/sh/bits/atomic.h (__arch_compare_and_exchange_val_8_acq): Return old value. Make asm output reg constraint earlyclobber. Renamed from... (__arch_compare_and_exchange_8_acq): ... this. (__arch_compare_and_exchange_val_16_acq): Return old value. Make asm output reg constraint earlyclobber. Renamed from... (__arch_compare_and_exchange_16_acq): ... this. (__arch_compare_and_exchange_val_32_acq): Return old value. Make asm output reg constraint earlyclobber. Renamed from... (__arch_compare_and_exchange_32_acq): ... this. (__arch_compare_and_exchange_val_64_acq): Renamed from... (__arch_compare_and_exchange_64_acq): ... this. (atomic_exchange_and_add): Use local variables and __arch_compare_and_exchange_val_64_acq. (atomic_add): Likewise. (atomic_add_negative, atomic_add_zero): Use local variables. * Makefile: Remove libmd5crypt goal.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S')
-rw-r--r-- | nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S index 60ff48f90a..89bdc76d37 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S @@ -59,6 +59,12 @@ pthread_rwlock_timedwrlock: tst r0, r0 bt 5f 3: + /* Check the value of the timeout parameter. */ + mov.l .L1g1, r1 + mov.l @(4,r9), r0 + cmp/hs r1, r0 + bt 19f + mov.l @(WRITERS_QUEUED,r8), r0 add #1, r0 mov.l r0, @(WRITERS_QUEUED,r8) @@ -106,7 +112,7 @@ pthread_rwlock_timedwrlock: /* Futex call. */ mov r15, r7 mov #FUTEX_WAIT, r5 - mov #0, r6 + mov.l @(WRITERS_WAKEUP,r8), r6 mov r8, r4 add #WRITERS_WAKEUP, r4 mov #SYS_futex, r3 @@ -128,22 +134,26 @@ pthread_rwlock_timedwrlock: bf 12f 13: - mov #-ETIMEDOUT, r0 - cmp/eq r0, r3 - bt 18f mov.l @(WRITERS_QUEUED,r8), r0 add #-1, r0 mov.l r0, @(WRITERS_QUEUED,r8) - mov #0, r0 - bra 2b - mov.l r0, @(WRITERS_WAKEUP,r8) + mov #-ETIMEDOUT, r0 + cmp/eq r0, r3 + bf 2b + +18: + bra 9f + mov #ETIMEDOUT, r3 + +19: + bra 9f + mov #EINVAL, r3 5: mov #0, r3 - stc gbr, r1 + stc gbr, r0 mov.w .Ltcboff,r2 - sub r2,r1 - mov.l @(8,r1),r0 + sub r2,r0 mov.l r0, @(WRITER,r8) 9: #if MUTEX == 0 @@ -184,7 +194,6 @@ pthread_rwlock_timedwrlock: stc gbr, r1 mov.w .Ltcboff,r2 sub r2,r1 - mov.l @(8,r1),r1 cmp/eq r1, r0 bf 3b bra 9b @@ -238,10 +247,6 @@ pthread_rwlock_timedwrlock: bra 17b mov #-ETIMEDOUT, r3 -18: - bra 9b - mov #ETIMEDOUT, r3 - .Ltcboff: .word TLS_PRE_TCB_SIZE .align 2 |