/* Verify that overloaded built-ins for __builtin_vec_xst with int
   inputs produce the right code.  */

/* { dg-require-effective-target powerpc_vsx_ok } */
/* { dg-options "-mvsx -O2" } */

#include <altivec.h>

#define BUILD_VAR_TEST(TESTNAME1, VALUE, VAR_OFFSET, SAVETO)		\
void									\
TESTNAME1 ## _var (VALUE value, VAR_OFFSET offset, SAVETO * saveto) 	\
{									\
	__builtin_vec_xst (value, offset, saveto);			\
}

#define BUILD_CST_TEST(TESTNAME1, VALUE, CST_OFFSET, SAVETO)		\
void									\
TESTNAME1 ## _cst (VALUE value, SAVETO * saveto) 			\
{									\
	__builtin_vec_xst (value, CST_OFFSET, saveto);			\
}

BUILD_VAR_TEST( test1,  vector signed int, signed long long, signed int );
BUILD_VAR_TEST( test2,  vector signed int, signed int, signed int );
BUILD_CST_TEST( test3,  vector signed int, 12, signed int );

BUILD_VAR_TEST( test4,  vector unsigned int, signed long long, unsigned int );
BUILD_VAR_TEST( test5,  vector unsigned int, signed int, unsigned int );
BUILD_CST_TEST( test6,  vector unsigned int, 12, unsigned int );

BUILD_VAR_TEST( test7,  vector signed int, signed long long, vector signed int );
BUILD_VAR_TEST( test8,  vector signed int, signed int, vector signed int );
BUILD_CST_TEST( test9,  vector signed int, 12, vector signed int );

BUILD_VAR_TEST( test10, vector unsigned int, signed long long, vector unsigned int );
BUILD_VAR_TEST( test11, vector unsigned int, signed int, vector unsigned int );
BUILD_CST_TEST( test12, vector unsigned int, 12, vector unsigned int );

/* { dg-final { scan-assembler-times {\mstxvw4x\M|\mstxvd2x\M|\mstxvx\M|\mstvx\M|\mpstxv\M} 12 } } */
