fdwalk should return 0 on an empty directory
[kopensolaris-gnu/glibc.git] / nptl / sysdeps / unix / sysv / linux / sh / sem_post.S
1 /* Copyright (C) 2003, 2004, 2007 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3
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.
8
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.
13
14    You should have received a copy of the GNU Lesser General Public
15    License along with the GNU C Library; if not, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 #include <sysdep.h>
20 #include <shlib-compat.h>
21 #include <pthread-errnos.h>
22 #include <structsem.h>
23 #include <lowlevellock.h>
24 #include "lowlevel-atomic.h"
25
26
27         .text
28
29         .globl  __new_sem_post
30         .type   __new_sem_post,@function
31         .align  5
32 __new_sem_post:
33         mov     #1, r3
34         XADD (r3, @(VALUE,r4), r2)
35         mov.l   @(NWAITERS,r4), r2
36         tst     r2, r2
37         bt      2f
38         mov     #FUTEX_WAKE, r5
39         mov.l   @(PRIVATE,r4), r1
40         or      r1, r5
41         mov     #1, r6
42         mov     #0, r7
43         mov     #SYS_futex, r3
44         extu.b  r3, r3
45         trapa   #0x14
46         SYSCALL_INST_PAD
47
48         cmp/pz  r0
49         bf      1f
50 2:
51         rts
52          mov    #0, r0
53
54 1:
55         mov     #EINVAL, r2
56         mova    .Lgot3, r0
57         mov.l   .Lgot3, r12
58         add     r0, r12
59
60 #if USE___THREAD
61         mov.l   .Lerrno3, r0
62         stc     gbr, r1
63         mov.l   @(r0, r12), r0
64         bra     .Lexit
65          add    r1, r0
66         .align  2
67 .Lerrno3:
68         .long   errno@GOTTPOFF
69 .Lexit:
70 #else
71         mov.l   .Lerrloc3, r1
72         bsrf    r1
73          nop
74 .Lerrloc3b:
75 #endif
76         mov.l   r2, @r0
77         lds.l   @r15+, pr
78         mov.l   @r15+, r12
79         rts
80          mov    #-1, r0
81
82         .align  2
83 .Lgot3:
84         .long   _GLOBAL_OFFSET_TABLE_
85 #if !USE___THREAD
86 .Lerrloc3:
87         .long   __errno_location@PLT-(.Lerrloc3b-.)
88 #endif
89         .size   __new_sem_post,.-__new_sem_post
90         versioned_symbol(libpthread, __new_sem_post, sem_post, GLIBC_2_1)