xref: /third_party/musl/arch/sh/syscall_arch.h (revision 570af302)
1570af302Sopenharmony_ci#define __SYSCALL_LL_E(x) \
2570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[0], \
3570af302Sopenharmony_ci((union { long long ll; long l[2]; }){ .ll = x }).l[1]
4570af302Sopenharmony_ci#define __SYSCALL_LL_O(x) __SYSCALL_LL_E((x))
5570af302Sopenharmony_ci#define __SYSCALL_LL_PRW(x) 0, __SYSCALL_LL_E((x))
6570af302Sopenharmony_ci
7570af302Sopenharmony_ci/* The extra OR instructions are to work around a hardware bug:
8570af302Sopenharmony_ci * http://documentation.renesas.com/doc/products/mpumcu/tu/tnsh7456ae.pdf
9570af302Sopenharmony_ci */
10570af302Sopenharmony_ci#define __asm_syscall(trapno, ...) do {   \
11570af302Sopenharmony_ci	__asm__ __volatile__ (                \
12570af302Sopenharmony_ci		"trapa #31\n"            \
13570af302Sopenharmony_ci		"or r0, r0\n"                     \
14570af302Sopenharmony_ci		"or r0, r0\n"                     \
15570af302Sopenharmony_ci		"or r0, r0\n"                     \
16570af302Sopenharmony_ci		"or r0, r0\n"                     \
17570af302Sopenharmony_ci		"or r0, r0\n"                     \
18570af302Sopenharmony_ci	: "=r"(r0) : __VA_ARGS__ : "memory"); \
19570af302Sopenharmony_ci	return r0;                            \
20570af302Sopenharmony_ci	} while (0)
21570af302Sopenharmony_ci
22570af302Sopenharmony_cistatic inline long __syscall0(long n)
23570af302Sopenharmony_ci{
24570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
25570af302Sopenharmony_ci	register long r0 __asm__("r0");
26570af302Sopenharmony_ci	__asm_syscall(16, "r"(r3));
27570af302Sopenharmony_ci}
28570af302Sopenharmony_ci
29570af302Sopenharmony_cistatic inline long __syscall1(long n, long a)
30570af302Sopenharmony_ci{
31570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
32570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
33570af302Sopenharmony_ci	register long r0 __asm__("r0");
34570af302Sopenharmony_ci	__asm_syscall(17, "r"(r3), "r"(r4));
35570af302Sopenharmony_ci}
36570af302Sopenharmony_ci
37570af302Sopenharmony_cistatic inline long __syscall2(long n, long a, long b)
38570af302Sopenharmony_ci{
39570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
40570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
41570af302Sopenharmony_ci	register long r5 __asm__("r5") = b;
42570af302Sopenharmony_ci	register long r0 __asm__("r0");
43570af302Sopenharmony_ci	__asm_syscall(18, "r"(r3), "r"(r4), "r"(r5));
44570af302Sopenharmony_ci}
45570af302Sopenharmony_ci
46570af302Sopenharmony_cistatic inline long __syscall3(long n, long a, long b, long c)
47570af302Sopenharmony_ci{
48570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
49570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
50570af302Sopenharmony_ci	register long r5 __asm__("r5") = b;
51570af302Sopenharmony_ci	register long r6 __asm__("r6") = c;
52570af302Sopenharmony_ci	register long r0 __asm__("r0");
53570af302Sopenharmony_ci	__asm_syscall(19, "r"(r3), "r"(r4), "r"(r5), "r"(r6));
54570af302Sopenharmony_ci}
55570af302Sopenharmony_ci
56570af302Sopenharmony_cistatic inline long __syscall4(long n, long a, long b, long c, long d)
57570af302Sopenharmony_ci{
58570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
59570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
60570af302Sopenharmony_ci	register long r5 __asm__("r5") = b;
61570af302Sopenharmony_ci	register long r6 __asm__("r6") = c;
62570af302Sopenharmony_ci	register long r7 __asm__("r7") = d;
63570af302Sopenharmony_ci	register long r0 __asm__("r0");
64570af302Sopenharmony_ci	__asm_syscall(20, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7));
65570af302Sopenharmony_ci}
66570af302Sopenharmony_ci
67570af302Sopenharmony_cistatic inline long __syscall5(long n, long a, long b, long c, long d, long e)
68570af302Sopenharmony_ci{
69570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
70570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
71570af302Sopenharmony_ci	register long r5 __asm__("r5") = b;
72570af302Sopenharmony_ci	register long r6 __asm__("r6") = c;
73570af302Sopenharmony_ci	register long r7 __asm__("r7") = d;
74570af302Sopenharmony_ci	register long r0 __asm__("r0") = e;
75570af302Sopenharmony_ci	__asm_syscall(21, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0));
76570af302Sopenharmony_ci}
77570af302Sopenharmony_ci
78570af302Sopenharmony_cistatic inline long __syscall6(long n, long a, long b, long c, long d, long e, long f)
79570af302Sopenharmony_ci{
80570af302Sopenharmony_ci	register long r3 __asm__("r3") = n;
81570af302Sopenharmony_ci	register long r4 __asm__("r4") = a;
82570af302Sopenharmony_ci	register long r5 __asm__("r5") = b;
83570af302Sopenharmony_ci	register long r6 __asm__("r6") = c;
84570af302Sopenharmony_ci	register long r7 __asm__("r7") = d;
85570af302Sopenharmony_ci	register long r0 __asm__("r0") = e;
86570af302Sopenharmony_ci	register long r1 __asm__("r1") = f;
87570af302Sopenharmony_ci	__asm_syscall(22, "r"(r3), "r"(r4), "r"(r5), "r"(r6), "r"(r7), "0"(r0), "r"(r1));
88570af302Sopenharmony_ci}
89570af302Sopenharmony_ci
90570af302Sopenharmony_ci#define SYSCALL_IPC_BROKEN_MODE
91570af302Sopenharmony_ci
92570af302Sopenharmony_ci#define SIOCGSTAMP_OLD   (2U<<30 | 's'<<8 | 100 | 8<<16)
93570af302Sopenharmony_ci#define SIOCGSTAMPNS_OLD (2U<<30 | 's'<<8 | 101 | 8<<16)
94