/* Test AAPCS64 layout. C.8 If the argument has an alignment of 16 then the NGRN is rounded up the next even number. C.9 If the argument is an Integral Type, the size of the argument is equal to 16 and the NGRN is less than 7, the argument is copied to x[NGRN] and x[NGRN+1]. x[NGRN] shall contain the lower addressed double-word of the memory representation of the argument. The NGRN is incremented by two. The argument has now been allocated. The case of passing a 128-bit integer in two general registers is covered in this test. */ /* { dg-do run { target aarch64*-*-* } } */ #ifndef IN_FRAMEWORK #define TESTFILE "test_align-3.c" #include "type-def.h" union int128_t qword; int gInt[4]; #define HAS_DATA_INIT_FUNC void init_data () { /* Initialize the quadword integer via the union. */ qword.l64 = 0xDEADBEEFCAFEBABELL; qword.h64 = 0x123456789ABCDEF0LL; gInt[0] = 12345; gInt[1] = 23456; gInt[2] = 34567; gInt[3] = 45678; } #include "abitest.h" #else ARG(int, gInt[0], W0) ARG(int, gInt[1], W1) ARG(int, gInt[2], W2) ARG(__int128, qword.i, X4) LAST_ARG(int, gInt[3], W6) #endif