| /* Test AAPCS64 layout. |
| |
| C.3 If the argument is an HFA then the NSRN is set to 8 and the size |
| of the argument is rounded up to the nearest multiple of 8 bytes. |
| |
| TODO: add the check of an HFA containing half-precision floating-point |
| when __f16 is supported in A64 GCC. */ |
| |
| /* { dg-do run { target aarch64*-*-* } } */ |
| |
| #ifndef IN_FRAMEWORK |
| #define TESTFILE "test_align-4.c" |
| |
| struct z1 |
| { |
| double x[4]; |
| }; |
| |
| struct z1 a = { 5.0, 6.0, 7.0, 8.0 }; |
| |
| struct z2 |
| { |
| float x[3]; |
| }; |
| |
| struct z2 b = { 13.f, 14.f, 15.f }; |
| struct z2 c = { 16.f, 17.f, 18.f }; |
| |
| #include "abitest.h" |
| #else |
| |
| ARG(struct z1, a, D0) |
| ARG(double, 9.0, D4) |
| ARG(double, 10.0, D5) |
| ARG(struct z2, b, STACK) /* [C.3] on stack and size padded to 16 bytes */ |
| #ifndef __AAPCS64_BIG_ENDIAN__ |
| ARG(float, 15.5f, STACK+16) /* [C.3] NSRN has been set to 8 */ |
| #else |
| ARG(float, 15.5f, STACK+20) |
| #endif |
| LAST_ARG(struct z2, c, STACK+24) |
| #endif |