From: David Edelsohn Date: Tue, 12 May 2020 15:46:47 +0000 (-0400) Subject: rs6000: AIX long double builtins for 64 bit long double. X-Git-Tag: misc/first-auto-changelog-9~40 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e042b0490c8c22292547539af244aa19543a599a;p=thirdparty%2Fgcc.git 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 David Edelsohn * config/rs6000/rs6000-call.c (rs6000_init_builtins): Override explicit for fmodl, frexpl, ldexpl and modfl builtins. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index fc71ca1384f9..34cbb45548dd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2020-05-12 David Edelsohn + + Backport from mainline + 2020-05-04 Clement Chigot + David Edelsohn + + * config/rs6000/rs6000.c (rs6000_init_builtins): Override explicit + for fmodl, frexpl, ldexpl and modfl builtins. + 2020-05-11 Xiong Hu Luo Backport from master. diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index ce76f039aeda..fa3e04571b69 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -17029,10 +17029,28 @@ rs6000_init_builtins (void) def_builtin ("__builtin_cpu_is", ftype, RS6000_BUILTIN_CPU_IS); def_builtin ("__builtin_cpu_supports", ftype, RS6000_BUILTIN_CPU_SUPPORTS); - /* AIX libm provides clog as __clog. */ - if (TARGET_XCOFF && - (tdecl = builtin_decl_explicit (BUILT_IN_CLOG)) != NULL_TREE) - set_user_assembler_name (tdecl, "__clog"); + if (TARGET_XCOFF) + { + /* AIX libm provides clog as __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 SUBTARGET_INIT_BUILTINS;