1 /* { dg-do run { target lp64 } } */
2 /* { dg-require-effective-target p9vector_hw } */
3 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
5 #include <altivec.h> // vector
12 vector
unsigned int vsir
, vsiexpt
;
13 vector
unsigned int vuia
, vuir
, vuiexpt
;
14 vector
signed long long vslla
;
15 vector
unsigned long long vsllr
, vsllexpt
;
16 vector
unsigned long long vulla
, vullr
, vullexpt
;
17 vector __int128_t vs128a
;
18 vector __uint128_t vs128r
, vs128expt
;
19 vector __uint128_t vu128a
, vu128r
, vu128expt
;
21 /* Returns a vector with each element containing the parity of the low-order
22 bit of each of the bytes in that element. Note results are always
23 returned in an unsinged type, per the ABI spec. */
24 vsia
= (vector
int) {0x10101010, 0x10101011, 0x10101111, 0x10111111};
25 vsiexpt
= (vector
unsigned int){0x0, 0x1, 0x0, 0x1};
27 vuia
= (vector
unsigned int) {0x000010000, 0x00010001,
28 0x10100000, 0x000010101};
29 vuiexpt
= (vector
unsigned int){0x1, 0x0, 0x0, 0x1};
31 vslla
= (vector
long long) {0x0000000000010000, 0x0001000100010000};
32 vsllexpt
= (vector
unsigned long long){0x1, 0x1};
34 vulla
= (vector
unsigned long long) {0x0000000000000001,
36 vullexpt
= (vector
unsigned long long){0x1, 0x0};
38 vs128a
= (vector __int128_t
) {0x0000000000001};
39 vs128expt
= (vector __uint128_t
) {0x1};
40 vu128a
= (vector __uint128_t
) {0x1000000000001};
41 vu128expt
= (vector __uint128_t
) {0x0};
43 vsir
= vec_parity_lsbb(vsia
);
44 vuir
= vec_parity_lsbb(vuia
);
45 vsllr
= vec_parity_lsbb(vslla
);
46 vullr
= vec_parity_lsbb(vulla
);
47 vs128r
= vec_parity_lsbb(vs128a
);
48 vu128r
= vec_parity_lsbb(vu128a
);
50 for(i
= 0; i
< 4; i
++) {
51 if (vsir
[i
] != vsiexpt
[i
])
54 if (vuir
[i
] != vuiexpt
[i
])
58 for(i
= 0; i
< 2; i
++) {
59 if (vsllr
[i
] != vsllexpt
[i
])
62 if (vullr
[i
] != vullexpt
[i
])
66 if (vs128r
[0] != vs128expt
[0])
69 if (vu128r
[0] != vu128expt
[0])