blob: 0cfbe68c3a4c1d29be501043971d20c3f5205f6b [file] [log] [blame]
/* { dg-do compile } */
/* { dg-require-effective-target powerpc_p8vector_ok } */
/* { dg-require-effective-target int128 } */
/* { dg-options "-mpower8-vector -O2" } */
#include <altivec.h>
/* Test POWER8 vector built-ins added for version 1.1 of ELFv2 ABI. */
vector signed char vsca, vscb, vscc;
vector unsigned char vuca, vucb, vucc;
vector signed short vssa, vssb;
vector bool char vbca, vbcb;
vector unsigned short vusa, vusb;
vector bool short vbsa, vbsb;
vector signed int vsia, vsib, vsic;
vector unsigned int vuia, vuib, vuic;
vector bool int vbia, vbib;
vector signed long long vsla, vslb;
vector unsigned long long vula, vulb, vulc;
vector bool long long vbla, vblb, vblc;
vector signed __int128 vsxa, vsxb, vsxc;
vector unsigned __int128 vuxa, vuxb, vuxc;
vector double vda, vdb;
void foo (vector signed char *vscr,
vector unsigned char *vucr,
vector bool char *vbcr,
vector signed short *vssr,
vector unsigned short *vusr,
vector bool short *vbsr,
vector signed int *vsir,
vector unsigned int *vuir,
vector bool int *vbir,
vector unsigned long long *vulr,
vector bool long long *vblr,
vector signed __int128 *vsxr,
vector unsigned __int128 *vuxr,
vector double *vdr)
{
*vsir++ = vec_addc (vsia, vsib);
*vuir++ = vec_addc (vuia, vuib);
*vsxr++ = vec_addc (vsxa, vsxb);
*vuxr++ = vec_addc (vuxa, vuxb);
*vsir++ = vec_adde (vsia, vsib, vsic);
*vuir++ = vec_adde (vuia, vuib, vuic);
*vsxr++ = vec_adde (vsxa, vsxb, vsxc);
*vuxr++ = vec_adde (vuxa, vuxb, vuxc);
*vsir++ = vec_addec (vsia, vsib, vsic);
*vuir++ = vec_addec (vuia, vuib, vuic);
*vsxr++ = vec_addec (vsxa, vsxb, vsxc);
*vuxr++ = vec_addec (vuxa, vuxb, vuxc);
*vscr++ = vec_adds (vsca, vscb);
*vucr++ = vec_adds (vuca, vucb);
*vsir++ = vec_adds (vsia, vsib);
*vuir++ = vec_adds (vuia, vuib);
*vssr++ = vec_adds (vssa, vssb);
*vusr++ = vec_adds (vusa, vusb);
*vscr++ = vec_adds (vbca, vscb);
*vscr++ = vec_adds (vsca, vbcb);
*vucr++ = vec_adds (vbca, vucb);
*vucr++ = vec_adds (vuca, vbcb);
*vsir++ = vec_adds (vbia, vsib);
*vsir++ = vec_adds (vsia, vbib);
*vuir++ = vec_adds (vbia, vuib);
*vuir++ = vec_adds (vuia, vbib);
*vssr++ = vec_adds (vbsa, vssb);
*vssr++ = vec_adds (vssa, vbsb);
*vusr++ = vec_adds (vbsa, vusb);
*vusr++ = vec_adds (vusa, vbsb);
*vucr++ = vec_bperm (vuca, vucb);
*vulr++ = vec_bperm (vuxa, vucb);
*vbcr++ = vec_eqv (vbca, vbcb);
*vbir++ = vec_eqv (vbia, vbib);
*vblr++ = vec_eqv (vbla, vblb);
*vbsr++ = vec_eqv (vbsa, vbsb);
*vucr++ = vec_gb (vuca);
*vbcr++ = vec_nand (vbca, vbcb);
*vbir++ = vec_nand (vbia, vbib);
*vblr++ = vec_nand (vbla, vblb);
*vbsr++ = vec_nand (vbsa, vbsb);
*vbcr++ = vec_orc (vbca, vbcb);
*vbir++ = vec_orc (vbia, vbib);
*vblr++ = vec_orc (vbla, vblb);
*vbsr++ = vec_orc (vbsa, vbsb);
*vblr++ = vec_perm (vbla, vblb, vucc);
*vusr++ = vec_pmsum_be (vuca, vucb);
*vuir++ = vec_pmsum_be (vusa, vusb);
*vulr++ = vec_pmsum_be (vuia, vuib);
*vuxr++ = vec_pmsum_be (vula, vulb);
*vuir++ = vec_shasigma_be (vuia, 0, 1);
*vulr++ = vec_shasigma_be (vula, 0, 1);
*vsir++ = vec_subc (vsia, vsib);
*vuir++ = vec_subc (vuia, vuib);
*vsxr++ = vec_subc (vsxa, vsxb);
*vuxr++ = vec_subc (vuxa, vuxb);
*vsir++ = vec_sube (vsia, vsib, vsic);
*vuir++ = vec_sube (vuia, vuib, vuic);
*vsxr++ = vec_sube (vsxa, vsxb, vsxc);
*vuxr++ = vec_sube (vuxa, vuxb, vuxc);
*vsir++ = vec_subec (vsia, vsib, vsic);
*vuir++ = vec_subec (vuia, vuib, vuic);
*vsxr++ = vec_subec (vsxa, vsxb, vsxc);
*vuxr++ = vec_subec (vuxa, vuxb, vuxc);
*vscr++ = vec_subs (vsca, vscb);
*vucr++ = vec_subs (vuca, vucb);
*vsir++ = vec_subs (vsia, vsib);
*vuir++ = vec_subs (vuia, vuib);
*vssr++ = vec_subs (vssa, vssb);
*vusr++ = vec_subs (vusa, vusb);
*vsir++ = vec_sum2s (vsia, vsib);
*vsir++ = vec_sum4s (vsca, vsib);
*vsir++ = vec_sum4s (vssa, vsib);
*vuir++ = vec_sum4s (vuca, vuib);
}
/* { dg-final { scan-assembler-times "vaddcuq" 2 } } */
/* { dg-final { scan-assembler-times "vaddeuqm" 2 } } */
/* { dg-final { scan-assembler-times "vaddecuq" 2 } } */
/* { dg-final { scan-assembler-times "vaddcuw" 6 } } */
/* { dg-final { scan-assembler-times "vadduwm" 4 } } */
/* { dg-final { scan-assembler-times "vsubcuq" 2 } } */
/* { dg-final { scan-assembler-times "vsubeuqm" 2 } } */
/* { dg-final { scan-assembler-times "vsubecuq" 2 } } */
/* { dg-final { scan-assembler-times "vsubcuw" 4 } } */
/* { dg-final { scan-assembler-times "vsubuwm" 4 } } */
/* { dg-final { scan-assembler-times "vbpermq" 2 } } */
/* { dg-final { scan-assembler-times "xxleqv" 4 } } */
/* { dg-final { scan-assembler-times "vgbbd" 1 } } */
/* { dg-final { scan-assembler-times "xxlnand" 4 } } */
/* { dg-final { scan-assembler-times "xxlorc" 4 } } */
/* { dg-final { scan-assembler-times "vperm" 1 } } */
/* { dg-final { scan-assembler-times "vpmsumb" 1 } } */
/* { dg-final { scan-assembler-times "vpmsumh" 1 } } */
/* { dg-final { scan-assembler-times "vpmsumw" 1 } } */
/* { dg-final { scan-assembler-times "vpmsumd" 1 } } */
/* { dg-final { scan-assembler-times "vshasigmaw" 1 } } */
/* { dg-final { scan-assembler-times "vshasigmad" 1 } } */
/* { dg-final { scan-assembler-times "vsubsbs" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsububs" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsubsws" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsubuws" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsubshs" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsubuhs" 1 } } vec_subs */
/* { dg-final { scan-assembler-times "vsum2sws" 1 } } vec_sum2s */
/* { dg-final { scan-assembler-times "vsum4sws" 0 } } vec_sum4s */
/* { dg-final { scan-assembler-times "vsum4shs" 1 } } vec_sum4s */
/* { dg-final { scan-assembler-times "vsum4ubs" 1 } } vec_sum4s */