Commit 0d2cd7aa by David Edelsohn

rs6000: AIX long double builtins for 64 bit long double.

When long doubles are 64 bit, the AIX C library overrides the definitions
but GCC builtins point to 128 bit names.  This patch overrides the
builtins for fmodl, frexpl, ldexpl and modfl to refer to the 64 bit symbols.

Backport from mainline
2020-05-04  Clement Chigot  <clement.chigot@atos.net>
	    David Edelsohn  <dje.gcc@gmail.com>

	* config/rs6000/rs6000-call.c (rs6000_init_builtins): Override explicit
	for fmodl, frexpl, ldexpl and modfl builtins.
parent 8aeffc4c
2020-05-12 David Edelsohn <dje.gcc@gmail.com>
Backport from mainline
2020-05-04 Clement Chigot <clement.chigot@atos.net>
David Edelsohn <dje.gcc@gmail.com>
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Override explicit
for fmodl, frexpl, ldexpl and modfl builtins.
2020-05-11 Sebastian Huber <sebastian.huber@embedded-brains.de> 2020-05-11 Sebastian Huber <sebastian.huber@embedded-brains.de>
Backport from mainline Backport from mainline
......
...@@ -12070,10 +12070,28 @@ rs6000_init_builtins (void) ...@@ -12070,10 +12070,28 @@ rs6000_init_builtins (void)
def_builtin ("__builtin_cpu_is", ftype, RS6000_BUILTIN_CPU_IS); def_builtin ("__builtin_cpu_is", ftype, RS6000_BUILTIN_CPU_IS);
def_builtin ("__builtin_cpu_supports", ftype, RS6000_BUILTIN_CPU_SUPPORTS); def_builtin ("__builtin_cpu_supports", ftype, RS6000_BUILTIN_CPU_SUPPORTS);
/* AIX libm provides clog as __clog. */ if (TARGET_XCOFF)
if (TARGET_XCOFF && {
(tdecl = builtin_decl_explicit (BUILT_IN_CLOG)) != NULL_TREE) /* AIX libm provides clog as __clog. */
set_user_assembler_name (tdecl, "__clog"); if ((tdecl = builtin_decl_explicit (BUILT_IN_CLOG)) != NULL_TREE)
set_user_assembler_name (tdecl, "__clog");
/* When long double is 64 bit, some long double builtins of libc
functions (like __builtin_frexpl) must call the double version
(frexp) not the long double version (frexpl) that expects a 128 bit
argument. */
if (! TARGET_LONG_DOUBLE_128)
{
if ((tdecl = builtin_decl_explicit (BUILT_IN_FMODL)) != NULL_TREE)
set_user_assembler_name (tdecl, "fmod");
if ((tdecl = builtin_decl_explicit (BUILT_IN_FREXPL)) != NULL_TREE)
set_user_assembler_name (tdecl, "frexp");
if ((tdecl = builtin_decl_explicit (BUILT_IN_LDEXPL)) != NULL_TREE)
set_user_assembler_name (tdecl, "ldexp");
if ((tdecl = builtin_decl_explicit (BUILT_IN_MODFL)) != NULL_TREE)
set_user_assembler_name (tdecl, "modf");
}
}
#ifdef SUBTARGET_INIT_BUILTINS #ifdef SUBTARGET_INIT_BUILTINS
SUBTARGET_INIT_BUILTINS; SUBTARGET_INIT_BUILTINS;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment