Adjust for new mutex implementation.
authordrepper <drepper>
Sun, 21 Sep 2003 07:39:08 +0000 (07:39 +0000)
committerdrepper <drepper>
Sun, 21 Sep 2003 07:39:08 +0000 (07:39 +0000)
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_barrier_wait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_broadcast.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_timedwait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S
nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S

index c9b3d8b..08c6e91 100644 (file)
@@ -42,9 +42,11 @@ pthread_barrier_wait:
        movl    8(%esp), %ebx
 
        /* Get the mutex.  */
-       orl     $-1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
-       xaddl   %eax, MUTEX(%ebx)
+       cmpxchgl %edx, MUTEX(%ebx)
+       testl   %eax, %eax
        jne     1f
 
        /* One less waiter.  If this was the last one needed wake
@@ -63,8 +65,8 @@ pthread_barrier_wait:
 
        /* Release the mutex.  */
        LOCK
-       addl    $1, MUTEX(%ebx)
-       jng     6f
+       subl    $1, MUTEX(%ebx)
+       jne     6f
 
        /* Wait for the remaining threads.  The call will return immediately
           if the CURR_EVENT memory has meanwhile been changed.  */
@@ -110,8 +112,8 @@ pthread_barrier_wait:
           waking the waiting threads since otherwise a new thread might
           arrive and gets waken up, too.  */
        LOCK
-       addl    $1, MUTEX(%ebx)
-       jng     4f
+       subl    $1, MUTEX(%ebx)
+       jne     4f
 
 5:     orl     $-1, %eax               /* == PTHREAD_BARRIER_SERIAL_THREAD */
 
@@ -119,14 +121,14 @@ pthread_barrier_wait:
        ret
 
 1:     leal    MUTEX(%ebx), %ecx
-       call    __lll_lock_wait
+       call    __lll_mutex_lock_wait
        jmp     2b
 
 4:     leal    MUTEX(%ebx), %eax
-       call    __lll_unlock_wake
+       call    __lll_mutex_unlock_wake
        jmp     5b
 
 6:     leal    MUTEX(%ebx), %eax
-       call    __lll_unlock_wake
+       call    __lll_mutex_unlock_wake
        jmp     7b
        .size   pthread_barrier_wait,.-pthread_barrier_wait
index 06821ad..1049e0f 100644 (file)
@@ -51,12 +51,13 @@ __pthread_cond_broadcast:
        movl    16(%esp), %ebx
 
        /* Get internal lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        jne     1f
index f88d2d3..5799d8f 100644 (file)
@@ -56,12 +56,13 @@ __pthread_cond_timedwait:
        movl    28(%esp), %ebp
 
        /* Get internal lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -170,12 +171,13 @@ __pthread_cond_timedwait:
 .LcleanupEND:
 
        /* Lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        jne     5f
@@ -353,12 +355,13 @@ __condvar_tw_cleanup:
        movl    %eax, %esi
 
        /* Get internal lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        je      1f
index 1680b3d..db0428f 100644 (file)
@@ -53,12 +53,13 @@ __pthread_cond_wait:
        movl    16(%esp), %ebx
 
        /* Get internal lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -114,12 +115,13 @@ __pthread_cond_wait:
 .LcleanupEND:
 
        /* Lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        jne     5f
@@ -246,12 +248,13 @@ __condvar_w_cleanup:
        movl    %eax, %esi
 
        /* Get internal lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if cond_lock == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, cond_lock(%ebx)
+       cmpxchgl %edx, cond_lock(%ebx)
 #endif
        testl   %eax, %eax
        je      1f
@@ -270,7 +273,11 @@ __condvar_w_cleanup:
        adcl    $0, woken_seq+4(%ebx)
 
        LOCK
+#if cond_lock == 0
+       subl    $1, (%ebx)
+#else
        subl    $1, cond_lock(%ebx)
+#endif
        je      2f
 
 #if cond_lock == 0
index 81d9766..1c14943 100644 (file)
@@ -46,12 +46,13 @@ __pthread_rwlock_rdlock:
        movl    12(%esp), %ebx
 
        /* Get the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, MUTEX(%ebx)
+       cmpxchgl %edx, MUTEX(%ebx)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -85,12 +86,13 @@ __pthread_rwlock_rdlock:
        subl    $READERS_WAKEUP, %ebx
 
        /* Reget the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, MUTEX(%ebx)
+       cmpxchgl %edx, MUTEX(%ebx)
 #endif
        testl   %eax, %eax
        jne     12f
index 7d9aa93..409c046 100644 (file)
@@ -50,12 +50,13 @@ pthread_rwlock_timedrdlock:
        movl    32(%esp), %edi
 
        /* Get the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebp)
+       cmpxchgl %edx, (%ebp)
 #else
-       xaddl   %eax, MUTEX(%ebp)
+       cmpxchgl %edx, MUTEX(%ebp)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -114,22 +115,23 @@ pthread_rwlock_timedrdlock:
        leal    READERS_WAKEUP(%ebp), %ebx
        movl    $SYS_futex, %eax
        ENTER_KERNEL
-       movl    %eax, %edx
+       movl    %eax, %ecx
 17:
 
        /* Reget the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebp)
+       cmpxchgl %edx, (%ebp)
 #else
-       xaddl   %eax, MUTEX(%ebp)
+       cmpxchgl %edx, MUTEX(%ebp)
 #endif
        testl   %eax, %eax
        jne     12f
 
 13:    subl    $1, READERS_QUEUED(%ebp)
-       cmpl    $-ETIMEDOUT, %edx
+       cmpl    $-ETIMEDOUT, %ecx
        jne     2b
 
 18:    movl    $ETIMEDOUT, %ecx
@@ -207,7 +209,7 @@ pthread_rwlock_timedrdlock:
        call    __lll_mutex_lock_wait
        jmp     13b
 
-16:    movl    $-ETIMEDOUT, %edx
+16:    movl    $-ETIMEDOUT, %ecx
        jmp     17b
 
 19:    movl    $EINVAL, %ecx
index 4a14445..00d9906 100644 (file)
@@ -50,12 +50,13 @@ pthread_rwlock_timedwrlock:
        movl    32(%esp), %edi
 
        /* Get the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebp)
+       cmpxchgl %edx, (%ebp)
 #else
-       xaddl   %eax, MUTEX(%ebp)
+       cmpxchgl %edx, MUTEX(%ebp)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -112,22 +113,23 @@ pthread_rwlock_timedwrlock:
        leal    WRITERS_WAKEUP(%ebp), %ebx
        movl    $SYS_futex, %eax
        ENTER_KERNEL
-       movl    %eax, %edx
+       movl    %eax, %ecx
 17:
 
        /* Reget the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebp)
+       cmpxchgl %edx, (%ebp)
 #else
-       xaddl   %eax, MUTEX(%ebp)
+       cmpxchgl %edx, MUTEX(%ebp)
 #endif
        testl   %eax, %eax
        jne     12f
 
 13:    subl    $1, WRITERS_QUEUED(%ebp)
-       cmpl    $-ETIMEDOUT, %edx
+       cmpl    $-ETIMEDOUT, %ecx
        jne     2b
 
 18:    movl    $ETIMEDOUT, %ecx
@@ -200,7 +202,7 @@ pthread_rwlock_timedwrlock:
        call    __lll_mutex_lock_wait
        jmp     13b
 
-16:    movl    $-ETIMEDOUT, %edx
+16:    movl    $-ETIMEDOUT, %ecx
        jmp     17b
 
 19:    movl    $EINVAL, %ecx
index 35f61bf..839a5eb 100644 (file)
@@ -44,12 +44,13 @@ __pthread_rwlock_unlock:
        movl    12(%esp), %edi
 
        /* Get the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%edi)
+       cmpxchgl %edx, (%edi)
 #else
-       xaddl   %eax, MUTEX(%edi)
+       cmpxchgl %edx, MUTEX(%edi)
 #endif
        testl   %eax, %eax
        jne     1f
index 28c24ba..89ad6a3 100644 (file)
@@ -46,12 +46,13 @@ __pthread_rwlock_wrlock:
        movl    12(%esp), %ebx
 
        /* Get the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, MUTEX(%ebx)
+       cmpxchgl %edx, MUTEX(%ebx)
 #endif
        testl   %eax, %eax
        jne     1f
@@ -83,12 +84,13 @@ __pthread_rwlock_wrlock:
        subl    $WRITERS_WAKEUP, %ebx
 
        /* Reget the lock.  */
-       movl    $1, %eax
+       movl    $1, %edx
+       xorl    %eax, %eax
        LOCK
 #if MUTEX == 0
-       xaddl   %eax, (%ebx)
+       cmpxchgl %edx, (%ebx)
 #else
-       xaddl   %eax, MUTEX(%ebx)
+       cmpxchgl %edx, MUTEX(%ebx)
 #endif
        testl   %eax, %eax
        jne     12f