From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1005) id 335AB394342C; Thu, 8 Oct 2020 19:33:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 335AB394342C Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Michael Meissner To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/meissner/heads/work019)] Undo last changes. X-Act-Checkin: gcc X-Git-Author: Michael Meissner X-Git-Refname: refs/users/meissner/heads/work019 X-Git-Oldrev: 62758f095c226a976167ddf0ee747cf6d53bb491 X-Git-Newrev: 2e5461555812f9fdb458f9bc857f407283ab3c9b Message-Id: <20201008193310.335AB394342C@sourceware.org> Date: Thu, 8 Oct 2020 19:33:10 +0000 (GMT) X-BeenThere: gcc-cvs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Oct 2020 19:33:10 -0000 https://gcc.gnu.org/g:2e5461555812f9fdb458f9bc857f407283ab3c9b commit 2e5461555812f9fdb458f9bc857f407283ab3c9b Author: Michael Meissner Date: Thu Oct 8 15:32:38 2020 -0400 Undo last changes. gcc/ 2020-10-08 Michael Meissner Undo * config/rs6000/rs6000.c (rs6000_mangle_decl_assembler_name): Add support for mapping built-in function names for long double built-in functions if long double is IEEE 128-bit. gcc/testsuite/ 2020-10-08 Michael Meissner Undo * gcc.target/powerpc/float128-longdouble-math.c: New test. * gcc.target/powerpc/float128-longdouble-stdio.c: New test. * gcc.target/powerpc/float128-math.c: Adjust test for new name being generated. Diff: --- gcc/config/rs6000/rs6000.c | 163 ++---- .../gcc.target/powerpc/float128-longdouble-math.c | 559 --------------------- .../gcc.target/powerpc/float128-longdouble-stdio.c | 37 -- gcc/testsuite/gcc.target/powerpc/float128-math.c | 6 +- 4 files changed, 34 insertions(+), 731 deletions(-) diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 2e3628823a3..b28f4adf464 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -26897,156 +26897,55 @@ rs6000_globalize_decl_name (FILE * stream, tree decl) library before you can switch the real*16 type at compile time. We use the TARGET_MANGLE_DECL_ASSEMBLER_NAME hook to change this name. We - only do this transformation if the __float128 type is enabled. This - prevents us from doing the transformation on older 32-bit ports that might - have enabled using IEEE 128-bit floating point as the default long double - type. */ + only do this if the default is that long double is IBM extended double, and + the user asked for IEEE 128-bit. */ static tree rs6000_mangle_decl_assembler_name (tree decl, tree id) { - if (TARGET_FLOAT128_TYPE && TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128 - && TREE_CODE (decl) == FUNCTION_DECL - && fndecl_built_in_p (decl, BUILT_IN_NORMAL)) + if (!TARGET_IEEEQUAD_DEFAULT && TARGET_IEEEQUAD && TARGET_LONG_DOUBLE_128 + && TREE_CODE (decl) == FUNCTION_DECL && DECL_IS_BUILTIN (decl) ) { size_t len = IDENTIFIER_LENGTH (id); const char *name = IDENTIFIER_POINTER (id); - const char *newname = NULL; - - /* See if it is one of the built-in functions with an unusual name. */ - switch (DECL_FUNCTION_CODE (decl)) - { - default: - break; - - case BUILT_IN_DREML: - newname = "__ieee754_remainderf128"; - break; - - case BUILT_IN_GAMMAL: - newname = "__lgammaieee128"; - break; - - case BUILT_IN_GAMMAL_R: - case BUILT_IN_LGAMMAL_R: - newname = "__lgammaieee128_r"; - break; - - case BUILT_IN_NEXTTOWARD: - newname = "__nexttoward_to_ieee128"; - break; - - case BUILT_IN_NEXTTOWARDF: - newname = "__nexttowardf_to_ieee128"; - break; - - case BUILT_IN_NEXTTOWARDL: - newname = "__nexttowardieee128"; - break; - - case BUILT_IN_POW10L: - newname = "__ieee754_exp10f128"; - break; - - case BUILT_IN_SCALBL: - newname = "__scalbnieee128"; - break; - - case BUILT_IN_SIGNIFICANDL: - newname = "__significandieee128"; - break; - - case BUILT_IN_SINCOSL: - newname = "__sincosieee128"; - break; - } - /* Update the __builtin_*printf && __builtin_*scanf functions. */ - if (!newname) + if (name[len - 1] == 'l') { - const size_t printf_len = sizeof ("printf") - 1; - const size_t scanf_len = sizeof ("scanf") - 1; - const size_t printf_extra - = sizeof ("__") - 1 + sizeof ("ieee128") - 1; - const size_t scanf_extra - = sizeof ("__isoc99_") - 1 + sizeof ("ieee128") - 1; - - if (len >= printf_len - && strcmp (name + len - printf_len, "printf") == 0) - { - char *name2 = (char *) alloca (len + 1 + printf_extra); - strcpy (name2, "__"); - memcpy (name2 + 2, name, len); - strcpy (name2 + 2 + len, "ieee128"); - newname = (const char *) name2; - } + bool uses_ieee128_p = false; + tree type = TREE_TYPE (decl); + machine_mode ret_mode = TYPE_MODE (type); - else if (len >= scanf_len - && strcmp (name + len - scanf_len, "scanf") == 0) + /* See if the function returns a IEEE 128-bit floating point type or + complex type. */ + if (ret_mode == TFmode || ret_mode == TCmode) + uses_ieee128_p = true; + else { - char *name2 = (char *) alloca (len + 1 + scanf_extra); - strcpy (name2, "__isoc99_"); - memcpy (name2 + sizeof ("__isoc99") - 1, name, len); - strcpy (name2 + sizeof ("__isoc99") - 1 + len, "ieee128"); - newname = (const char *) name2; - } + function_args_iterator args_iter; + tree arg; - else if (name[len - 1] == 'l') - { - bool uses_ieee128_p = false; - tree type = TREE_TYPE (decl); - machine_mode ret_mode = TYPE_MODE (type); - - /* See if the function returns a IEEE 128-bit floating point type or - complex type. */ - if (ret_mode == TFmode || ret_mode == TCmode) - uses_ieee128_p = true; - else + /* See if the function passes a IEEE 128-bit floating point type + or complex type. */ + FOREACH_FUNCTION_ARGS (type, arg, args_iter) { - function_args_iterator args_iter; - tree arg; - - /* See if the function passes a IEEE 128-bit floating point type - or complex type. */ - FOREACH_FUNCTION_ARGS (type, arg, args_iter) + machine_mode arg_mode = TYPE_MODE (arg); + if (arg_mode == TFmode || arg_mode == TCmode) { - machine_mode arg_mode = TYPE_MODE (arg); - if (arg_mode == TFmode || arg_mode == TCmode) - { - uses_ieee128_p = true; - break; - } + uses_ieee128_p = true; + break; } } - - /* If we passed or returned an IEEE 128-bit floating point type, - change the name. Use __ieee754_l, instead of - f128. */ - if (uses_ieee128_p) - { - size_t prefix_len = sizeof ("__") - 1; - size_t suffix_len = sizeof ("ieee128") - 1; - char *name2 = (char *) alloca (len + prefix_len + suffix_len + 1); - char *name3 = name2; - - memcpy (name3, "__", prefix_len); - name3 += prefix_len; - - memcpy (name3, name, len - 1); /* omit trailing 'l'. */ - name3 += len - 1; - - memcpy (name3, "ieee128", suffix_len + 1); - newname = (const char *) name2; - } } - } - - if (newname) - { - if (TARGET_DEBUG_BUILTIN) - fprintf (stderr, "Map %s => %s\n", name, newname); - id = get_identifier (newname); + /* If we passed or returned an IEEE 128-bit floating point type, + change the name. */ + if (uses_ieee128_p) + { + char *name2 = (char *) alloca (len + 4); + memcpy (name2, name, len - 1); + strcpy (name2 + len - 1, "f128"); + id = get_identifier (name2); + } } } diff --git a/gcc/testsuite/gcc.target/powerpc/float128-longdouble-math.c b/gcc/testsuite/gcc.target/powerpc/float128-longdouble-math.c deleted file mode 100644 index 4f4c2765278..00000000000 --- a/gcc/testsuite/gcc.target/powerpc/float128-longdouble-math.c +++ /dev/null @@ -1,559 +0,0 @@ -/* { dg-require-effective-target ppc_float128_hw } */ -/* { dg-require-effective-target power10_ok } */ -/* { dg-options "-mdejagnu-cpu=power9 -mno-pcrel -O2 -Wno-psabi -mabi=ieeelongdouble" } */ - -/* Test if switching long double to IEEE 128-bit maps all of the math built-in - function names correctly. We explicitly turn off PC-relative support to - make it simpler to compare the call without having a @notoc qualifier. */ - -/* Debugging support to use 'name' instead of '__builtin_name'. Note if you - enable this, you will likely need additional flags to get all of the - functions defined. */ -#ifdef DO_FUNC -#ifndef DO_MATH_H -#define DO_MATH_H 1 -#endif - -#define BUILTIN0(FUNC) FUNC () -#define BUILTIN1(FUNC, ARG1) FUNC (ARG1) -#define BUILTIN2(FUNC, ARG1, ARG2) FUNC (ARG1, ARG2) -#define BUILTIN3(FUNC, ARG1, ARG2, ARG3) FUNC (ARG1, ARG2, ARG3) - -#else -#define BUILTIN0(FUNC) __builtin_ ## FUNC () -#define BUILTIN1(FUNC, ARG1) __builtin_ ## FUNC (ARG1) -#define BUILTIN2(FUNC, ARG1, ARG2) __builtin_ ## FUNC (ARG1, ARG2) -#define BUILTIN3(FUNC, ARG1, ARG2, ARG3) __builtin_ ## FUNC (ARG1, ARG2, ARG3) -#endif - -/* Debugging support to compare using math.h with the raw built-in functions. */ -#ifdef DO_MATH_H -#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 -#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 -#define _GNU_SOURCE 1 -#define _XOPEN_SOURCE 1 - -#include -#include -#endif - -/* Built-in functions that returns a long double and take one long double - argument. */ - -void -return_ld_arg_ld (long double *p, - long double *q) -{ - /* { dg-final { scan-assembler {\m__acoshieee128\M} } } */ - *p++ = BUILTIN1 (acoshl, *q++); - - /* { dg-final { scan-assembler {\m__acosieee128\M} } } */ - *p++ = BUILTIN1 (acosl, *q++); - - /* { dg-final { scan-assembler {\m__asinhieee128\M} } } */ - *p++ = BUILTIN1 (asinhl, *q++); - - /* { dg-final { scan-assembler {\m__asinieee128\M} } } */ - *p++ = BUILTIN1 (asinl, *q++); - - /* { dg-final { scan-assembler {\m__atanhieee128\M} } } */ - *p++ = BUILTIN1 (atanhl, *q++); - - /* { dg-final { scan-assembler {\m__atanieee128\M} } } */ - *p++ = BUILTIN1 (atanl, *q++); - - /* { dg-final { scan-assembler {\m__cbrtieee128\M} } } */ - *p++ = BUILTIN1 (cbrtl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (ceill, *q++); - - /* { dg-final { scan-assembler {\m__coshieee128\M} } } */ - *p++ = BUILTIN1 (coshl, *q++); - - /* { dg-final { scan-assembler {\m__cosieee128\M} } } */ - *p++ = BUILTIN1 (cosl, *q++); - - /* { dg-final { scan-assembler {\m__erfcieee128\M} } } */ - *p++ = BUILTIN1 (erfcl, *q++); - - /* { dg-final { scan-assembler {\m__erfieee128\M} } } */ - *p++ = BUILTIN1 (erfl, *q++); - - /* { dg-final { scan-assembler {\m__exp10ieee128\M} } } */ - *p++ = BUILTIN1 (exp10l, *q++); - - /* { dg-final { scan-assembler {\m__exp2ieee128\M} } } */ - *p++ = BUILTIN1 (exp2l, *q++); - - /* { dg-final { scan-assembler {\m__expieee128\M} } } */ - *p++ = BUILTIN1 (expl, *q++); - - /* { dg-final { scan-assembler {\m__expm1ieee128\M} } } */ - *p++ = BUILTIN1 (expm1l, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (fabsl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (floorl, *q++); - - /* { dg-final { scan-assembler {\m__lgammaieee128\M} } } */ - *p++ = BUILTIN1 (gammal, *q++); - - /* { dg-final { scan-assembler {\m__j0ieee128\M} } } */ - *p++ = BUILTIN1 (j0l, *q++); - - /* { dg-final { scan-assembler {\m__j1ieee128\M} } } */ - *p++ = BUILTIN1 (j1l, *q++); - - /* lgammaf128 mentioned previously. */ - *p++ = BUILTIN1 (lgammal, *q++); - - /* { dg-final { scan-assembler {\m__log10ieee128\M} } } */ - *p++ = BUILTIN1 (log10l, *q++); - - /* { dg-final { scan-assembler {\m__log1pieee128\M} } } */ - *p++ = BUILTIN1 (log1pl, *q++); - - /* { dg-final { scan-assembler {\m__log2ieee128\M} } } */ - *p++ = BUILTIN1 (log2l, *q++); - - /* { dg-final { scan-assembler {\m__logbieee128\M} } } */ - *p++ = BUILTIN1 (logbl, *q++); - - /* { dg-final { scan-assembler {\m__logieee128\M} } } */ - *p++ = BUILTIN1 (logl, *q++); - - /* { dg-final { scan-assembler {\m__nearbyintieee128\M} } } */ - *p++ = BUILTIN1 (nearbyintl, *q++); - - /* { dg-final { scan-assembler {\m__exp10ieee128\M} } } */ - *p++ = BUILTIN1 (pow10l, *q++); - - /* { dg-final { scan-assembler {\m__rintieee128\M} } } */ - *p++ = BUILTIN1 (rintl, *q++); - - /* { dg-final { scan-assembler {\m__roundevenieee128\M} } } */ - *p++ = BUILTIN1 (roundevenl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (roundl, *q++); - - /* { dg-final { scan-assembler {\m__significandieee128\M} } } */ - *p++ = BUILTIN1 (significandl, *q++); - - /* { dg-final { scan-assembler {\m__sinhieee128\M} } } */ - *p++ = BUILTIN1 (sinhl, *q++); - - /* { dg-final { scan-assembler {\m__sinieee128\M} } } */ - *p++ = BUILTIN1 (sinl, *q++); - - /* { dg-final { scan-assembler {\m__sqrtieee128\M} } } */ - *p++ = BUILTIN1 (sqrtl, *q++); - - /* { dg-final { scan-assembler {\m__tanhieee128\M} } } */ - *p++ = BUILTIN1 (tanhl, *q++); - - /* { dg-final { scan-assembler {\m__tanieee128\M} } } */ - *p++ = BUILTIN1 (tanl, *q++); - - /* { dg-final { scan-assembler {\m__tgammaieee128\M} } } */ - *p++ = BUILTIN1 (tgammal, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (truncl, *q++); - - /* { dg-final { scan-assembler {\m__y0ieee128\M} } } */ - *p++ = BUILTIN1 (y0l, *q++); - - /* { dg-final { scan-assembler {\m__y1ieee128\M} } } */ - *p = BUILTIN1 (y1l, *q); - -} - -/* Built-in functions that returns a long double and take two long double - arguments. */ - -void -return_ld_arg_ld_ld (long double *p, - long double *q, - long double *r) -{ - /* { dg-final { scan-assembler {\m__atan2ieee128\M} } } */ - *p++ = BUILTIN2 (atan2l, *q++, *r++); - - /* inline code. */ - *p++ = BUILTIN2 (copysignl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__remainderieee128\M} } } */ - *p++ = BUILTIN2 (dreml, *q++, *r++); - - /* { dg-final { scan-assembler {\m__fdimieee128\M} } } */ - *p++ = BUILTIN2 (fdiml, *q++, *r++); - - /* { dg-final { scan-assembler {\m__fmaxieee128\M} } } */ - *p++ = BUILTIN2 (fmaxl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__fminieee128\M} } } */ - *p++ = BUILTIN2 (fminl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__fmodieee128\M} } } */ - *p++ = BUILTIN2 (fmodl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__hypotieee128\M} } } */ - *p++ = BUILTIN2 (hypotl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__nextafterieee128\M} } } */ - *p++ = BUILTIN2 (nextafterl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__nexttowardieee128\M} } } */ - *p++ = BUILTIN2 (nexttowardl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__powieee128\M} } } */ - *p++ = BUILTIN2 (powl, *q++, *r++); - - /* remainderf128 mentioned previously. */ - *p++ = BUILTIN2 (remainderl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__scalbnieee128\M} } } */ - *p = BUILTIN2 (scalbl, *q, *r); -} - -/* Built-in function that returns a long double and take three long double - arguments. */ - -void -return_ld_arg_ld_ld_ld (long double *p, - long double *q, - long double *r, - long double *s) -{ - /* inline code. */ - *p = BUILTIN3 (fmal, *q, *r, *s); -} - -/* Built-in functions that returns a long double and take one - _Complex long double argument. */ - -void -return_ld_arg_cld (long double *p, - _Complex long double *q) -{ - /* { dg-final { scan-assembler {\m__cabsieee128\M} } } */ - *p++ = BUILTIN1 (cabsl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (cargl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (cimagl, *q++); - - /* inline code. */ - *p = BUILTIN1 (creall, *q); -} - -/* Built-in functions that returns a _Complex long double and takes one - _Complex long double argument. */ - -void -return_cld_arg_cld (_Complex long double *p, - _Complex long double *q) -{ - /* { dg-final { scan-assembler {\m__cacoshieee128\M} } } */ - *p++ = BUILTIN1 (cacoshl, *q++); - - /* { dg-final { scan-assembler {\m__cacosieee128\M} } } */ - *p++ = BUILTIN1 (cacosl, *q++); - - /* { dg-final { scan-assembler {\m__casinhieee128\M} } } */ - *p++ = BUILTIN1 (casinhl, *q++); - - /* { dg-final { scan-assembler {\m__casinieee128\M} } } */ - *p++ = BUILTIN1 (casinl, *q++); - - /* { dg-final { scan-assembler {\m__catanhieee128\M} } } */ - *p++ = BUILTIN1 (catanhl, *q++); - - /* { dg-final { scan-assembler {\m__catanieee128\M} } } */ - *p++ = BUILTIN1 (catanl, *q++); - - /* { dg-final { scan-assembler {\m__ccoshieee128\M} } } */ - *p++ = BUILTIN1 (ccoshl, *q++); - - /* { dg-final { scan-assembler {\m__ccosieee128\M} } } */ - *p++ = BUILTIN1 (ccosl, *q++); - - /* { dg-final { scan-assembler {\m__cexpieee128\M} } } */ - *p++ = BUILTIN1 (cexpl, *q++); - - /* { dg-final { scan-assembler {\m__clogieee128\M} } } */ - *p++ = BUILTIN1 (clogl, *q++); - - /* { dg-final { scan-assembler {\m__clog10ieee128\M} } } */ - *p++ = BUILTIN1 (clog10l, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (conjl, *q++); - - /* { dg-final { scan-assembler {\m__cprojieee128\M} } } */ - *p++ = BUILTIN1 (cprojl, *q++); - - /* { dg-final { scan-assembler {\m__csinhieee128\M} } } */ - *p++ = BUILTIN1 (csinhl, *q++); - - /* { dg-final { scan-assembler {\m__csinieee128\M} } } */ - *p++ = BUILTIN1 (csinl, *q++); - - /* { dg-final { scan-assembler {\m__csqrtieee128\M} } } */ - *p++ = BUILTIN1 (csqrtl, *q++); - - /* { dg-final { scan-assembler {\m__ctanhieee128\M} } } */ - *p++ = BUILTIN1 (ctanhl, *q++); - - /* { dg-final { scan-assembler {\m__ctanieee128\M} } } */ - *p = BUILTIN1 (ctanl, *q); -} - -/* Built-in functions that returns a _Complex long double and takes one - long double argument. */ - -void -return_cld_arg_ld (_Complex long double *p, - long double *q) -{ - /* { dg-final { scan-assembler {\m__sincosieee128\M} } } */ - *p = BUILTIN1 (cexpil, *q); -} - -/* Built-in function that returns a _Complex long double and takes two - _Complex long double arguments. */ - -void -return_cld_arg_cld_cld (_Complex long double *p, - _Complex long double *q, - _Complex long double *r) -{ - /* { dg-final { scan-assembler {\m__cpowieee128\M} } } */ - *p = BUILTIN2 (cpowl, *q, *r); -} - -/* Built-in functions that returns a long double and takes a long double and a - pointer to an int arguments. */ - -void -return_ld_arg_ld_pi (long double *p, - long double *q, - int **r) -{ - /* { dg-final { scan-assembler {\m__frexpieee128\M} } } */ - *p++ = BUILTIN2 (frexpl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__lgammaieee128_r\M} } } */ - *p++ = BUILTIN2 (gammal_r, *q++, *r++); - - /* __lgammaieee128_r mentioned previously. */ - *p = BUILTIN2 (lgammal_r, *q, *r); -} - -/* Built-in functions that returns a long double and takes a long double and an - int arguments. */ - -void -return_ld_arg_ld_i (long double *p, - long double *q, - int *r) -{ - /* { dg-final { scan-assembler {\m__ldexpieee128\M} } } */ - *p++ = BUILTIN2 (ldexpl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__powikf2\M} } } */ - *p++ = BUILTIN2 (powil, *q++, *r++); - - /* { dg-final { scan-assembler {\m__scalbnieee128\M} } } */ - *p = BUILTIN2 (scalbnl, *q, *r); -} - -/* Built-in function that returns a long double and takes a long double and a - long arguments. */ - -void -return_ld_arg_ld_l (long double *p, - long double *q, - long *r) -{ - /* { dg-final { scan-assembler {\m__scalblnieee128\M} } } */ - *p = BUILTIN2 (scalblnl, *q, *r); -} - -/* Built-in functions that returns a long double and takes a long double and a - long long arguments. */ - -void -return_ld_arg_i_ld (long double *p, - int *q, - long double *r) -{ - /* { dg-final { scan-assembler {\m__jnieee128\M} } } */ - *p++ = BUILTIN2 (jnl, *q++, *r++); - - /* { dg-final { scan-assembler {\m__ynieee128\M} } } */ - *p = BUILTIN2 (ynl, *q, *r); -} - -/* Built-in functions that returns a long double and takes a long double and a - pointer to a long double arguments. */ - -void -return_ld_arg_ld_pld (long double *p, - long double *q, - long double **r) -{ - /* { dg-final { scan-assembler {\m__modfieee128\M} } } */ - *p = BUILTIN2 (modfl, *q, *r); -} - -/* Built-in function that returns a long double and takes two long double and a - pointer to an int arguments. */ - -void -return_ld_arg_ld_ld_pi (long double *p, - long double *q, - long double *r, - int **s) -{ - /* { dg-final { scan-assembler {\m__remquoieee128\M} } } */ - *p = BUILTIN3 (remquol, *q, *r, *s); -} - -/* Built-in functions that returns a long double and take no arguments. */ - -void -return_ld_no_arg (long double *p) -{ - /* inline code. */ - *p++ = BUILTIN0 (huge_vall); - - /* inline code. */ - *p = BUILTIN0 (infl); -} - -/* Built-in functions that return san int and takes one long double argument. */ - -void -return_i_arg_ld (int *p, - long double *q) -{ - /* { dg-final { scan-assembler {\m__ceilieee128\M} } } */ - *p++ = BUILTIN1 (iceill, *q++); - - /* { dg-final { scan-assembler {\m__floorieee128\M} } } */ - *p++ = BUILTIN1 (ifloorl, *q++); - - /* { dg-final { scan-assembler {\m__ilogbieee128\M} } } */ - *p++ = BUILTIN1 (ilogbl, *q++); - - /* { dg-final { scan-assembler {\m__lrintieee128\M} } } */ - *p++ = BUILTIN1 (irintl, *q++); - - /* { dg-final { scan-assembler {\m__lroundieee128\M} } } */ - *p++ = BUILTIN1 (iroundl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (signbitl, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (finitel, *q++); - - /* inline code. */ - *p++ = BUILTIN1 (isinfl, *q++); - - /* inline code. */ - *p = BUILTIN1 (isnanl, *q); -} - -/* Built-in functions that returns a long and takes one long double argument. */ - -void -return_l_arg_ld (long *p, - long double *q) -{ - /* ceilf128 mentioned previouly. */ - *p++ = BUILTIN1 (lceill, *q++); - - /* floorf128 mentioned previously. */ - *p++ = BUILTIN1 (lfloorl, *q++); - - /* lrintf128 mentioned previously. */ - *p++ = BUILTIN1 (lrintl, *q++); - - /* lroundf128 mentioned previously. */ - *p = BUILTIN1 (lroundl, *q); -} - -/* Built-in functions that returns a long long and takes one long double - argument. */ - -void -return_ll_arg_ld (long long *p, - long double *r) -{ - /* ceilf128 mentioned previous. */ - *p++ = BUILTIN1 (llceill, *r++); - - /* floorf128 mentioned previously. */ - *p++ = BUILTIN1 (llfloorl, *r++); - - /* llrintf128 mentioned previously. */ - *p++ = BUILTIN1 (llrintl, *r++); - - /* llroundf128 mentioned previously. */ - *p = BUILTIN1 (llroundl, *r); -} - -/* Built-in function that returns a double and takes one double and one long - double arguments. */ - -void -return_d_arg_d_ld (double *p, - double *q, - long double *r) -{ - /* { dg-final { scan-assembler {\m__nexttoward_to_ieee128\M} } } */ - *p = BUILTIN2 (nexttoward, *q, *r); -} - -/* Built-in function that returns a float and takes one float and one long - double arguments. */ - -void -return_f_arg_f_ld (float *p, - float *q, - long double *r) -{ - /* { dg-final { scan-assembler {\m__nexttowardf_to_ieee128\M} } } */ - *p = BUILTIN2 (nexttowardf, *q, *r); -} - -/* Built-in function that returns void and takes one long double and two - pointers to long double arguments. */ - -void -return_void_arg_ld_pld_pld (long double *p, - long double **q, - long double **r) -{ - /* __sincosieee128 mentioned previously. */ - BUILTIN3 (sincosl, *p, *q, *r); -} - -/* Debug main program to determine if the library has all of the mapped - external functions. Note, you need a new enough glibc to provide all of the - f128 functions. */ -#ifdef DO_MAIN -int -main (void) -{ - return 0; -} -#endif diff --git a/gcc/testsuite/gcc.target/powerpc/float128-longdouble-stdio.c b/gcc/testsuite/gcc.target/powerpc/float128-longdouble-stdio.c deleted file mode 100644 index 77c7b41cec9..00000000000 --- a/gcc/testsuite/gcc.target/powerpc/float128-longdouble-stdio.c +++ /dev/null @@ -1,37 +0,0 @@ -/* { dg-require-effective-target ppc_float128_hw } */ -/* { dg-require-effective-target power10_ok } */ -/* { dg-options "-mdejagnu-cpu=power9 -mno-pcrel -O2 -Wno-psabi -mabi=ieeelongdouble" } */ - -/* Test if switching long double to IEEE 128-bit maps the printf and scanf - function names correctly. We explicitly turn off PC-relative support to - make it simpler to compare the call without having a @notoc qualifier. */ - -#include - -volatile long double x = 1.0L; -volatile long double y, z; - -int -main (void) -{ - char buffer[100]; - - /* { dg-final { scan-assembler {\m__sprintfieee128\M} } } */ - __builtin_sprintf (buffer, "%Lg", x); - - /* { dg-final { scan-assembler {\m__printfieee128\M} } } */ - __builtin_printf ("x is %Lg [%s]\n", x, buffer); - - /* { dg-final { scan-assembler {\m__isoc99sscanfieee128\M} } } */ - __builtin_sscanf (buffer, "%Lg", &y); - - __builtin_printf ("Type 1.0: "); - - /* { dg-final { scan-assembler {\m__isoc99scanfieee128\M} } } */ - __builtin_scanf ("%Lg", &z); - - if (x != y || x != z) - abort (); - - return 0; -} diff --git a/gcc/testsuite/gcc.target/powerpc/float128-math.c b/gcc/testsuite/gcc.target/powerpc/float128-math.c index ea5cb43bcf1..4ad3b5b8363 100644 --- a/gcc/testsuite/gcc.target/powerpc/float128-math.c +++ b/gcc/testsuite/gcc.target/powerpc/float128-math.c @@ -10,11 +10,11 @@ extern __float128 sinf128 (__float128); -void foo (__float128 *p, long double *q) +void foo (__float128 *p, long double *q, long double *r) { *p = sinf128 (*p); *q = __builtin_sinl (*q); } -/* { dg-final { scan-assembler {\mbl __sinieee128\M} } } */ -/* { dg-final { scan-assembler-not {\mbl sinl\M} } } */ +/* { dg-final { scan-assembler-times {\mbl sinf128\M} 2 } } */ +/* { dg-final { scan-assembler-not {\mbl sinl\M} } } */