about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S32
1 files changed, 26 insertions, 6 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
index ff3960960d..080e66305e 100644
--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S
@@ -45,7 +45,6 @@ __pthread_rwlock_wrlock:
 	pushl	%ebx
 
 	xorl	%esi, %esi
-	xorl	%edx, %edx
 	movl	12(%esp), %ebx
 
 	/* Get the lock.  */
@@ -68,6 +67,8 @@ __pthread_rwlock_wrlock:
 3:	incl	WRITERS_QUEUED(%ebx)
 	je	4f
 
+	movl	WRITERS_WAKEUP(%ebx), %edx
+
 	LOCK
 #if MUTEX == 0
 	decl	(%ebx)
@@ -95,7 +96,6 @@ __pthread_rwlock_wrlock:
 	jne	12f
 
 13:	decl	WRITERS_QUEUED(%ebx)
-	movl	$0, WRITERS_WAKEUP(%ebx)
 	jmp	2b
 
 5:	xorl	%ecx, %ecx
@@ -115,7 +115,12 @@ __pthread_rwlock_wrlock:
 	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
 
@@ -124,7 +129,12 @@ __pthread_rwlock_wrlock:
 	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
 
@@ -132,11 +142,21 @@ __pthread_rwlock_wrlock:
 	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_wrlock,.-__pthread_rwlock_wrlock