| /* Test AAPCS64 layout and __builtin_va_arg. |
| |
| This test covers most composite types as described in AAPCS64 \S 4.3. |
| Homogeneous floating-point aggregate types are covered in other tests. */ |
| |
| /* { dg-do run { target aarch64*-*-* } } */ |
| |
| #ifndef IN_FRAMEWORK |
| #define AAPCS64_TEST_STDARG |
| #define TESTFILE "va_arg-3.c" |
| #include "type-def.h" |
| |
| struct x0 |
| { |
| char ch; |
| int i; |
| } y0 = { 'a', 12345 }; |
| |
| struct x1 |
| { |
| int a; |
| int b; |
| int c; |
| int d; |
| } y1 = { 0xdeadbeef, 0xcafebabe, 0x87654321, 0xabcedf975 }; |
| |
| struct x2 |
| { |
| long long a; |
| long long b; |
| char ch; |
| } y2 = { 0x12, 0x34, 0x56 }; |
| |
| union x3 |
| { |
| char ch; |
| int i; |
| long long ll; |
| } y3; |
| |
| union x4 |
| { |
| int i; |
| struct x2 y2; |
| } y4; |
| |
| struct x5 |
| { |
| union int128_t qword; |
| } y5; |
| |
| #define HAS_DATA_INIT_FUNC |
| void init_data () |
| { |
| /* Init small union. */ |
| y3.ll = 0xfedcba98LL; |
| |
| /* Init big union. */ |
| y4.y2.a = 0x78; |
| y4.y2.b = 0x89; |
| y4.y2.ch= 0x9a; |
| |
| /* Init signed quad-word integer. */ |
| y5.qword.l64 = 0xfdb9753102468aceLL; |
| y5.qword.h64 = 0xeca8642013579bdfLL; |
| } |
| |
| #include "abitest.h" |
| #else |
| ARG (float ,1.0f, S0, LAST_NAMED_ARG_ID) |
| DOTS |
| ANON (struct x0, y0, X0, 1) |
| ANON (struct x1, y1, X1, 2) |
| PTR_ANON (struct x2, y2, X3, 3) |
| ANON (union x3, y3, X4, 4) |
| PTR_ANON (union x4, y4, X5, 5) |
| ANON (struct x5, y5, X6, 6) |
| ANON (struct x0, y0, STACK, 7) |
| ANON (struct x1, y1, STACK+8, 8) |
| PTR_ANON (struct x2, y2, STACK+24, 9) |
| ANON (union x3, y3, STACK+32, 10) |
| PTR_ANON (union x4, y4, STACK+40, 11) |
| #ifndef __AAPCS64_BIG_ENDIAN__ |
| ANON (int , 1, STACK+48, 12) |
| #else |
| ANON (int , 1, STACK+52, 12) |
| #endif |
| ANON (struct x5, y5, STACK+64, 13) |
| #ifndef __AAPCS64_BIG_ENDIAN__ |
| LAST_ANON(int , 2, STACK+80, 14) |
| #else |
| LAST_ANON(int , 2, STACK+84, 14) |
| #endif |
| #endif |