c++: normalizing ttp constraints [PR115656]
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / float128-longdouble-math.c
blob07934bb73572e72ecf2995db3c70989aa66f1af9
1 /* { dg-require-effective-target ppc_float128_hw } */
2 /* { dg-options "-mdejagnu-cpu=power9 -O2 -mlong-double-128 -Wno-psabi -mabi=ieeelongdouble" } */
4 /* Test if switching long double to IEEE 128-bit maps all of the math built-in
5 function names correctly. We leave off the \M in matching the calls, so
6 power10 will match using bl foo@notoc. */
8 #ifdef DO_FUNC
9 #define BUILTIN1(FUNC, ARG1) FUNC (ARG1)
10 #define BUILTIN2(FUNC, ARG1, ARG2) FUNC (ARG1, ARG2)
11 #define BUILTIN3(FUNC, ARG1, ARG2, ARG3) FUNC (ARG1, ARG2, ARG3)
13 #else
14 #define BUILTIN1(FUNC, ARG1) __builtin_ ## FUNC (ARG1)
15 #define BUILTIN2(FUNC, ARG1, ARG2) __builtin_ ## FUNC (ARG1, ARG2)
16 #define BUILTIN3(FUNC, ARG1, ARG2, ARG3) __builtin_ ## FUNC (ARG1, ARG2, ARG3)
17 #endif
19 /* Built-in functions that returns a long double and take one long double
20 argument. */
22 void
23 return_ld_arg_ld (long double *p,
24 long double *q)
26 /* { dg-final { scan-assembler {\mbl __acoshieee128} } } */
27 *p++ = BUILTIN1 (acoshl, *q++);
29 /* { dg-final { scan-assembler {\mbl __acosieee128} } } */
30 *p++ = BUILTIN1 (acosl, *q++);
32 /* { dg-final { scan-assembler {\mbl __asinhieee128} } } */
33 *p++ = BUILTIN1 (asinhl, *q++);
35 /* { dg-final { scan-assembler {\mbl __asinieee128} } } */
36 *p++ = BUILTIN1 (asinl, *q++);
38 /* { dg-final { scan-assembler {\mbl __atanhieee128} } } */
39 *p++ = BUILTIN1 (atanhl, *q++);
41 /* { dg-final { scan-assembler {\mbl __atanieee128} } } */
42 *p++ = BUILTIN1 (atanl, *q++);
44 /* { dg-final { scan-assembler {\mbl __cbrtieee128} } } */
45 *p++ = BUILTIN1 (cbrtl, *q++);
47 /* inline code. */
48 /* { dg-final { scan-assembler {\mxsrqpi +[0-9]+,[0-9]+,[0-9]+,2} } } */
49 *p++ = BUILTIN1 (ceill, *q++);
51 /* { dg-final { scan-assembler {\mbl __coshieee128} } } */
52 *p++ = BUILTIN1 (coshl, *q++);
54 /* { dg-final { scan-assembler {\mbl __cosieee128} } } */
55 *p++ = BUILTIN1 (cosl, *q++);
57 /* { dg-final { scan-assembler {\mbl __erfcieee128} } } */
58 *p++ = BUILTIN1 (erfcl, *q++);
60 /* { dg-final { scan-assembler {\mbl __erfieee128} } } */
61 *p++ = BUILTIN1 (erfl, *q++);
63 /* { dg-final { scan-assembler {\mbl __exp10ieee128} } } */
64 *p++ = BUILTIN1 (exp10l, *q++);
66 /* { dg-final { scan-assembler {\mbl __exp2ieee128} } } */
67 *p++ = BUILTIN1 (exp2l, *q++);
69 /* { dg-final { scan-assembler {\mbl __expieee128} } } */
70 *p++ = BUILTIN1 (expl, *q++);
72 /* { dg-final { scan-assembler {\mbl __expm1ieee128} } } */
73 *p++ = BUILTIN1 (expm1l, *q++);
75 /* inline code. */
76 /* { dg-final { scan-assembler {\mxsabsqp} } } */
77 *p++ = BUILTIN1 (fabsl, *q++);
79 /* inline code. */
80 /* { dg-final { scan-assembler {\mxsrqpi +[0-9]+,[0-9]+,[0-9]+,3} } } */
81 *p++ = BUILTIN1 (floorl, *q++);
83 /* { dg-final { scan-assembler {\mbl __lgammaieee128} } } */
84 *p++ = BUILTIN1 (gammal, *q++);
86 /* { dg-final { scan-assembler {\mbl __j0ieee128} } } */
87 *p++ = BUILTIN1 (j0l, *q++);
89 /* { dg-final { scan-assembler {\mbl __j1ieee128} } } */
90 *p++ = BUILTIN1 (j1l, *q++);
92 /* { dg-final { scan-assembler {\mbl __log10ieee128} } } */
93 *p++ = BUILTIN1 (log10l, *q++);
95 /* { dg-final { scan-assembler {\mbl __log1pieee128} } } */
96 *p++ = BUILTIN1 (log1pl, *q++);
98 /* { dg-final { scan-assembler {\mbl __log2ieee128} } } */
99 *p++ = BUILTIN1 (log2l, *q++);
101 /* { dg-final { scan-assembler {\mbl __logbieee128} } } */
102 *p++ = BUILTIN1 (logbl, *q++);
104 /* { dg-final { scan-assembler {\mbl __logieee128} } } */
105 *p++ = BUILTIN1 (logl, *q++);
107 /* { dg-final { scan-assembler {\mbl __nearbyintieee128} } } */
108 *p++ = BUILTIN1 (nearbyintl, *q++);
110 /* { dg-final { scan-assembler {\mbl __exp10ieee128} } } */
111 *p++ = BUILTIN1 (pow10l, *q++);
113 /* { dg-final { scan-assembler {\mbl __rintieee128} } } */
114 *p++ = BUILTIN1 (rintl, *q++);
116 /* { dg-final { scan-assembler {\mbl __roundevenieee128} } } */
117 *p++ = BUILTIN1 (roundevenl, *q++);
119 /* inline code. */
120 /* { dg-final { scan-assembler {\mxsrqpi +[0-9]+,[0-9]+,[0-9]+,0} } } */
121 *p++ = BUILTIN1 (roundl, *q++);
123 /* { dg-final { scan-assembler {\mbl __significandieee128} } } */
124 *p++ = BUILTIN1 (significandl, *q++);
126 /* { dg-final { scan-assembler {\mbl __sinhieee128} } } */
127 *p++ = BUILTIN1 (sinhl, *q++);
129 /* { dg-final { scan-assembler {\mbl __sinieee128} } } */
130 *p++ = BUILTIN1 (sinl, *q++);
132 /* { dg-final { scan-assembler {\mbl __sqrtieee128} } } */
133 *p++ = BUILTIN1 (sqrtl, *q++);
135 /* { dg-final { scan-assembler {\mbl __tanhieee128} } } */
136 *p++ = BUILTIN1 (tanhl, *q++);
138 /* { dg-final { scan-assembler {\mbl __tanieee128} } } */
139 *p++ = BUILTIN1 (tanl, *q++);
141 /* { dg-final { scan-assembler {\mbl __tgammaieee128} } } */
142 *p++ = BUILTIN1 (tgammal, *q++);
144 /* inline code. */
145 /* { dg-final { scan-assembler {\mxsrqpi +[0-9]+,[0-9]+,[0-9]+,1} } } */
146 *p++ = BUILTIN1 (truncl, *q++);
148 /* { dg-final { scan-assembler {\mbl __y0ieee128} } } */
149 *p++ = BUILTIN1 (y0l, *q++);
151 /* { dg-final { scan-assembler {\mbl __y1ieee128} } } */
152 *p = BUILTIN1 (y1l, *q);
156 /* Built-in functions that returns a long double and take two long double
157 arguments. */
159 void
160 return_ld_arg_ld_ld (long double *p,
161 long double *q,
162 long double *r)
164 /* { dg-final { scan-assembler {\mbl __atan2ieee128} } } */
165 *p++ = BUILTIN2 (atan2l, *q++, *r++);
167 /* inline code. */
168 /* { dg-final { scan-assembler {\mxscpsgnqp} } } */
169 *p++ = BUILTIN2 (copysignl, *q++, *r++);
171 /* { dg-final { scan-assembler {\mbl __remainderieee128} } } */
172 *p++ = BUILTIN2 (dreml, *q++, *r++);
174 /* { dg-final { scan-assembler {\mbl __fdimieee128} } } */
175 *p++ = BUILTIN2 (fdiml, *q++, *r++);
177 /* { dg-final { scan-assembler {\mbl __fmaxieee128} } } */
178 *p++ = BUILTIN2 (fmaxl, *q++, *r++);
180 /* { dg-final { scan-assembler {\mbl __fminieee128} } } */
181 *p++ = BUILTIN2 (fminl, *q++, *r++);
183 /* { dg-final { scan-assembler {\mbl __fmodieee128} } } */
184 *p++ = BUILTIN2 (fmodl, *q++, *r++);
186 /* { dg-final { scan-assembler {\mbl __hypotieee128} } } */
187 *p++ = BUILTIN2 (hypotl, *q++, *r++);
189 /* { dg-final { scan-assembler {\mbl __nextafterieee128} } } */
190 *p++ = BUILTIN2 (nextafterl, *q++, *r++);
192 /* { dg-final { scan-assembler {\mbl __nexttowardieee128} } } */
193 *p++ = BUILTIN2 (nexttowardl, *q++, *r++);
195 /* { dg-final { scan-assembler {\mbl __powieee128} } } */
196 *p++ = BUILTIN2 (powl, *q++, *r++);
198 /* { dg-final { scan-assembler {\mbl __scalbnieee128} } } */
199 *p = BUILTIN2 (scalbl, *q, *r);
202 /* Built-in function that returns a long double and take three long double
203 arguments. */
205 void
206 return_ld_arg_ld_ld_ld (long double *p,
207 long double *q,
208 long double *r,
209 long double *s)
211 /* inline code. */
212 /* { dg-final { scan-assembler {\mxsmaddqp} } } */
213 *p = BUILTIN3 (fmal, *q, *r, *s);
216 /* Built-in functions that returns a long double and take one
217 _Complex long double argument. */
219 void
220 return_ld_arg_cld (long double *p,
221 _Complex long double *q)
223 /* { dg-final { scan-assembler {\mbl __cabsieee128} } } */
224 *p++ = BUILTIN1 (cabsl, *q++);
227 /* Built-in functions that returns a _Complex long double and takes one
228 _Complex long double argument. */
230 void
231 return_cld_arg_cld (_Complex long double *p,
232 _Complex long double *q)
234 /* { dg-final { scan-assembler {\mbl __cacoshieee128} } } */
235 *p++ = BUILTIN1 (cacoshl, *q++);
237 /* { dg-final { scan-assembler {\mbl __cacosieee128} } } */
238 *p++ = BUILTIN1 (cacosl, *q++);
240 /* { dg-final { scan-assembler {\mbl __casinhieee128} } } */
241 *p++ = BUILTIN1 (casinhl, *q++);
243 /* { dg-final { scan-assembler {\mbl __casinieee128} } } */
244 *p++ = BUILTIN1 (casinl, *q++);
246 /* { dg-final { scan-assembler {\mbl __catanhieee128} } } */
247 *p++ = BUILTIN1 (catanhl, *q++);
249 /* { dg-final { scan-assembler {\mbl __catanieee128} } } */
250 *p++ = BUILTIN1 (catanl, *q++);
252 /* { dg-final { scan-assembler {\mbl __ccoshieee128} } } */
253 *p++ = BUILTIN1 (ccoshl, *q++);
255 /* { dg-final { scan-assembler {\mbl __ccosieee128} } } */
256 *p++ = BUILTIN1 (ccosl, *q++);
258 /* { dg-final { scan-assembler {\mbl __cexpieee128} } } */
259 *p++ = BUILTIN1 (cexpl, *q++);
261 /* { dg-final { scan-assembler {\mbl __clogieee128} } } */
262 *p++ = BUILTIN1 (clogl, *q++);
264 /* { dg-final { scan-assembler {\mbl __clog10ieee128} } } */
265 *p++ = BUILTIN1 (clog10l, *q++);
267 /* { dg-final { scan-assembler {\mbl __cprojieee128} } } */
268 *p++ = BUILTIN1 (cprojl, *q++);
270 /* { dg-final { scan-assembler {\mbl __csinhieee128} } } */
271 *p++ = BUILTIN1 (csinhl, *q++);
273 /* { dg-final { scan-assembler {\mbl __csinieee128} } } */
274 *p++ = BUILTIN1 (csinl, *q++);
276 /* { dg-final { scan-assembler {\mbl __csqrtieee128} } } */
277 *p++ = BUILTIN1 (csqrtl, *q++);
279 /* { dg-final { scan-assembler {\mbl __ctanhieee128} } } */
280 *p++ = BUILTIN1 (ctanhl, *q++);
282 /* { dg-final { scan-assembler {\mbl __ctanieee128} } } */
283 *p = BUILTIN1 (ctanl, *q);
286 /* Built-in functions that returns a _Complex long double and takes one
287 long double argument. */
289 void
290 return_cld_arg_ld (_Complex long double *p,
291 long double *q)
293 /* { dg-final { scan-assembler {\mbl __sincosieee128} } } */
294 *p = BUILTIN1 (cexpil, *q);
297 /* Built-in function that returns a _Complex long double and takes two
298 _Complex long double arguments. */
300 void
301 return_cld_arg_cld_cld (_Complex long double *p,
302 _Complex long double *q,
303 _Complex long double *r)
305 /* { dg-final { scan-assembler {\mbl __cpowieee128} } } */
306 *p = BUILTIN2 (cpowl, *q, *r);
309 /* Built-in functions that returns a long double and takes a long double and a
310 pointer to an int arguments. */
312 void
313 return_ld_arg_ld_pi (long double *p,
314 long double *q,
315 int **r)
317 /* { dg-final { scan-assembler {\mbl __frexpieee128} } } */
318 *p++ = BUILTIN2 (frexpl, *q++, *r++);
320 /* { dg-final { scan-assembler {\mbl __lgammaieee128_r} } } */
321 *p++ = BUILTIN2 (gammal_r, *q++, *r++);
324 /* Built-in functions that returns a long double and takes a long double and an
325 int arguments. */
327 void
328 return_ld_arg_ld_i (long double *p,
329 long double *q,
330 int *r)
332 /* { dg-final { scan-assembler {\mbl __ldexpieee128} } } */
333 *p++ = BUILTIN2 (ldexpl, *q++, *r++);
335 /* { dg-final { scan-assembler {\mbl __powikf2} } } */
336 *p++ = BUILTIN2 (powil, *q++, *r++);
338 /* { dg-final { scan-assembler {\mbl __scalbnieee128} } } */
339 *p = BUILTIN2 (scalbnl, *q, *r);
342 /* Built-in function that returns a long double and takes a long double and a
343 long arguments. */
345 void
346 return_ld_arg_ld_l (long double *p,
347 long double *q,
348 long *r)
350 /* { dg-final { scan-assembler {\mbl __scalblnieee128} } } */
351 *p = BUILTIN2 (scalblnl, *q, *r);
354 /* Built-in functions that returns a long double and takes a long double and a
355 long long arguments. */
357 void
358 return_ld_arg_i_ld (long double *p,
359 int *q,
360 long double *r)
362 /* { dg-final { scan-assembler {\mbl __jnieee128} } } */
363 *p++ = BUILTIN2 (jnl, *q++, *r++);
365 /* { dg-final { scan-assembler {\mbl __ynieee128} } } */
366 *p = BUILTIN2 (ynl, *q, *r);
369 /* Built-in functions that returns a long double and takes a long double and a
370 pointer to a long double arguments. */
372 void
373 return_ld_arg_ld_pld (long double *p,
374 long double *q,
375 long double **r)
377 /* { dg-final { scan-assembler {\mbl __modfieee128} } } */
378 *p = BUILTIN2 (modfl, *q, *r);
381 /* Built-in function that returns a long double and takes two long double and a
382 pointer to an int arguments. */
384 void
385 return_ld_arg_ld_ld_pi (long double *p,
386 long double *q,
387 long double *r,
388 int **s)
390 /* { dg-final { scan-assembler {\mbl __remquoieee128} } } */
391 *p = BUILTIN3 (remquol, *q, *r, *s);
394 /* Built-in functions that return san int and takes one long double argument. */
396 void
397 return_i_arg_ld (int *p,
398 long double *q)
400 /* { dg-final { scan-assembler {\mbl __ceilieee128} } } */
401 *p++ = BUILTIN1 (iceill, *q++);
403 /* { dg-final { scan-assembler {\mbl __floorieee128} } } */
404 *p++ = BUILTIN1 (ifloorl, *q++);
406 /* { dg-final { scan-assembler {\mbl __ilogbieee128} } } */
407 *p++ = BUILTIN1 (ilogbl, *q++);
409 /* { dg-final { scan-assembler {\mbl __lrintieee128} } } */
410 *p++ = BUILTIN1 (irintl, *q++);
412 /* { dg-final { scan-assembler {\mbl __lroundieee128} } } */
413 *p++ = BUILTIN1 (iroundl, *q++);
415 /* inline code. */
416 /* { dg-final { scan-assembler {\mxscvqpswz} } } */
417 *p++ = BUILTIN1 (signbitl, *q++);
420 /* Built-in function that returns a double and takes one double and one long
421 double arguments. */
423 void
424 return_d_arg_d_ld (double *p,
425 double *q,
426 long double *r)
428 /* { dg-final { scan-assembler {\mbl __nexttoward_to_ieee128} } } */
429 *p = BUILTIN2 (nexttoward, *q, *r);
432 /* Built-in function that returns a float and takes one float and one long
433 double arguments. */
435 void
436 return_f_arg_f_ld (float *p,
437 float *q,
438 long double *r)
440 /* { dg-final { scan-assembler {\mbl __nexttowardf_to_ieee128} } } */
441 *p = BUILTIN2 (nexttowardf, *q, *r);