2 * arch/x86_64/include/klibc/archsys.h
4 * Architecture-specific syscall definitions
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
10 /* The x86-64 syscall headers are needlessly inefficient */
20 #define _syscall0(type,name) \
24 __asm__ volatile (__syscall \
27 : __syscall_clobber); \
28 __syscall_return(type,__res); \
31 #define _syscall1(type,name,type1,arg1) \
32 type name (type1 arg1) \
35 __asm__ volatile (__syscall \
37 : "0" (__NR_##name),"D" (arg1) \
38 : __syscall_clobber); \
39 __syscall_return(type,__res); \
42 #define _syscall2(type,name,type1,arg1,type2,arg2) \
43 type name (type1 arg1,type2 arg2) \
46 __asm__ volatile (__syscall \
48 : "0" (__NR_##name),"D" (arg1),"S" (arg2) \
49 : __syscall_clobber); \
50 __syscall_return(type,__res); \
53 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
54 type name (type1 arg1,type2 arg2,type3 arg3) \
57 __asm__ volatile (__syscall \
59 : "0" (__NR_##name),"D" (arg1),"S" (arg2), \
61 : __syscall_clobber); \
62 __syscall_return(type,__res); \
65 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
66 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4) \
69 register type4 __r10 asm("%r10") = arg4; \
70 __asm__ volatile (__syscall \
72 : "0" (__NR_##name),"D" (arg1),"S" (arg2), \
73 "d" (arg3),"r" (__r10) \
74 : __syscall_clobber); \
75 __syscall_return(type,__res); \
78 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
80 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
83 register type4 __r10 asm("%r10") = arg4; \
84 register type5 __r8 asm("%r8") = arg5; \
85 __asm__ volatile (__syscall \
87 : "0" (__NR_##name),"D" (arg1),"S" (arg2), \
88 "d" (arg3),"r" (__r10),"r" (__r8) \
89 : __syscall_clobber); \
90 __syscall_return(type,__res); \
93 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
94 type5,arg5,type6,arg6) \
95 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
98 register type4 __r10 asm("%r10") = arg4; \
99 register type5 __r8 asm("%r8") = arg5; \
100 register type6 __r9 asm("%r9") = arg6; \
101 __asm__ volatile (__syscall \
103 : "0" (__NR_##name),"D" (arg1),"S" (arg2), \
104 "d" (arg3),"r" (__r10),"r" (__r8), "r" (__r9) \
105 : __syscall_clobber); \
106 __syscall_return(type,__res); \
109 #endif /* _KLIBC_ARCHSYS_H */