This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
Re: ia64-elf and i386-elf fail to build
- From: Nick Clifton <nickc at redhat dot com>
- To: Joseph Myers <joseph at codesourcery dot com>, wilson at tuliptree dot org, sellcey at imgtec dot com, hubicka at ucw dot cz, ubizjak at gmail dot com
- Cc: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 25 Aug 2016 15:43:39 +0100
- Subject: Re: ia64-elf and i386-elf fail to build
- Authentication-results: sourceware.org; auth=none
- References: <87oa4huj3o.fsf@redhat.com> <alpine.DEB.2.20.1608251252120.5284@digraph.polyomino.org.uk>
Hi Guys,
> I think this indicates that i386 and ia64 need their own local version of
> float128_type_node, set up like float80_type_node (i.e. copied from the
> global one if that isn't NULL, otherwise set up locally) instead of using
> the global one unconditionally, because of the existence of i386 and ia64
> targets where the TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P hook can return
> false for TFmode (in which case __float128 still exists, but not
> _Float128).
OK - that I can do.
> Though preferable would be to fix all the targets with
> IX86_NO_LIBGCC_TFMODE / IX86_MAYBE_NO_LIBGCC_TFMODE /
> IA64_NO_LIBGCC_TFMODE so that they include the relevant support code in
> libgcc and so no longer need the TARGET_LIBGCC_FLOATING_MODE_SUPPORTED_P
> hook overridden at all.
I would prefer to leave this to the maintainers as I do not want to get target
greping wrong.
So - Jan, Uros, Jim, Steve - are these ia64 and i386 backend patches OK ?
Cheers
Nick
gcc/ChangeLog
2016-08-25 Nick Clifton <nickc@redhat.com>
* config/ia64/ia64.c (ia64_init_builtins): Initialise the
float128_type_node if that has not been done already.
* config/i386/i386.c (ix86_init_builtin_types): Likewise.
Index: gcc/config/i386/i386.c
===================================================================
--- gcc/config/i386/i386.c (revision 239761)
+++ gcc/config/i386/i386.c (working copy)
@@ -33341,9 +33341,19 @@
}
lang_hooks.types.register_builtin_type (float80_type_node, "__float80");
- /* The __float128 type. The node has already been created as
- _Float128, so we only need to register the __float128 name for
- it. */
+ /* The __float128 type. If TFmode is supported by libgcc then the node
+ has already been created as _Float128, so we only need to register the
+ __float128 name for it. Otherwise we have to create the float128
+ type first. */
+#if defined IX86_NO_LIBGCC_TFMODE || defined IX86_MAYBE_NO_LIBGCC_TFMODE
+ if (float128_type_node == NULL)
+ {
+ float128_type_node = make_node (REAL_TYPE);
+ TYPE_PRECISION (float128_type_node) = 128;
+ layout_type (float128_type_node);
+ SET_TYPE_MODE (float128_type_node, TFmode);
+ }
+#endif
lang_hooks.types.register_builtin_type (float128_type_node, "__float128");
const_string_type_node
Index: gcc/config/ia64/ia64.c
===================================================================
--- gcc/config/ia64/ia64.c (revision 239761)
+++ gcc/config/ia64/ia64.c (working copy)
@@ -10368,6 +10368,13 @@
tree const_string_type
= build_pointer_type (build_qualified_type
(char_type_node, TYPE_QUAL_CONST));
+#ifdef IA64_NO_LIBGCC_TFMODE
+ gcc_assert (float128_type_node == NULL);
+ float128_type_node = make_node (REAL_TYPE);
+ TYPE_PRECISION (float128_type_node) = 128;
+ layout_type (float128_type_node);
+ SET_TYPE_MODE (float128_type_node, TFmode);
+#endif
(*lang_hooks.types.register_builtin_type) (float128_type_node,
"__float128");