[gcc(refs/users/meissner/heads/work077)] Use correct names for __ibm128 if long double is IEEE 128-bit.

Michael Meissner meissner@gcc.gnu.org
Thu Jan 27 18:35:30 GMT 2022


https://gcc.gnu.org/g:f7e25436afcb4233dda8c439698d57ed78975869

commit f7e25436afcb4233dda8c439698d57ed78975869
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Thu Jan 27 13:35:12 2022 -0500

    Use correct names for __ibm128 if long double is IEEE 128-bit.
    
    If you are on a PowerPC system where the default long double is IEEE
    128-bit, GCC will use the wrong names for some of the conversion functions
    for the __ibm128 type.
    
    What is happening is when the defult long double is IEEE 128-bit, the
    various convert, truncation, and extend functions did not specify a
    default name for the conversion.  The machine indepentent portions of the
    compiler would construct a call with an 'if' name (IFmode being the mode
    for IBM 128-bit floating point).  This patch specifies to use the
    tradiation 'tf' name for these conversion functions.
    
    2022-01-27  Michael Meissner  <meissner@the-meissners.org>
    
    gcc/
            PR target/104253
            * config/rs6000/rs6000.cc (TARGET_IEEEQUAD_DEFAULT): If the
            compiler used to build the current compiler defaults to IEEE
            128-bit long double,  make that the default for this build.

Diff:
---
 gcc/config/rs6000/rs6000.cc | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index f5c089a2a26..4fa0540c6af 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -11106,6 +11106,14 @@ init_float128_ibm (machine_mode mode)
      names.  */
   if (mode == IFmode)
     {
+      set_conv_libfunc (sext_optab, mode, SFmode, "__extendsftf2");
+      set_conv_libfunc (sext_optab, mode, DFmode, "__extenddftf2");
+      set_conv_libfunc (trunc_optab, SFmode, mode, "__trunctfsf2");
+      set_conv_libfunc (trunc_optab, DFmode, mode, "__trunctfdf2");
+
+      set_conv_libfunc (sext_optab, mode, IFmode, "__trunctftf2");
+      set_conv_libfunc (trunc_optab, IFmode, mode, "__extendtftf2");
+
       set_conv_libfunc (sext_optab, mode, SDmode, "__dpd_extendsdtf");
       set_conv_libfunc (sext_optab, mode, DDmode, "__dpd_extendddtf");
       set_conv_libfunc (trunc_optab, mode, TDmode, "__dpd_trunctdtf");
@@ -11113,6 +11121,16 @@ init_float128_ibm (machine_mode mode)
       set_conv_libfunc (trunc_optab, DDmode, mode, "__dpd_trunctfdd");
       set_conv_libfunc (sext_optab, TDmode, mode, "__dpd_extendtftd");
 
+      set_conv_libfunc (sfix_optab, SImode, mode, "__fixtfsi");
+      set_conv_libfunc (ufix_optab, SImode, mode, "__fixunstfsi");
+      set_conv_libfunc (sfix_optab, DImode, mode, "__fixtfdi");
+      set_conv_libfunc (ufix_optab, DImode, mode, "__fixunstfdi");
+
+      set_conv_libfunc (sfloat_optab, mode, SImode, "__floatsitf");
+      set_conv_libfunc (ufloat_optab, mode, SImode, "__floatunsitf");
+      set_conv_libfunc (sfloat_optab, mode, DImode, "__floatditf");
+      set_conv_libfunc (ufloat_optab, mode, DImode, "__floatunditf");
+
       if (TARGET_POWERPC64)
 	{
 	  set_conv_libfunc (sfix_optab, TImode, mode, "__fixtfti");


More information about the Gcc-cvs mailing list