remove __SYSCALL_SSLEN arch macro in favor of using public _NSIG
[musl] / arch / mips / syscall_arch.h
1 #define __SYSCALL_LL_E(x) \
2 ((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
3 ((union { long long ll; long l[2]; }){ .ll = x }).l[1]
4 #define __SYSCALL_LL_O(x) 0, __SYSCALL_LL_E((x))
5
6 #ifndef __clang__
7
8 #define __asm_syscall(...) do { \
9         register long r2 __asm__("$2"); \
10         __asm__ __volatile__ ( \
11         "addu $2,$0,%2 ; syscall" \
12         : "=&r"(r2), "=r"(r7) : "ir"(n), __VA_ARGS__, "0"(r2), "1"(r7) \
13         : "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
14           "$14", "$15", "$24", "$25", "hi", "lo", "memory"); \
15         return r7 ? -r2 : r2; \
16         } while (0)
17
18 static inline long __syscall0(long n)
19 {
20         register long r7 __asm__("$7");
21         __asm_syscall("i"(0));
22 }
23
24 static inline long __syscall1(long n, long a)
25 {
26         register long r4 __asm__("$4") = a;
27         register long r7 __asm__("$7");
28         __asm_syscall("r"(r4));
29 }
30
31 static inline long __syscall2(long n, long a, long b)
32 {
33         register long r4 __asm__("$4") = a;
34         register long r5 __asm__("$5") = b;
35         register long r7 __asm__("$7");
36         __asm_syscall("r"(r4), "r"(r5));
37 }
38
39 static inline long __syscall3(long n, long a, long b, long c)
40 {
41         register long r4 __asm__("$4") = a;
42         register long r5 __asm__("$5") = b;
43         register long r6 __asm__("$6") = c;
44         register long r7 __asm__("$7");
45         __asm_syscall("r"(r4), "r"(r5), "r"(r6));
46 }
47
48 static inline long __syscall4(long n, long a, long b, long c, long d)
49 {
50         register long r4 __asm__("$4") = a;
51         register long r5 __asm__("$5") = b;
52         register long r6 __asm__("$6") = c;
53         register long r7 __asm__("$7") = d;
54         __asm_syscall("r"(r4), "r"(r5), "r"(r6));
55 }
56
57 #else
58
59 static inline long __syscall0(long n)
60 {
61         return (__syscall)(n);
62 }
63
64 static inline long __syscall1(long n, long a)
65 {
66         return (__syscall)(n, a);
67 }
68
69 static inline long __syscall2(long n, long a, long b)
70 {
71         return (__syscall)(n, a, b);
72 }
73
74 static inline long __syscall3(long n, long a, long b, long c)
75 {
76         return (__syscall)(n, a, b, c);
77 }
78
79 static inline long __syscall4(long n, long a, long b, long c, long d)
80 {
81         return (__syscall)(n, a, b, c, d);
82 }
83
84 #endif
85
86 static inline long __syscall5(long n, long a, long b, long c, long d, long e)
87 {
88         return (__syscall)(n, a, b, c, d, e);
89 }
90
91 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
92 {
93         return (__syscall)(n, a, b, c, d, e, f);
94 }