CHECK_CXX_SOURCE_RUNS(
"
#ifndef __ALTIVEC__
#error \"__ALTIVEC__ flag not set, no support for Altivec\"
#endif
#include <altivec.h>
#undef vector
#undef pixel
#undef bool
int main()
{
__vector double a, b, data1, data2;
const int n_vectors = sizeof(a)/sizeof(double);
double * ptr = reinterpret_cast<double*>(&a);
ptr[0] = static_cast<volatile double>(1.0);
for (int i=1; i<n_vectors; ++i)
ptr[i] = 0.0;
b = vec_splats (static_cast<volatile double>(2.25));
data1 = vec_add (a, b);
data2 = vec_mul (b, data1);
ptr = reinterpret_cast<double*>(&data2);
int return_value = 0;
if (ptr[0] != 7.3125)
return_value += 1;
for (int i=1; i<n_vectors; ++i)
if (ptr[i] != 5.0625)
return_value += 2;
b = vec_splats (static_cast<volatile double>(-1.0));
data1 = vec_abs(vec_mul (b, data2));
vec_vsx_st(data1, 0, ptr);
b = vec_vsx_ld(0, ptr);
ptr = reinterpret_cast<double*>(&b);
if (ptr[0] != 7.3125)
return_value += 4;
for (int i=1; i<n_vectors; ++i)
if (ptr[i] != 5.0625)
return_value += 8;
return return_value;
}
"
DEAL_II_HAVE_ALTIVEC)