Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.target/powerpc/vec-gnb-2.c @ 152:2b5abeee2509
update gcc11
author | anatofuz |
---|---|
date | Mon, 25 May 2020 07:50:57 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
145:1830386684a0 | 152:2b5abeee2509 |
---|---|
1 /* { dg-do compile } */ | |
2 /* { dg-require-effective-target int128 } */ | |
3 /* { dg-options "-mdejagnu-cpu=future" } */ | |
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, 0); /* { dg-error "between 2 and 7" } */ | |
16 case 3: | |
17 return vec_gnb (source, -1); /* { dg-error "between 2 and 7" } */ | |
18 case 4: | |
19 return vec_gnb (source, 8); /* { dg-error "between 2 and 7" } */ | |
20 case 5: | |
21 return vec_gnb (source, 1); /* { dg-error "between 2 and 7" } */ | |
22 case 6: | |
23 return vec_gnb (source, stride); /* { dg-error "unsigned literal" } */ | |
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 |