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. */
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)
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)
19 /* Built-in functions that returns a long double and take one long double
23 return_ld_arg_ld (long double *p
,
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
++);
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
++);
76 /* { dg-final { scan-assembler {\mxsabsqp} } } */
77 *p
++ = BUILTIN1 (fabsl
, *q
++);
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
++);
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
++);
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
160 return_ld_arg_ld_ld (long double *p
,
164 /* { dg-final { scan-assembler {\mbl __atan2ieee128} } } */
165 *p
++ = BUILTIN2 (atan2l
, *q
++, *r
++);
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
206 return_ld_arg_ld_ld_ld (long double *p
,
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. */
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. */
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. */
290 return_cld_arg_ld (_Complex
long double *p
,
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. */
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. */
313 return_ld_arg_ld_pi (long double *p
,
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
328 return_ld_arg_ld_i (long double *p
,
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
346 return_ld_arg_ld_l (long double *p
,
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. */
358 return_ld_arg_i_ld (long double *p
,
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. */
373 return_ld_arg_ld_pld (long double *p
,
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. */
385 return_ld_arg_ld_ld_pi (long double *p
,
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. */
397 return_i_arg_ld (int *p
,
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
++);
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
424 return_d_arg_d_ld (double *p
,
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
436 return_f_arg_f_ld (float *p
,
440 /* { dg-final { scan-assembler {\mbl __nexttowardf_to_ieee128} } } */
441 *p
= BUILTIN2 (nexttowardf
, *q
, *r
);