This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

3.1.1 Solaris2 fixes



I just installed these two fixes which went into the mainline
already and were decided to be scheduled post-3.1 release which
is now :-)

2002-05-09  David S. Miller  <davem@redhat.com>

	* config/sparc/sol2.h (ASM_CPU_SPEC): Handle -mcpu=v9.

2002-05-07  David S. Miller  <davem@redhat.com>

	PR target/6103
	* config/sparc/sparc.h (TARGET_BUGGY_QP_LIB): Define to zero.
	* config/sparc/sol2.h (TARGET_BUGGY_QP_LIB): Override to one.
	* config/sparc/sparc.c (emit_soft_tfmode_libcall): If the Qp
	library implementation clobbers the output before the inputs
	are fully consumed, use stack temporary for the output.

--- ./config/sparc/sol2.h.~1~	Fri Apr 12 16:42:47 2002
+++ ./config/sparc/sol2.h	Thu May 16 03:02:02 2002
@@ -71,17 +71,21 @@ Boston, MA 02111-1307, USA.  */
 
 /* This is here rather than in sparc.h because it's not known what
    other assemblers will accept.  */
+
 #if TARGET_CPU_DEFAULT == TARGET_CPU_v9
 #undef ASM_CPU_DEFAULT_SPEC
 #define ASM_CPU_DEFAULT_SPEC "-xarch=v8plus"
 #endif
+
 #if TARGET_CPU_DEFAULT == TARGET_CPU_ultrasparc
 #undef ASM_CPU_DEFAULT_SPEC
 #define ASM_CPU_DEFAULT_SPEC "-xarch=v8plusa"
 #endif
+
 #undef ASM_CPU_SPEC
 #define ASM_CPU_SPEC "\
 %{mcpu=v8plus:-xarch=v8plus} \
+%{mcpu=v9:-xarch=v8plus} \
 %{mcpu=ultrasparc:-xarch=v8plusa} \
 %{!mcpu*:%(asm_cpu_default)} \
 "
@@ -226,6 +230,12 @@ Boston, MA 02111-1307, USA.  */
 #define UDIVDI3_LIBCALL "__udiv64"
 #define MODDI3_LIBCALL "__rem64"
 #define UMODDI3_LIBCALL "__urem64"
+
+/* Solaris's _Qp_* library routine implementation clobbers the output
+   memory before the inputs are fully consumed.  */
+
+#undef TARGET_BUGGY_QP_LIB
+#define TARGET_BUGGY_QP_LIB	1
 
 #undef INIT_SUBTARGET_OPTABS
 #define INIT_SUBTARGET_OPTABS						\
--- ./config/sparc/sparc.h.~1~	Fri May  3 14:30:56 2002
+++ ./config/sparc/sparc.h	Thu May 16 03:00:42 2002
@@ -2568,6 +2568,11 @@ do {                                    
 #define LTTF2_LIBCALL "_Q_flt"
 #define LETF2_LIBCALL "_Q_fle"
 
+/* Assume by default that the _Qp_* 64-bit libcalls are implemented such
+   that the inputs are fully consumed before the output memory is clobbered.  */
+
+#define TARGET_BUGGY_QP_LIB	0
+
 /* We can define the TFmode sqrt optab only if TARGET_FPU.  This is because
    with soft-float, the SFmode and DFmode sqrt instructions will be absent,
    and the compiler will notice and try to use the TFmode sqrt instruction
--- ./config/sparc/sparc.c.~1~	Fri May  3 14:30:56 2002
+++ ./config/sparc/sparc.c	Thu May 16 03:00:20 2002
@@ -2489,9 +2489,17 @@ emit_soft_tfmode_libcall (func_name, nar
       /* TFmode arguments and return values are passed by reference.  */
       if (GET_MODE (this_arg) == TFmode)
 	{
-	  if (GET_CODE (this_arg) == MEM)
+	  int force_stack_temp;
+
+	  force_stack_temp = 0;
+	  if (TARGET_BUGGY_QP_LIB && i == 0)
+	    force_stack_temp = 1;
+
+	  if (GET_CODE (this_arg) == MEM
+	      && ! force_stack_temp)
 	    this_arg = XEXP (this_arg, 0);
-	  else if (CONSTANT_P (this_arg))
+	  else if (CONSTANT_P (this_arg)
+		   && ! force_stack_temp)
 	    {
 	      this_slot = force_const_mem (TFmode, this_arg);
 	      this_arg = XEXP (this_slot, 0);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]