Daily bump.
[official-gcc.git] / gcc / testsuite / gcc.target / spu / abi.c
blobb435f1ede5cc053afb1ac7c0e3656415b98435c9
1 /* { dg-do run } */
2 /* { dg-options "-O2" } */
3 /* Test that arguments are passed in the correct location according to the ABI. */
5 #include <stdlib.h>
7 /* Hack to allow calling func_asm which takes 84 arguments that are scalars.
8 The function func_call takes 84 union quadword arguments, so we can check to
9 see if each scalar is passed in the correct location. This asm glues the
10 two functions together, so that the compiler is not aware of the
11 aliasing. */
12 __asm__ ("func_asm = func_call");
14 typedef unsigned int uqword __attribute__((mode(TI)));
15 typedef int qword __attribute__((mode(TI)));
17 union u
19 uqword uq;
20 qword sq;
21 double d[2];
22 float f[4];
23 unsigned long long ull[2];
24 long long sll[2];
25 unsigned long ul[4];
26 long sl[4];
27 unsigned int ui[4];
28 int si[4];
29 unsigned short us[8];
30 short ss[8];
31 unsigned char uc[16];
32 signed char sc[16];
36 extern void func_asm(signed char a1,
37 unsigned char a2,
38 short a3,
39 unsigned short a4,
40 int a5,
41 unsigned int a6,
42 long a7,
43 unsigned long a8,
44 long long a9,
45 unsigned long long a10,
46 float a11,
47 double a12,
48 int a13,
49 int a14,
50 int a15,
51 int a16,
52 int a17,
53 int a18,
54 int a19,
55 int a20,
56 int a21,
57 int a22,
58 int a23,
59 int a24,
60 int a25,
61 int a26,
62 int a27,
63 int a28,
64 int a29,
65 int a30,
66 int a31,
67 int a32,
68 int a33,
69 int a34,
70 int a35,
71 int a36,
72 int a37,
73 int a38,
74 int a39,
75 int a40,
76 int a41,
77 int a42,
78 int a43,
79 int a44,
80 int a45,
81 int a46,
82 int a47,
83 int a48,
84 int a49,
85 int a50,
86 int a51,
87 int a52,
88 int a53,
89 int a54,
90 int a55,
91 int a56,
92 int a57,
93 int a58,
94 int a59,
95 int a60,
96 int a61,
97 int a62,
98 int a63,
99 int a64,
100 int a65,
101 int a66,
102 int a67,
103 int a68,
104 int a69,
105 int a70,
106 int a71,
107 int a72,
108 signed char a73,
109 unsigned char a74,
110 short a75,
111 unsigned short a76,
112 int a77,
113 unsigned int a78,
114 long a79,
115 unsigned long a80,
116 long long a81,
117 unsigned long long a82,
118 float a83,
119 double a84);
121 void func_call(union u a1,
122 union u a2,
123 union u a3,
124 union u a4,
125 union u a5,
126 union u a6,
127 union u a7,
128 union u a8,
129 union u a9,
130 union u a10,
131 union u a11,
132 union u a12,
133 union u a13,
134 union u a14,
135 union u a15,
136 union u a16,
137 union u a17,
138 union u a18,
139 union u a19,
140 union u a20,
141 union u a21,
142 union u a22,
143 union u a23,
144 union u a24,
145 union u a25,
146 union u a26,
147 union u a27,
148 union u a28,
149 union u a29,
150 union u a30,
151 union u a31,
152 union u a32,
153 union u a33,
154 union u a34,
155 union u a35,
156 union u a36,
157 union u a37,
158 union u a38,
159 union u a39,
160 union u a40,
161 union u a41,
162 union u a42,
163 union u a43,
164 union u a44,
165 union u a45,
166 union u a46,
167 union u a47,
168 union u a48,
169 union u a49,
170 union u a50,
171 union u a51,
172 union u a52,
173 union u a53,
174 union u a54,
175 union u a55,
176 union u a56,
177 union u a57,
178 union u a58,
179 union u a59,
180 union u a60,
181 union u a61,
182 union u a62,
183 union u a63,
184 union u a64,
185 union u a65,
186 union u a66,
187 union u a67,
188 union u a68,
189 union u a69,
190 union u a70,
191 union u a71,
192 union u a72,
193 union u a73,
194 union u a74,
195 union u a75,
196 union u a76,
197 union u a77,
198 union u a78,
199 union u a79,
200 union u a80,
201 union u a81,
202 union u a82,
203 union u a83,
204 union u a84)
206 /* arguments passed in registers */
207 if (a1.sc[3] != -1) /* signed char */
208 abort ();
210 if (a2.uc[3] != +2) /* unsigned char */
211 abort ();
213 if (a3.ss[1] != -3) /* short */
214 abort ();
216 if (a4.us[1] != +4) /* unsigned short */
217 abort ();
219 if (a5.si[0] != -5) /* int */
220 abort ();
222 if (a6.ui[0] != +6) /* unsigned int */
223 abort ();
225 if (a7.sl[0] != -7) /* long */
226 abort ();
228 if (a8.ul[0] != +8) /* unsigned long */
229 abort ();
231 if (a9.sll[0] != -9) /* long long */
232 abort ();
234 if (a10.ull[0] != +10) /* unsigned long long */
235 abort ();
237 if (a11.f[0] != -11.0f) /* float */
238 abort ();
240 if (a12.d[0] != +12.0) /* double */
241 abort ();
243 if (a13.si[0] != -13) /* int */
244 abort ();
246 if (a14.si[0] != +14) /* int */
247 abort ();
249 if (a15.si[0] != -15) /* int */
250 abort ();
252 if (a16.si[0] != +16) /* int */
253 abort ();
255 if (a17.si[0] != -17) /* int */
256 abort ();
258 if (a18.si[0] != +18) /* int */
259 abort ();
261 if (a19.si[0] != -19) /* int */
262 abort ();
264 if (a20.si[0] != +20) /* int */
265 abort ();
267 if (a21.si[0] != -21) /* int */
268 abort ();
270 if (a22.si[0] != +22) /* int */
271 abort ();
273 if (a23.si[0] != -23) /* int */
274 abort ();
276 if (a24.si[0] != +24) /* int */
277 abort ();
279 if (a25.si[0] != -25) /* int */
280 abort ();
282 if (a26.si[0] != +26) /* int */
283 abort ();
285 if (a27.si[0] != -27) /* int */
286 abort ();
288 if (a28.si[0] != +28) /* int */
289 abort ();
291 if (a29.si[0] != -29) /* int */
292 abort ();
294 if (a30.si[0] != +30) /* int */
295 abort ();
297 if (a31.si[0] != -31) /* int */
298 abort ();
300 if (a32.si[0] != +32) /* int */
301 abort ();
303 if (a33.si[0] != -33) /* int */
304 abort ();
306 if (a34.si[0] != +34) /* int */
307 abort ();
309 if (a35.si[0] != -35) /* int */
310 abort ();
312 if (a36.si[0] != +36) /* int */
313 abort ();
315 if (a37.si[0] != -37) /* int */
316 abort ();
318 if (a38.si[0] != +38) /* int */
319 abort ();
321 if (a39.si[0] != -39) /* int */
322 abort ();
324 if (a40.si[0] != +40) /* int */
325 abort ();
327 if (a41.si[0] != -41) /* int */
328 abort ();
330 if (a42.si[0] != +42) /* int */
331 abort ();
333 if (a43.si[0] != -43) /* int */
334 abort ();
336 if (a44.si[0] != +44) /* int */
337 abort ();
339 if (a45.si[0] != -45) /* int */
340 abort ();
342 if (a46.si[0] != +46) /* int */
343 abort ();
345 if (a47.si[0] != -47) /* int */
346 abort ();
348 if (a48.si[0] != +48) /* int */
349 abort ();
351 if (a49.si[0] != -49) /* int */
352 abort ();
354 if (a50.si[0] != +50) /* int */
355 abort ();
357 if (a51.si[0] != -51) /* int */
358 abort ();
360 if (a52.si[0] != +52) /* int */
361 abort ();
363 if (a53.si[0] != -53) /* int */
364 abort ();
366 if (a54.si[0] != +54) /* int */
367 abort ();
369 if (a55.si[0] != -55) /* int */
370 abort ();
372 if (a56.si[0] != +56) /* int */
373 abort ();
375 if (a57.si[0] != -57) /* int */
376 abort ();
378 if (a58.si[0] != +58) /* int */
379 abort ();
381 if (a59.si[0] != -59) /* int */
382 abort ();
384 if (a60.si[0] != +60) /* int */
385 abort ();
387 if (a61.si[0] != -61) /* int */
388 abort ();
390 if (a62.si[0] != +62) /* int */
391 abort ();
393 if (a63.si[0] != -63) /* int */
394 abort ();
396 if (a64.si[0] != +64) /* int */
397 abort ();
399 if (a65.si[0] != -65) /* int */
400 abort ();
402 if (a66.si[0] != +66) /* int */
403 abort ();
405 if (a67.si[0] != -67) /* int */
406 abort ();
408 if (a68.si[0] != +68) /* int */
409 abort ();
411 if (a69.si[0] != -69) /* int */
412 abort ();
414 if (a70.si[0] != +70) /* int */
415 abort ();
417 if (a71.si[0] != -71) /* int */
418 abort ();
420 if (a72.si[0] != +72) /* int */
421 abort ();
423 /* arguments passed on the stack */
424 if (a73.sc[3] != -73) /* signed char */
425 abort ();
427 if (a74.uc[3] != 74) /* unsigned char */
428 abort ();
430 if (a75.ss[1] != -75) /* short */
431 abort ();
433 if (a76.us[1] != +76) /* unsigned short */
434 abort ();
436 if (a77.si[0] != -77) /* int */
437 abort ();
439 if (a78.ui[0] != +78) /* unsigned int */
440 abort ();
442 if (a79.sl[0] != -79) /* long */
443 abort ();
445 if (a80.ul[0] != +80) /* unsigned long */
446 abort ();
448 if (a81.sll[0] != -81) /* long long */
449 abort ();
451 if (a82.ull[0] != +82) /* unsigned long long */
452 abort ();
454 if (a83.f[0] != -83.0f) /* float */
455 abort ();
457 if (a84.d[0] != +84.0) /* double */
458 abort ();
461 int main(void)
463 func_asm(-1, +2, -3, +4, -5, +6, -7, +8, -9, +10,
464 -11, +12, -13, +14, -15, +16, -17, +18, -19, +20,
465 -21, +22, -23, +24, -25, +26, -27, +28, -29, +30,
466 -31, +32, -33, +34, -35, +36, -37, +38, -39, +40,
467 -41, +42, -43, +44, -45, +46, -47, +48, -49, +50,
468 -51, +52, -53, +54, -55, +56, -57, +58, -59, +60,
469 -61, +62, -63, +64, -65, +66, -67, +68, -69, +70,
470 -71, +72, -73, +74, -75, +76, -77, +78, -79, +80,
471 -81, +82, -83, +84);
473 return 0;