Add more tests of libm functions.
[glibc.git] / sysdeps / unix / sysv / linux / i386 / semtimedop.S
blob80477b7b630700c95d3db8da087b7c5d7384eb6e
1 /* Copyright (C) 2003-2015 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
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.
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.
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/>.  */
19 #include <sysdep.h>
21 #define SYSOP_semtimedop 4
23 #define SVRSP   12              /* saved register space */
24 #define PARMS   4+SVRSP /* space for 3 saved regs */
25 #define SEMID   PARMS
26 #define SOPS    SEMID+4
27 #define NSOPS   SOPS+4
28 #define TIMEOUT NSOPS+4
30         .text
31 ENTRY (semtimedop)
33         pushl   %ebp
34         cfi_adjust_cfa_offset (4)
35         pushl   %ebx
36         cfi_adjust_cfa_offset (4)
37         pushl   %edi
38         cfi_adjust_cfa_offset (4)
40         movl    $SYSOP_semtimedop, %ebx
41         cfi_rel_offset (ebx, 4)
42         movl    SEMID(%esp), %ecx
43         movl    NSOPS(%esp), %edx
44         movl    SOPS(%esp), %edi
45         cfi_rel_offset (edi, 0)
46         movl    TIMEOUT(%esp), %ebp
47         cfi_rel_offset (ebp, 8)
48         movl    $__NR_ipc, %eax
50         ENTER_KERNEL
52         /* Restore registers.  */
53         popl    %edi
54         cfi_adjust_cfa_offset (-4)
55         cfi_restore (edi)
56         popl    %ebx
57         cfi_adjust_cfa_offset (-4)
58         cfi_restore (ebx)
59         popl    %ebp
60         cfi_adjust_cfa_offset (-4)
61         cfi_restore (ebp)
63         /* If 0 > %eax > -4096 there was an error.  */
64         cmpl $-4096, %eax
65         ja SYSCALL_ERROR_LABEL
67         /* Successful; return the syscall's value.  */
68         ret
70 #ifdef PIC
71         .align  4
72 #endif
73 PSEUDO_END (semtimedop)