comparison gcc/testsuite/g++.dg/ext/builtin-convertvector-1.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
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 }