1extern void abort (void);
2
3#ifdef __GNUC__
4#define va_list __builtin_va_list
5#define va_start __builtin_va_start
6#define va_arg __builtin_va_arg
7#define va_end __builtin_va_end
8#else
9#include <stdarg.h>
10#endif
11
12#if USE_MEMCMP
13/* For comparing vectors.  */
14#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \
15void NAME##_f0 (TYPE a, PADT b)						\
16{									\
17  if (memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)			\
18    abort ();								\
19}									\
20									\
21void NAME##_f1 (PADT z0, TYPE a, PADT b)				\
22{									\
23  if (z0 != (PADT) 0							\
24      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
25    abort ();								\
26}									\
27									\
28void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b)			\
29{									\
30  if (z0 != (PADT) 0							\
31      || z1 != (PADT) 0							\
32      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
33    abort ();								\
34}									\
35									\
36void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b)		\
37{									\
38  if (z0 != (PADT) 0							\
39      || z1 != (PADT) 0							\
40      || z2 != (PADT) 0							\
41      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
42    abort ();								\
43}									\
44									\
45void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b)	\
46{									\
47  if (z0 != (PADT) 0							\
48      || z1 != (PADT) 0							\
49      || z2 != (PADT) 0							\
50      || z3 != (PADT) 0							\
51      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
52    abort ();								\
53}									\
54									\
55void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a,	\
56		PADT b)							\
57{									\
58  if (z0 != (PADT) 0							\
59      || z1 != (PADT) 0							\
60      || z2 != (PADT) 0							\
61      || z3 != (PADT) 0							\
62      || z4 != (PADT) 0							\
63      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
64    abort ();								\
65}									\
66									\
67void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
68		TYPE a, PADT b)						\
69{									\
70  if (z0 != (PADT) 0							\
71      || z1 != (PADT) 0							\
72      || z2 != (PADT) 0							\
73      || z3 != (PADT) 0							\
74      || z4 != (PADT) 0							\
75      || z5 != (PADT) 0							\
76      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
77    abort ();								\
78}									\
79									\
80void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
81		PADT z6, TYPE a, PADT b)				\
82{									\
83  if (z0 != (PADT) 0							\
84      || z1 != (PADT) 0							\
85      || z2 != (PADT) 0							\
86      || z3 != (PADT) 0							\
87      || z4 != (PADT) 0							\
88      || z5 != (PADT) 0							\
89      || z6 != (PADT) 0							\
90      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
91    abort ();								\
92}									\
93									\
94void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
95		PADT z6, PADT z7, TYPE a, PADT b)			\
96{									\
97  if (z0 != (PADT) 0							\
98      || z1 != (PADT) 0							\
99      || z2 != (PADT) 0							\
100      || z3 != (PADT) 0							\
101      || z4 != (PADT) 0							\
102      || z5 != (PADT) 0							\
103      || z6 != (PADT) 0							\
104      || z7 != (PADT) 0							\
105      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
106    abort ();								\
107}									\
108									\
109void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
110		PADT z6, PADT z7, PADT z8, TYPE a, PADT b)		\
111{									\
112  if (z0 != (PADT) 0							\
113      || z1 != (PADT) 0							\
114      || z2 != (PADT) 0							\
115      || z3 != (PADT) 0							\
116      || z4 != (PADT) 0							\
117      || z5 != (PADT) 0							\
118      || z6 != (PADT) 0							\
119      || z7 != (PADT) 0							\
120      || z8 != (PADT) 0							\
121      || memcmp (&a, &VAL, sizeof (a)) != 0 || b != VAL2)		\
122    abort ();								\
123}									\
124									\
125void NAME##_fv (int n, ...)						\
126{									\
127  va_list ap;								\
128  TYPE x;								\
129  va_start (ap, n);							\
130									\
131  while (n-- != 0)							\
132    if (va_arg (ap, PADT) != (PADT) 0)					\
133      abort ();								\
134									\
135  x = va_arg (ap, TYPE);						\
136  if (memcmp (&x, &VAL, sizeof (x)) != 0 )				\
137    abort ();								\
138									\
139  if (va_arg (ap, PADT) != VAL2)					\
140    abort ();								\
141									\
142  va_end (ap);								\
143}
144
145#else
146
147#define TEST_FUNCS(NAME, TYPE, PADT, VAL, VAL2) \
148void NAME##_f0 (TYPE a, PADT b)						\
149{									\
150  if (a != VAL || b != VAL2)						\
151    abort ();								\
152}									\
153									\
154void NAME##_f1 (PADT z0, TYPE a, PADT b)				\
155{									\
156  if (z0 != (PADT) 0							\
157      || a != VAL || b != VAL2)						\
158    abort ();								\
159}									\
160									\
161void NAME##_f2 (PADT z0, PADT z1, TYPE a, PADT b)			\
162{									\
163  if (z0 != (PADT) 0							\
164      || z1 != (PADT) 0							\
165      || a != VAL || b != VAL2)						\
166    abort ();								\
167}									\
168									\
169void NAME##_f3 (PADT z0, PADT z1, PADT z2, TYPE a, PADT b)		\
170{									\
171  if (z0 != (PADT) 0							\
172      || z1 != (PADT) 0							\
173      || z2 != (PADT) 0							\
174      || a != VAL || b != VAL2)						\
175    abort ();								\
176}									\
177									\
178void NAME##_f4 (PADT z0, PADT z1, PADT z2, PADT z3, TYPE a, PADT b)	\
179{									\
180  if (z0 != (PADT) 0							\
181      || z1 != (PADT) 0							\
182      || z2 != (PADT) 0							\
183      || z3 != (PADT) 0							\
184      || a != VAL || b != VAL2)						\
185    abort ();								\
186}									\
187									\
188void NAME##_f5 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, TYPE a,	\
189		PADT b)							\
190{									\
191  if (z0 != (PADT) 0							\
192      || z1 != (PADT) 0							\
193      || z2 != (PADT) 0							\
194      || z3 != (PADT) 0							\
195      || z4 != (PADT) 0							\
196      || a != VAL || b != VAL2)						\
197    abort ();								\
198}									\
199									\
200void NAME##_f6 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
201		TYPE a, PADT b)						\
202{									\
203  if (z0 != (PADT) 0							\
204      || z1 != (PADT) 0							\
205      || z2 != (PADT) 0							\
206      || z3 != (PADT) 0							\
207      || z4 != (PADT) 0							\
208      || z5 != (PADT) 0							\
209      || a != VAL || b != VAL2)						\
210    abort ();								\
211}									\
212									\
213void NAME##_f7 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
214		PADT z6, TYPE a, PADT b)				\
215{									\
216  if (z0 != (PADT) 0							\
217      || z1 != (PADT) 0							\
218      || z2 != (PADT) 0							\
219      || z3 != (PADT) 0							\
220      || z4 != (PADT) 0							\
221      || z5 != (PADT) 0							\
222      || z6 != (PADT) 0							\
223      || a != VAL || b != VAL2)						\
224    abort ();								\
225}									\
226									\
227void NAME##_f8 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
228		PADT z6, PADT z7, TYPE a, PADT b)			\
229{									\
230  if (z0 != (PADT) 0							\
231      || z1 != (PADT) 0							\
232      || z2 != (PADT) 0							\
233      || z3 != (PADT) 0							\
234      || z4 != (PADT) 0							\
235      || z5 != (PADT) 0							\
236      || z6 != (PADT) 0							\
237      || z7 != (PADT) 0							\
238      || a != VAL || b != VAL2)						\
239    abort ();								\
240}									\
241									\
242void NAME##_f9 (PADT z0, PADT z1, PADT z2, PADT z3, PADT z4, PADT z5,	\
243		PADT z6, PADT z7, PADT z8, TYPE a, PADT b)		\
244{									\
245  if (z0 != (PADT) 0							\
246      || z1 != (PADT) 0							\
247      || z2 != (PADT) 0							\
248      || z3 != (PADT) 0							\
249      || z4 != (PADT) 0							\
250      || z5 != (PADT) 0							\
251      || z6 != (PADT) 0							\
252      || z7 != (PADT) 0							\
253      || z8 != (PADT) 0							\
254      || a != VAL || b != VAL2)						\
255    abort ();								\
256}									\
257									\
258void NAME##_fv (int n, ...)						\
259{									\
260  va_list ap;								\
261									\
262  va_start (ap, n);							\
263									\
264  while (n-- != 0)							\
265    if (va_arg (ap, PADT) != (PADT) 0)					\
266      abort ();								\
267									\
268  if (va_arg (ap, TYPE) != VAL)						\
269    abort ();								\
270									\
271  if (va_arg (ap, PADT) != VAL2)					\
272    abort ();								\
273									\
274  va_end (ap);								\
275}
276
277#endif
278