https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83387

--- Comment #13 from Peter Bergner <bergner at gcc dot gnu.org> ---
(In reply to Sebastian Huber from comment #12)
> (In reply to Peter Bergner from comment #9)
> [...]
> > Here, you can see that on ELFv2, we always assume HW FP regs are avialable,
> > because we're forcing usage of HW FP registers (FP_ARG_RETURN, ie, f1, aka
> > reg 33).  I'm afraid that are going to be a *LOT* of these assumptions
> > builtin into the backend and tracking them all down and fixing them is not
> > going to be easy.  That's why I asked earlier, if you really really need to
> > disable HW FP for your builds.  If you do, then good luck to you finding
> > them all.
> 
> Thanks for your investigations. I removed the 64-bit soft-float multilib.

I can't promise this is all you need, but does the following patch help?

Index: gcc/config/rs6000/rs6000.c
===================================================================
--- gcc/config/rs6000/rs6000.c  (revision 255700)
+++ gcc/config/rs6000/rs6000.c  (working copy)
@@ -11095,7 +11095,8 @@ rs6000_discover_homogeneous_aggregate (m
      homogeneous aggregates; these types are handled via the
      targetm.calls.split_complex_arg mechanism.  Complex types
      can be elements of homogeneous aggregates, however.  */
-  if (DEFAULT_ABI == ABI_ELFv2 && type && AGGREGATE_TYPE_P (type))
+  if (TARGET_HARD_FLOAT && DEFAULT_ABI == ABI_ELFv2 && type
+      && AGGREGATE_TYPE_P (type))
     {
       machine_mode field_mode = VOIDmode;
       int field_count = rs6000_aggregate_candidate (type, &field_mode);



> Would it be possible to generate a proper ICE with a user friendly error
> message if someone uses -msoft-float on this target?

We cannot, because we support building the 64-bit linux kernel (both ELFv1 and
ELFv2 - ie, BE and LE) using -msoft-float.  The reason they don't see a problem
is that the linux kernel doesn't have any explicit FP code/type usage in its C
source files.

Reply via email to