Commit 4e7d5d27 by David S. Miller Committed by David S. Miller

sparc.h (TARGET_BUGGY_QP_LIB): Define to zero.

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

	* 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.

From-SVN: r53322
parent 0a0576f3
2002-05-07 David S. Miller <davem@redhat.com>
* 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.
2002-05-09 Jason Thorpe <thorpej@wasabisystems.com> 2002-05-09 Jason Thorpe <thorpej@wasabisystems.com>
* config/netbsd.h (CPP_SPEC): Remove. * config/netbsd.h (CPP_SPEC): Remove.
......
...@@ -225,6 +225,12 @@ Boston, MA 02111-1307, USA. */ ...@@ -225,6 +225,12 @@ Boston, MA 02111-1307, USA. */
#define MODDI3_LIBCALL "__rem64" #define MODDI3_LIBCALL "__rem64"
#define UMODDI3_LIBCALL "__urem64" #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 #undef INIT_SUBTARGET_OPTABS
#define INIT_SUBTARGET_OPTABS \ #define INIT_SUBTARGET_OPTABS \
fixsfdi_libfunc \ fixsfdi_libfunc \
......
...@@ -2476,7 +2476,7 @@ emit_soft_tfmode_libcall (func_name, nargs, operands) ...@@ -2476,7 +2476,7 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
rtx *operands; rtx *operands;
{ {
rtx ret_slot = NULL, arg[3], func_sym; rtx ret_slot = NULL, arg[3], func_sym;
int i, j; int i;
/* We only expect to be called for conversions, unary, and binary ops. */ /* We only expect to be called for conversions, unary, and binary ops. */
if (nargs < 2 || nargs > 3) if (nargs < 2 || nargs > 3)
...@@ -2490,27 +2490,17 @@ emit_soft_tfmode_libcall (func_name, nargs, operands) ...@@ -2490,27 +2490,17 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
/* TFmode arguments and return values are passed by reference. */ /* TFmode arguments and return values are passed by reference. */
if (GET_MODE (this_arg) == TFmode) if (GET_MODE (this_arg) == TFmode)
{ {
if (GET_CODE (this_arg) == MEM) int force_stack_temp;
{
this_arg = XEXP (this_arg, 0);
/* Make sure the output is not in the same place force_stack_temp = 0;
as one of our inputs. */ if (TARGET_BUGGY_QP_LIB && i == 0)
if (i == 0) force_stack_temp = 1;
{
for (j = 1; j < nargs; j++)
if (rtx_equal_p (operands[0], operands[j]))
break;
if (j != nargs) if (GET_CODE (this_arg) == MEM
{ && ! force_stack_temp)
ret_slot = assign_stack_temp (TFmode, this_arg = XEXP (this_arg, 0);
GET_MODE_SIZE (TFmode), 0); else if (CONSTANT_P (this_arg)
this_arg = XEXP (ret_slot, 0); && ! force_stack_temp)
}
}
}
else if (CONSTANT_P (this_arg))
{ {
this_slot = force_const_mem (TFmode, this_arg); this_slot = force_const_mem (TFmode, this_arg);
this_arg = XEXP (this_slot, 0); this_arg = XEXP (this_slot, 0);
......
...@@ -2598,6 +2598,11 @@ do { \ ...@@ -2598,6 +2598,11 @@ do { \
#define LTTF2_LIBCALL "_Q_flt" #define LTTF2_LIBCALL "_Q_flt"
#define LETF2_LIBCALL "_Q_fle" #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 /* 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, 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 and the compiler will notice and try to use the TFmode sqrt instruction
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment