Remove old autovect-branch by moving to "dead" directory.
[official-gcc.git] / old-autovect-branch / gcc / testsuite / gcc.dg / vmx / varargs-4.c
bloba175519532133045a557d7623e82925cbfa9938e
1 #include "harness.h"
2 #include <stdarg.h>
3 #include <stddef.h>
4 #include <string.h>
6 typedef struct n_a
8 signed char m1;
9 short m2;
10 int m3;
11 double m4;
12 vector float m5;
14 n_a;
16 static n_a gn_a;
18 static int
19 lay(char *p, int start, int end, int n)
21 int b;
22 unsigned char ch;
23 unsigned int mask;
25 start *= 8;
26 end *= 8;
27 n *= 8;
29 for (b = 0; b + 8 <= start; b += 8)
31 ch = *p++;
32 if (ch != 0xff)
33 for (mask = 0x80; mask; b++, mask >>= 1)
34 if ((ch & mask) != mask)
35 return b;
38 if (b < start)
40 ch = *p++;
41 for (mask = 0x80; b < start; b++, mask >>= 1)
42 if ((ch & mask) != mask)
43 return b;
44 for (; mask && b < end; b++, mask >>= 1)
45 if ((ch & mask) != 0)
46 return b;
49 for (; b + 8 <= end; b += 8)
51 ch = *p++;
52 if (ch != 0)
53 for (mask = 0x80; mask; b++, mask >>= 1)
54 if ((ch & mask) != 0)
55 return b;
58 if (b < end)
60 ch = *p++;
61 for (mask = 0x80; b < end; b++, mask >>= 1)
62 if ((ch & mask) != 0)
63 return b;
64 for (; mask && b < n; b++, mask >>= 1)
65 if ((ch & mask) != mask)
66 return b;
69 for (; b + 8 <= n; b += 8)
71 ch = *p++;
72 if (ch != 0xff)
73 for (mask = 0x80; mask; b++, mask >>= 1)
74 if ((ch & mask) != mask)
75 return b;
78 return n;
81 static void
82 initn_a(signed char p1, short p2, int p3, double p4, vector float p5)
84 n_a i;
86 i.m1 = p1;
87 i.m2 = p2;
88 i.m3 = p3;
89 i.m4 = p4;
90 i.m5 = p5;
92 check(i.m1 == 77, "i.m1");
93 check(i.m2 == 1924, "i.m2");
94 check(i.m3 == -1471601920, "i.m3");
95 check(vec_all_eq(i.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
96 "i.m5");
98 check(sizeof(n_a) == 32, "sizeof(n_a)");
100 check(offsetof(n_a, m1) == 0, "offsetof(m1)");
101 check(offsetof(n_a, m2) == 2, "offsetof(m2)");
102 check(offsetof(n_a, m3) == 4, "offsetof(m3)");
103 check(offsetof(n_a, m4) == 8, "offsetof(m4)");
104 check(offsetof(n_a, m5) == 16, "offsetof(m5)");
106 check(sizeof(i.m1) == 1, "sizeof(m1)");
107 check(sizeof(i.m2) == 2, "sizeof(m2)");
108 check(sizeof(i.m3) == 4, "sizeof(m3)");
109 check(sizeof(i.m4) == 8, "sizeof(m4)");
110 check(sizeof(i.m5) == 16, "sizeof(m5)");
112 #define lay_check(field) do { \
113 memset((char *)&i, 0xFF, sizeof(i)); \
114 lay_reset(field); \
115 check(lay((char *)&i, \
116 offsetof(n_a, field), \
117 offsetof(n_a, field) + sizeof(i.field), \
118 sizeof(i)) == sizeof(i)*8, \
119 "lay(" #field ")"); \
120 } while (0)
121 #define lay_reset(field) i.field = 0
123 lay_check(m1);
124 lay_check(m2);
125 lay_check(m3);
126 lay_check(m4);
127 #undef lay_reset
128 #define lay_reset(field) i.field = ((vector float){0,0,0,0})
129 lay_check(m5);
131 #undef lay_check
132 #undef lay_reset
136 valuen_a(void)
138 return gn_a;
141 n_a *
142 addrn_a(void)
144 return &gn_a;
147 static void
148 eqn_a(n_a * a)
150 check(a->m1 == 77, "a->m1");
151 check(a->m2 == 1924, "a->m2");
152 check(a->m3 == -1471601920, "a->m3");
153 check(vec_all_eq(a->m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
154 "a->m5");
157 static void
158 getsn_a(n_a * a)
160 a->m1 = 77;
161 a->m2 = 1924;
162 a->m3 = -1471601920;
163 a->m4 = 3.65e+18;
164 a->m5 = ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08});
167 static void
168 varlistn_a(signed char p1, va_list ap)
170 n_a q;
171 q.m1 = p1;
172 q.m2 = va_arg(ap, int);
173 q.m3 = va_arg(ap, int);
174 q.m4 = va_arg(ap, double);
175 q.m5 = va_arg(ap, vector float);
177 check(q.m1 == 77, "q.m1");
178 check(q.m2 == 1924, "q.m2");
179 check(q.m3 == -1471601920, "q.m3");
180 check(vec_all_eq(q.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
181 "q.m5");
184 static void
185 varargsn_a(signed char p1, ...)
187 n_a q, r;
188 va_list ap;
190 va_start(ap, p1);
191 q.m1 = p1;
192 q.m2 = va_arg(ap, int);
193 q.m3 = va_arg(ap, int);
194 q.m4 = va_arg(ap, double);
195 q.m5 = va_arg(ap, vector float);
196 va_end(ap);
198 check(q.m1 == 77, "q.m1");
199 check(q.m2 == 1924, "q.m2");
200 check(q.m3 == -1471601920, "q.m3");
201 check(vec_all_eq(q.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
202 "q.m5");
204 va_start(ap, p1);
205 r.m1 = p1;
206 r.m2 = va_arg(ap, int);
207 r.m3 = va_arg(ap, int);
208 r.m4 = va_arg(ap, double);
209 r.m5 = va_arg(ap, vector float);
210 va_end(ap);
212 check(r.m1 == 77, "r.m1");
213 check(r.m2 == 1924, "r.m2");
214 check(r.m3 == -1471601920, "r.m3");
215 check(vec_all_eq(r.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
216 "r.m5");
218 va_start(ap, p1);
219 varlistn_a(p1, ap);
220 va_end(ap);
223 static void
224 test()
226 static struct
228 char a;
229 n_a b;
232 n_a v[3], a, *p;
234 static n_a i = { 77, 1924, -1471601920, 3.65e+18, {-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08} };
236 memset((char *)&(v), -1, sizeof(v));
237 v[1] = s.b;
238 check(lay((char *)&v, sizeof(n_a), sizeof(n_a)*2, sizeof(n_a)*3) == sizeof(n_a)*3*8,
239 "structure assignment");
241 check(i.m1 == 77, "i.m1");
242 check(i.m2 == 1924, "i.m2");
243 check(i.m3 == -1471601920, "i.m3");
244 check(vec_all_eq(i.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
245 "i.m5");
247 initn_a(77, 1924, -1471601920, 3.65e+18, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08}));
248 varargsn_a(77, 1924, -1471601920, 3.65e+18, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08}));
250 gn_a.m1 = 77;
251 gn_a.m2 = 1924;
252 gn_a.m3 = -1471601920;
253 gn_a.m4 = 3.65e+18;
254 gn_a.m5 = ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08});
255 a = valuen_a();
257 check(a.m1 == 77, "a.m1");
258 check(a.m2 == 1924, "a.m2");
259 check(a.m3 == -1471601920, "a.m3");
260 check(vec_all_eq(a.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
261 "a.m5");
263 p = addrn_a();
265 check(p->m1 == 77, "p->m1");
266 check(p->m2 == 1924, "p->m2");
267 check(p->m3 == -1471601920, "p->m3");
268 check(vec_all_eq(p->m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
269 "p->m5");
271 eqn_a(&a);
273 check(gn_a.m1 == 77, "gn_a.m1");
274 check(gn_a.m2 == 1924, "gn_a.m2");
275 check(gn_a.m3 == -1471601920, "gn_a.m3");
276 check(vec_all_eq(gn_a.m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
277 "gn_a.m5");
279 getsn_a(&v[0]);
280 v[2].m1 = v[0].m1;
281 v[2].m2 = v[0].m2;
282 v[2].m3 = v[0].m3;
283 v[2].m4 = v[0].m4;
284 v[2].m5 = v[0].m5;
286 check(v[2].m1 == 77, "v[2].m1");
287 check(v[2].m2 == 1924, "v[2].m2");
288 check(v[2].m3 == -1471601920, "v[2].m3");
289 check(vec_all_eq(v[2].m5, ((vector float){-1.38e+09, 5.96e+08, 6.88e+08, -3.2e+08})),
290 "v[2].m5");