Mercurial > hg > CbC > CbC_gcc
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 } |