145
|
1 // { dg-do run }
|
|
2
|
|
3 extern "C" void abort ();
|
|
4 typedef int v4si __attribute__((vector_size (4 * sizeof (int))));
|
|
5 typedef unsigned int v4usi __attribute__((vector_size (4 * sizeof (unsigned int))));
|
|
6 typedef float v4sf __attribute__((vector_size (4 * sizeof (float))));
|
|
7 typedef double v4df __attribute__((vector_size (4 * sizeof (double))));
|
|
8 typedef long long v256di __attribute__((vector_size (256 * sizeof (long long))));
|
|
9 typedef double v256df __attribute__((vector_size (256 * sizeof (double))));
|
|
10
|
|
11 template <int N>
|
|
12 void
|
|
13 f1 (v4usi *x, v4si *y)
|
|
14 {
|
|
15 *y = __builtin_convertvector (*x, v4si);
|
|
16 }
|
|
17
|
|
18 template <typename T>
|
|
19 void
|
|
20 f2 (T *x, v4si *y)
|
|
21 {
|
|
22 *y = __builtin_convertvector (*x, v4si);
|
|
23 }
|
|
24
|
|
25 template <typename T>
|
|
26 void
|
|
27 f3 (v4si *x, T *y)
|
|
28 {
|
|
29 *y = __builtin_convertvector (*x, T);
|
|
30 }
|
|
31
|
|
32 template <int N>
|
|
33 void
|
|
34 f4 (v4df *x, v4si *y)
|
|
35 {
|
|
36 *y = __builtin_convertvector (*x, v4si);
|
|
37 }
|
|
38
|
|
39 template <typename T, typename U>
|
|
40 void
|
|
41 f5 (T *x, U *y)
|
|
42 {
|
|
43 *y = __builtin_convertvector (*x, U);
|
|
44 }
|
|
45
|
|
46 template <typename T>
|
|
47 void
|
|
48 f6 (v256df *x, T *y)
|
|
49 {
|
|
50 *y = __builtin_convertvector (*x, T);
|
|
51 }
|
|
52
|
|
53 template <int N>
|
|
54 void
|
|
55 f7 (v256di *x, v256df *y)
|
|
56 {
|
|
57 *y = __builtin_convertvector (*x, v256df);
|
|
58 }
|
|
59
|
|
60 template <int N>
|
|
61 void
|
|
62 f8 (v4df *x)
|
|
63 {
|
|
64 v4si a = { 1, 2, -3, -4 };
|
|
65 *x = __builtin_convertvector (a, v4df);
|
|
66 }
|
|
67
|
|
68 int
|
|
69 main ()
|
|
70 {
|
|
71 union U1 { v4si v; int a[4]; } u1;
|
|
72 union U2 { v4usi v; unsigned int a[4]; } u2;
|
|
73 union U3 { v4sf v; float a[4]; } u3;
|
|
74 union U4 { v4df v; double a[4]; } u4;
|
|
75 union U5 { v256di v; long long a[256]; } u5;
|
|
76 union U6 { v256df v; double a[256]; } u6;
|
|
77 int i;
|
|
78 for (i = 0; i < 4; i++)
|
|
79 u2.a[i] = i * 2;
|
|
80 f1<0> (&u2.v, &u1.v);
|
|
81 for (i = 0; i < 4; i++)
|
|
82 if (u1.a[i] != i * 2)
|
|
83 abort ();
|
|
84 else
|
|
85 u3.a[i] = i - 2.25f;
|
|
86 f2 (&u3.v, &u1.v);
|
|
87 for (i = 0; i < 4; i++)
|
|
88 if (u1.a[i] != (i == 3 ? 0 : i - 2))
|
|
89 abort ();
|
|
90 else
|
|
91 u3.a[i] = i + 0.75f;
|
|
92 f2 (&u3.v, &u1.v);
|
|
93 for (i = 0; i < 4; i++)
|
|
94 if (u1.a[i] != i)
|
|
95 abort ();
|
|
96 else
|
|
97 u1.a[i] = 7 * i - 5;
|
|
98 f3 (&u1.v, &u3.v);
|
|
99 for (i = 0; i < 4; i++)
|
|
100 if (u3.a[i] != 7 * i - 5)
|
|
101 abort ();
|
|
102 else
|
|
103 u4.a[i] = i - 2.25;
|
|
104 f4<12> (&u4.v, &u1.v);
|
|
105 for (i = 0; i < 4; i++)
|
|
106 if (u1.a[i] != (i == 3 ? 0 : i - 2))
|
|
107 abort ();
|
|
108 else
|
|
109 u4.a[i] = i + 0.75;
|
|
110 f4<13> (&u4.v, &u1.v);
|
|
111 for (i = 0; i < 4; i++)
|
|
112 if (u1.a[i] != i)
|
|
113 abort ();
|
|
114 else
|
|
115 u1.a[i] = 7 * i - 5;
|
|
116 f5 (&u1.v, &u4.v);
|
|
117 for (i = 0; i < 4; i++)
|
|
118 if (u4.a[i] != 7 * i - 5)
|
|
119 abort ();
|
|
120 for (i = 0; i < 256; i++)
|
|
121 u6.a[i] = i - 128.25;
|
|
122 f6 (&u6.v, &u5.v);
|
|
123 for (i = 0; i < 256; i++)
|
|
124 if (u5.a[i] != i - 128 - (i > 128))
|
|
125 abort ();
|
|
126 else
|
|
127 u5.a[i] = i - 128;
|
|
128 f7<-1> (&u5.v, &u6.v);
|
|
129 for (i = 0; i < 256; i++)
|
|
130 if (u6.a[i] != i - 128)
|
|
131 abort ();
|
|
132 f8<5> (&u4.v);
|
|
133 for (i = 0; i < 4; i++)
|
|
134 if (u4.a[i] != (i >= 2 ? -1 - i : i + 1))
|
|
135 abort ();
|
|
136 return 0;
|
|
137 }
|