/* { dg-do compile } */
/* { dg-options "-w -Wno-psabi" } */

/* AVX512F and AVX512BW modes.  */
typedef unsigned char V64QImode __attribute__((vector_size(64)));
typedef unsigned short V32HImode __attribute__((vector_size(64)));
typedef unsigned int V16SImode __attribute__((vector_size(64)));
typedef unsigned long long V8DImode __attribute__((vector_size(64)));
typedef float V16SFmode __attribute__((vector_size(64)));
typedef double V8DFmode __attribute__((vector_size(64)));

/* AVX and AVX2 modes.  */
typedef unsigned char V32QImode __attribute__((vector_size(32)));
typedef unsigned short V16HImode __attribute__((vector_size(32)));
typedef unsigned int V8SImode __attribute__((vector_size(32)));
typedef unsigned long long V4DImode __attribute__((vector_size(32)));
typedef float V8SFmode __attribute__((vector_size(32)));
typedef double V4DFmode __attribute__((vector_size(32)));

/* SSE1 and SSE2 modes.  */
typedef unsigned char V16QImode __attribute__((vector_size(16)));
typedef unsigned short V8HImode __attribute__((vector_size(16)));
typedef unsigned int V4SImode __attribute__((vector_size(16)));
typedef unsigned long long V2DImode __attribute__((vector_size(16)));
typedef float V4SFmode __attribute__((vector_size(16)));
typedef double V2DFmode __attribute__((vector_size(16)));

/* MMX and 3DNOW modes.  */
typedef unsigned char V8QImode __attribute__((vector_size(8)));
typedef unsigned short V4HImode __attribute__((vector_size(8)));
typedef unsigned int V2SImode __attribute__((vector_size(8)));
typedef float V2SFmode __attribute__((vector_size(8)));

/* Test argument loading and unloading of each.  */
#define TEST(TYPE)					\
extern TYPE data_##TYPE;				\
void r_##TYPE (TYPE x) { data_##TYPE = x; }		\
void s_##TYPE (void) { r_##TYPE (data_##TYPE); }

TEST(V64QImode)
TEST(V32HImode)
TEST(V16SImode)
TEST(V8DImode)
TEST(V16SFmode)
TEST(V8DFmode)

TEST(V32QImode)
TEST(V16HImode)
TEST(V8SImode)
TEST(V4DImode)
TEST(V8SFmode)
TEST(V4DFmode)

TEST(V16QImode)
TEST(V8HImode)
TEST(V4SImode)
TEST(V2DImode)
TEST(V4SFmode)
TEST(V2DFmode)

TEST(V8QImode)
TEST(V4HImode)
TEST(V2SImode)
TEST(V2SFmode)
