aarch64: fix CRTJMP in reloc.h
[oweals/musl.git] / arch / or1k / 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) __SYSCALL_LL_E((x))
5
6 #define SYSCALL_MMAP2_UNIT 8192ULL
7
8 long (__syscall)(long, ...);
9
10 #ifndef __clang__
11
12 static __inline long __syscall0(long n)
13 {
14         register unsigned long r11 __asm__("r11") = n;
15         __asm__ __volatile__ ("l.sys 1"
16                               : "=r"(r11)
17                               : "r"(r11)
18                               : "memory", "r3", "r4", "r5", "r6", "r7", "r8",
19                                 "r12", "r13", "r15", "r17", "r19", "r21",
20                                 "r23", "r25", "r27", "r29", "r31");
21         return r11;
22 }
23
24 static inline long __syscall1(long n, long a)
25 {
26         register unsigned long r11 __asm__("r11") = n;
27         register unsigned long r3 __asm__("r3") = a;
28         __asm__ __volatile__ ("l.sys 1"
29                               : "=r"(r11)
30                               : "r"(r11), "r"(r3)
31                               : "memory", "r4", "r5", "r6", "r7", "r8",
32                                 "r12", "r13", "r15", "r17", "r19", "r21",
33                                 "r23", "r25", "r27", "r29", "r31");
34         return r11;
35 }
36
37 static inline long __syscall2(long n, long a, long b)
38 {
39         register unsigned long r11 __asm__("r11") = n;
40         register unsigned long r3 __asm__("r3") = a;
41         register unsigned long r4 __asm__("r4") = b;
42         __asm__ __volatile__ ("l.sys 1"
43                               : "=r"(r11)
44                               : "r"(r11), "r"(r3), "r"(r4)
45                               : "memory", "r5", "r6", "r7", "r8",
46                                 "r12", "r13", "r15", "r17", "r19", "r21",
47                                 "r23", "r25", "r27", "r29", "r31");
48         return r11;
49 }
50
51 static inline long __syscall3(long n, long a, long b, long c)
52 {
53         register unsigned long r11 __asm__("r11") = n;
54         register unsigned long r3 __asm__("r3") = a;
55         register unsigned long r4 __asm__("r4") = b;
56         register unsigned long r5 __asm__("r5") = c;
57         __asm__ __volatile__ ("l.sys 1"
58                               : "=r"(r11)
59                               : "r"(r11), "r"(r3), "r"(r4), "r"(r5)
60                               : "memory", "r6", "r7", "r8",
61                                 "r12", "r13", "r15", "r17", "r19", "r21",
62                                 "r23", "r25", "r27", "r29", "r31");
63         return r11;
64 }
65
66 static inline long __syscall4(long n, long a, long b, long c, long d)
67 {
68         register unsigned long r11 __asm__("r11") = n;
69         register unsigned long r3 __asm__("r3") = a;
70         register unsigned long r4 __asm__("r4") = b;
71         register unsigned long r5 __asm__("r5") = c;
72         register unsigned long r6 __asm__("r6") = d;
73         __asm__ __volatile__ ("l.sys 1"
74                               : "=r"(r11)
75                               : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6)
76                               : "memory", "r7", "r8",
77                                 "r12", "r13", "r15", "r17", "r19", "r21",
78                                 "r23", "r25", "r27", "r29", "r31");
79         return r11;
80 }
81
82 static inline long __syscall5(long n, long a, long b, long c, long d, long e)
83 {
84         register unsigned long r11 __asm__("r11") = n;
85         register unsigned long r3 __asm__("r3") = a;
86         register unsigned long r4 __asm__("r4") = b;
87         register unsigned long r5 __asm__("r5") = c;
88         register unsigned long r6 __asm__("r6") = d;
89         register unsigned long r7 __asm__("r7") = e;
90         __asm__ __volatile__ ("l.sys 1"
91                               : "=r"(r11)
92                               : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6),
93                                 "r"(r7)
94                               : "memory", "r8",
95                                 "r12", "r13", "r15", "r17", "r19", "r21",
96                                 "r23", "r25", "r27", "r29", "r31");
97         return r11;
98 }
99
100 static inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
101 {
102         register unsigned long r11 __asm__("r11") = n;
103         register unsigned long r3 __asm__("r3") = a;
104         register unsigned long r4 __asm__("r4") = b;
105         register unsigned long r5 __asm__("r5") = c;
106         register unsigned long r6 __asm__("r6") = d;
107         register unsigned long r7 __asm__("r7") = e;
108         register unsigned long r8 __asm__("r8") = f;
109         __asm__ __volatile__ ("l.sys 1"
110                               : "=r"(r11)
111                               : "r"(r11), "r"(r3), "r"(r4), "r"(r5), "r"(r6),
112                                 "r"(r7), "r"(r8)
113                               : "memory",
114                                 "r12", "r13", "r15", "r17", "r19", "r21",
115                                 "r23", "r25", "r27", "r29", "r31");
116         return r11;
117 }
118
119 #else
120
121 #undef SYSCALL_NO_INLINE
122 #define SYSCALL_NO_INLINE
123
124 #endif