Change main futex to use private operations if possible.
authordrepper <drepper>
Sun, 27 May 2007 18:55:56 +0000 (18:55 +0000)
committerdrepper <drepper>
Sun, 27 May 2007 18:55:56 +0000 (18:55 +0000)
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 db0639d..763c14b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -77,8 +77,20 @@ __pthread_rwlock_rdlock:
 #endif
        jne     10f
 
-11:    addl    $READERS_WAKEUP, %ebx
-       movl    %esi, %ecx      /* movl $FUTEX_WAIT, %ecx */
+11:
+#if __ASSUME_PRIVATE_FUTEX
+       movl    $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx
+       xorl    PSHARED(%ebx), %ecx
+#else
+# if FUTEX_WAIT == 0
+       movl    PSHARED(%ebx), %ecx
+# else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PSHARED(%ebx), %ecx
+# endif
+       xorl    %gs:PRIVATE_FUTEX, %ecx
+#endif
+       addl    $READERS_WAKEUP, %ebx
        movl    $SYS_futex, %eax
        ENTER_KERNEL
 
index eb5665b..a6d3db5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -108,8 +108,20 @@ pthread_rwlock_timedrdlock:
        /* Futex call.  */
        movl    %ecx, (%esp)    /* Store relative timeout.  */
        movl    %edx, 4(%esp)
+
        movl    %esi, %edx
-       xorl    %ecx, %ecx      /* movl $FUTEX_WAIT, %ecx */
+#if __ASSUME_PRIVATE_FUTEX
+       movl    $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx
+       xorl    PSHARED(%ebp), %ecx
+#else
+# if FUTEX_WAIT == 0
+       movl    PSHARED(%ebp), %ecx
+# else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PSHARED(%ebp), %ecx
+# endif
+       xorl    %gs:PRIVATE_FUTEX, %ecx
+#endif
        movl    %esp, %esi
        leal    READERS_WAKEUP(%ebp), %ebx
        movl    $SYS_futex, %eax
index d9db77b..6c6e2fa 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -106,8 +106,20 @@ pthread_rwlock_timedwrlock:
        /* Futex call.  */
        movl    %ecx, (%esp)    /* Store relative timeout.  */
        movl    %edx, 4(%esp)
+
        movl    %esi, %edx
-       xorl    %ecx, %ecx      /* movl $FUTEX_WAIT, %ecx */
+#if __ASSUME_PRIVATE_FUTEX
+       movl    $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx
+       xorl    PSHARED(%ebp), %ecx
+#else
+# if FUTEX_WAIT == 0
+       movl    PSHARED(%ebp), %ecx
+# else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PSHARED(%ebp), %ecx
+# endif
+       xorl    %gs:PRIVATE_FUTEX, %ecx
+#endif
        movl    %esp, %esi
        leal    WRITERS_WAKEUP(%ebp), %ebx
        movl    $SYS_futex, %eax
index 64aac32..122ac76 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -61,9 +61,8 @@ __pthread_rwlock_unlock:
 
 5:     movl    $0, WRITER(%edi)
 
-       movl    $1, %ecx
+       movl    $1, %edx
        leal    WRITERS_WAKEUP(%edi), %ebx
-       movl    %ecx, %edx
        cmpl    $0, WRITERS_QUEUED(%edi)
        jne     0f
 
@@ -83,7 +82,16 @@ __pthread_rwlock_unlock:
 #endif
        jne     7f
 
-8:     movl    $SYS_futex, %eax
+8:
+#if __ASSUME_PRIVATE_FUTEX
+       movl    $FUTEX_PRIVATE_FLAG|FUTEX_WAKE, %ecx
+       xorl    PSHARED(%edi), %ecx
+#else
+       movl    $FUTEX_WAKE, %ecx
+       orl     PSHARED(%edi), %ecx
+       xorl    %gs:PRIVATE_FUTEX, %ecx
+#endif
+       movl    $SYS_futex, %eax
        ENTER_KERNEL
 
        xorl    %eax, %eax
index ea9cc17..9083419 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2007 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
 
@@ -75,8 +75,20 @@ __pthread_rwlock_wrlock:
 #endif
        jne     10f
 
-11:    addl    $WRITERS_WAKEUP, %ebx
-       movl    %esi, %ecx      /* movl $FUTEX_WAIT, %ecx */
+11:
+#if __ASSUME_PRIVATE_FUTEX
+       movl    $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx
+       xorl    PSHARED(%ebx), %ecx
+#else
+# if FUTEX_WAIT == 0
+       movl    PSHARED(%ebx), %ecx
+# else
+       movl    $FUTEX_WAIT, %ecx
+       orl     PSHARED(%ebx), %ecx
+# endif
+       xorl    %gs:PRIVATE_FUTEX, %ecx
+#endif
+       addl    $WRITERS_WAKEUP, %ebx
        movl    $SYS_futex, %eax
        ENTER_KERNEL