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