2 * arch/ppc/include/klibc/archsys.h
4 * Architecture-specific syscall definitions
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
10 /* PowerPC seems to lack _syscall6() in its headers */
11 /* This seems to work on both 32- and 64-bit ppc */
15 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
16 type5,arg5,type6,arg6) \
17 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
19 unsigned long __sc_ret, __sc_err; \
21 register unsigned long __sc_0 __asm__ ("r0"); \
22 register unsigned long __sc_3 __asm__ ("r3"); \
23 register unsigned long __sc_4 __asm__ ("r4"); \
24 register unsigned long __sc_5 __asm__ ("r5"); \
25 register unsigned long __sc_6 __asm__ ("r6"); \
26 register unsigned long __sc_7 __asm__ ("r7"); \
27 register unsigned long __sc_8 __asm__ ("r8"); \
29 __sc_3 = (unsigned long) (arg1); \
30 __sc_4 = (unsigned long) (arg2); \
31 __sc_5 = (unsigned long) (arg3); \
32 __sc_6 = (unsigned long) (arg4); \
33 __sc_7 = (unsigned long) (arg5); \
34 __sc_8 = (unsigned long) (arg6); \
35 __sc_0 = __NR_##name; \
36 __asm__ __volatile__ \
46 : : "cr0", "ctr", "memory", \
47 "r9", "r10", "r11", "r12"); \
51 if (__sc_err & 0x10000000) \
53 errno = (int)__sc_ret; \
56 return (type)__sc_ret; \
59 #endif /* _syscall6() missing */
61 #endif /* _KLIBC_ARCHSYS_H */