2 /* { dg-options "-O2" } */
3 /* Test that arguments are passed in the correct location according to the ABI. */
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
12 __asm__ ("func_asm = func_call");
14 typedef unsigned int uqword
__attribute__((mode(TI
)));
15 typedef int qword
__attribute__((mode(TI
)));
23 unsigned long long ull
[2];
36 extern void func_asm(signed char a1
,
45 unsigned long long a10
,
117 unsigned long long a82
,
121 void func_call(union u a1
,
206 /* arguments passed in registers */
207 if (a1
.sc
[3] != -1) /* signed char */
210 if (a2
.uc
[3] != +2) /* unsigned char */
213 if (a3
.ss
[1] != -3) /* short */
216 if (a4
.us
[1] != +4) /* unsigned short */
219 if (a5
.si
[0] != -5) /* int */
222 if (a6
.ui
[0] != +6) /* unsigned int */
225 if (a7
.sl
[0] != -7) /* long */
228 if (a8
.ul
[0] != +8) /* unsigned long */
231 if (a9
.sll
[0] != -9) /* long long */
234 if (a10
.ull
[0] != +10) /* unsigned long long */
237 if (a11
.f
[0] != -11.0f
) /* float */
240 if (a12
.d
[0] != +12.0) /* double */
243 if (a13
.si
[0] != -13) /* int */
246 if (a14
.si
[0] != +14) /* int */
249 if (a15
.si
[0] != -15) /* int */
252 if (a16
.si
[0] != +16) /* int */
255 if (a17
.si
[0] != -17) /* int */
258 if (a18
.si
[0] != +18) /* int */
261 if (a19
.si
[0] != -19) /* int */
264 if (a20
.si
[0] != +20) /* int */
267 if (a21
.si
[0] != -21) /* int */
270 if (a22
.si
[0] != +22) /* int */
273 if (a23
.si
[0] != -23) /* int */
276 if (a24
.si
[0] != +24) /* int */
279 if (a25
.si
[0] != -25) /* int */
282 if (a26
.si
[0] != +26) /* int */
285 if (a27
.si
[0] != -27) /* int */
288 if (a28
.si
[0] != +28) /* int */
291 if (a29
.si
[0] != -29) /* int */
294 if (a30
.si
[0] != +30) /* int */
297 if (a31
.si
[0] != -31) /* int */
300 if (a32
.si
[0] != +32) /* int */
303 if (a33
.si
[0] != -33) /* int */
306 if (a34
.si
[0] != +34) /* int */
309 if (a35
.si
[0] != -35) /* int */
312 if (a36
.si
[0] != +36) /* int */
315 if (a37
.si
[0] != -37) /* int */
318 if (a38
.si
[0] != +38) /* int */
321 if (a39
.si
[0] != -39) /* int */
324 if (a40
.si
[0] != +40) /* int */
327 if (a41
.si
[0] != -41) /* int */
330 if (a42
.si
[0] != +42) /* int */
333 if (a43
.si
[0] != -43) /* int */
336 if (a44
.si
[0] != +44) /* int */
339 if (a45
.si
[0] != -45) /* int */
342 if (a46
.si
[0] != +46) /* int */
345 if (a47
.si
[0] != -47) /* int */
348 if (a48
.si
[0] != +48) /* int */
351 if (a49
.si
[0] != -49) /* int */
354 if (a50
.si
[0] != +50) /* int */
357 if (a51
.si
[0] != -51) /* int */
360 if (a52
.si
[0] != +52) /* int */
363 if (a53
.si
[0] != -53) /* int */
366 if (a54
.si
[0] != +54) /* int */
369 if (a55
.si
[0] != -55) /* int */
372 if (a56
.si
[0] != +56) /* int */
375 if (a57
.si
[0] != -57) /* int */
378 if (a58
.si
[0] != +58) /* int */
381 if (a59
.si
[0] != -59) /* int */
384 if (a60
.si
[0] != +60) /* int */
387 if (a61
.si
[0] != -61) /* int */
390 if (a62
.si
[0] != +62) /* int */
393 if (a63
.si
[0] != -63) /* int */
396 if (a64
.si
[0] != +64) /* int */
399 if (a65
.si
[0] != -65) /* int */
402 if (a66
.si
[0] != +66) /* int */
405 if (a67
.si
[0] != -67) /* int */
408 if (a68
.si
[0] != +68) /* int */
411 if (a69
.si
[0] != -69) /* int */
414 if (a70
.si
[0] != +70) /* int */
417 if (a71
.si
[0] != -71) /* int */
420 if (a72
.si
[0] != +72) /* int */
423 /* arguments passed on the stack */
424 if (a73
.sc
[3] != -73) /* signed char */
427 if (a74
.uc
[3] != 74) /* unsigned char */
430 if (a75
.ss
[1] != -75) /* short */
433 if (a76
.us
[1] != +76) /* unsigned short */
436 if (a77
.si
[0] != -77) /* int */
439 if (a78
.ui
[0] != +78) /* unsigned int */
442 if (a79
.sl
[0] != -79) /* long */
445 if (a80
.ul
[0] != +80) /* unsigned long */
448 if (a81
.sll
[0] != -81) /* long long */
451 if (a82
.ull
[0] != +82) /* unsigned long long */
454 if (a83
.f
[0] != -83.0f
) /* float */
457 if (a84
.d
[0] != +84.0) /* double */
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,