894c033d84f6c8ce1fae97f972fc0984eecb7868
[musl] / arch / mipsn32 / syscall_arch.h
1 #define __SYSCALL_LL_E(x) (x)
2 #define __SYSCALL_LL_O(x) (x)
3
4 #define SYSCALL_RLIM_INFINITY (-1UL/2)
5
6 #if _MIPSEL || __MIPSEL || __MIPSEL__
7 #define __stat_fix(st) ((st),(void)0)
8 #else
9 #include <sys/stat.h>
10 static inline void __stat_fix(long p)
11 {
12         struct stat *st = (struct stat *)p;
13         st->st_dev >>= 32;
14         st->st_rdev >>= 32;
15 }
16 #endif
17
18 #define SYSCALL_CLOBBERLIST \
19         "$1", "$3", "$10", "$11", "$12", "$13", \
20         "$14", "$15", "$24", "$25", "hi", "lo", "memory"
21
22 static inline long __syscall0(long n)
23 {
24         register long r7 __asm__("$7");
25         register long r2 __asm__("$2") = n;
26         __asm__ __volatile__ (
27                 "syscall"
28                 : "+&r"(r2), "=r"(r7)
29                 :
30                 : SYSCALL_CLOBBERLIST);
31         return r7 ? -r2 : r2;
32 }
33
34 static inline long __syscall1(long n, long a)
35 {
36         register long r4 __asm__("$4") = a;
37         register long r7 __asm__("$7");
38         register long r2 __asm__("$2") = n;
39         __asm__ __volatile__ (
40                 "syscall"
41                 : "+&r"(r2), "=r"(r7)
42                 : "r"(r4)
43                 : SYSCALL_CLOBBERLIST);
44         return r7 ? -r2 : r2;
45 }
46
47 static inline long __syscall2(long n, long a, long b)
48 {
49         register long r4 __asm__("$4") = a;
50         register long r5 __asm__("$5") = b;
51         register long r7 __asm__("$7");
52         register long r2 __asm__("$2") = n;
53         __asm__ __volatile__ (
54                 "syscall"
55                 : "+&r"(r2), "=r"(r7)
56                 : "r"(r4), "r"(r5)
57                 : SYSCALL_CLOBBERLIST);
58         if (r7) return -r2;
59         long ret = r2;
60         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
61         return ret;
62 }
63
64 static inline long __syscall3(long n, long a, long b, long c)
65 {
66         register long r4 __asm__("$4") = a;
67         register long r5 __asm__("$5") = b;
68         register long r6 __asm__("$6") = c;
69         register long r7 __asm__("$7");
70         register long r2 __asm__("$2") = n;
71         __asm__ __volatile__ (
72                 "syscall"
73                 : "+&r"(r2), "=r"(r7)
74                 : "r"(r4), "r"(r5), "r"(r6)
75                 : SYSCALL_CLOBBERLIST);
76         if (r7) return -r2;
77         long ret = r2;
78         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
79         return ret;
80 }
81
82 static inline long __syscall4(long n, long a, long b, long c, long d)
83 {
84         register long r4 __asm__("$4") = a;
85         register long r5 __asm__("$5") = b;
86         register long r6 __asm__("$6") = c;
87         register long r7 __asm__("$7") = d;
88         register long r2 __asm__("$2") = n;
89         __asm__ __volatile__ (
90                 "syscall"
91                 : "+&r"(r2), "+r"(r7)
92                 : "r"(r4), "r"(r5), "r"(r6)
93                 : SYSCALL_CLOBBERLIST);
94         if (r7) return -r2;
95         long ret = r2;
96         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
97         if (n == SYS_newfstatat) __stat_fix(c);
98         return ret;
99 }
100
101 static inline long __syscall5(long n, long a, long b, long c, long d, long e)
102 {
103         register long r4 __asm__("$4") = a;
104         register long r5 __asm__("$5") = b;
105         register long r6 __asm__("$6") = c;
106         register long r7 __asm__("$7") = d;
107         register long r8 __asm__("$8") = e;
108         register long r2 __asm__("$2") = n;
109         __asm__ __volatile__ (
110                 "syscall"
111                 : "+&r"(r2), "+r"(r7)
112                 : "r"(r4), "r"(r5), "r"(r6), "r"(r8)
113                 : SYSCALL_CLOBBERLIST);
114         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
115         if (n == SYS_newfstatat) __stat_fix(c);
116         return r2;
117 }
118
119 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
120 {
121         register long r4 __asm__("$4") = a;
122         register long r5 __asm__("$5") = b;
123         register long r6 __asm__("$6") = c;
124         register long r7 __asm__("$7") = d;
125         register long r8 __asm__("$8") = e;
126         register long r9 __asm__("$9") = f;
127         register long r2 __asm__("$2") = n;
128         __asm__ __volatile__ (
129                 "syscall"
130                 : "+&r"(r2), "+r"(r7)
131                 : "r"(r4), "r"(r5), "r"(r6), "r"(r8), "r"(r9)
132                 : SYSCALL_CLOBBERLIST);
133         if (n == SYS_stat || n == SYS_fstat || n == SYS_lstat) __stat_fix(b);
134         if (n == SYS_newfstatat) __stat_fix(c);
135         return r2;
136 }
137
138 #define VDSO_USEFUL
139 #define VDSO_CGT_SYM "__vdso_clock_gettime"
140 #define VDSO_CGT_VER "LINUX_2.6"