2 * arch/alpha/include/klibc/archsys.h
4 * Architecture-specific syscall definitions
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
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. */
15 #define _syscall0_dual0(type, name) \
18 long _sc_ret, _sc_err; \
20 register long _sc_0 __asm__("$0"); \
21 register long _sc_19 __asm__("$19"); \
22 register long _sc_20 __asm__("$20"); \
24 _sc_0 = __NR_##name; \
26 : "=r"(_sc_0), "=r"(_sc_19), "=r" (_sc_20) \
28 : _syscall_clobbers); \
29 _sc_ret = _sc_0, _sc_err = _sc_19; (void)(_sc_20); \
31 _syscall_return(type); \
34 #define _syscall0_dual1(type, name) \
37 long _sc_ret, _sc_err; \
39 register long _sc_0 __asm__("$0"); \
40 register long _sc_19 __asm__("$19"); \
41 register long _sc_20 __asm__("$20"); \
43 _sc_0 = __NR_##name; \
45 : "=r"(_sc_0), "=r"(_sc_19), "=r" (_sc_20) \
47 : _syscall_clobbers); \
48 _sc_ret = _sc_20, _sc_err = _sc_19; (void)(_sc_0); \
50 _syscall_return(type); \
53 #endif /* _KLIBC_ARCHSYS_H */