]> sourceware.org Git - glibc.git/blobdiff - nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S
Update.
[glibc.git] / nptl / sysdeps / unix / sysv / linux / x86_64 / pthread_rwlock_rdlock.S
index 0fd093e7dd95744b645a2fe1147a0d6124f88d7c..43c8cae34c1016406ad5e12fb1f3173349927daf 100644 (file)
@@ -43,14 +43,14 @@ __pthread_rwlock_rdlock:
 
        /* Get the lock.  */
        movl    $1, %esi
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %esi, (%rdi)
+       cmpxchgl %esi, (%rdi)
 #else
-       xaddl   %esi, MUTEX(%rdi)
+       cmpxchgl %esi, MUTEX(%rdi)
 #endif
-       testl   %esi, %esi
-       jne     1f
+       jnz     1f
 
 2:     movl    WRITER(%rdi), %eax
        testl   %eax, %eax
@@ -82,14 +82,14 @@ __pthread_rwlock_rdlock:
 
        /* Reget the lock.  */
        movl    $1, %esi
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %esi, (%rdi)
+       cmpxchgl %esi, (%rdi)
 #else
-       xaddl   %esi, MUTEX(%rdi)
+       cmpxchgl %esi, MUTEX(%rdi)
 #endif
-       testl   %esi, %esi
-       jne     12f
+       jnz     12f
 
 13:    decl    READERS_QUEUED(%rdi)
        jmp     2b
This page took 0.030681 seconds and 5 git commands to generate.