chiark / gitweb /
[PATCH] added klibc version 0.82 (cvs tree) to the udev tree.
[elogind.git] / klibc / klibc / arch / sparc64 / include / klibc / archsys.h
1 /*
2  * arch/sparc64/include/klibc/archsys.h
3  *
4  * Architecture-specific syscall definitions
5  */
6
7 #ifndef _KLIBC_ARCHSYS_H
8 #define _KLIBC_ARCHSYS_H
9
10 /* The Linux 2.5.31 SPARC64 syscall macros are just plain broken */
11
12 #undef _syscall0
13 #undef _syscall1
14 #undef _syscall2
15 #undef _syscall3
16 #undef _syscall4
17 #undef _syscall5
18 #undef _syscall6
19
20 #define _syscall0(type,name) \
21 type name (void) \
22 { \
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" \
27       " st %0,%1\n\t" \
28       "1:" \
29       "movcs %%xcc,-1,%0\n" \
30       : "=&r" (__ret), "+m" (errno) \
31       : "r" (__g1) \
32       : "cc"); \
33   return (type) __ret; \
34 }
35
36 #define _syscall1(type,name,type1,arg1) \
37 type name (type1 arg1) \
38 { \
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" \
44       " st %0,%1\n\t" \
45       "1:" \
46       "movcs %%xcc,-1,%0\n" \
47       : "=&r" (__ret), "+m" (errno) \
48       : "0" (__o0), "r" (__g1) \
49       : "cc"); \
50   return (type) __ret; \
51 }
52
53 #define _syscall2(type,name,type1,arg1,type2,arg2) \
54 type name (type1 arg1,type2 arg2) \
55 { \
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" \
62       " st %0,%1\n\t" \
63       "1:" \
64       "movcs %%xcc,-1,%0\n" \
65       : "=&r" (__ret), "+m" (errno) \
66       : "0" (__o0), "r" (__o1), "r" (__g1) \
67       : "cc"); \
68   return (type) __ret; \
69 }
70
71 #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
72 type name (type1 arg1,type2 arg2,type3 arg3) \
73 { \
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" \
81       " st %0,%1\n\t" \
82       "1:" \
83       "movcs %%xcc,-1,%0\n" \
84       : "=&r" (__ret), "+m" (errno) \
85       : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) \
86       : "cc"); \
87   return (type) __ret; \
88 }
89
90 #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
91 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4) \
92 { \
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" \
101       " st %0,%1\n\t" \
102       "1:" \
103       "movcs %%xcc,-1,%0\n" \
104       : "=&r" (__ret), "+m" (errno) \
105       : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__g1) \
106       : "cc"); \
107   return (type) __ret; \
108 }
109
110 #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,\
111   type5,arg5) \
112 type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
113 { \
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" \
123       " st %0,%1\n\t" \
124       "1:" \
125       "movcs %%xcc,-1,%0\n" \
126       : "=&r" (__ret), "+m" (errno) \
127       : "0" (__o0), "r" (__o1), "r" (__o2), "r" (__o3), "r" (__o4), \
128         "r" (__g1) \
129       : "cc"); \
130   return (type) __ret; \
131 }
132
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) \
136 { \
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" \
147       " st %0,%1\n\t" \
148       "1:" \
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) \
153       : "cc"); \
154   return (type) __ret; \
155 }
156
157 #endif /* _KLIBC_ARCHSYS_H */