2 * arch/sparc64/include/klibc/archsys.h
4 * Architecture-specific syscall definitions
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
10 /* The Linux 2.5.31 SPARC64 syscall macros are just plain broken */
20 #define _syscall0(type,name) \
23 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
24 register unsigned long __ret __asm__("o0"); \
25 __asm__ __volatile__ ("t 0x6d\n\t" \
26 "bcs,a %%xcc, 1f\n\t" \
29 "movcs %%xcc,-1,%0\n" \
30 : "=&r" (__ret), "+m" (errno) \
33 return (type) __ret; \
36 #define _syscall1(type,name,type1,arg1) \
37 type name (type1 arg1) \
39 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
40 register unsigned long __ret __asm__("o0"); \
41 type1 __o0 = (arg1); \
42 __asm__ __volatile__ ("t 0x6d\n\t" \
43 "bcs,a %%xcc, 1f\n\t" \
46 "movcs %%xcc,-1,%0\n" \
47 : "=&r" (__ret), "+m" (errno) \
48 : "0" (__o0), "r" (__g1) \
50 return (type) __ret; \
53 #define _syscall2(type,name,type1,arg1,type2,arg2) \
54 type name (type1 arg1,type2 arg2) \
56 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
57 register unsigned long __ret __asm__("o0"); \
58 type1 __o0 = (arg1); \
59 register type2 __o1 __asm__ ("o1") = (arg2); \
60 __asm__ __volatile__ ("t 0x6d\n\t" \
61 "bcs,a %%xcc, 1f\n\t" \
64 "movcs %%xcc,-1,%0\n" \
65 : "=&r" (__ret), "+m" (errno) \
66 : "0" (__o0), "r" (__o1), "r" (__g1) \
68 return (type) __ret; \
71 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
72 type name (type1 arg1,type2 arg2,type3 arg3) \
74 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
75 register unsigned long __ret __asm__("o0"); \
76 type1 __o0 = (arg1); \
77 register type2 __o1 __asm__ ("o1") = (arg2); \
78 register type3 __o2 __asm__ ("o2") = (arg3); \
79 __asm__ __volatile__ ("t 0x6d\n\t" \
80 "bcs,a %%xcc, 1f\n\t" \
83 "movcs %%xcc,-1,%0\n" \
84 : "=&r" (__ret), "+m" (errno) \
85 : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \
87 return (type) __ret; \
90 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
91 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4) \
93 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
94 register unsigned long __ret __asm__("o0"); \
95 type1 __o0 = (arg1); \
96 register type2 __o1 __asm__ ("o1") = (arg2); \
97 register type3 __o2 __asm__ ("o2") = (arg3); \
98 register type4 __o3 __asm__ ("o3") = (arg4); \
99 __asm__ __volatile__ ("t 0x6d\n\t" \
100 "bcs,a %%xcc, 1f\n\t" \
103 "movcs %%xcc,-1,%0\n" \
104 : "=&r" (__ret), "+m" (errno) \
105 : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \
107 return (type) __ret; \
110 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,\
112 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
114 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
115 register unsigned long __ret __asm__("o0"); \
116 type1 __o0 = (arg1); \
117 register type2 __o1 __asm__ ("o1") = (arg2); \
118 register type3 __o2 __asm__ ("o2") = (arg3); \
119 register type4 __o3 __asm__ ("o3") = (arg4); \
120 register type5 __o4 __asm__ ("o4") = (arg5); \
121 __asm__ __volatile__ ("t 0x6d\n\t" \
122 "bcs,a %%xcc, 1f\n\t" \
125 "movcs %%xcc,-1,%0\n" \
126 : "=&r" (__ret), "+m" (errno) \
127 : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), \
130 return (type) __ret; \
133 #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
134 type5,arg5,type6,arg6) \
135 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5,type6 arg6) \
137 register unsigned long __g1 __asm__ ("g1") = __NR_##name; \
138 register unsigned long __ret __asm__("o0"); \
139 type1 __o0 = (arg1); \
140 register type2 __o1 __asm__ ("o1") = (arg2); \
141 register type3 __o2 __asm__ ("o2") = (arg3); \
142 register type4 __o3 __asm__ ("o3") = (arg4); \
143 register type5 __o4 __asm__ ("o4") = (arg5); \
144 register type6 __o5 __asm__ ("o5") = (arg6); \
145 __asm__ __volatile__ ("t 0x6d\n\t" \
146 "bcs,a %%xcc, 1f\n\t" \
149 "movcs %%xcc,-1,%0\n" \
150 : "=&r" (__ret), "+m" (errno) \
151 : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), \
152 "r" (__o5), "r" (__g1) \
154 return (type) __ret; \
157 #endif /* _KLIBC_ARCHSYS_H */