| /* Test AAPCS64 layout and __builtin_va_start. |
| |
| Pass named HFA/HVA argument on stack. */ |
| |
| /* { dg-do run { target aarch64*-*-* } } */ |
| |
| #ifndef IN_FRAMEWORK |
| #define AAPCS64_TEST_STDARG |
| #define TESTFILE "va_arg-13.c" |
| |
| struct float_float_t |
| { |
| float a; |
| float b; |
| } float_float; |
| |
| union float_int_t |
| { |
| float b8; |
| int b5; |
| } float_int; |
| |
| #define HAS_DATA_INIT_FUNC |
| void |
| init_data () |
| { |
| float_float.a = 1.2f; |
| float_float.b = 2.2f; |
| |
| float_int.b8 = 4983.80f; |
| } |
| |
| #include "abitest.h" |
| #else |
| ARG (float, 1.0f, S0, 0) |
| ARG (float, 2.0f, S1, 1) |
| ARG (float, 3.0f, S2, 2) |
| ARG (float, 4.0f, S3, 3) |
| ARG (float, 5.0f, S4, 4) |
| ARG (float, 6.0f, S5, 5) |
| ARG (float, 7.0f, S6, 6) |
| ARG (struct float_float_t, float_float, STACK, 7) |
| ARG (int, 9, W0, 8) |
| ARG (int, 10, W1, 9) |
| ARG (int, 11, W2, 10) |
| ARG (int, 12, W3, 11) |
| ARG (int, 13, W4, 12) |
| ARG (int, 14, W5, 13) |
| ARG (int, 15, W6, LAST_NAMED_ARG_ID) |
| DOTS |
| /* Note on the reason of using 'X7' instead of 'W7' here: |
| Using 'X7' makes sure the test works in the big-endian mode. |
| According to PCS rules B.4 and C.10, the size of float_int is rounded |
| to 8 bytes and prepared in the register X7 as if loaded via LDR from |
| the memory, with the content of the other 4 bytes unspecified. The |
| test framework will only compare the 4 relavent bytes. */ |
| ANON (union float_int_t, float_int, X7, 15) |
| LAST_ANON (long long, 12683143434LL, STACK + 8, 16) |
| #endif |