chiark / gitweb /
volume_id: provide libvolume_id.a file
[elogind.git] / klibc / include / arch / alpha / klibc / archsys.h
1 /*
2  * arch/alpha/include/klibc/archsys.h
3  *
4  * Architecture-specific syscall definitions
5  */
6
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
9
10 /* Alpha has some bizarre Tru64-derived system calls which return two
11    different values in $0 and $20(!), respectively.  The standard
12    macros can't deal with these; even the ones that give the right
13    return value have the wrong clobbers. */
14
15 #define _syscall0_dual0(type, name)                                     \
16 type name(void)                                                         \
17 {                                                                       \
18         long _sc_ret, _sc_err;                                          \
19         {                                                               \
20                 register long _sc_0 __asm__("$0");                      \
21                 register long _sc_19 __asm__("$19");                    \
22                 register long _sc_20 __asm__("$20");                    \
23                                                                         \
24                 _sc_0 = __NR_##name;                                    \
25                 __asm__("callsys"                                       \
26                         : "=r"(_sc_0), "=r"(_sc_19), "=r" (_sc_20)      \
27                         : "0"(_sc_0)                                    \
28                         : _syscall_clobbers);                           \
29                 _sc_ret = _sc_0, _sc_err = _sc_19; (void)(_sc_20);      \
30         }                                                               \
31         _syscall_return(type);                                          \
32 }
33
34 #define _syscall0_dual1(type, name)                                     \
35 type name(void)                                                         \
36 {                                                                       \
37         long _sc_ret, _sc_err;                                          \
38         {                                                               \
39                 register long _sc_0 __asm__("$0");                      \
40                 register long _sc_19 __asm__("$19");                    \
41                 register long _sc_20 __asm__("$20");                    \
42                                                                         \
43                 _sc_0 = __NR_##name;                                    \
44                 __asm__("callsys"                                       \
45                         : "=r"(_sc_0), "=r"(_sc_19), "=r" (_sc_20)      \
46                         : "0"(_sc_0)                                    \
47                         : _syscall_clobbers);                           \
48                 _sc_ret = _sc_20, _sc_err = _sc_19; (void)(_sc_0);      \
49         }                                                               \
50         _syscall_return(type);                                          \
51 }
52
53 #endif /* _KLIBC_ARCHSYS_H */