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