public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Michael Meissner <meissner@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org
Subject: [gcc(refs/users/meissner/heads/work096)] Make __ibm128 have a distinct type and always use IFmode.
Date: Wed,  3 Aug 2022 15:13:02 +0000 (GMT)	[thread overview]
Message-ID: <20220803151302.4E1413858C2D@sourceware.org> (raw)

https://gcc.gnu.org/g:950f236ef807c8b55933827a46ad98e0925dfb02

commit 950f236ef807c8b55933827a46ad98e0925dfb02
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Aug 3 11:11:47 2022 -0400

    Make __ibm128 have a distinct type and always use IFmode.
    
    This patch makes the __ibm128 use a distinct type which always uses the IFmode
    instead of __ibm128 using the long double type when long double uses the IBM
    128-bit encoding.
    
    2022-08-03   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            * config/rs6000/rs6000-builtin.cc (rs6000_init_builtins): Always create
            a unique type for __ibm128 instead of using the long double type.  Make
            sure ibm128_float_type_node is initialized.
            * config/rs6000/rs6000-c.c (rs6000_cpu_cpp_builtins): Do not define
            __KF__ and __KC__ mode when long double uses the IEEE 128-bit encoding.
            * config/rs6000/rs6000.cc (TARGET_TRANSLATE_MODE_ATTRIBUTE): Delete.
            (rs6000_translate_mode_attribute): Likewise.

Diff:
---
 gcc/config/rs6000/rs6000-builtin.cc | 33 +++++++++++++++------------------
 gcc/config/rs6000/rs6000-c.cc       | 14 +++++---------
 gcc/config/rs6000/rs6000.cc         | 17 -----------------
 3 files changed, 20 insertions(+), 44 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index f796110c14d..d3de5827156 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -709,31 +709,28 @@ rs6000_init_builtins (void)
      format that uses a pair of doubles, depending on the switches and
      defaults.
 
-     If we don't support for either 128-bit IBM double double or IEEE 128-bit
-     floating point, we need make sure the type is non-zero or else self-test
-     fails during bootstrap.
-
-     For IEEE 128-bit floating point, always create the type __ieee128.  If the
-     user used -mfloat128, rs6000-c.cc will create a define from __float128 to
-     __ieee128.  Use the standard _Float128 type even if long double uses IEEE
-     128-bit.  */
+     In the past, we used to map _Float128 and __float128/__ieee128 modes into
+     TFmode if long double used the IEEE 128-bit encoding.  Similarly, we used
+     to map __ibm128 into TFmode if long double used the IBM 128-bit encoding.
+
+     Now __ieee128/__float128 always uses the type for _Float128 and KFmode.
+     And __ibm128 always uses a distinct type and IFmode.
+
+     If we don't have support for either 128-bit IBM double double or IEEE
+     128-bit floating point, we need make sure the type is non-zero or else
+     self-test fails during bootstrap.  */
   if (TARGET_IBM128)
     {
-      if (!TARGET_IEEEQUAD)
-	ibm128_float_type_node = long_double_type_node;
-      else
-	{
-	  ibm128_float_type_node = make_node (REAL_TYPE);
-	  TYPE_PRECISION (ibm128_float_type_node) = 128;
-	  SET_TYPE_MODE (ibm128_float_type_node, IFmode);
-	  layout_type (ibm128_float_type_node);
-	}
+      ibm128_float_type_node = make_node (REAL_TYPE);
+      TYPE_PRECISION (ibm128_float_type_node) = 128;
+      SET_TYPE_MODE (ibm128_float_type_node, IFmode);
+      layout_type (ibm128_float_type_node);
       t = build_qualified_type (ibm128_float_type_node, TYPE_QUAL_CONST);
       lang_hooks.types.register_builtin_type (ibm128_float_type_node,
 					      "__ibm128");
     }
   else
-    ibm128_float_type_node = NULL_TREE;
+    ibm128_float_type_node = long_double_type_node;
 
   if (TARGET_FLOAT128_TYPE)
     {
diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 437b39f23af..82379744109 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -716,16 +716,12 @@ rs6000_cpu_cpp_builtins (cpp_reader *pfile)
 
       if (TARGET_IEEEQUAD)
 	{
-	  /* Older versions of GLIBC used __attribute__((__KC__)) to create the
-	     IEEE 128-bit floating point complex type for C++ (which does not
-	     support _Float128 _Complex).  If the default for long double is
-	     IEEE 128-bit mode, the library would need to use
-	     __attribute__((__TC__)) instead.  Defining __KF__ and __KC__
-	     is a stop-gap to build with the older libraries, until we
-	     get an updated library.  */
+	  /* In the past, we used to map __KF__ to __TF__ and __KC__ to __TC__
+	     to allow older glibc code to work on systems where the long double
+	     type uses the IEEE 128-bit encoding.  Now that we always use
+	     KFmode and KCmode for the _Float128 and __float128 types, we don't
+	     need to use these defines any more.  */
 	  builtin_define ("__LONG_DOUBLE_IEEE128__");
-	  builtin_define ("__KF__=__TF__");
-	  builtin_define ("__KC__=__TC__");
 	}
       else
 	builtin_define ("__LONG_DOUBLE_IBM128__");
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 6dfdfebd7a6..9066bbe8850 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -1543,9 +1543,6 @@ static const struct attribute_spec rs6000_attribute_table[] =
 #undef TARGET_EH_RETURN_FILTER_MODE
 #define TARGET_EH_RETURN_FILTER_MODE rs6000_eh_return_filter_mode
 
-#undef TARGET_TRANSLATE_MODE_ATTRIBUTE
-#define TARGET_TRANSLATE_MODE_ATTRIBUTE rs6000_translate_mode_attribute
-
 #undef TARGET_SCALAR_MODE_SUPPORTED_P
 #define TARGET_SCALAR_MODE_SUPPORTED_P rs6000_scalar_mode_supported_p
 
@@ -23678,20 +23675,6 @@ rs6000_eh_return_filter_mode (void)
   return TARGET_32BIT ? SImode : word_mode;
 }
 
-/* Target hook for translate_mode_attribute.  The __float128 and _Float128
-   types always have a separate type and mode from the long double types.
-
-   Currently __ibm128 shares the type and mode with long double if long double
-   uses the IBM 128-bit encoding.  */
-static machine_mode
-rs6000_translate_mode_attribute (machine_mode mode)
-{
-  if (FLOAT128_IEEE_P (mode))
-    return COMPLEX_MODE_P (mode) ? E_KCmode : E_KFmode;
-
-  return mode;
-}
-
 /* Target hook for scalar_mode_supported_p.  */
 static bool
 rs6000_scalar_mode_supported_p (scalar_mode mode)


                 reply	other threads:[~2022-08-03 15:13 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220803151302.4E1413858C2D@sourceware.org \
    --to=meissner@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).