/* { dg-do run } */ /* { dg-require-effective-target p9vector_hw } */ /* { dg-require-effective-target int128 } */ /* { dg-options "-mdejagnu-cpu=power9 -O2" } */ #include // vector void abort (void); int main() { int i; vector int vsia; vector unsigned int vsir, vsiexpt; vector unsigned int vuia, vuir, vuiexpt; vector signed long long vslla; vector unsigned long long vsllr, vsllexpt; vector unsigned long long vulla, vullr, vullexpt; vector __int128_t vs128a; vector __uint128_t vs128r, vs128expt; vector __uint128_t vu128a, vu128r, vu128expt; /* Returns a vector with each element containing the parity of the low-order bit of each of the bytes in that element. Note results are always returned in an unsinged type, per the ABI spec. */ vsia = (vector int) {0x10101010, 0x10101011, 0x10101111, 0x10111111}; vsiexpt = (vector unsigned int){0x0, 0x1, 0x0, 0x1}; vuia = (vector unsigned int) {0x000010000, 0x00010001, 0x10100000, 0x000010101}; vuiexpt = (vector unsigned int){0x1, 0x0, 0x0, 0x1}; vslla = (vector long long) {0x0000000000010000, 0x0001000100010000}; vsllexpt = (vector unsigned long long){0x1, 0x1}; vulla = (vector unsigned long long) {0x0000000000000001, 0x0001000000000001}; vullexpt = (vector unsigned long long){0x1, 0x0}; vs128a = (vector __int128_t) {0x0000000000001}; vs128expt = (vector __uint128_t) {0x1}; vu128a = (vector __uint128_t) {0x1000000000001}; vu128expt = (vector __uint128_t) {0x0}; vsir = vec_parity_lsbb(vsia); vuir = vec_parity_lsbb(vuia); vsllr = vec_parity_lsbb(vslla); vullr = vec_parity_lsbb(vulla); vs128r = vec_parity_lsbb(vs128a); vu128r = vec_parity_lsbb(vu128a); for(i = 0; i< 4; i++) { if (vsir[i] != vsiexpt[i]) abort(); if (vuir[i] != vuiexpt[i]) abort(); } for(i = 0; i< 2; i++) { if (vsllr[i] != vsllexpt[i]) abort(); if (vullr[i] != vullexpt[i]) abort(); } if (vs128r[0] != vs128expt[0]) abort(); if (vu128r[0] != vu128expt[0]) abort(); }