1 #include <stdio.h>
2 #include "avx512fp16-ymm-check.h"
3 #include "args.h"
4 
5 struct IntegerRegisters iregs;
6 struct FloatRegisters fregs;
7 unsigned int num_iregs, num_fregs;
8 
9 /* This struct holds values for argument checking.  */
10 struct
11 {
12   YMM_T i0, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15,
13     i16, i17, i18, i19, i20, i21, i22, i23;
14 } values;
15 
16 char *pass;
17 int failed = 0;
18 
19 #undef assert
20 #define assert(c) do { \
21   if (!(c)) {failed++; printf ("failed %s\n", pass); } \
22 } while (0)
23 
24 #define compare(X1,X2,T) do { \
25   assert (memcmp (&X1, &X2, sizeof (T)) == 0); \
26 } while (0)
27 
fun_check_passing_m256_8_values(__m256 i0 ATTRIBUTE_UNUSED,__m256 i1 ATTRIBUTE_UNUSED,__m256 i2 ATTRIBUTE_UNUSED,__m256 i3 ATTRIBUTE_UNUSED,__m256 i4 ATTRIBUTE_UNUSED,__m256 i5 ATTRIBUTE_UNUSED,__m256 i6 ATTRIBUTE_UNUSED,__m256 i7 ATTRIBUTE_UNUSED)28 fun_check_passing_m256_8_values (__m256 i0 ATTRIBUTE_UNUSED,
29 				 __m256 i1 ATTRIBUTE_UNUSED,
30 				 __m256 i2 ATTRIBUTE_UNUSED,
31 				 __m256 i3 ATTRIBUTE_UNUSED,
32 				 __m256 i4 ATTRIBUTE_UNUSED,
33 				 __m256 i5 ATTRIBUTE_UNUSED,
34 				 __m256 i6 ATTRIBUTE_UNUSED,
35 				 __m256 i7 ATTRIBUTE_UNUSED)
36 {
37   /* Check argument values.  */
38   compare (values.i0, i0, __m256);
39   compare (values.i1, i1, __m256);
40   compare (values.i2, i2, __m256);
41   compare (values.i3, i3, __m256);
42   compare (values.i4, i4, __m256);
43   compare (values.i5, i5, __m256);
44   compare (values.i6, i6, __m256);
45   compare (values.i7, i7, __m256);
46 }
47 
fun_check_passing_m256h_8_values(__m256h i0 ATTRIBUTE_UNUSED,__m256h i1 ATTRIBUTE_UNUSED,__m256h i2 ATTRIBUTE_UNUSED,__m256h i3 ATTRIBUTE_UNUSED,__m256h i4 ATTRIBUTE_UNUSED,__m256h i5 ATTRIBUTE_UNUSED,__m256h i6 ATTRIBUTE_UNUSED,__m256h i7 ATTRIBUTE_UNUSED)48 fun_check_passing_m256h_8_values (__m256h i0 ATTRIBUTE_UNUSED,
49 				  __m256h i1 ATTRIBUTE_UNUSED,
50 				  __m256h i2 ATTRIBUTE_UNUSED,
51 				  __m256h i3 ATTRIBUTE_UNUSED,
52 				  __m256h i4 ATTRIBUTE_UNUSED,
53 				  __m256h i5 ATTRIBUTE_UNUSED,
54 				  __m256h i6 ATTRIBUTE_UNUSED,
55 				  __m256h i7 ATTRIBUTE_UNUSED)
56 {
57   /* Check argument values.  */
58   compare (values.i0, i0, __m256h);
59   compare (values.i1, i1, __m256h);
60   compare (values.i2, i2, __m256h);
61   compare (values.i3, i3, __m256h);
62   compare (values.i4, i4, __m256h);
63   compare (values.i5, i5, __m256h);
64   compare (values.i6, i6, __m256h);
65   compare (values.i7, i7, __m256h);
66 }
67 
68 void
fun_check_passing_m256_8_regs(__m256 i0 ATTRIBUTE_UNUSED,__m256 i1 ATTRIBUTE_UNUSED,__m256 i2 ATTRIBUTE_UNUSED,__m256 i3 ATTRIBUTE_UNUSED,__m256 i4 ATTRIBUTE_UNUSED,__m256 i5 ATTRIBUTE_UNUSED,__m256 i6 ATTRIBUTE_UNUSED,__m256 i7 ATTRIBUTE_UNUSED)69 fun_check_passing_m256_8_regs (__m256 i0 ATTRIBUTE_UNUSED,
70 			       __m256 i1 ATTRIBUTE_UNUSED,
71 			       __m256 i2 ATTRIBUTE_UNUSED,
72 			       __m256 i3 ATTRIBUTE_UNUSED,
73 			       __m256 i4 ATTRIBUTE_UNUSED,
74 			       __m256 i5 ATTRIBUTE_UNUSED,
75 			       __m256 i6 ATTRIBUTE_UNUSED,
76 			       __m256 i7 ATTRIBUTE_UNUSED)
77 {
78   /* Check register contents.  */
79   check_m256_arguments;
80 }
81 
82 void
fun_check_passing_m256h_8_regs(__m256h i0 ATTRIBUTE_UNUSED,__m256h i1 ATTRIBUTE_UNUSED,__m256h i2 ATTRIBUTE_UNUSED,__m256h i3 ATTRIBUTE_UNUSED,__m256h i4 ATTRIBUTE_UNUSED,__m256h i5 ATTRIBUTE_UNUSED,__m256h i6 ATTRIBUTE_UNUSED,__m256h i7 ATTRIBUTE_UNUSED)83 fun_check_passing_m256h_8_regs (__m256h i0 ATTRIBUTE_UNUSED,
84 				__m256h i1 ATTRIBUTE_UNUSED,
85 				__m256h i2 ATTRIBUTE_UNUSED,
86 				__m256h i3 ATTRIBUTE_UNUSED,
87 				__m256h i4 ATTRIBUTE_UNUSED,
88 				__m256h i5 ATTRIBUTE_UNUSED,
89 				__m256h i6 ATTRIBUTE_UNUSED,
90 				__m256h i7 ATTRIBUTE_UNUSED)
91 {
92   /* Check register contents.  */
93   check_m256_arguments;
94 }
95 
96 void
fun_check_passing_m256_20_values(__m256 i0 ATTRIBUTE_UNUSED,__m256 i1 ATTRIBUTE_UNUSED,__m256 i2 ATTRIBUTE_UNUSED,__m256 i3 ATTRIBUTE_UNUSED,__m256 i4 ATTRIBUTE_UNUSED,__m256 i5 ATTRIBUTE_UNUSED,__m256 i6 ATTRIBUTE_UNUSED,__m256 i7 ATTRIBUTE_UNUSED,__m256 i8 ATTRIBUTE_UNUSED,__m256 i9 ATTRIBUTE_UNUSED,__m256 i10 ATTRIBUTE_UNUSED,__m256 i11 ATTRIBUTE_UNUSED,__m256 i12 ATTRIBUTE_UNUSED,__m256 i13 ATTRIBUTE_UNUSED,__m256 i14 ATTRIBUTE_UNUSED,__m256 i15 ATTRIBUTE_UNUSED,__m256 i16 ATTRIBUTE_UNUSED,__m256 i17 ATTRIBUTE_UNUSED,__m256 i18 ATTRIBUTE_UNUSED,__m256 i19 ATTRIBUTE_UNUSED)97 fun_check_passing_m256_20_values (__m256 i0 ATTRIBUTE_UNUSED,
98 				  __m256 i1 ATTRIBUTE_UNUSED,
99 				  __m256 i2 ATTRIBUTE_UNUSED,
100 				  __m256 i3 ATTRIBUTE_UNUSED,
101 				  __m256 i4 ATTRIBUTE_UNUSED,
102 				  __m256 i5 ATTRIBUTE_UNUSED,
103 				  __m256 i6 ATTRIBUTE_UNUSED,
104 				  __m256 i7 ATTRIBUTE_UNUSED,
105 				  __m256 i8 ATTRIBUTE_UNUSED,
106 				  __m256 i9 ATTRIBUTE_UNUSED,
107 				  __m256 i10 ATTRIBUTE_UNUSED,
108 				  __m256 i11 ATTRIBUTE_UNUSED,
109 				  __m256 i12 ATTRIBUTE_UNUSED,
110 				  __m256 i13 ATTRIBUTE_UNUSED,
111 				  __m256 i14 ATTRIBUTE_UNUSED,
112 				  __m256 i15 ATTRIBUTE_UNUSED,
113 				  __m256 i16 ATTRIBUTE_UNUSED,
114 				  __m256 i17 ATTRIBUTE_UNUSED,
115 				  __m256 i18 ATTRIBUTE_UNUSED,
116 				  __m256 i19 ATTRIBUTE_UNUSED)
117 {
118   /* Check argument values.  */
119   compare (values.i0, i0, __m256);
120   compare (values.i1, i1, __m256);
121   compare (values.i2, i2, __m256);
122   compare (values.i3, i3, __m256);
123   compare (values.i4, i4, __m256);
124   compare (values.i5, i5, __m256);
125   compare (values.i6, i6, __m256);
126   compare (values.i7, i7, __m256);
127   compare (values.i8, i8, __m256);
128   compare (values.i9, i9, __m256);
129   compare (values.i10, i10, __m256);
130   compare (values.i11, i11, __m256);
131   compare (values.i12, i12, __m256);
132   compare (values.i13, i13, __m256);
133   compare (values.i14, i14, __m256);
134   compare (values.i15, i15, __m256);
135   compare (values.i16, i16, __m256);
136   compare (values.i17, i17, __m256);
137   compare (values.i18, i18, __m256);
138   compare (values.i19, i19, __m256);
139 }
140 
141 void
fun_check_passing_m256h_20_values(__m256h i0 ATTRIBUTE_UNUSED,__m256h i1 ATTRIBUTE_UNUSED,__m256h i2 ATTRIBUTE_UNUSED,__m256h i3 ATTRIBUTE_UNUSED,__m256h i4 ATTRIBUTE_UNUSED,__m256h i5 ATTRIBUTE_UNUSED,__m256h i6 ATTRIBUTE_UNUSED,__m256h i7 ATTRIBUTE_UNUSED,__m256h i8 ATTRIBUTE_UNUSED,__m256h i9 ATTRIBUTE_UNUSED,__m256h i10 ATTRIBUTE_UNUSED,__m256h i11 ATTRIBUTE_UNUSED,__m256h i12 ATTRIBUTE_UNUSED,__m256h i13 ATTRIBUTE_UNUSED,__m256h i14 ATTRIBUTE_UNUSED,__m256h i15 ATTRIBUTE_UNUSED,__m256h i16 ATTRIBUTE_UNUSED,__m256h i17 ATTRIBUTE_UNUSED,__m256h i18 ATTRIBUTE_UNUSED,__m256h i19 ATTRIBUTE_UNUSED)142 fun_check_passing_m256h_20_values (__m256h i0 ATTRIBUTE_UNUSED,
143 				   __m256h i1 ATTRIBUTE_UNUSED,
144 				   __m256h i2 ATTRIBUTE_UNUSED,
145 				   __m256h i3 ATTRIBUTE_UNUSED,
146 				   __m256h i4 ATTRIBUTE_UNUSED,
147 				   __m256h i5 ATTRIBUTE_UNUSED,
148 				   __m256h i6 ATTRIBUTE_UNUSED,
149 				   __m256h i7 ATTRIBUTE_UNUSED,
150 				   __m256h i8 ATTRIBUTE_UNUSED,
151 				   __m256h i9 ATTRIBUTE_UNUSED,
152 				   __m256h i10 ATTRIBUTE_UNUSED,
153 				   __m256h i11 ATTRIBUTE_UNUSED,
154 				   __m256h i12 ATTRIBUTE_UNUSED,
155 				   __m256h i13 ATTRIBUTE_UNUSED,
156 				   __m256h i14 ATTRIBUTE_UNUSED,
157 				   __m256h i15 ATTRIBUTE_UNUSED,
158 				   __m256h i16 ATTRIBUTE_UNUSED,
159 				   __m256h i17 ATTRIBUTE_UNUSED,
160 				   __m256h i18 ATTRIBUTE_UNUSED,
161 				   __m256h i19 ATTRIBUTE_UNUSED)
162 {
163   /* Check argument values.  */
164   compare (values.i0, i0, __m256h);
165   compare (values.i1, i1, __m256h);
166   compare (values.i2, i2, __m256h);
167   compare (values.i3, i3, __m256h);
168   compare (values.i4, i4, __m256h);
169   compare (values.i5, i5, __m256h);
170   compare (values.i6, i6, __m256h);
171   compare (values.i7, i7, __m256h);
172   compare (values.i8, i8, __m256h);
173   compare (values.i9, i9, __m256h);
174   compare (values.i10, i10, __m256h);
175   compare (values.i11, i11, __m256h);
176   compare (values.i12, i12, __m256h);
177   compare (values.i13, i13, __m256h);
178   compare (values.i14, i14, __m256h);
179   compare (values.i15, i15, __m256h);
180   compare (values.i16, i16, __m256h);
181   compare (values.i17, i17, __m256h);
182   compare (values.i18, i18, __m256h);
183   compare (values.i19, i19, __m256h);
184 }
185 
186 void
fun_check_passing_m256_20_regs(__m256 i0 ATTRIBUTE_UNUSED,__m256 i1 ATTRIBUTE_UNUSED,__m256 i2 ATTRIBUTE_UNUSED,__m256 i3 ATTRIBUTE_UNUSED,__m256 i4 ATTRIBUTE_UNUSED,__m256 i5 ATTRIBUTE_UNUSED,__m256 i6 ATTRIBUTE_UNUSED,__m256 i7 ATTRIBUTE_UNUSED,__m256 i8 ATTRIBUTE_UNUSED,__m256 i9 ATTRIBUTE_UNUSED,__m256 i10 ATTRIBUTE_UNUSED,__m256 i11 ATTRIBUTE_UNUSED,__m256 i12 ATTRIBUTE_UNUSED,__m256 i13 ATTRIBUTE_UNUSED,__m256 i14 ATTRIBUTE_UNUSED,__m256 i15 ATTRIBUTE_UNUSED,__m256 i16 ATTRIBUTE_UNUSED,__m256 i17 ATTRIBUTE_UNUSED,__m256 i18 ATTRIBUTE_UNUSED,__m256 i19 ATTRIBUTE_UNUSED)187 fun_check_passing_m256_20_regs (__m256 i0 ATTRIBUTE_UNUSED,
188 				__m256 i1 ATTRIBUTE_UNUSED,
189 				__m256 i2 ATTRIBUTE_UNUSED,
190 				__m256 i3 ATTRIBUTE_UNUSED,
191 				__m256 i4 ATTRIBUTE_UNUSED,
192 				__m256 i5 ATTRIBUTE_UNUSED,
193 				__m256 i6 ATTRIBUTE_UNUSED,
194 				__m256 i7 ATTRIBUTE_UNUSED,
195 				__m256 i8 ATTRIBUTE_UNUSED,
196 				__m256 i9 ATTRIBUTE_UNUSED,
197 				__m256 i10 ATTRIBUTE_UNUSED,
198 				__m256 i11 ATTRIBUTE_UNUSED,
199 				__m256 i12 ATTRIBUTE_UNUSED,
200 				__m256 i13 ATTRIBUTE_UNUSED,
201 				__m256 i14 ATTRIBUTE_UNUSED,
202 				__m256 i15 ATTRIBUTE_UNUSED,
203 				__m256 i16 ATTRIBUTE_UNUSED,
204 				__m256 i17 ATTRIBUTE_UNUSED,
205 				__m256 i18 ATTRIBUTE_UNUSED,
206 				__m256 i19 ATTRIBUTE_UNUSED)
207 {
208   /* Check register contents.  */
209   check_m256_arguments;
210 }
211 
212 void
fun_check_passing_m256h_20_regs(__m256h i0 ATTRIBUTE_UNUSED,__m256h i1 ATTRIBUTE_UNUSED,__m256h i2 ATTRIBUTE_UNUSED,__m256h i3 ATTRIBUTE_UNUSED,__m256h i4 ATTRIBUTE_UNUSED,__m256h i5 ATTRIBUTE_UNUSED,__m256h i6 ATTRIBUTE_UNUSED,__m256h i7 ATTRIBUTE_UNUSED,__m256h i8 ATTRIBUTE_UNUSED,__m256h i9 ATTRIBUTE_UNUSED,__m256h i10 ATTRIBUTE_UNUSED,__m256h i11 ATTRIBUTE_UNUSED,__m256h i12 ATTRIBUTE_UNUSED,__m256h i13 ATTRIBUTE_UNUSED,__m256h i14 ATTRIBUTE_UNUSED,__m256h i15 ATTRIBUTE_UNUSED,__m256h i16 ATTRIBUTE_UNUSED,__m256h i17 ATTRIBUTE_UNUSED,__m256h i18 ATTRIBUTE_UNUSED,__m256h i19 ATTRIBUTE_UNUSED)213 fun_check_passing_m256h_20_regs (__m256h i0 ATTRIBUTE_UNUSED,
214 				 __m256h i1 ATTRIBUTE_UNUSED,
215 				 __m256h i2 ATTRIBUTE_UNUSED,
216 				 __m256h i3 ATTRIBUTE_UNUSED,
217 				 __m256h i4 ATTRIBUTE_UNUSED,
218 				 __m256h i5 ATTRIBUTE_UNUSED,
219 				 __m256h i6 ATTRIBUTE_UNUSED,
220 				 __m256h i7 ATTRIBUTE_UNUSED,
221 				 __m256h i8 ATTRIBUTE_UNUSED,
222 				 __m256h i9 ATTRIBUTE_UNUSED,
223 				 __m256h i10 ATTRIBUTE_UNUSED,
224 				 __m256h i11 ATTRIBUTE_UNUSED,
225 				 __m256h i12 ATTRIBUTE_UNUSED,
226 				 __m256h i13 ATTRIBUTE_UNUSED,
227 				 __m256h i14 ATTRIBUTE_UNUSED,
228 				 __m256h i15 ATTRIBUTE_UNUSED,
229 				 __m256h i16 ATTRIBUTE_UNUSED,
230 				 __m256h i17 ATTRIBUTE_UNUSED,
231 				 __m256h i18 ATTRIBUTE_UNUSED,
232 				 __m256h i19 ATTRIBUTE_UNUSED)
233 {
234   /* Check register contents.  */
235   check_m256_arguments;
236 }
237 
238 #define def_check_passing8(_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _func1, _func2, TYPE) \
239   values.i0.TYPE[0] = _i0; \
240   values.i1.TYPE[0] = _i1; \
241   values.i2.TYPE[0] = _i2; \
242   values.i3.TYPE[0] = _i3; \
243   values.i4.TYPE[0] = _i4; \
244   values.i5.TYPE[0] = _i5; \
245   values.i6.TYPE[0] = _i6; \
246   values.i7.TYPE[0] = _i7; \
247   WRAP_CALL(_func1) (_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7); \
248   clear_struct_registers; \
249   fregs.F0.TYPE[0] = _i0; \
250   fregs.F1.TYPE[0] = _i1; \
251   fregs.F2.TYPE[0] = _i2; \
252   fregs.F3.TYPE[0] = _i3; \
253   fregs.F4.TYPE[0] = _i4; \
254   fregs.F5.TYPE[0] = _i5; \
255   fregs.F6.TYPE[0] = _i6; \
256   fregs.F7.TYPE[0] = _i7; \
257   num_fregs = 8; \
258   WRAP_CALL(_func2) (_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7);
259 
260 #define def_check_passing20(_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7, \
261 			    _i8, _i9, _i10, _i11, _i12, _i13, _i14, \
262 			    _i15, _i16, _i17, _i18, _i19, _func1, \
263 			    _func2, TYPE) \
264   values.i0.TYPE[0] = _i0; \
265   values.i1.TYPE[0] = _i1; \
266   values.i2.TYPE[0] = _i2; \
267   values.i3.TYPE[0] = _i3; \
268   values.i4.TYPE[0] = _i4; \
269   values.i5.TYPE[0] = _i5; \
270   values.i6.TYPE[0] = _i6; \
271   values.i7.TYPE[0] = _i7; \
272   values.i8.TYPE[0] = _i8; \
273   values.i9.TYPE[0] = _i9; \
274   values.i10.TYPE[0] = _i10; \
275   values.i11.TYPE[0] = _i11; \
276   values.i12.TYPE[0] = _i12; \
277   values.i13.TYPE[0] = _i13; \
278   values.i14.TYPE[0] = _i14; \
279   values.i15.TYPE[0] = _i15; \
280   values.i16.TYPE[0] = _i16; \
281   values.i17.TYPE[0] = _i17; \
282   values.i18.TYPE[0] = _i18; \
283   values.i19.TYPE[0] = _i19; \
284   WRAP_CALL(_func1) (_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8, \
285 		     _i9, _i10, _i11, _i12, _i13, _i14, _i15, \
286 		     _i16, _i17, _i18, _i19); \
287   clear_struct_registers; \
288   fregs.F0.TYPE[0] = _i0; \
289   fregs.F1.TYPE[0] = _i1; \
290   fregs.F2.TYPE[0] = _i2; \
291   fregs.F3.TYPE[0] = _i3; \
292   fregs.F4.TYPE[0] = _i4; \
293   fregs.F5.TYPE[0] = _i5; \
294   fregs.F6.TYPE[0] = _i6; \
295   fregs.F7.TYPE[0] = _i7; \
296   num_fregs = 8; \
297   WRAP_CALL(_func2) (_i0, _i1, _i2, _i3, _i4, _i5, _i6, _i7, _i8, \
298 		     _i9, _i10, _i11, _i12, _i13, _i14, _i15, \
299 		     _i16, _i17, _i18, _i19);
300 
301 void
test_m256_on_stack()302 test_m256_on_stack ()
303 {
304   __m256 x[8];
305   int i;
306   for (i = 0; i < 8; i++)
307     x[i] = (__m256){32 + i, 0, 0, 0, 0, 0, 0, 0};
308   pass = "m256-8";
309   def_check_passing8 (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7],
310 		      fun_check_passing_m256_8_values,
311 		      fun_check_passing_m256_8_regs, _m256);
312 }
313 
314 void
test_m256h_on_stack()315 test_m256h_on_stack ()
316 {
317   __m256h x[8];
318   int i;
319   for (i = 0; i < 8; i++)
320     x[i] = (__m256h){1.1f16 + i, 2.1f16 + i, 3.1f16 + i, 4.1f16 + i,
321 	             5.1f16 + i, 6.1f16 + i, 7.1f16 + i, 8.1f16 + i,
322 	             9.1f16 + i, 10.1f16 + i, 11.1f16 + i, 12.1f16 + i,
323 	             13.1f16 + i, 14.1f16 + i, 15.1f16 + i, 16.1f16 + i};
324   pass = "m256h-8";
325   def_check_passing8 (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7],
326 		      fun_check_passing_m256h_8_values,
327 		      fun_check_passing_m256h_8_regs, _m256h);
328 }
329 
330 void
test_too_many_m256()331 test_too_many_m256 ()
332 {
333   __m256 x[20];
334   int i;
335   for (i = 0; i < 20; i++)
336     x[i] = (__m256){32 + i, 0, 0, 0, 0, 0, 0, 0};
337   pass = "m256-20";
338   def_check_passing20 (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8],
339 		       x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16],
340 		       x[17], x[18], x[19], fun_check_passing_m256_20_values,
341 		       fun_check_passing_m256_20_regs, _m256);
342 }
343 
344 void
test_too_many_m256h()345 test_too_many_m256h ()
346 {
347   __m256h x[20];
348   int i;
349   for (i = 0; i < 20; i++)
350     x[i] = (__m256h){1.1f16 + i, 2.1f16 + i, 3.1f16 + i, 4.1f16 + i,
351 	             5.1f16 + i, 6.1f16 + i, 7.1f16 + i, 8.1f16 + i,
352 	             9.1f16 + i, 10.1f16 + i, 11.1f16 + i, 12.1f16 + i,
353 	             13.1f16 + i, 14.1f16 + i, 15.1f16 + i, 16.1f16 + i};
354   pass = "m256h-20";
355   def_check_passing20 (x[0], x[1], x[2], x[3], x[4], x[5], x[6], x[7], x[8],
356 		       x[9], x[10], x[11], x[12], x[13], x[14], x[15], x[16],
357 		       x[17], x[18], x[19], fun_check_passing_m256h_20_values,
358 		       fun_check_passing_m256h_20_regs, _m256h);
359 }
360 
361 static void
do_test(void)362 do_test (void)
363 {
364   test_m256_on_stack ();
365   test_too_many_m256 ();
366   test_m256h_on_stack ();
367   test_too_many_m256h ();
368   if (failed)
369     abort ();
370 }
371