152
|
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
|