Replace FSF snail mail address with URLs.
[glibc.git] / nptl / sysdeps / unix / sysv / linux / sh / sem_trywait.S
blob35ae9b213d531f8495196b0e49a14e15655b3619
1 /* Copyright (C) 2003, 2004, 2007, 2011 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
4    The GNU C Library is free software; you can redistribute it and/or
5    modify it under the terms of the GNU Lesser General Public
6    License as published by the Free Software Foundation; either
7    version 2.1 of the License, or (at your option) any later version.
9    The GNU C Library is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Lesser General Public License for more details.
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, see
16    <http://www.gnu.org/licenses/>.  */
18 #include <sysdep.h>
19 #include <shlib-compat.h>
20 #include <pthread-errnos.h>
21 #include <lowlevellock.h>
22 #include "lowlevel-atomic.h"
25         .text
27         .globl  __new_sem_trywait
28         .type   __new_sem_trywait,@function
29         .align  5
30 __new_sem_trywait:
31         mov.l   r12, @-r15
32         mov.l   r8, @-r15
33         sts.l   pr, @-r15
34         mov     r4, r8
35         mov.l   @r8, r0
37         tst     r0, r0
38         bt      1f
40         mov     r0, r3
41         mov     r0, r4
42         add     #-1, r3
43         CMPXCHG (r4, @r8, r3, r2)
44         bf/s    2b
45          mov    r2, r0
47         lds.l   @r15+, pr
48         mov.l   @r15+, r8
49         mov.l   @r15+, r12
50         rts
51          mov    #0, r0
54         mov     #EAGAIN, r8
55         mova    .Lgot1, r0
56         mov.l   .Lgot1, r12
57         add     r0, r12
59         mov.l   .Lerrno1, r0
60         stc     gbr, r1
61         mov.l   @(r0, r12), r0
62         bra     .Lexit
63          add    r1, r0
64         .align  2
65 .Lerrno1:
66         .long   errno@GOTTPOFF
67 .Lexit:
68         mov.l   r8, @r0
69         lds.l   @r15+, pr
70         mov.l   @r15+, r8
71         mov.l   @r15+, r12
72         rts
73          mov    #-1, r0
75         .align  2
76 .Lgot1:
77         .long   _GLOBAL_OFFSET_TABLE_
78         .size   __new_sem_trywait,.-__new_sem_trywait
79         versioned_symbol(libpthread, __new_sem_trywait, sem_trywait, GLIBC_2_1)