/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "" { powerpc*-*-darwin* } } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-options "-mdejagnu-cpu=power8 -O2 -ftree-vectorize -fvect-cost-model=dynamic -fno-unroll-loops -fno-unroll-all-loops" } */

#include <altivec.h>

#ifndef SIZE
#define SIZE 1024
#endif

#ifndef ALIGN
#define ALIGN 32
#endif

#ifndef ATTR_ALIGN
#define ATTR_ALIGN __attribute__((__aligned__(ALIGN)))
#endif

#define DOIT(TYPE, PREFIX)						\
TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b)				\
{									\
  return vec_eqv (a, b);						\
}									\
									\
TYPE PREFIX ## _eqv_arith (TYPE a, TYPE b)				\
{									\
  return ~(a ^ b);							\
}									\
									\
TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b)				\
{									\
  return vec_nand (a, b);						\
}									\
									\
TYPE PREFIX ## _nand_arith1 (TYPE a, TYPE b)				\
{									\
  return ~(a & b);							\
}									\
									\
TYPE PREFIX ## _nand_arith2 (TYPE a, TYPE b)				\
{									\
  return (~a) | (~b);							\
}									\
									\
TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b)				\
{									\
  return vec_orc (a, b);						\
}									\
									\
TYPE PREFIX ## _orc_arith1 (TYPE a, TYPE b)				\
{									\
  return (~ a) | b;							\
}									\
									\
TYPE PREFIX ## _orc_arith2 (TYPE a, TYPE b)				\
{									\
  return a | (~ b);							\
}

#define DOIT_FLOAT(TYPE, PREFIX)					\
TYPE PREFIX ## _eqv_builtin (TYPE a, TYPE b)				\
{									\
  return vec_eqv (a, b);						\
}									\
									\
TYPE PREFIX ## _nand_builtin (TYPE a, TYPE b)				\
{									\
  return vec_nand (a, b);						\
}									\
									\
TYPE PREFIX ## _orc_builtin (TYPE a, TYPE b)				\
{									\
  return vec_orc (a, b);						\
}

typedef vector signed char		sign_char_vec;
typedef vector short			sign_short_vec;
typedef vector int			sign_int_vec;
typedef vector long long		sign_llong_vec;

typedef vector unsigned char		uns_char_vec;
typedef vector unsigned short		uns_short_vec;
typedef vector unsigned int		uns_int_vec;
typedef vector unsigned long long	uns_llong_vec;

typedef vector float			float_vec;
typedef vector double			double_vec;

DOIT(sign_char_vec,	sign_char)
DOIT(sign_short_vec,	sign_short)
DOIT(sign_int_vec,	sign_int)
DOIT(sign_llong_vec,	sign_llong)

DOIT(uns_char_vec,	uns_char)
DOIT(uns_short_vec,	uns_short)
DOIT(uns_int_vec,	uns_int)
DOIT(uns_llong_vec,	uns_llong)

DOIT_FLOAT(float_vec,	float)
DOIT_FLOAT(double_vec,	double)

/* { dg-final { scan-assembler-times "xxleqv"  18 } } */
/* { dg-final { scan-assembler-times "xxlnand" 26 } } */
/* { dg-final { scan-assembler-times "xxlorc"  26 } } */
