#include <altivec.h>
#include <stdio.h>

vector unsigned int
vector_fun (vector unsigned int a, vector unsigned int b)
{
  vector unsigned int c;
  a = ((vector unsigned int) vec_splat_u8(2));
  b = ((vector unsigned int) vec_splat_u8(3));

  c = vec_add (a, b);
  return c;
}

int
main ()
{
  vector unsigned int y;
  vector unsigned int x;
  vector unsigned int z;
  int a;

  /* This line may look unnecessary but we do need it, because we want to
     have a line to do a next over (so that gdb refetches the registers)
     and we don't want the code to change any vector registers.
     The splat operations below modify the VRs,i
     so we don't want to execute them yet.  */
  a = 9;
  x = ((vector unsigned int) vec_splat_u8 (-2));
  y = ((vector unsigned int) vec_splat_u8 (1));

  z = vector_fun (x, y);
  x = vec_sld (x,y,2);

  x = vec_add (x, ((vector unsigned int){5,6,7,8}));
  z = (vector unsigned int) vec_splat_u8 ( -2);
  y = vec_add (x, z);
  z = (vector unsigned int) vec_cmpeq (x,y);

  return 0;
}
