1 /* { dg-do run { target { powerpc*-*-* && lp64 } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-mvsx" } */
4
5 /* This test should run the same on any target that supports vsx
6 instructions. Intentionally not specifying cpu in order to test
7 all code generation paths. */
8
9 #include <altivec.h>
10
11 extern void abort (void);
12
13 /* Define PR89626 after that pr is addressed. */
14 #ifdef PR89626
15 #define SIGNED
16 #else
17 #define SIGNED signed
18 #endif
19
20 #define CONST0 (((__int128) 31415926539) << 60)
21
22 /* Test that indices > length of vector are applied modulo the vector
23 length. */
24
25
26 /* Test for variable selector and vector residing in register. */
27 __attribute__((noinline))
ei(vector SIGNED __int128 v,int i)28 __int128 ei (vector SIGNED __int128 v, int i)
29 {
30 return __builtin_vec_ext_v1ti (v, i);
31 }
32
33 /* Test for variable selector and vector residing in memory. */
mei(vector SIGNED __int128 * vp,int i)34 __int128 mei (vector SIGNED __int128 *vp, int i)
35 {
36 return __builtin_vec_ext_v1ti (*vp, i);
37 }
38
main(int argc,char * argv[])39 int main (int argc, char *argv[]) {
40 vector SIGNED __int128 dv = { CONST0 };
41 __int128 d;
42
43 d = ei (dv, 0);
44 if (d != CONST0)
45 abort ();
46
47 d = ei (dv, 1);
48 if (d != CONST0)
49 abort ();
50
51 d = ei (dv, 2);
52 if (d != CONST0)
53 abort ();
54
55 d = ei (dv, 3);
56 if (d != CONST0)
57 abort ();
58
59 d = mei (&dv, 0);
60 if (d != CONST0)
61 abort ();
62
63 d = mei (&dv, 1);
64 if (d != CONST0)
65 abort ();
66
67 d = mei (&dv, 2);
68 if (d != CONST0)
69 abort ();
70
71 d = mei (&dv, 3);
72 if (d != CONST0)
73 abort ();
74
75 return 0;
76 }
77