c++: normalizing ttp constraints [PR115656]
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / vsx-builtin-19c.c
blob3ff0dfe20b0281b2fe835c95e086815b540cb435
1 /* { dg-do run { target int128 } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-mvsx" } */
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. */
9 #include <altivec.h>
11 extern void abort (void);
13 #define CONST0 (31415926539LL)
14 #define CONST1 (2 * 31415926539LL)
15 #define CONST2 (3 * 31415926539LL)
16 #define CONST3 (4 * 31415926539LL)
17 #define CONST4 (5 * 31415926539LL)
18 #define CONST5 (6 * 31415926539LL)
19 #define CONST6 (7 * 31415926539LL)
20 #define CONST7 (8 * 31415926539LL)
22 /* Test that indices > length of vector are applied modulo the vector
23 length. */
25 /* Test for vector residing in register. */
26 vector unsigned long long int
27 e0 (vector unsigned long long int v, unsigned long long int x)
29 return vec_insert (x, v, 0);
32 vector unsigned long long int
33 e3 (vector unsigned long long int v, unsigned long long int x)
35 return vec_insert (x, v, 3);
38 /* Test for vector residing in memory. */
39 vector unsigned long long int
40 me0 (vector unsigned long long int *vp, unsigned long long int x)
42 return vec_insert (x, *vp, 0);
45 vector unsigned long long int
46 me3 (vector unsigned long long int *vp, unsigned long long int x)
48 return vec_insert (x, *vp, 3);
51 /* Test the same with variable indices. */
53 /* Test for variable selector and vector residing in register. */
54 __attribute__((noinline))
55 vector unsigned long long int
56 ei (vector unsigned long long int v, int i, unsigned long long int x)
58 return vec_insert (x, v, i);
61 /* Test for variable selector and vector residing in memory. */
62 __attribute__((noinline))
63 vector unsigned long long int
64 mei (vector unsigned long long int *vp, int i, unsigned long long int x)
66 return vec_insert (x, *vp, i);
69 int main (int argc, char *argv[]) {
70 vector unsigned long long int dv = { CONST0, CONST1 };
71 unsigned long long int d;
73 dv = e0 (dv, CONST7);
74 if (dv [0] != CONST7)
75 abort ();
77 dv = e3 (dv, CONST2);
78 if (dv [1] != CONST2)
79 abort ();
81 dv = me0 (&dv, CONST4);
82 if (dv [0] != CONST4)
83 abort ();
85 dv = me3 (&dv, CONST3);
86 if (dv [1] != CONST3)
87 abort ();
89 dv = ei (dv, 0, CONST5);
90 if (dv [0] != CONST5)
91 abort ();
93 dv = ei (dv, 1, CONST2);
94 if (dv [1] != CONST2)
95 abort ();
97 dv = ei (dv, 2, CONST3);
98 if (dv [0] != CONST3)
99 abort ();
101 dv = ei (dv, 3, CONST6);
102 if (dv [1] != CONST6)
103 abort ();
105 dv = mei (&dv, 0, CONST1);
106 if (dv [0] != CONST1)
107 abort ();
109 dv = mei (&dv, 1, CONST3);
110 if (dv [1] != CONST3)
111 abort ();
113 dv = mei (&dv, 2, CONST1);
114 if (dv [0] != CONST1)
115 abort ();
117 dv = mei (&dv, 3, CONST2);
118 if (dv [1] != CONST2)
119 abort ();
121 return 0;