altivec-7.C   [plain text]


/* APPLE LOCAL file AltiVec */
/* { dg-do run { target powerpc*-*-* } } */
/* { dg-options "-faltivec" } */


extern "C" void abort(void);

void CMP (vector unsigned char v, vector unsigned char v1)
{
    union {
	vector unsigned char vv;
	unsigned char s[16];
    } r, r1;
    r.vv = v;
    r1.vv = v1;

    for (int i=0; i < 16; i++)
       if (r.s[i] != r1.s[i])
	 abort();
    return;
}

#define TEST_FUNCTION_TEMPLATE

#ifdef TEST_FUNCTION_TEMPLATE
template <int I>
#endif
void vectorTest()
{
  typedef vector unsigned char VUC;

  // Multiple initializers with expressions
  const unsigned char kFoo = 0;
  enum              { kBar = 1 };
  VUC v1 = {kFoo,kBar,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  VUC v3 = (VUC)(kFoo,kBar,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  CMP (v1, v3);

  VUC v2 = {kBar*kFoo,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
  VUC v4 = (VUC)(kBar*kFoo,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  CMP (v2, v4);

  // Single initializers
  VUC v5 = {42};
  VUC v7 = (VUC)(42);
  CMP (v5, v7);

  VUC v6 = {40+2};
  VUC v8 = (VUC)(40+2);
  CMP (v6, v8);

  VUC v9 = {I+5};
  VUC v11 = (VUC)(I+5);
  CMP (v9, v11);
}


int main (int argc, char * const argv[]) 
{
#ifdef TEST_FUNCTION_TEMPLATE
	vectorTest<0>();
#else
	vectorTest();
#endif
    return 0;
}