summaryrefslogtreecommitdiff
path: root/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-02-24 09:23:15 +0000
committerUlrich Drepper <drepper@redhat.com>2003-02-24 09:23:15 +0000
commit18a535792b7a63721a123e152266c4b8cf1fae8e (patch)
treeb86a475d52a5cade9e9820808a7d8f165cf081aa /nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
parent3724f268b15bdbd322cda97f88a965a68f2fd3ef (diff)
Update.
* sysdeps/pthread/pthread_rwlock_rdlock.c: Likewise. * sysdeps/pthread/pthread_rwlock_timedrdlock.c: Likewise. * sysdeps/pthread/pthread_rwlock_timedwrlock.c: Likewise. * sysdeps/pthread/pthread_rwlock_unlock.c: Likewise. * sysdeps/pthread/pthread_rwlock_wrlock.c: Likewise.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S33
1 files changed, 26 insertions, 7 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
index 47ae4fa35a..f8f2e06b18 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
@@ -45,7 +45,6 @@ __pthread_rwlock_rdlock:
pushl %ebx
xorl %esi, %esi
- xorl %edx, %edx
movl 12(%esp), %ebx
/* Get the lock. */
@@ -70,6 +69,8 @@ __pthread_rwlock_rdlock:
3: incl READERS_QUEUED(%ebx)
je 4f
+ movl READERS_WAKEUP(%ebx), %edx
+
LOCK
#if MUTEX == 0
decl (%ebx)
@@ -97,8 +98,6 @@ __pthread_rwlock_rdlock:
jne 12f
13: decl READERS_QUEUED(%ebx)
- jne 2b
- movl $0, READERS_WAKEUP(%ebx)
jmp 2b
5: xorl %ecx, %ecx
@@ -118,7 +117,12 @@ __pthread_rwlock_rdlock:
popl %esi
ret
-1: movl %ebx, %ecx
+1:
+#if MUTEX == 0
+ movl %ebx, %ecx
+#else
+ leal MUTEX(%ebx), %ecx
+#endif
call __lll_mutex_lock_wait
jmp 2b
@@ -128,7 +132,12 @@ __pthread_rwlock_rdlock:
movl $EDEADLK, %ecx
jmp 9b
-6: movl %ebx, %eax
+6:
+#if MUTEX == 0
+ movl %ebx, %eax
+#else
+ leal MUTEX(%ebx), %eax
+#endif
call __lll_mutex_unlock_wake
jmp 7b
@@ -142,11 +151,21 @@ __pthread_rwlock_rdlock:
movl $EAGAIN, %ecx
jmp 9b
-10: movl %ebx, %eax
+10:
+#if MUTEX == 0
+ movl %ebx, %eax
+#else
+ leal MUTEX(%ebx), %eax
+#endif
call __lll_mutex_unlock_wake
jmp 11b
-12: movl %ebx, %ecx
+12:
+#if MUTEX == 0
+ movl %ebx, %ecx
+#else
+ leal MUTEX(%ebx), %ecx
+#endif
call __lll_mutex_lock_wait
jmp 13b
.size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock