xref: /aosp_15_r20/external/liburing/src/arch/aarch64/syscall.h (revision 25da2bea747f3a93b4c30fd9708b0618ef55a0e6)
1*25da2beaSAndroid Build Coastguard Worker /* SPDX-License-Identifier: MIT */
2*25da2beaSAndroid Build Coastguard Worker 
3*25da2beaSAndroid Build Coastguard Worker #ifndef __INTERNAL__LIBURING_SYSCALL_H
4*25da2beaSAndroid Build Coastguard Worker 	#error "This file should be included from src/syscall.h (liburing)"
5*25da2beaSAndroid Build Coastguard Worker #endif
6*25da2beaSAndroid Build Coastguard Worker 
7*25da2beaSAndroid Build Coastguard Worker #ifndef LIBURING_ARCH_AARCH64_SYSCALL_H
8*25da2beaSAndroid Build Coastguard Worker #define LIBURING_ARCH_AARCH64_SYSCALL_H
9*25da2beaSAndroid Build Coastguard Worker 
10*25da2beaSAndroid Build Coastguard Worker #if defined(__aarch64__)
11*25da2beaSAndroid Build Coastguard Worker 
12*25da2beaSAndroid Build Coastguard Worker #define __do_syscallN(...) ({						\
13*25da2beaSAndroid Build Coastguard Worker 	__asm__ volatile (						\
14*25da2beaSAndroid Build Coastguard Worker 		"svc 0"							\
15*25da2beaSAndroid Build Coastguard Worker 		: "=r"(x0)						\
16*25da2beaSAndroid Build Coastguard Worker 		: __VA_ARGS__						\
17*25da2beaSAndroid Build Coastguard Worker 		: "memory", "cc");					\
18*25da2beaSAndroid Build Coastguard Worker 	(long) x0;							\
19*25da2beaSAndroid Build Coastguard Worker })
20*25da2beaSAndroid Build Coastguard Worker 
21*25da2beaSAndroid Build Coastguard Worker #define __do_syscall0(__n) ({						\
22*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
23*25da2beaSAndroid Build Coastguard Worker 	register long x0 __asm__("x0");					\
24*25da2beaSAndroid Build Coastguard Worker 									\
25*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8));					\
26*25da2beaSAndroid Build Coastguard Worker })
27*25da2beaSAndroid Build Coastguard Worker 
28*25da2beaSAndroid Build Coastguard Worker #define __do_syscall1(__n, __a) ({					\
29*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
30*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
31*25da2beaSAndroid Build Coastguard Worker 									\
32*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0));				\
33*25da2beaSAndroid Build Coastguard Worker })
34*25da2beaSAndroid Build Coastguard Worker 
35*25da2beaSAndroid Build Coastguard Worker #define __do_syscall2(__n, __a, __b) ({					\
36*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
37*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
38*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__b) x1 __asm__("x1") = __b;		\
39*25da2beaSAndroid Build Coastguard Worker 									\
40*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0), "r" (x1));			\
41*25da2beaSAndroid Build Coastguard Worker })
42*25da2beaSAndroid Build Coastguard Worker 
43*25da2beaSAndroid Build Coastguard Worker #define __do_syscall3(__n, __a, __b, __c) ({				\
44*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
45*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
46*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__b) x1 __asm__("x1") = __b;		\
47*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__c) x2 __asm__("x2") = __c;		\
48*25da2beaSAndroid Build Coastguard Worker 									\
49*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2));		\
50*25da2beaSAndroid Build Coastguard Worker })
51*25da2beaSAndroid Build Coastguard Worker 
52*25da2beaSAndroid Build Coastguard Worker #define __do_syscall4(__n, __a, __b, __c, __d) ({			\
53*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
54*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
55*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__b) x1 __asm__("x1") = __b;		\
56*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__c) x2 __asm__("x2") = __c;		\
57*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__d) x3 __asm__("x3") = __d;		\
58*25da2beaSAndroid Build Coastguard Worker 									\
59*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3));\
60*25da2beaSAndroid Build Coastguard Worker })
61*25da2beaSAndroid Build Coastguard Worker 
62*25da2beaSAndroid Build Coastguard Worker #define __do_syscall5(__n, __a, __b, __c, __d, __e) ({			\
63*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
64*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
65*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__b) x1 __asm__("x1") = __b;		\
66*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__c) x2 __asm__("x2") = __c;		\
67*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__d) x3 __asm__("x3") = __d;		\
68*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__e) x4 __asm__("x4") = __e;		\
69*25da2beaSAndroid Build Coastguard Worker 									\
70*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3),	\
71*25da2beaSAndroid Build Coastguard Worker 			"r"(x4));					\
72*25da2beaSAndroid Build Coastguard Worker })
73*25da2beaSAndroid Build Coastguard Worker 
74*25da2beaSAndroid Build Coastguard Worker #define __do_syscall6(__n, __a, __b, __c, __d, __e, __f) ({		\
75*25da2beaSAndroid Build Coastguard Worker 	register long x8 __asm__("x8") = __n;				\
76*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__a) x0 __asm__("x0") = __a;		\
77*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__b) x1 __asm__("x1") = __b;		\
78*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__c) x2 __asm__("x2") = __c;		\
79*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__d) x3 __asm__("x3") = __d;		\
80*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__e) x4 __asm__("x4") = __e;		\
81*25da2beaSAndroid Build Coastguard Worker 	register __typeof__(__f) x5 __asm__("x5") = __f;		\
82*25da2beaSAndroid Build Coastguard Worker 									\
83*25da2beaSAndroid Build Coastguard Worker 	__do_syscallN("r" (x8), "0" (x0), "r" (x1), "r" (x2), "r" (x3),	\
84*25da2beaSAndroid Build Coastguard Worker 			"r" (x4), "r"(x5));				\
85*25da2beaSAndroid Build Coastguard Worker })
86*25da2beaSAndroid Build Coastguard Worker 
87*25da2beaSAndroid Build Coastguard Worker #include "../syscall-defs.h"
88*25da2beaSAndroid Build Coastguard Worker 
89*25da2beaSAndroid Build Coastguard Worker #else /* #if defined(__aarch64__) */
90*25da2beaSAndroid Build Coastguard Worker 
91*25da2beaSAndroid Build Coastguard Worker #include "../generic/syscall.h"
92*25da2beaSAndroid Build Coastguard Worker 
93*25da2beaSAndroid Build Coastguard Worker #endif /* #if defined(__aarch64__) */
94*25da2beaSAndroid Build Coastguard Worker 
95*25da2beaSAndroid Build Coastguard Worker #endif /* #ifndef LIBURING_ARCH_AARCH64_SYSCALL_H */
96