[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / pr41175.c
blob2f0137962c53ac8bc4f7a134e7370d1a90dba0f6
1 /* PR target/41175 */
2 /* { dg-do run } */
3 /* { dg-options "-Os" } */
5 #define X2(n) X1(n##0) X1(n##1)
6 #define X4(n) X2(n##0) X2(n##1)
7 #define X8(n) X4(n##0) X4(n##1)
9 #ifndef __SPE__
10 #define FLOAT_REG_CONSTRAINT "f"
11 #else
12 #define FLOAT_REG_CONSTRAINT "r"
13 #endif
15 volatile int ll;
17 __attribute__((noinline)) void
18 foo (void)
20 asm volatile ("" : : : "memory");
23 __attribute__((noinline)) void
24 bar (char *p)
26 asm volatile ("" : : "r" (p) : "memory");
29 __attribute__((noinline)) void
30 f1 (void)
32 int mem;
33 #undef X1
34 #define X1(n) int gpr##n = 0;
35 X8(a) X8(b) X8(c)
36 #undef X1
37 #define X1(n) "+r" (gpr##n),
38 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
39 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
40 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
41 foo ();
42 #undef X1
43 #define X1(n) "r" (gpr##n),
44 asm volatile ("" : : X8(a) "m" (mem) : "memory");
45 asm volatile ("" : : X8(b) "m" (mem) : "memory");
46 asm volatile ("" : : X8(c) "m" (mem) : "memory");
49 __attribute__((noinline)) void
50 f2 (void)
52 int mem;
53 #undef X1
54 #define X1(n) int gpr##n = 0;
55 X8(a) X8(b) X8(c)
56 #undef X1
57 #define X1(n) "+r" (gpr##n),
58 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
59 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
60 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
61 char *pp = __builtin_alloca (ll);
62 bar (pp);
63 #undef X1
64 #define X1(n) "r" (gpr##n),
65 asm volatile ("" : : X8(a) "m" (mem) : "memory");
66 asm volatile ("" : : X8(b) "m" (mem) : "memory");
67 asm volatile ("" : : X8(c) "m" (mem) : "memory");
70 __attribute__((noinline)) void
71 f3 (void)
73 int mem;
74 #undef X1
75 #define X1(n) int gpr##n = 0;
76 X8(a) X8(b) X8(c)
77 #undef X1
78 #define X1(n) "+r" (gpr##n),
79 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
80 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
81 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
82 #undef X1
83 #define X1(n) "r" (gpr##n),
84 asm volatile ("" : : X8(a) "m" (mem) : "memory");
85 asm volatile ("" : : X8(b) "m" (mem) : "memory");
86 asm volatile ("" : : X8(c) "m" (mem) : "memory");
89 #ifndef __NO_FPRS__
90 __attribute__((noinline)) void
91 f4 (void)
93 int mem;
94 #undef X1
95 #define X1(n) int gpr##n = 0;
96 X8(a) X8(b) X8(c)
97 #undef X1
98 #define X1(n) double fpr##n = 0.0;
99 X4(d)
100 #undef X1
101 #define X1(n) "+r" (gpr##n),
102 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
103 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
104 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
105 #undef X1
106 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
107 asm volatile ("" : X4(d) "=m" (mem) : : "memory");
108 foo ();
109 #undef X1
110 #define X1(n) "r" (gpr##n),
111 asm volatile ("" : : X8(a) "m" (mem) : "memory");
112 asm volatile ("" : : X8(b) "m" (mem) : "memory");
113 asm volatile ("" : : X8(c) "m" (mem) : "memory");
114 #undef X1
115 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
116 asm volatile ("" : : X4(d) "m" (mem) : "memory");
119 __attribute__((noinline)) void
120 f5 (void)
122 int mem;
123 #undef X1
124 #define X1(n) int gpr##n = 0;
125 X8(a) X8(b) X8(c)
126 #undef X1
127 #define X1(n) double fpr##n = 0.0;
128 X4(d)
129 #undef X1
130 #define X1(n) "+r" (gpr##n),
131 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
132 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
133 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
134 #undef X1
135 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
136 asm volatile ("" : X4(d) "=m" (mem) : : "memory");
137 char *pp = __builtin_alloca (ll);
138 bar (pp);
139 #undef X1
140 #define X1(n) "r" (gpr##n),
141 asm volatile ("" : : X8(a) "m" (mem) : "memory");
142 asm volatile ("" : : X8(b) "m" (mem) : "memory");
143 asm volatile ("" : : X8(c) "m" (mem) : "memory");
144 #undef X1
145 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
146 asm volatile ("" : : X4(d) "m" (mem) : "memory");
149 __attribute__((noinline)) void
150 f6 (void)
152 int mem;
153 #undef X1
154 #define X1(n) int gpr##n = 0;
155 X8(a) X8(b) X8(c)
156 #undef X1
157 #define X1(n) double fpr##n = 0.0;
158 X4(d)
159 #undef X1
160 #define X1(n) "+r" (gpr##n),
161 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
162 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
163 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
164 #undef X1
165 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
166 asm volatile ("" : X4(d) "=m" (mem) : : "memory");
167 #undef X1
168 #define X1(n) "r" (gpr##n),
169 asm volatile ("" : : X8(a) "m" (mem) : "memory");
170 asm volatile ("" : : X8(b) "m" (mem) : "memory");
171 asm volatile ("" : : X8(c) "m" (mem) : "memory");
172 #undef X1
173 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
174 asm volatile ("" : : X4(d) "m" (mem) : "memory");
177 __attribute__((noinline)) void
178 f7 (void)
180 int mem;
181 #undef X1
182 #define X1(n) int gpr##n = 0;
183 X8(a) X8(b) X8(c)
184 #undef X1
185 #define X1(n) double fpr##n = 0.0;
186 X2(d)
187 #undef X1
188 #define X1(n) "+r" (gpr##n),
189 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
190 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
191 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
192 #undef X1
193 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
194 asm volatile ("" : X2(d) "=m" (mem) : : "memory");
195 foo ();
196 #undef X1
197 #define X1(n) "r" (gpr##n),
198 asm volatile ("" : : X8(a) "m" (mem) : "memory");
199 asm volatile ("" : : X8(b) "m" (mem) : "memory");
200 asm volatile ("" : : X8(c) "m" (mem) : "memory");
201 #undef X1
202 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
203 asm volatile ("" : : X2(d) "m" (mem) : "memory");
206 __attribute__((noinline)) void
207 f8 (void)
209 int mem;
210 #undef X1
211 #define X1(n) int gpr##n = 0;
212 X8(a) X8(b) X8(c)
213 #undef X1
214 #define X1(n) double fpr##n = 0.0;
215 X2(d)
216 #undef X1
217 #define X1(n) "+r" (gpr##n),
218 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
219 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
220 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
221 #undef X1
222 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
223 asm volatile ("" : X2(d) "=m" (mem) : : "memory");
224 char *pp = __builtin_alloca (ll);
225 bar (pp);
226 #undef X1
227 #define X1(n) "r" (gpr##n),
228 asm volatile ("" : : X8(a) "m" (mem) : "memory");
229 asm volatile ("" : : X8(b) "m" (mem) : "memory");
230 asm volatile ("" : : X8(c) "m" (mem) : "memory");
231 #undef X1
232 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
233 asm volatile ("" : : X2(d) "m" (mem) : "memory");
236 __attribute__((noinline)) void
237 f9 (void)
239 int mem;
240 #undef X1
241 #define X1(n) int gpr##n = 0;
242 X8(a) X8(b) X8(c)
243 #undef X1
244 #define X1(n) double fpr##n = 0.0;
245 X2(d)
246 #undef X1
247 #define X1(n) "+r" (gpr##n),
248 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
249 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
250 asm volatile ("" : X8(c) "=m" (mem) : : "memory");
251 #undef X1
252 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
253 asm volatile ("" : X2(d) "=m" (mem) : : "memory");
254 #undef X1
255 #define X1(n) "r" (gpr##n),
256 asm volatile ("" : : X8(a) "m" (mem) : "memory");
257 asm volatile ("" : : X8(b) "m" (mem) : "memory");
258 asm volatile ("" : : X8(c) "m" (mem) : "memory");
259 #undef X1
260 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
261 asm volatile ("" : : X2(d) "m" (mem) : "memory");
264 __attribute__((noinline)) void
265 f10 (void)
267 int mem;
268 #undef X1
269 #define X1(n) int gpr##n = 0;
270 X8(a) X8(b) X4(c)
271 #undef X1
272 #define X1(n) double fpr##n = 0.0;
273 X1(d)
274 #undef X1
275 #define X1(n) "+r" (gpr##n),
276 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
277 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
278 asm volatile ("" : X4(c) "=m" (mem) : : "memory");
279 #undef X1
280 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
281 asm volatile ("" : X1(d) "=m" (mem) : : "memory");
282 foo ();
283 #undef X1
284 #define X1(n) "r" (gpr##n),
285 asm volatile ("" : : X8(a) "m" (mem) : "memory");
286 asm volatile ("" : : X8(b) "m" (mem) : "memory");
287 asm volatile ("" : : X4(c) "m" (mem) : "memory");
288 #undef X1
289 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
290 asm volatile ("" : : X1(d) "m" (mem) : "memory");
293 __attribute__((noinline)) void
294 f11 (void)
296 int mem;
297 #undef X1
298 #define X1(n) int gpr##n = 0;
299 X8(a) X8(b) X4(c)
300 #undef X1
301 #define X1(n) double fpr##n = 0.0;
302 X1(d)
303 #undef X1
304 #define X1(n) "+r" (gpr##n),
305 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
306 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
307 asm volatile ("" : X4(c) "=m" (mem) : : "memory");
308 #undef X1
309 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
310 asm volatile ("" : X1(d) "=m" (mem) : : "memory");
311 char *pp = __builtin_alloca (ll);
312 bar (pp);
313 #undef X1
314 #define X1(n) "r" (gpr##n),
315 asm volatile ("" : : X8(a) "m" (mem) : "memory");
316 asm volatile ("" : : X8(b) "m" (mem) : "memory");
317 asm volatile ("" : : X4(c) "m" (mem) : "memory");
318 #undef X1
319 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
320 asm volatile ("" : : X1(d) "m" (mem) : "memory");
323 __attribute__((noinline)) void
324 f12 (void)
326 int mem;
327 #undef X1
328 #define X1(n) int gpr##n = 0;
329 X8(a) X8(b) X4(c)
330 #undef X1
331 #define X1(n) double fpr##n = 0.0;
332 X1(d)
333 #undef X1
334 #define X1(n) "+r" (gpr##n),
335 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
336 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
337 asm volatile ("" : X4(c) "=m" (mem) : : "memory");
338 #undef X1
339 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
340 asm volatile ("" : X1(d) "=m" (mem) : : "memory");
341 #undef X1
342 #define X1(n) "r" (gpr##n),
343 asm volatile ("" : : X8(a) "m" (mem) : "memory");
344 asm volatile ("" : : X8(b) "m" (mem) : "memory");
345 asm volatile ("" : : X4(c) "m" (mem) : "memory");
346 #undef X1
347 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
348 asm volatile ("" : : X1(d) "m" (mem) : "memory");
351 __attribute__((noinline)) void
352 f13 (void)
354 int mem;
355 #undef X1
356 #define X1(n) int gpr##n = 0;
357 X8(a) X8(b) X2(c)
358 #undef X1
359 #define X1(n) double fpr##n = 0.0;
360 X8(d)
361 #undef X1
362 #define X1(n) "+r" (gpr##n),
363 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
364 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
365 asm volatile ("" : X2(c) "=m" (mem) : : "memory");
366 #undef X1
367 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
368 asm volatile ("" : X8(d) "=m" (mem) : : "memory");
369 foo ();
370 #undef X1
371 #define X1(n) "r" (gpr##n),
372 asm volatile ("" : : X8(a) "m" (mem) : "memory");
373 asm volatile ("" : : X8(b) "m" (mem) : "memory");
374 asm volatile ("" : : X2(c) "m" (mem) : "memory");
375 #undef X1
376 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
377 asm volatile ("" : : X8(d) "m" (mem) : "memory");
380 __attribute__((noinline)) void
381 f14 (void)
383 int mem;
384 #undef X1
385 #define X1(n) int gpr##n = 0;
386 X8(a) X8(b) X2(c)
387 #undef X1
388 #define X1(n) double fpr##n = 0.0;
389 X8(d)
390 #undef X1
391 #define X1(n) "+r" (gpr##n),
392 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
393 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
394 asm volatile ("" : X2(c) "=m" (mem) : : "memory");
395 #undef X1
396 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
397 asm volatile ("" : X8(d) "=m" (mem) : : "memory");
398 char *pp = __builtin_alloca (ll);
399 bar (pp);
400 #undef X1
401 #define X1(n) "r" (gpr##n),
402 asm volatile ("" : : X8(a) "m" (mem) : "memory");
403 asm volatile ("" : : X8(b) "m" (mem) : "memory");
404 asm volatile ("" : : X2(c) "m" (mem) : "memory");
405 #undef X1
406 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
407 asm volatile ("" : : X8(d) "m" (mem) : "memory");
410 __attribute__((noinline)) void
411 f15 (void)
413 int mem;
414 #undef X1
415 #define X1(n) int gpr##n = 0;
416 X8(a) X8(b) X2(c)
417 #undef X1
418 #define X1(n) double fpr##n = 0.0;
419 X8(d)
420 #undef X1
421 #define X1(n) "+r" (gpr##n),
422 asm volatile ("" : X8(a) "=m" (mem) : : "memory");
423 asm volatile ("" : X8(b) "=m" (mem) : : "memory");
424 asm volatile ("" : X2(c) "=m" (mem) : : "memory");
425 #undef X1
426 #define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
427 asm volatile ("" : X8(d) "=m" (mem) : : "memory");
428 #undef X1
429 #define X1(n) "r" (gpr##n),
430 asm volatile ("" : : X8(a) "m" (mem) : "memory");
431 asm volatile ("" : : X8(b) "m" (mem) : "memory");
432 asm volatile ("" : : X2(c) "m" (mem) : "memory");
433 #undef X1
434 #define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
435 asm volatile ("" : : X8(d) "m" (mem) : "memory");
437 #endif
440 main ()
442 ll = 60;
443 f1 ();
444 f2 ();
445 f3 ();
446 #ifndef __NO_FPRS__
447 f4 ();
448 f5 ();
449 f6 ();
450 f7 ();
451 f8 ();
452 f9 ();
453 f10 ();
454 f11 ();
455 f12 ();
456 f13 ();
457 f14 ();
458 f15 ();
459 #endif
460 return 0;