about summary refs log tree commit diff
path: root/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
diff options
context:
space:
mode:
Diffstat (limited to 'nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S')
-rw-r--r--nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S17
1 files changed, 8 insertions, 9 deletions
diff --git a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
index b43b576ef6..633a14b1aa 100644
--- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
+++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedrdlock.S
@@ -44,13 +44,13 @@ pthread_rwlock_timedrdlock:
 	mov	r5, r9
 
 	/* Get the lock.  */
-	mov	#1, r3
+	mov	#0, r3
+	mov	#1, r4
 #if MUTEX == 0
-	XADD	(r3, @r4, r2)
+	CMPXCHG (r3, @r8, r4, r2)
 #else
-	XADD	(r3, @(MUTEX,r4), r2)
+	CMPXCHG (r3, @(MUTEX,r8), r4, r2)
 #endif
-	tst	r2, r2
 	bf	1f
 2:
 	mov.l	@(WRITER,r8), r0
@@ -129,14 +129,13 @@ pthread_rwlock_timedrdlock:
 
 17:
 	/* Reget the lock.  */
-	mov	r8, r4
-	mov	#1, r5
+	mov	#0, r5
+	mov	#1, r4
 #if MUTEX == 0
-	XADD	(r5, @r4, r2)
+	CMPXCHG (r5, @r8, r4, r2)
 #else
-	XADD	(r5, @(MUTEX,r4), r2)
+	CMPXCHG (r5, @(MUTEX,r8), r4, r2)
 #endif
-	tst	r2, r2
 	bf	12f
 
 13: