blob: e6a8185e57819aab1ae4d8b19138c045d9e82166 [file] [log] [blame]
/* Test AAPCS64 layout and __builtin_va_arg.
This test covers complex types. Complex floating-point types are treated
as homogeneous floating-point aggregates, while complex integral types
are treated as general composite types. */
/* { dg-do run { target aarch64*-*-* } } */
#ifndef IN_FRAMEWORK
#define AAPCS64_TEST_STDARG
#define TESTFILE "va_arg-7.c"
#include "type-def.h"
_Complex __int128 complex_qword = 567890 + 678901i;
#include "abitest.h"
#else
ARG (int, 1, W0, LAST_NAMED_ARG_ID)
DOTS
/* Complex floating-point types are passed in fp/simd registers. */
ANON (_Complex float , 12.3f + 23.4fi , S0, 0)
ANON (_Complex double , 34.56 + 45.67i , D2, 1)
ANON (_Complex long double, 56789.01234L + 67890.12345Li, Q4, 2)
/* Complex integral types are passed in general registers or via reference. */
ANON (_Complex short , (_Complex short) (12345 + 23456i), X1, 10)
ANON (_Complex int , 34567 + 45678i , X2, 11)
PTR_ANON (_Complex __int128 , complex_qword , X3, 12)
LAST_ANON(int , 1 , W4, 20)
#endif