diff options
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 | 17 |
1 files changed, 8 insertions, 9 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 14008279e3..29e29b6f65 100644 --- a/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S +++ b/nptl/sysdeps/unix/sysv/linux/sh/pthread_rwlock_timedwrlock.S @@ -44,13 +44,13 @@ pthread_rwlock_timedwrlock: 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 @@ -126,14 +126,13 @@ pthread_rwlock_timedwrlock: 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: |