summaryrefslogtreecommitdiff
path: root/libaio-0.3.109/src/syscall-s390.h
blob: 3ec5ee34ee9cb1a4799c5fc05637924e76858ebb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#define __NR_io_setup		243
#define __NR_io_destroy		244
#define __NR_io_getevents	245
#define __NR_io_submit		246
#define __NR_io_cancel		247

#define io_svc_clobber "1", "cc", "memory"

#define io_syscall1(type,fname,sname,type1,arg1)		\
type fname(type1 arg1) {					\
	register type1 __arg1 asm("2") = arg1;			\
	register long __svcres asm("2");			\
	long __res;						\
	__asm__ __volatile__ (					\
		"    .if %1 < 256\n"				\
		"    svc %b1\n"					\
		"    .else\n"					\
		"    la  %%r1,%1\n"				\
		"    .svc 0\n"					\
		"    .endif"					\
		: "=d" (__svcres)				\
		: "i" (__NR_##sname),				\
		  "0" (__arg1)					\
		: io_svc_clobber );				\
	__res = __svcres;					\
	return (type) __res;					\
}

#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2)	\
type fname(type1 arg1, type2 arg2) {				\
	register type1 __arg1 asm("2") = arg1;			\
	register type2 __arg2 asm("3") = arg2;			\
	register long __svcres asm("2");			\
	long __res;						\
	__asm__ __volatile__ (					\
		"    .if %1 < 256\n"				\
		"    svc %b1\n"					\
		"    .else\n"					\
		"    la %%r1,%1\n"				\
		"    svc 0\n"					\
		"    .endif"					\
		: "=d" (__svcres)				\
		: "i" (__NR_##sname),				\
		  "0" (__arg1),					\
		  "d" (__arg2)					\
		: io_svc_clobber );				\
	__res = __svcres;					\
	return (type) __res;					\
}

#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,	\
		    type3,arg3)					\
type fname(type1 arg1, type2 arg2, type3 arg3) {		\
	register type1 __arg1 asm("2") = arg1;			\
	register type2 __arg2 asm("3") = arg2;			\
	register type3 __arg3 asm("4") = arg3;			\
	register long __svcres asm("2");			\
	long __res;						\
	__asm__ __volatile__ (					\
		"    .if %1 < 256\n"				\
		"    svc %b1\n"					\
		"    .else\n"					\
		"    la  %%r1,%1\n"				\
		"    svc 0\n"					\
		"    .endif"					\
		: "=d" (__svcres)				\
		: "i" (__NR_##sname),				\
		  "0" (__arg1),					\
		  "d" (__arg2),					\
		  "d" (__arg3)					\
		: io_svc_clobber );				\
	__res = __svcres;					\
	return (type) __res;					\
}

#define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,	\
		    type3,arg3,type4,arg4)			\
type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4) {	\
	register type1 __arg1 asm("2") = arg1;			\
	register type2 __arg2 asm("3") = arg2;			\
	register type3 __arg3 asm("4") = arg3;			\
	register type4 __arg4 asm("5") = arg4;			\
	register long __svcres asm("2");			\
	long __res;						\
	__asm__ __volatile__ (					\
		"    .if %1 < 256\n"				\
		"    svc %b1\n"					\
		"    .else\n"					\
		"    la  %%r1,%1\n"				\
		"    svc 0\n"					\
		"    .endif"					\
		: "=d" (__svcres)				\
		: "i" (__NR_##sname),				\
		  "0" (__arg1),					\
		  "d" (__arg2),					\
		  "d" (__arg3),					\
		  "d" (__arg4)					\
		: io_svc_clobber );				\
	__res = __svcres;					\
	return (type) __res;					\
}

#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,	\
		    type3,arg3,type4,arg4,type5,arg5)		\
type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4,	\
	   type5 arg5) {					\
	register type1 __arg1 asm("2") = arg1;			\
	register type2 __arg2 asm("3") = arg2;			\
	register type3 __arg3 asm("4") = arg3;			\
	register type4 __arg4 asm("5") = arg4;			\
	register type5 __arg5 asm("6") = arg5;			\
	register long __svcres asm("2");			\
	long __res;						\
	__asm__ __volatile__ (					\
		"    .if %1 < 256\n"				\
		"    svc %b1\n"					\
		"    .else\n"					\
		"    la  %%r1,%1\n"				\
		"    svc 0\n"					\
		"    .endif"					\
		: "=d" (__svcres)				\
		: "i" (__NR_##sname),				\
		  "0" (__arg1),					\
		  "d" (__arg2),					\
		  "d" (__arg3),					\
		  "d" (__arg4),					\
		  "d" (__arg5)					\
		: io_svc_clobber );				\
	__res = __svcres;					\
	return (type) __res;					\
}