From patchwork Tue Mar 18 00:01:31 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andi Kleen X-Patchwork-Id: 134 Return-Path: X-Original-To: siddhesh@wilcox.dreamhost.com Delivered-To: siddhesh@wilcox.dreamhost.com Received: from homiemail-mx23.g.dreamhost.com (caibbdcaabja.dreamhost.com [208.113.200.190]) by wilcox.dreamhost.com (Postfix) with ESMTP id 36C05360084 for ; Mon, 17 Mar 2014 17:02:35 -0700 (PDT) Received: by homiemail-mx23.g.dreamhost.com (Postfix, from userid 14307373) id A3A4061C7962D; Mon, 17 Mar 2014 17:02:35 -0700 (PDT) X-Original-To: glibc@patchwork.siddhesh.in Delivered-To: x14307373@homiemail-mx23.g.dreamhost.com Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by homiemail-mx23.g.dreamhost.com (Postfix) with ESMTPS id 7DB9B61C74864 for ; Mon, 17 Mar 2014 17:02:35 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=o7SJUP2J1gtK4DHjxpyve6nFlE6JN1t YUAgxLYG16YHr80f9kdo2QPP31yIDzzh4/s+KmhTubrJLHDlj7KE4TKI0HDHfPy/ V5fm1KIvbZTErVBQU1k35Qa+jjZjKgN21m4A6MRsibDgw/ATpu0hzIkKSLFZ/zr4 fjLkU5ulgkDI= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=nkpbs/5zbUi8RuDpcMjqlCCLKB0=; b=fQ2K6 v6UsCvTip/v1+uZAeHpyQnAP2aRS9/w44H2CGNevAIu7ultMgW/B0IwUDiRQazYl F/34xqzHFZxnD56B4Ieq8ksfw5+JFuR85lt7TI2b5A/Ev2BdEyyxtpKN44fTgjEc JqSqFrNFb4E2B0+xsYBUPRZs830+ovvPrV/8TA= Received: (qmail 20183 invoked by alias); 18 Mar 2014 00:02:30 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 20097 invoked by uid 89); 18 Mar 2014 00:02:29 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL, BAYES_00, LOTS_OF_MONEY, T_RP_MATCHES_RCVD autolearn=no version=3.3.2 X-HELO: mga02.intel.com X-ExtLoop1: 1 From: Andi Kleen To: libc-alpha@sourceware.org Cc: Andi Kleen Subject: [PATCH 2/2] Remove x86 assembler rwlock code Date: Mon, 17 Mar 2014 17:01:31 -0700 Message-Id: <1395100891-22307-2-git-send-email-andi@firstfloor.org> In-Reply-To: <1395100891-22307-1-git-send-email-andi@firstfloor.org> References: <1395100891-22307-1-git-send-email-andi@firstfloor.org> X-DH-Original-To: glibc@patchwork.siddhesh.in From: Andi Kleen With the recent tuning the C version of rwlocks is basically the same performance as the x86 assembler version for uncontended locks (with a a few cycles near the run-to-run variability). For others it should not matter anyways. So remove the assembler code and use the C version like other architectures. nptl/: 2014-03-17 Andi Kleen * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S: Remove. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S: dito. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S: dito. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S: dito. * sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S: dito. * sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S: dito. * sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S: dito. * sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S: dito. * sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S: dito. * sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S: dito. * sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S: dito. * sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S: dito. * sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S: dito. * sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S: dito. * sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S: dito. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S: dito. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S: dito. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S: dito. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S: dito. * sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S: dito. --- .../sysv/linux/i386/i486/pthread_rwlock_rdlock.S | 192 --------------- .../linux/i386/i486/pthread_rwlock_timedrdlock.S | 243 ------------------ .../linux/i386/i486/pthread_rwlock_timedwrlock.S | 236 ------------------ .../sysv/linux/i386/i486/pthread_rwlock_unlock.S | 151 ------------ .../sysv/linux/i386/i486/pthread_rwlock_wrlock.S | 183 -------------- .../sysv/linux/i386/i586/pthread_rwlock_rdlock.S | 19 -- .../linux/i386/i586/pthread_rwlock_timedrdlock.S | 19 -- .../linux/i386/i586/pthread_rwlock_timedwrlock.S | 19 -- .../sysv/linux/i386/i586/pthread_rwlock_unlock.S | 19 -- .../sysv/linux/i386/i586/pthread_rwlock_wrlock.S | 19 -- .../sysv/linux/i386/i686/pthread_rwlock_rdlock.S | 19 -- .../linux/i386/i686/pthread_rwlock_timedrdlock.S | 19 -- .../linux/i386/i686/pthread_rwlock_timedwrlock.S | 19 -- .../sysv/linux/i386/i686/pthread_rwlock_unlock.S | 20 -- .../sysv/linux/i386/i686/pthread_rwlock_wrlock.S | 19 -- .../unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S | 177 ------------- .../sysv/linux/x86_64/pthread_rwlock_timedrdlock.S | 274 --------------------- .../sysv/linux/x86_64/pthread_rwlock_timedwrlock.S | 266 -------------------- .../unix/sysv/linux/x86_64/pthread_rwlock_unlock.S | 126 ---------- .../unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S | 165 ------------- 20 files changed, 2204 deletions(-) delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S delete mode 100644 nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S deleted file mode 100644 index a81bc06..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_rdlock.S +++ /dev/null @@ -1,192 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - - .text - - .globl __pthread_rwlock_rdlock - .type __pthread_rwlock_rdlock,@function - .align 16 -__pthread_rwlock_rdlock: - cfi_startproc - pushl %esi - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - cfi_offset(%esi, -8) - cfi_offset(%ebx, -12) - - xorl %esi, %esi - movl 12(%esp), %ebx - - LIBC_PROBE (rdlock_entry, 1, %ebx) - - /* Get the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebx) -#else - cmpxchgl %edx, MUTEX(%ebx) -#endif - jnz 1f - -2: movl WRITER(%ebx), %eax - testl %eax, %eax - jne 14f - cmpl $0, WRITERS_QUEUED(%ebx) - je 5f - cmpb $0, FLAGS(%ebx) - je 5f - -3: addl $1, READERS_QUEUED(%ebx) - je 4f - - movl READERS_WAKEUP(%ebx), %edx - - LOCK -#if MUTEX == 0 - subl $1, (%ebx) -#else - subl $1, MUTEX(%ebx) -#endif - jne 10f - -11: -#ifdef __ASSUME_PRIVATE_FUTEX - movzbl PSHARED(%ebx), %ecx - xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx -#else - movzbl PSHARED(%ebx), %ecx -# if FUTEX_WAIT != 0 - orl $FUTEX_WAIT, %ecx -# endif - xorl %gs:PRIVATE_FUTEX, %ecx -#endif - addl $READERS_WAKEUP, %ebx - movl $SYS_futex, %eax - ENTER_KERNEL - - subl $READERS_WAKEUP, %ebx - - /* Reget the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebx) -#else - cmpxchgl %edx, MUTEX(%ebx) -#endif - jnz 12f - -13: subl $1, READERS_QUEUED(%ebx) - jmp 2b - -5: xorl %edx, %edx - addl $1, NR_READERS(%ebx) - je 8f -9: LOCK -#if MUTEX == 0 - subl $1, (%ebx) -#else - subl $1, MUTEX(%ebx) -#endif - jne 6f -7: - - movl %edx, %eax - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - ret - - cfi_adjust_cfa_offset(8) - cfi_offset(%esi, -8) - cfi_offset(%ebx, -12) -1: -#if MUTEX == 0 - movl %ebx, %edx -#else - leal MUTEX(%ebx), %edx -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_lock_wait - jmp 2b - -14: cmpl %gs:TID, %eax - jne 3b - /* Deadlock detected. */ - movl $EDEADLK, %edx - jmp 9b - -6: -#if MUTEX == 0 - movl %ebx, %eax -#else - leal MUTEX(%ebx), %eax -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_unlock_wake - jmp 7b - - /* Overflow. */ -8: subl $1, NR_READERS(%ebx) - movl $EAGAIN, %edx - jmp 9b - - /* Overflow. */ -4: subl $1, READERS_QUEUED(%ebx) - movl $EAGAIN, %edx - jmp 9b - -10: -#if MUTEX == 0 - movl %ebx, %eax -#else - leal MUTEX(%ebx), %eax -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_unlock_wake - jmp 11b - -12: -#if MUTEX == 0 - movl %ebx, %edx -#else - leal MUTEX(%ebx), %edx -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_lock_wait - jmp 13b - cfi_endproc - .size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock - -strong_alias (__pthread_rwlock_rdlock, pthread_rwlock_rdlock) -hidden_def (__pthread_rwlock_rdlock) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S deleted file mode 100644 index bc1001c..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedrdlock.S +++ /dev/null @@ -1,243 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - - .text - - .globl pthread_rwlock_timedrdlock - .type pthread_rwlock_timedrdlock,@function - .align 16 -pthread_rwlock_timedrdlock: - cfi_startproc - pushl %esi - cfi_adjust_cfa_offset(4) - pushl %edi - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %ebp - cfi_adjust_cfa_offset(4) - cfi_offset(%esi, -8) - cfi_offset(%edi, -12) - cfi_offset(%ebx, -16) - cfi_offset(%ebp, -20) - subl $8, %esp - cfi_adjust_cfa_offset(8) - - movl 28(%esp), %ebp - movl 32(%esp), %edi - - /* Get the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebp) -#else - cmpxchgl %edx, MUTEX(%ebp) -#endif - jnz 1f - -2: movl WRITER(%ebp), %eax - testl %eax, %eax - jne 14f - cmpl $0, WRITERS_QUEUED(%ebp) - je 5f - cmpb $0, FLAGS(%ebp) - je 5f - - /* Check the value of the timeout parameter. */ -3: cmpl $1000000000, 4(%edi) - jae 19f - - addl $1, READERS_QUEUED(%ebp) - je 4f - - movl READERS_WAKEUP(%ebp), %esi - - LOCK -#if MUTEX == 0 - subl $1, (%ebp) -#else - subl $1, MUTEX(%ebp) -#endif - jne 10f - - /* Get current time. */ -11: movl %esp, %ebx - xorl %ecx, %ecx - movl $__NR_gettimeofday, %eax - ENTER_KERNEL - - /* Compute relative timeout. */ - movl 4(%esp), %eax - movl $1000, %edx - mul %edx /* Milli seconds to nano seconds. */ - movl (%edi), %ecx - movl 4(%edi), %edx - subl (%esp), %ecx - subl %eax, %edx - jns 15f - addl $1000000000, %edx - subl $1, %ecx -15: testl %ecx, %ecx - js 16f /* Time is already up. */ - - /* Futex call. */ - movl %ecx, (%esp) /* Store relative timeout. */ - movl %edx, 4(%esp) - - movl %esi, %edx -#ifdef __ASSUME_PRIVATE_FUTEX - movzbl PSHARED(%ebp), %ecx - xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx -#else - movzbl PSHARED(%ebp), %ecx -# if FUTEX_WAIT != 0 - orl $FUTEX_WAIT, %ecx -# endif - xorl %gs:PRIVATE_FUTEX, %ecx -#endif - movl %esp, %esi - leal READERS_WAKEUP(%ebp), %ebx - movl $SYS_futex, %eax - ENTER_KERNEL - movl %eax, %esi -17: - - /* Reget the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebp) -#else - cmpxchgl %edx, MUTEX(%ebp) -#endif - jnz 12f - -13: subl $1, READERS_QUEUED(%ebp) - cmpl $-ETIMEDOUT, %esi - jne 2b - -18: movl $ETIMEDOUT, %edx - jmp 9f - - -5: xorl %edx, %edx - addl $1, NR_READERS(%ebp) - je 8f -9: LOCK -#if MUTEX == 0 - subl $1, (%ebp) -#else - subl $1, MUTEX(%ebp) -#endif - jne 6f - -7: movl %edx, %eax - - addl $8, %esp - cfi_adjust_cfa_offset(-8) - popl %ebp - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebp) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %edi - cfi_adjust_cfa_offset(-4) - cfi_restore(%edi) - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - ret - - cfi_adjust_cfa_offset(24) - cfi_offset(%esi, -8) - cfi_offset(%edi, -12) - cfi_offset(%ebx, -16) - cfi_offset(%ebp, -20) -1: -#if MUTEX == 0 - movl %ebp, %edx -#else - leal MUTEX(%ebp), %edx -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_lock_wait - jmp 2b - -14: cmpl %gs:TID, %eax - jne 3b - movl $EDEADLK, %edx - jmp 9b - -6: -#if MUTEX == 0 - movl %ebp, %eax -#else - leal MUTEX(%ebp), %eax -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_unlock_wake - jmp 7b - - /* Overflow. */ -8: subl $1, NR_READERS(%ebp) - movl $EAGAIN, %edx - jmp 9b - - /* Overflow. */ -4: subl $1, READERS_QUEUED(%ebp) - movl $EAGAIN, %edx - jmp 9b - -10: -#if MUTEX == 0 - movl %ebp, %eax -#else - leal MUTEX(%ebp), %eax -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_unlock_wake - jmp 11b - -12: -#if MUTEX == 0 - movl %ebp, %edx -#else - leal MUTEX(%ebp), %edx -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_lock_wait - jmp 13b - -16: movl $-ETIMEDOUT, %esi - jmp 17b - -19: movl $EINVAL, %edx - jmp 9b - cfi_endproc - .size pthread_rwlock_timedrdlock,.-pthread_rwlock_timedrdlock diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S deleted file mode 100644 index 9abba58..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_timedwrlock.S +++ /dev/null @@ -1,236 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - - .text - - .globl pthread_rwlock_timedwrlock - .type pthread_rwlock_timedwrlock,@function - .align 16 -pthread_rwlock_timedwrlock: - cfi_startproc - pushl %esi - cfi_adjust_cfa_offset(4) - pushl %edi - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %ebp - cfi_adjust_cfa_offset(4) - cfi_offset(%esi, -8) - cfi_offset(%edi, -12) - cfi_offset(%ebx, -16) - cfi_offset(%ebp, -20) - subl $8, %esp - cfi_adjust_cfa_offset(8) - - movl 28(%esp), %ebp - movl 32(%esp), %edi - - /* Get the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebp) -#else - cmpxchgl %edx, MUTEX(%ebp) -#endif - jnz 1f - -2: movl WRITER(%ebp), %eax - testl %eax, %eax - jne 14f - cmpl $0, NR_READERS(%ebp) - je 5f - - /* Check the value of the timeout parameter. */ -3: cmpl $1000000000, 4(%edi) - jae 19f - - addl $1, WRITERS_QUEUED(%ebp) - je 4f - - movl WRITERS_WAKEUP(%ebp), %esi - - LOCK -#if MUTEX == 0 - subl $1, (%ebp) -#else - subl $1, MUTEX(%ebp) -#endif - jne 10f - - /* Get current time. */ -11: movl %esp, %ebx - xorl %ecx, %ecx - movl $__NR_gettimeofday, %eax - ENTER_KERNEL - - /* Compute relative timeout. */ - movl 4(%esp), %eax - movl $1000, %edx - mul %edx /* Milli seconds to nano seconds. */ - movl (%edi), %ecx - movl 4(%edi), %edx - subl (%esp), %ecx - subl %eax, %edx - jns 15f - addl $1000000000, %edx - subl $1, %ecx -15: testl %ecx, %ecx - js 16f /* Time is already up. */ - - /* Futex call. */ - movl %ecx, (%esp) /* Store relative timeout. */ - movl %edx, 4(%esp) - - movl %esi, %edx -#ifdef __ASSUME_PRIVATE_FUTEX - movzbl PSHARED(%ebp), %ecx - xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx -#else - movzbl PSHARED(%ebp), %ecx -# if FUTEX_WAIT != 0 - orl $FUTEX_WAIT, %ecx -# endif - xorl %gs:PRIVATE_FUTEX, %ecx -#endif - movl %esp, %esi - leal WRITERS_WAKEUP(%ebp), %ebx - movl $SYS_futex, %eax - ENTER_KERNEL - movl %eax, %esi -17: - - /* Reget the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebp) -#else - cmpxchgl %edx, MUTEX(%ebp) -#endif - jnz 12f - -13: subl $1, WRITERS_QUEUED(%ebp) - cmpl $-ETIMEDOUT, %esi - jne 2b - -18: movl $ETIMEDOUT, %edx - jmp 9f - - -5: xorl %edx, %edx - movl %gs:TID, %eax - movl %eax, WRITER(%ebp) -9: LOCK -#if MUTEX == 0 - subl $1, (%ebp) -#else - subl $1, MUTEX(%ebp) -#endif - jne 6f - -7: movl %edx, %eax - - addl $8, %esp - cfi_adjust_cfa_offset(-8) - popl %ebp - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebp) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %edi - cfi_adjust_cfa_offset(-4) - cfi_restore(%edi) - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - ret - - cfi_adjust_cfa_offset(24) - cfi_offset(%esi, -8) - cfi_offset(%edi, -12) - cfi_offset(%ebx, -16) - cfi_offset(%ebp, -20) -1: -#if MUTEX == 0 - movl %ebp, %edx -#else - leal MUTEX(%ebp), %edx -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_lock_wait - jmp 2b - -14: cmpl %gs:TID, %eax - jne 3b -20: movl $EDEADLK, %edx - jmp 9b - -6: -#if MUTEX == 0 - movl %ebp, %eax -#else - leal MUTEX(%ebp), %eax -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_unlock_wake - jmp 7b - - /* Overflow. */ -4: subl $1, WRITERS_QUEUED(%ebp) - movl $EAGAIN, %edx - jmp 9b - -10: -#if MUTEX == 0 - movl %ebp, %eax -#else - leal MUTEX(%ebp), %eax -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_unlock_wake - jmp 11b - -12: -#if MUTEX == 0 - movl %ebp, %edx -#else - leal MUTEX(%ebp), %edx -#endif - movzbl PSHARED(%ebp), %ecx - call __lll_lock_wait - jmp 13b - -16: movl $-ETIMEDOUT, %esi - jmp 17b - -19: movl $EINVAL, %edx - jmp 9b - cfi_endproc - .size pthread_rwlock_timedwrlock,.-pthread_rwlock_timedwrlock diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S deleted file mode 100644 index 738c067..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_unlock.S +++ /dev/null @@ -1,151 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - - .text - - .globl __pthread_rwlock_unlock - .type __pthread_rwlock_unlock,@function - .align 16 -__pthread_rwlock_unlock: - cfi_startproc - pushl %ebx - cfi_adjust_cfa_offset(4) - pushl %edi - cfi_adjust_cfa_offset(4) - cfi_offset(%ebx, -8) - cfi_offset(%edi, -12) - - movl 12(%esp), %edi - - /* Get the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%edi) -#else - cmpxchgl %edx, MUTEX(%edi) -#endif - jnz 1f - -2: cmpl $0, WRITER(%edi) - jne 5f - subl $1, NR_READERS(%edi) - jnz 6f - -5: movl $0, WRITER(%edi) - - movl $1, %edx - leal WRITERS_WAKEUP(%edi), %ebx - cmpl $0, WRITERS_QUEUED(%edi) - jne 0f - - /* If also no readers waiting nothing to do. */ - cmpl $0, READERS_QUEUED(%edi) - je 6f - - movl $0x7fffffff, %edx - leal READERS_WAKEUP(%edi), %ebx - -0: addl $1, (%ebx) - LOCK -#if MUTEX == 0 - subl $1, (%edi) -#else - subl $1, MUTEX(%edi) -#endif - jne 7f - -8: -#ifdef __ASSUME_PRIVATE_FUTEX - movzbl PSHARED(%edi), %ecx - xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAKE, %ecx -#else - movzbl PSHARED(%edi), %ecx - orl $FUTEX_WAKE, %ecx - xorl %gs:PRIVATE_FUTEX, %ecx -#endif - movl $SYS_futex, %eax - ENTER_KERNEL - - xorl %eax, %eax - popl %edi - cfi_adjust_cfa_offset(-4) - cfi_restore(%edi) - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - ret - - cfi_adjust_cfa_offset(8) - cfi_offset(%ebx, -8) - cfi_offset(%edi, -12) - .align 16 -6: LOCK -#if MUTEX == 0 - subl $1, (%edi) -#else - subl $1, MUTEX(%edi) -#endif - jne 3f - -4: xorl %eax, %eax - popl %edi - popl %ebx - ret - -1: -#if MUTEX == 0 - movl %edi, %edx -#else - leal MUTEX(%edi), %edx -#endif - movzbl PSHARED(%edi), %ecx - call __lll_lock_wait - jmp 2b - -3: -#if MUTEX == 0 - movl %edi, %eax -#else - leal MUTEX(%edi), %eax -#endif - movzbl PSHARED(%edi), %ecx - call __lll_unlock_wake - jmp 4b - -7: -#if MUTEX == 0 - movl %edi, %eax -#else - leal MUTEX(%edi), %eax -#endif - movzbl PSHARED(%edi), %ecx - call __lll_unlock_wake - jmp 8b - cfi_endproc - .size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock - -strong_alias (__pthread_rwlock_unlock, pthread_rwlock_unlock) -hidden_def (__pthread_rwlock_unlock) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S deleted file mode 100644 index 8345cae..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_rwlock_wrlock.S +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - -#include - - .text - - .globl __pthread_rwlock_wrlock - .type __pthread_rwlock_wrlock,@function - .align 16 -__pthread_rwlock_wrlock: - cfi_startproc - pushl %esi - cfi_adjust_cfa_offset(4) - pushl %ebx - cfi_adjust_cfa_offset(4) - cfi_offset(%esi, -8) - cfi_offset(%ebx, -12) - - xorl %esi, %esi - movl 12(%esp), %ebx - - LIBC_PROBE (wrlock_entry, 1, %ebx) - - /* Get the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebx) -#else - cmpxchgl %edx, MUTEX(%ebx) -#endif - jnz 1f - -2: movl WRITER(%ebx), %eax - testl %eax, %eax - jne 14f - cmpl $0, NR_READERS(%ebx) - je 5f - -3: addl $1, WRITERS_QUEUED(%ebx) - je 4f - - movl WRITERS_WAKEUP(%ebx), %edx - - LOCK -#if MUTEX == 0 - subl $1, (%ebx) -#else - subl $1, MUTEX(%ebx) -#endif - jne 10f - -11: -#ifdef __ASSUME_PRIVATE_FUTEX - movzbl PSHARED(%ebx), %ecx - xorl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %ecx -#else - movzbl PSHARED(%ebx), %ecx -# if FUTEX_WAIT != 0 - orl $FUTEX_WAIT, %ecx -# endif - xorl %gs:PRIVATE_FUTEX, %ecx -#endif - addl $WRITERS_WAKEUP, %ebx - movl $SYS_futex, %eax - ENTER_KERNEL - - subl $WRITERS_WAKEUP, %ebx - - /* Reget the lock. */ - movl $1, %edx - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %edx, (%ebx) -#else - cmpxchgl %edx, MUTEX(%ebx) -#endif - jnz 12f - -13: subl $1, WRITERS_QUEUED(%ebx) - jmp 2b - -5: xorl %edx, %edx - movl %gs:TID, %eax - movl %eax, WRITER(%ebx) -9: LOCK -#if MUTEX == 0 - subl $1, (%ebx) -#else - subl $1, MUTEX(%ebx) -#endif - jne 6f -7: - - movl %edx, %eax - popl %ebx - cfi_adjust_cfa_offset(-4) - cfi_restore(%ebx) - popl %esi - cfi_adjust_cfa_offset(-4) - cfi_restore(%esi) - ret - - cfi_adjust_cfa_offset(8) - cfi_offset(%esi, -8) - cfi_offset(%ebx, -12) -1: -#if MUTEX == 0 - movl %ebx, %edx -#else - leal MUTEX(%ebx), %edx -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_lock_wait - jmp 2b - -14: cmpl %gs:TID , %eax - jne 3b - movl $EDEADLK, %edx - jmp 9b - -6: -#if MUTEX == 0 - movl %ebx, %eax -#else - leal MUTEX(%ebx), %eax -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_unlock_wake - jmp 7b - -4: subl $1, WRITERS_QUEUED(%ebx) - movl $EAGAIN, %edx - jmp 9b - -10: -#if MUTEX == 0 - movl %ebx, %eax -#else - leal MUTEX(%ebx), %eax -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_unlock_wake - jmp 11b - -12: -#if MUTEX == 0 - movl %ebx, %edx -#else - leal MUTEX(%ebx), %edx -#endif - movzbl PSHARED(%ebx), %ecx - call __lll_lock_wait - jmp 13b - cfi_endproc - .size __pthread_rwlock_wrlock,.-__pthread_rwlock_wrlock - -strong_alias (__pthread_rwlock_wrlock, pthread_rwlock_wrlock) -hidden_def (__pthread_rwlock_wrlock) diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S deleted file mode 100644 index 85127c7..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_rdlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_rdlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S deleted file mode 100644 index 5a843e5..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedrdlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_timedrdlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S deleted file mode 100644 index a8ca4cf..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_timedwrlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_timedwrlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S deleted file mode 100644 index 8018c8f..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_unlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_unlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S deleted file mode 100644 index 0b4cfa8..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i586/pthread_rwlock_wrlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_wrlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S deleted file mode 100644 index 85127c7..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_rdlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_rdlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S deleted file mode 100644 index 5a843e5..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedrdlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_timedrdlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S deleted file mode 100644 index a8ca4cf..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_timedwrlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_timedwrlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S deleted file mode 100644 index e52344b..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_unlock.S +++ /dev/null @@ -1,20 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#define HAVE_CMOV 1 -#include "../i486/pthread_rwlock_unlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S deleted file mode 100644 index 0b4cfa8..0000000 --- a/nptl/sysdeps/unix/sysv/linux/i386/i686/pthread_rwlock_wrlock.S +++ /dev/null @@ -1,19 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include "../i486/pthread_rwlock_wrlock.S" diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S deleted file mode 100644 index 3bbb4c7..0000000 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_rdlock.S +++ /dev/null @@ -1,177 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - .text - - .globl __pthread_rwlock_rdlock - .type __pthread_rwlock_rdlock,@function - .align 16 -__pthread_rwlock_rdlock: - cfi_startproc - - LIBC_PROBE (rdlock_entry, 1, %rdi) - - xorq %r10, %r10 - - /* Get the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 1f - -2: movl WRITER(%rdi), %eax - testl %eax, %eax - jne 14f - cmpl $0, WRITERS_QUEUED(%rdi) - je 5f - cmpl $0, FLAGS(%rdi) - je 5f - -3: incl READERS_QUEUED(%rdi) - je 4f - - movl READERS_WAKEUP(%rdi), %edx - - LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 10f - -11: -#ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%rdi), %esi -#else -# if FUTEX_WAIT == 0 - movl PSHARED(%rdi), %esi -# else - movl $FUTEX_WAIT, %esi - orl PSHARED(%rdi), %esi -# endif - xorl %fs:PRIVATE_FUTEX, %esi -#endif - addq $READERS_WAKEUP, %rdi - movl $SYS_futex, %eax - syscall - - subq $READERS_WAKEUP, %rdi - - /* Reget the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 12f - -13: decl READERS_QUEUED(%rdi) - jmp 2b - -5: xorl %edx, %edx - incl NR_READERS(%rdi) - je 8f -9: LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 6f -7: - - movq %rdx, %rax - retq - -1: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 2b - -14: cmpl %fs:TID, %eax - jne 3b - /* Deadlock detected. */ - movl $EDEADLK, %edx - jmp 9b - -6: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 7b - - /* Overflow. */ -8: decl NR_READERS(%rdi) - movl $EAGAIN, %edx - jmp 9b - - /* Overflow. */ -4: decl READERS_QUEUED(%rdi) - movl $EAGAIN, %edx - jmp 9b - -10: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 11b - -12: movl PSHARED(%rdi), %esi -#if MUTEX == 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 13b - cfi_endproc - .size __pthread_rwlock_rdlock,.-__pthread_rwlock_rdlock - -strong_alias (__pthread_rwlock_rdlock, pthread_rwlock_rdlock) -hidden_def (__pthread_rwlock_rdlock) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S deleted file mode 100644 index 40bcc04..0000000 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedrdlock.S +++ /dev/null @@ -1,274 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - .text - - .globl pthread_rwlock_timedrdlock - .type pthread_rwlock_timedrdlock,@function - .align 16 -pthread_rwlock_timedrdlock: - cfi_startproc - pushq %r12 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r12, 0) - pushq %r13 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r13, 0) -#ifdef __ASSUME_FUTEX_CLOCK_REALTIME -# define VALREG %edx -#else - pushq %r14 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r14, 0) - - subq $16, %rsp - cfi_adjust_cfa_offset(16) -# define VALREG %r14d -#endif - - movq %rdi, %r12 - movq %rsi, %r13 - - /* Get the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 1f - -2: movl WRITER(%r12), %eax - testl %eax, %eax - jne 14f - cmpl $0, WRITERS_QUEUED(%r12) - je 5f - cmpl $0, FLAGS(%r12) - je 5f - - /* Check the value of the timeout parameter. */ -3: cmpq $1000000000, 8(%r13) - jae 19f - - incl READERS_QUEUED(%r12) - je 4f - - movl READERS_WAKEUP(%r12), VALREG - - /* Unlock. */ - LOCK -#if MUTEX == 0 - decl (%r12) -#else - decl MUTEX(%r12) -#endif - jne 10f - -11: -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME -# ifdef PIC - cmpl $0, __have_futex_clock_realtime(%rip) -# else - cmpl $0, __have_futex_clock_realtime -# endif - je .Lreltmo -#endif - - cmpq $0, (%r13) - js 16f /* Time is already up. */ - - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi - xorl PSHARED(%r12), %esi - movq %r13, %r10 - movl $0xffffffff, %r9d -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - movl %r14d, %edx -#endif -21: leaq READERS_WAKEUP(%r12), %rdi - movl $SYS_futex, %eax - syscall - movq %rax, %rdx - -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .subsection 2 -.Lreltmo: - /* Get current time. */ - movq %rsp, %rdi - xorl %esi, %esi - /* This call works because we directly jump to a system call entry - which preserves all the registers. */ - call JUMPTARGET(__gettimeofday) - - /* Compute relative timeout. */ - movq 8(%rsp), %rax - movl $1000, %edi - mul %rdi /* Milli seconds to nano seconds. */ - movq (%r13), %rcx - movq 8(%r13), %rdi - subq (%rsp), %rcx - subq %rax, %rdi - jns 15f - addq $1000000000, %rdi - decq %rcx -15: testq %rcx, %rcx - js 16f /* Time is already up. */ - - /* Futex call. */ - movq %rcx, (%rsp) /* Store relative timeout. */ - movq %rdi, 8(%rsp) - -# ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%r12), %esi -# else -# if FUTEX_WAIT == 0 - movl PSHARED(%r12), %esi -# else - movl $FUTEX_WAIT, %esi - orl PSHARED(%r12), %esi -# endif - xorl %fs:PRIVATE_FUTEX, %esi -# endif - movq %rsp, %r10 - movl %r14d, %edx - - jmp 21b - .previous -#endif - -17: /* Reget the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%r12) -#else - cmpxchgl %esi, MUTEX(%r12) -#endif - jnz 12f - -13: decl READERS_QUEUED(%r12) - cmpq $-ETIMEDOUT, %rdx - jne 2b - -18: movl $ETIMEDOUT, %edx - jmp 9f - - -5: xorl %edx, %edx - incl NR_READERS(%r12) - je 8f -9: LOCK -#if MUTEX == 0 - decl (%r12) -#else - decl MUTEX(%r12) -#endif - jne 6f - -7: movq %rdx, %rax - -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - addq $16, %rsp - cfi_adjust_cfa_offset(-16) - popq %r14 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r14) -#endif - popq %r13 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r13) - popq %r12 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r12) - retq - -#ifdef __ASSUME_PRIVATE_FUTEX - cfi_adjust_cfa_offset(16) - cfi_rel_offset(%r12, 8) - cfi_rel_offset(%r13, 0) -#else - cfi_adjust_cfa_offset(40) - cfi_offset(%r12, -16) - cfi_offset(%r13, -24) - cfi_offset(%r14, -32) -#endif -1: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait - jmp 2b - -14: cmpl %fs:TID, %eax - jne 3b - movl $EDEADLK, %edx - jmp 9b - -6: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leal MUTEX(%r12), %rdi -#endif - callq __lll_unlock_wake - jmp 7b - - /* Overflow. */ -8: decl NR_READERS(%r12) - movl $EAGAIN, %edx - jmp 9b - - /* Overflow. */ -4: decl READERS_QUEUED(%r12) - movl $EAGAIN, %edx - jmp 9b - -10: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leaq MUTEX(%r12), %rdi -#endif - callq __lll_unlock_wake - jmp 11b - -12: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leaq MUTEX(%r12), %rdi -#endif - callq __lll_lock_wait - jmp 13b - -16: movq $-ETIMEDOUT, %rdx - jmp 17b - -19: movl $EINVAL, %edx - jmp 9b - cfi_endproc - .size pthread_rwlock_timedrdlock,.-pthread_rwlock_timedrdlock diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S deleted file mode 100644 index f57ef52..0000000 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_timedwrlock.S +++ /dev/null @@ -1,266 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include - - .text - - .globl pthread_rwlock_timedwrlock - .type pthread_rwlock_timedwrlock,@function - .align 16 -pthread_rwlock_timedwrlock: - cfi_startproc - pushq %r12 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r12, 0) - pushq %r13 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r13, 0) -#ifdef __ASSUME_FUTEX_CLOCK_REALTIME -# define VALREG %edx -#else - pushq %r14 - cfi_adjust_cfa_offset(8) - cfi_rel_offset(%r14, 0) - - subq $16, %rsp - cfi_adjust_cfa_offset(16) -# define VALREG %r14d -#endif - - movq %rdi, %r12 - movq %rsi, %r13 - - /* Get the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 1f - -2: movl WRITER(%r12), %eax - testl %eax, %eax - jne 14f - cmpl $0, NR_READERS(%r12) - je 5f - - /* Check the value of the timeout parameter. */ -3: cmpq $1000000000, 8(%r13) - jae 19f - - incl WRITERS_QUEUED(%r12) - je 4f - - movl WRITERS_WAKEUP(%r12), VALREG - - LOCK -#if MUTEX == 0 - decl (%r12) -#else - decl MUTEX(%r12) -#endif - jne 10f - -11: -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME -# ifdef PIC - cmpl $0, __have_futex_clock_realtime(%rip) -# else - cmpl $0, __have_futex_clock_realtime -# endif - je .Lreltmo -#endif - - cmpq $0, (%r13) - js 16f /* Time is already up. */ - - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT_BITSET|FUTEX_CLOCK_REALTIME, %esi - xorl PSHARED(%r12), %esi - movq %r13, %r10 - movl $0xffffffff, %r9d -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - movl %r14d, %edx -#endif -21: leaq WRITERS_WAKEUP(%r12), %rdi - movl $SYS_futex, %eax - syscall - movq %rax, %rdx - -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - .subsection 2 -.Lreltmo: - /* Get current time. */ - movq %rsp, %rdi - xorl %esi, %esi - /* This call works because we directly jump to a system call entry - which preserves all the registers. */ - call JUMPTARGET(__gettimeofday) - - /* Compute relative timeout. */ - movq 8(%rsp), %rax - movl $1000, %edi - mul %rdi /* Milli seconds to nano seconds. */ - movq (%r13), %rcx - movq 8(%r13), %rdi - subq (%rsp), %rcx - subq %rax, %rdi - jns 15f - addq $1000000000, %rdi - decq %rcx -15: testq %rcx, %rcx - js 16f /* Time is already up. */ - - /* Futex call. */ - movq %rcx, (%rsp) /* Store relative timeout. */ - movq %rdi, 8(%rsp) - -# ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%r12), %esi -# else -# if FUTEX_WAIT == 0 - movl PSHARED(%r12), %esi -# else - movl $FUTEX_WAIT, %esi - orl PSHARED(%r12), %esi -# endif - xorl %fs:PRIVATE_FUTEX, %esi -# endif - movq %rsp, %r10 - movl %r14d, %edx - - jmp 21b - .previous -#endif - -17: /* Reget the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%r12) -#else - cmpxchgl %esi, MUTEX(%r12) -#endif - jnz 12f - -13: decl WRITERS_QUEUED(%r12) - cmpq $-ETIMEDOUT, %rdx - jne 2b - -18: movl $ETIMEDOUT, %edx - jmp 9f - - -5: xorl %edx, %edx - movl %fs:TID, %eax - movl %eax, WRITER(%r12) -9: LOCK -#if MUTEX == 0 - decl (%r12) -#else - decl MUTEX(%r12) -#endif - jne 6f - -7: movq %rdx, %rax - -#ifndef __ASSUME_FUTEX_CLOCK_REALTIME - addq $16, %rsp - cfi_adjust_cfa_offset(-16) - popq %r14 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r14) -#endif - popq %r13 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r13) - popq %r12 - cfi_adjust_cfa_offset(-8) - cfi_restore(%r12) - retq - -#ifdef __ASSUME_PRIVATE_FUTEX - cfi_adjust_cfa_offset(16) - cfi_rel_offset(%r12, 8) - cfi_rel_offset(%r13, 0) -#else - cfi_adjust_cfa_offset(40) - cfi_offset(%r12, -16) - cfi_offset(%r13, -24) - cfi_offset(%r14, -32) -#endif -1: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait - jmp 2b - -14: cmpl %fs:TID, %eax - jne 3b -20: movl $EDEADLK, %edx - jmp 9b - -6: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leal MUTEX(%r12), %rdi -#endif - callq __lll_unlock_wake - jmp 7b - - /* Overflow. */ -4: decl WRITERS_QUEUED(%r12) - movl $EAGAIN, %edx - jmp 9b - -10: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leaq MUTEX(%r12), %rdi -#endif - callq __lll_unlock_wake - jmp 11b - -12: movl PSHARED(%r12), %esi -#if MUTEX == 0 - movq %r12, %rdi -#else - leaq MUTEX(%r12), %rdi -#endif - callq __lll_lock_wait - jmp 13b - -16: movq $-ETIMEDOUT, %rdx - jmp 17b - -19: movl $EINVAL, %edx - jmp 9b - cfi_endproc - .size pthread_rwlock_timedwrlock,.-pthread_rwlock_timedwrlock diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S deleted file mode 100644 index d779f7b..0000000 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_unlock.S +++ /dev/null @@ -1,126 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include - - - .text - - .globl __pthread_rwlock_unlock - .type __pthread_rwlock_unlock,@function - .align 16 -__pthread_rwlock_unlock: - cfi_startproc - /* Get the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 1f - -2: cmpl $0, WRITER(%rdi) - jne 5f - decl NR_READERS(%rdi) - jnz 6f - -5: movl $0, WRITER(%rdi) - - movl $1, %edx - leaq WRITERS_WAKEUP(%rdi), %r10 - cmpl $0, WRITERS_QUEUED(%rdi) - jne 0f - - /* If also no readers waiting nothing to do. */ - cmpl $0, READERS_QUEUED(%rdi) - je 6f - - movl $0x7fffffff, %edx - leaq READERS_WAKEUP(%rdi), %r10 - -0: incl (%r10) - LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 7f - -8: -#ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAKE, %esi - xorl PSHARED(%rdi), %esi -#else - movl $FUTEX_WAKE, %esi - orl PSHARED(%rdi), %esi - xorl %fs:PRIVATE_FUTEX, %esi -#endif - movl $SYS_futex, %eax - movq %r10, %rdi - syscall - - xorl %eax, %eax - retq - - .align 16 -6: LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 3f - -4: xorl %eax, %eax - retq - -1: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 2b - -3: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake - jmp 4b - -7: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake - jmp 8b - cfi_endproc - .size __pthread_rwlock_unlock,.-__pthread_rwlock_unlock - -strong_alias (__pthread_rwlock_unlock, pthread_rwlock_unlock) -hidden_def (__pthread_rwlock_unlock) diff --git a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S deleted file mode 100644 index e444def..0000000 --- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_rwlock_wrlock.S +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2002. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include -#include -#include -#include - - .text - - .globl __pthread_rwlock_wrlock - .type __pthread_rwlock_wrlock,@function - .align 16 -__pthread_rwlock_wrlock: - cfi_startproc - - LIBC_PROBE (wrlock_entry, 1, %rdi) - - xorq %r10, %r10 - - /* Get the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 1f - -2: movl WRITER(%rdi), %eax - testl %eax, %eax - jne 14f - cmpl $0, NR_READERS(%rdi) - je 5f - -3: incl WRITERS_QUEUED(%rdi) - je 4f - - movl WRITERS_WAKEUP(%rdi), %edx - - LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 10f - -11: -#ifdef __ASSUME_PRIVATE_FUTEX - movl $FUTEX_PRIVATE_FLAG|FUTEX_WAIT, %esi - xorl PSHARED(%rdi), %esi -#else -# if FUTEX_WAIT == 0 - movl PSHARED(%rdi), %esi -# else - movl $FUTEX_WAIT, %esi - orl PSHARED(%rdi), %esi -# endif - xorl %fs:PRIVATE_FUTEX, %esi -#endif - addq $WRITERS_WAKEUP, %rdi - movl $SYS_futex, %eax - syscall - - subq $WRITERS_WAKEUP, %rdi - - /* Reget the lock. */ - movl $1, %esi - xorl %eax, %eax - LOCK -#if MUTEX == 0 - cmpxchgl %esi, (%rdi) -#else - cmpxchgl %esi, MUTEX(%rdi) -#endif - jnz 12f - -13: decl WRITERS_QUEUED(%rdi) - jmp 2b - -5: xorl %edx, %edx - movl %fs:TID, %eax - movl %eax, WRITER(%rdi) -9: LOCK -#if MUTEX == 0 - decl (%rdi) -#else - decl MUTEX(%rdi) -#endif - jne 6f -7: - - movq %rdx, %rax - retq - -1: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 2b - -14: cmpl %fs:TID, %eax - jne 3b - movl $EDEADLK, %edx - jmp 9b - -6: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake - jmp 7b - -4: decl WRITERS_QUEUED(%rdi) - movl $EAGAIN, %edx - jmp 9b - -10: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_unlock_wake -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 11b - -12: movl PSHARED(%rdi), %esi -#if MUTEX != 0 - addq $MUTEX, %rdi -#endif - callq __lll_lock_wait -#if MUTEX != 0 - subq $MUTEX, %rdi -#endif - jmp 13b - cfi_endproc - .size __pthread_rwlock_wrlock,.-__pthread_rwlock_wrlock - -strong_alias (__pthread_rwlock_wrlock, pthread_rwlock_wrlock) -hidden_def (__pthread_rwlock_wrlock)