[RS6000] Link power10 testcases
[gcc.git] / gcc / testsuite / gcc.target / powerpc / vec-gnb-0.c
1 /* { dg-do compile } */
2 /* { dg-require-effective-target int128 } */
3 /* { dg-options "-mdejagnu-cpu=power10" } */
4
5 #include <altivec.h>
6
7 extern void abort (void);
8
9 unsigned long long int
10 do_vec_gnb (vector unsigned __int128 source, int stride)
11 {
12 switch (stride)
13 {
14 case 2:
15 return vec_gnb (source, 2);
16 case 3:
17 return vec_gnb (source, 3);
18 case 4:
19 return vec_gnb (source, 4);
20 case 5:
21 return vec_gnb (source, 5);
22 case 6:
23 return vec_gnb (source, 6);
24 case 7:
25 return vec_gnb (source, 7);
26
27 default:
28 /* Illegal value of stride */
29 abort ();
30 return 0;
31 }
32 }
33
34 int
35 main (int argc, char *argv [])
36 {
37 /* For result = 0xaaaa_0000_0000_0000, use:
38 stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
39 stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
40
41 For result = 0xaaaa_aaaa_0000_0000, use:
42 stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
43 stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
44 */
45
46 /* The last array element appears in the left-most (first) bit
47 positions of the vector register. */
48 vector unsigned __int128 source_a =
49 { ((unsigned __int128) 0x8888888800000000ull) << 64 };
50 vector unsigned __int128 source_b =
51 { ((unsigned __int128) 0x8080808080808080ull) << 64 };
52 vector unsigned __int128 source_c =
53 { ((unsigned __int128) 0x8888888888888888ull) << 64 };
54 vector unsigned __int128 source_d =
55 { 0x8080808080808080ull |
56 ((unsigned __int128) 0x8080808080808080ull) << 64 };
57
58 unsigned long long int results [] =
59 { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
60 0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
61
62 if (do_vec_gnb (source_a, 2) != results [0])
63 abort ();
64 if (do_vec_gnb (source_b, 4) != results [1])
65 abort ();
66 if (do_vec_gnb (source_c, 2) != results [2])
67 abort ();
68 if (do_vec_gnb (source_d, 4) != results [3])
69 abort ();
70
71 return 0;
72 }
73
74 /* { dg-final { scan-assembler {\mvgnb\M} } } */