This fixes another ICE on SPARC 64-bit in a corner case where __builtin_apply 
is compiled with -mno-fpu/-msoft-float.

Tested (incl. binary compatibility) on SPARC/Solaris, applied on the mainline.


2016-01-04  Eric Botcazou  <ebotca...@adacore.com>

        PR target/69100
        * config/sparc/sparc.h (FUNCTION_ARG_REGNO_P): Return true in 64-bit
        mode for %f0-%f31 only if TARGET_FPU.


2016-01-04  Eric Botcazou  <ebotca...@adacore.com>

        * gcc.target/sparc/20160104-2.c: New test.

-- 
Eric Botcazou
/* PR target/69100 */
/* Reported by Zdenek Sojka <zso...@seznam.cz> */

/* { dg-do compile } */
/* { dg-options "-mno-fpu" } */

void
foo (void)
{
  __builtin_apply (0, 0, 0);
}
Index: config/sparc/sparc.h
===================================================================
--- config/sparc/sparc.h	(revision 231971)
+++ config/sparc/sparc.h	(working copy)
@@ -1176,9 +1176,8 @@ extern char leaf_reg_remap[];
    On SPARC, these are the "output" registers.  v9 also uses %f0-%f31.  */
 
 #define FUNCTION_ARG_REGNO_P(N) \
-(TARGET_ARCH64 \
- ? (((N) >= 8 && (N) <= 13) || ((N) >= 32 && (N) <= 63)) \
- : ((N) >= 8 && (N) <= 13))
+  (((N) >= 8 && (N) <= 13)	\
+   || (TARGET_ARCH64 && TARGET_FPU && (N) >= 32 && (N) <= 63))
 
 /* Define a data type for recording info about an argument list
    during the scan of that argument list.  This data type should

Reply via email to