about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-09-22 04:41:12 +0000
committerUlrich Drepper <drepper@redhat.com>2003-09-22 04:41:12 +0000
commit3a226d33012ec69a480ddb58940f2aaa3e24f059 (patch)
tree7f689de76474cebc1b46441eb6765f04995fad9c /nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
parent71451de2f1245b21ce3ba407068c453a866c03d6 (diff)
downloadglibc-3a226d33012ec69a480ddb58940f2aaa3e24f059.tar.gz
glibc-3a226d33012ec69a480ddb58940f2aaa3e24f059.tar.xz
glibc-3a226d33012ec69a480ddb58940f2aaa3e24f059.zip
Update.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/lowlevelmutex.S: Removed.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S: Adjust
	for new mutex implementation.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S:
	Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S:
	Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_barrier_wait.S: Likewise
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_broadcast.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S:
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S:
	Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: Likewise.
	* sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: Likewise.
	* sysdeps/unix/sysv/linux/i386/i486/pthread_cond_signal.S: Likewise.
	Don't use requeue.
	* sysdeps/unix/sysv/linux/x86_64/pthread_cond_signal.S: Likewise.
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S22
1 files changed, 11 insertions, 11 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
index 3942faf1ad..d8681ebe6b 100644
--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
@@ -44,14 +44,14 @@ __condvar_cleanup:
 	movq	%rdi, %r8
 	movq	8(%rdi), %rdi
 	movl	$1, %esi
+	xorl	%eax, %eax
 	LOCK
 #if cond_lock == 0
-	xaddl	%esi, (%rdi)
+	cmpxchgl %esi, (%rdi)
 #else
-	xaddl	%esi, cond_lock(%rdi)
+	cmpxchgl %esi, cond_lock(%rdi)
 #endif
-	testl	%esi, %esi
-	je	1f
+	jz	1f
 
 #if cond_lock != 0
 	addq	$cond_lock, %rdi
@@ -125,13 +125,13 @@ __pthread_cond_wait:
 
 	/* Get internal lock.  */
 	movl	$1, %esi
+	xorl	%eax, %eax
 	LOCK
 #if cond_lock == 0
-	xaddl	%esi, (%rdi)
+	cmpxchgl %esi, (%rdi)
 #else
-	xaddl	%esi, cond_lock(%rdi)
+	cmpxchgl %esi, cond_lock(%rdi)
 #endif
-	testl	%esi, %esi
 	jne	1f
 
 	/* Unlock the mutex.  */
@@ -186,14 +186,14 @@ __pthread_cond_wait:
 	/* Lock.  */
 	movq	8(%rsp), %rdi
 	movl	$1, %esi
+	xorl	%eax, %eax
 	LOCK
 #if cond_lock == 0
-	xaddl	%esi, (%rdi)
+	cmpxchgl %esi, (%rdi)
 #else
-	xaddl	%esi, cond_lock(%rdi)
+	cmpxchgl %esi, cond_lock(%rdi)
 #endif
-	testl	%esi, %esi
-	jne	5f
+	jnz	5f
 
 6:	movq	woken_seq(%rdi), %rax