annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
152
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
1 /* { dg-do compile } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
2 /* { dg-require-effective-target int128 } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
3 /* { dg-options "-mdejagnu-cpu=future" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
4
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
5 #include <altivec.h>
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
6
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
7 extern void abort (void);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
8
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
9 unsigned long long int
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
10 do_vec_gnb (vector unsigned __int128 source, int stride)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
11 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
12 switch (stride)
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
13 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
14 case 2:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
15 return vec_gnb (source, 0); /* { dg-error "between 2 and 7" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
16 case 3:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
17 return vec_gnb (source, -1); /* { dg-error "between 2 and 7" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
18 case 4:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
19 return vec_gnb (source, 8); /* { dg-error "between 2 and 7" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
20 case 5:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
21 return vec_gnb (source, 1); /* { dg-error "between 2 and 7" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
22 case 6:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
23 return vec_gnb (source, stride); /* { dg-error "unsigned literal" } */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
24 case 7:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
25 return vec_gnb (source, 7);
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
26
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
27 default:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
28 /* Illegal value of stride */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
29 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
30 return 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
31 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
32 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
33
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
34 int
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
35 main (int argc, char *argv [])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
36 {
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
37 /* For result = 0xaaaa_0000_0000_0000, use:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
38 stride = 2: binary 1x0x_1x0x_1x0x_... = 0x8888_8888_0000_0000, 0
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
39 stride = 4: binary 1xxx_0xxx_1xxx_0xxxx = 0x8080_8080_8080_8080, 0
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
40
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
41 For result = 0xaaaa_aaaa_0000_0000, use:
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
42 stride = 2: source = 0x8888_8888_8888_8888, 0x0 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
43 stride = 4: source = { 0x8080_8080_8080_8080, 0x8080_8080_8080_8080 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
44 */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
45
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
46 /* The last array element appears in the left-most (first) bit
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
47 positions of the vector register. */
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
48 vector unsigned __int128 source_a =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
49 { ((unsigned __int128) 0x8888888800000000ull) << 64 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
50 vector unsigned __int128 source_b =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
51 { ((unsigned __int128) 0x8080808080808080ull) << 64 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
52 vector unsigned __int128 source_c =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
53 { ((unsigned __int128) 0x8888888888888888ull) << 64 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
54 vector unsigned __int128 source_d =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
55 { 0x8080808080808080ull |
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
56 ((unsigned __int128) 0x8080808080808080ull) << 64 };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
57
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
58 unsigned long long int results [] =
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
59 { 0xaaaa000000000000ull, 0xaaaa000000000000ull,
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
60 0xaaaaaaaa00000000ull, 0xaaaaaaaa00000000ull };
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
61
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
62 if (do_vec_gnb (source_a, 2) != results [0])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
63 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
64 if (do_vec_gnb (source_b, 4) != results [1])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
65 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
66 if (do_vec_gnb (source_c, 2) != results [2])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
67 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
68 if (do_vec_gnb (source_d, 4) != results [3])
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
69 abort ();
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
70
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
71 return 0;
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
72 }
2b5abeee2509 update gcc11
anatofuz
parents:
diff changeset
73