fix up lfs64 junk for preadv/pwritev
[musl] / arch / i386 / 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_SSLEN 8
7
8 static inline long __syscall0(long n)
9 {
10         unsigned long __ret;
11         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n) : "memory");
12         return __ret;
13 }
14
15 #ifndef __PIC__
16
17 static inline long __syscall1(long n, long a1)
18 {
19         unsigned long __ret;
20         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n), "b"(a1) : "memory");
21         return __ret;
22 }
23
24 static inline long __syscall2(long n, long a1, long a2)
25 {
26         unsigned long __ret;
27         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2) : "memory");
28         return __ret;
29 }
30
31 static inline long __syscall3(long n, long a1, long a2, long a3)
32 {
33         unsigned long __ret;
34         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3) : "memory");
35         return __ret;
36 }
37
38 static inline long __syscall4(long n, long a1, long a2, long a3, long a4)
39 {
40         unsigned long __ret;
41         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
42         return __ret;
43 }
44
45 static inline long __syscall5(long n, long a1, long a2, long a3, long a4, long a5)
46 {
47         unsigned long __ret;
48         __asm__ __volatile__ ("int $128" : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
49         return __ret;
50 }
51
52 static inline long __syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
53 {
54         unsigned long __ret;
55         __asm__ __volatile__ ("pushl %7 ; pushl %%ebp ; mov 4(%%esp),%%ebp ; int $128 ; popl %%ebp ; popl %%ecx"
56                 : "=a"(__ret) : "a"(n), "b"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5), "g"(a6) : "memory");
57         return __ret;
58 }
59
60 #else
61
62 static inline long __syscall1(long n, long a1)
63 {
64         unsigned long __ret;
65         __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
66                 : "=a"(__ret) : "a"(n), "d"(a1) : "memory");
67         return __ret;
68 }
69
70 static inline long __syscall2(long n, long a1, long a2)
71 {
72         unsigned long __ret;
73         __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
74                 : "=a"(__ret) : "a"(n), "d"(a1), "c"(a2) : "memory");
75         return __ret;
76 }
77
78 static inline long __syscall3(long n, long a1, long a2, long a3)
79 {
80         unsigned long __ret;
81         __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
82                 : "=a"(__ret) : "a"(n), "S"(a1), "c"(a2), "d"(a3) : "memory");
83         return __ret;
84 }
85
86 static inline long __syscall4(long n, long a1, long a2, long a3, long a4)
87 {
88         unsigned long __ret;
89         __asm__ __volatile__ ("xchg %2,%%ebx ; int $128 ; xchg %2,%%ebx"
90                 : "=a"(__ret) : "a"(n), "D"(a1), "c"(a2), "d"(a3), "S"(a4) : "memory");
91         return __ret;
92 }
93
94 #if 0
95 static inline long __syscall5(long n, long a1, long a2, long a3, long a4, long a5)
96 {
97         unsigned long __ret;
98         __asm__ __volatile__ ("pushl %2 ; pushl %%ebx ; mov 4(%%esp),%%ebx ; int $128 ; popl %%ebx ; popl %%ecx"
99                 : "=a"(__ret) : "a"(n), "g"(a1), "c"(a2), "d"(a3), "S"(a4), "D"(a5) : "memory");
100         return __ret;
101 }
102 #else
103 static inline long __syscall5(long n, long a1, long a2, long a3, long a4, long a5)
104 {
105         return (__syscall)(n, a1, a2, a3, a4, a5);
106 }
107 #endif
108
109 static inline long __syscall6(long n, long a1, long a2, long a3, long a4, long a5, long a6)
110 {
111         return (__syscall)(n, a1, a2, a3, a4, a5, a6);
112 }
113
114 #endif
115
116
117 #define __SC_socket      1
118 #define __SC_bind        2
119 #define __SC_connect     3
120 #define __SC_listen      4
121 #define __SC_accept      5
122 #define __SC_getsockname 6
123 #define __SC_getpeername 7
124 #define __SC_socketpair  8
125 #define __SC_send        9
126 #define __SC_recv        10
127 #define __SC_sendto      11
128 #define __SC_recvfrom    12
129 #define __SC_shutdown    13
130 #define __SC_setsockopt  14
131 #define __SC_getsockopt  15
132 #define __SC_sendmsg     16
133 #define __SC_recvmsg     17
134 #define __SC_accept4     18
135 #define __SC_recvmmsg    19
136 #define __SC_sendmmsg    20