]> git.ipfire.org Git - thirdparty/glibc.git/blob - nptl/sysdeps/unix/sysv/linux/i386/i486/sem_trywait.S
Update copyright notices with scripts/update-copyrights
[thirdparty/glibc.git] / nptl / sysdeps / unix / sysv / linux / i386 / i486 / sem_trywait.S
1 /* Copyright (C) 2002-2014 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3 Contributed by Ulrich Drepper <drepper@redhat.com>, 2002.
4
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
9
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
14
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>. */
18
19 #include <sysdep.h>
20 #include <shlib-compat.h>
21 #include <pthread-errnos.h>
22 #include <lowlevellock.h>
23
24 .text
25
26 .globl __new_sem_trywait
27 .type __new_sem_trywait,@function
28 .align 16
29 __new_sem_trywait:
30 movl 4(%esp), %ecx
31
32 movl (%ecx), %eax
33 2: testl %eax, %eax
34 jz 1f
35
36 leal -1(%eax), %edx
37 LOCK
38 cmpxchgl %edx, (%ecx)
39 jne 2b
40 xorl %eax, %eax
41 ret
42
43 1:
44 #ifdef PIC
45 SETUP_PIC_REG(cx)
46 #else
47 movl $3f, %ecx
48 3:
49 #endif
50 addl $_GLOBAL_OFFSET_TABLE_, %ecx
51 #ifdef NO_TLS_DIRECT_SEG_REFS
52 movl errno@gotntpoff(%ecx), %edx
53 addl %gs:0, %edx
54 movl $EAGAIN, (%edx)
55 #else
56 movl errno@gotntpoff(%ecx), %edx
57 movl $EAGAIN, %gs:(%edx)
58 #endif
59 orl $-1, %eax
60 ret
61 .size __new_sem_trywait,.-__new_sem_trywait
62 versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1)
63 #if SHLIB_COMPAT(libpthread, GLIBC_2_0, GLIBC_2_1)
64 .global __old_sem_trywait
65 __old_sem_trywait = __new_sem_trywait
66 compat_symbol(libpthread, __old_sem_trywait, sem_trywait, GLIBC_2_0)
67 #endif