using vq_t = __vector_quad;
void testVQAlias(int *inp, int *outp) {
vq_t *vqin = (vq_t *)inp;
vq_t *vqout = (vq_t *)outp;
*vqout = *vqin;
}
class TestClassVQ {
public:
void testVQArg1(__vector_quad vq, int *ptr) { __vector_quad *vqp = (__vector_quad *)ptr;
*vqp = vq;
*vqp1 = vq;
}
void testVQArg2(const __vector_quad vq, int *ptr) { __vector_quad *vqp = (__vector_quad *)ptr;
*vqp = vq;
*vqp2 = vq;
}
void testVQArg3(__vector_quad *vq, int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
*vqp = *vq;
vqp1 = vqp;
}
void testVQArg4(const __vector_quad *const vq, int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
*vqp = *vq;
vqp2 = vqp;
}
void testVQArg5(__vector_quad vqa[], int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
*vqp = vqa[0];
*vqp1 = vqa[1];
}
void testVQArg6(const vq_t vq, int *ptr) { __vector_quad *vqp = (__vector_quad *)ptr;
*vqp = vq;
*vqp2 = vq;
}
void testVQArg7(const vq_t *vq, int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
*vqp = *vq;
vqp1 = vqp;
}
__vector_quad testVQRet1(int *ptr) { __vector_quad *vqp = (__vector_quad *)ptr;
vq1 = *vqp;
return *vqp; }
__vector_quad *testVQRet2(int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
vq2 = *vqp;
return vqp + 2;
}
const __vector_quad *testVQRet3(int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
vqp1 = vqp;
return vqp + 2;
}
const vq_t testVQRet4(int *ptr) { __vector_quad *vqp = (__vector_quad *)ptr;
vqp2 = vqp;
return *vqp; }
const vq_t *testVQRet5(int *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
vq1 = *vqp;
return vqp + 2;
}
template <typename T = __vector_quad>
void testVQTemplate(T v, T *p) { *(p + 1) = v;
}
public:
__vector_quad vq1; __vector_quad *vqp1;
private:
vq_t vq2; vq_t *vqp2;
};
template <typename T>
class ClassTemplateVQ1 {
T t; };
template <typename T>
class ClassTemplateVQ2 {
T *t;
};
template <typename T>
class ClassTemplateVQ3 {
int foo(T t) { return 10; }
};
template <typename T, typename... Ts>
class ClassTemplateVQ4 {
public:
T operator()(Ts...) const {} };
void testVQTemplate() {
ClassTemplateVQ1<__vector_quad> t1; ClassTemplateVQ1<__vector_quad *> t2;
ClassTemplateVQ2<__vector_quad> t3;
ClassTemplateVQ2<__vector_quad *> t4;
ClassTemplateVQ3<int(int, int, int)> t5;
ClassTemplateVQ3<__vector_quad(int, int, int)> t6;
ClassTemplateVQ3<int(__vector_quad, int, int)> t7;
ClassTemplateVQ4<int, int, int, __vector_quad> t8; ClassTemplateVQ4<int, int, int, __vector_quad *> t9;
TestClassVQ tc;
__vector_quad vq;
__vector_quad *vqp = &vq;
tc.testVQTemplate(&vq, &vqp);
tc.testVQTemplate<vq_t *>(&vq, &vqp);
tc.testVQTemplate(vq, vqp); tc.testVQTemplate<vq_t>(vq, vqp); }
auto testVQTrailing1() {
__vector_quad vq;
return vq; }
auto testVQTrailing2() {
__vector_quad *vqp;
return vqp;
}
auto testVQTrailing3() -> vq_t { __vector_quad vq;
return vq; }
auto testVQTrailing4() -> vq_t * {
__vector_quad *vqp;
return vqp;
}
void testVQNewDelete() {
__vector_quad *vqp1 = new __vector_quad;
__vector_quad *vqp2 = new __vector_quad[100];
delete vqp1;
delete[] vqp2;
}
void TestVQLambda() {
auto f1 = [](void *ptr) -> __vector_quad {
__vector_quad *vqp = (__vector_quad *)ptr;
return *vqp; };
auto f2 = [](void *ptr) {
__vector_quad *vqp = (__vector_quad *)ptr;
return *vqp; };
auto f3 = [] { __vector_quad vq; __builtin_mma_xxsetaccz(&vq); return vq; }; }
void TestVQCast() {
__vector_quad vq;
int *ip = reinterpret_cast<int *>(&vq);
__vector_quad *vq2 = reinterpret_cast<__vector_quad *>(ip);
}
void TestVQThrow() {
__vector_quad vq;
throw vq; }
using vp_t = __vector_pair;
void testVPAlias(int *inp, int *outp) {
vp_t *vpin = (vp_t *)inp;
vp_t *vpout = (vp_t *)outp;
*vpout = *vpin;
}
class TestClassVP {
public:
void testVPArg1(__vector_pair vp, int *ptr) { __vector_pair *vpp = (__vector_pair *)ptr;
*vpp = vp;
*vpp1 = vp;
}
void testVPArg2(const __vector_pair vp, int *ptr) { __vector_pair *vpp = (__vector_pair *)ptr;
*vpp = vp;
*vpp2 = vp;
}
void testVPArg3(__vector_pair *vp, int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
*vpp = *vp;
vpp1 = vpp;
}
void testVPArg4(const __vector_pair *const vp, int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
*vpp = *vp;
vpp2 = vpp;
}
void testVPArg5(__vector_pair vpa[], int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
*vpp = vpa[0];
*vpp1 = vpa[1];
}
void testVPArg6(const vp_t vp, int *ptr) { __vector_pair *vpp = (__vector_pair *)ptr;
*vpp = vp;
*vpp2 = vp;
}
void testVPArg7(const vp_t *vp, int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
*vpp = *vp;
vpp1 = vpp;
}
__vector_pair testVPRet1(int *ptr) { __vector_pair *vpp = (__vector_pair *)ptr;
vp1 = *vpp;
return *vpp; }
__vector_pair *testVPRet2(int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
vp2 = *vpp;
return vpp + 2;
}
const __vector_pair *testVPRet3(int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
vpp1 = vpp;
return vpp + 2;
}
const vp_t testVPRet4(int *ptr) { __vector_pair *vpp = (__vector_pair *)ptr;
vpp2 = vpp;
return *vpp; }
const vp_t *testVPRet5(int *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
vp1 = *vpp;
return vpp + 2;
}
template <typename T = __vector_pair>
void testVPTemplate(T v, T *p) { *(p + 1) = v;
}
public:
__vector_pair vp1; __vector_pair *vpp1;
private:
vp_t vp2; vp_t *vpp2;
};
template <typename T>
class ClassTemplateVP1 {
T t; };
template <typename T>
class ClassTemplateVP2 {
T *t;
};
template <typename T>
class ClassTemplateVP3 {
int foo(T t) { return 10; }
};
template <typename T, typename... Ts>
class ClassTemplateVP4 {
public:
T operator()(Ts...) const {} };
void testVPTemplate() {
ClassTemplateVP1<__vector_pair> t1; ClassTemplateVP1<__vector_pair *> t2;
ClassTemplateVP2<__vector_pair> t3;
ClassTemplateVP2<__vector_pair *> t4;
ClassTemplateVP3<int(int, int, int)> t5;
ClassTemplateVP3<__vector_pair(int, int, int)> t6;
ClassTemplateVP3<int(__vector_pair, int, int)> t7;
ClassTemplateVP4<int, int, int, __vector_pair> t8; ClassTemplateVP4<int, int, int, __vector_pair *> t9;
TestClassVP tc;
__vector_pair vp;
__vector_pair *vpp = &vp;
tc.testVPTemplate(&vp, &vpp);
tc.testVPTemplate<vp_t *>(&vp, &vpp);
tc.testVPTemplate(vp, vpp); tc.testVPTemplate<vp_t>(vp, vpp); }
auto testVPTrailing1() {
__vector_pair vp;
return vp; }
auto testVPTrailing2() {
__vector_pair *vpp;
return vpp;
}
auto testVPTrailing3() -> vp_t { __vector_pair vp;
return vp; }
auto testVPTrailing4() -> vp_t * {
__vector_pair *vpp;
return vpp;
}
void testVPNewDelete() {
__vector_pair *vpp1 = new __vector_pair;
__vector_pair *vpp2 = new __vector_pair[100];
delete vpp1;
delete[] vpp2;
}
void TestVPLambda() {
auto f1 = [](void *ptr) -> __vector_pair {
__vector_pair *vpp = (__vector_pair *)ptr;
return *vpp; };
auto f2 = [](void *ptr) {
__vector_pair *vpp = (__vector_pair *)ptr;
return *vpp; };
auto f3 = [](vector unsigned char vc) { __vector_pair vp; __builtin_vsx_assemble_pair(&vp, vc, vc); return vp; }; auto f4 = [](vector unsigned char vc) { __vector_pair vp; __builtin_vsx_build_pair(&vp, vc, vc); return vp; }; }
void TestVPCast() {
__vector_pair vp;
int *ip = reinterpret_cast<int *>(&vp);
__vector_pair *vp2 = reinterpret_cast<__vector_pair *>(ip);
}
void TestVPThrow() {
__vector_pair vp;
throw vp; }