This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
3.1.1 Solaris2 fixes
- From: "David S. Miller" <davem at redhat dot com>
- To: gcc-patches at gcc dot gnu dot org
- Date: Thu, 16 May 2002 03:56:19 -0700 (PDT)
- Subject: 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);