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
This commit is contained in:
parent
0a0576f3f1
commit
4e7d5d2733
4 changed files with 29 additions and 20 deletions
|
@ -1,3 +1,11 @@
|
|||
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>
|
||||
|
||||
* config/netbsd.h (CPP_SPEC): Remove.
|
||||
|
|
|
@ -225,6 +225,12 @@ Boston, MA 02111-1307, USA. */
|
|||
#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 \
|
||||
fixsfdi_libfunc \
|
||||
|
|
|
@ -2476,7 +2476,7 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
|
|||
rtx *operands;
|
||||
{
|
||||
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. */
|
||||
if (nargs < 2 || nargs > 3)
|
||||
|
@ -2490,27 +2490,17 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
|
|||
/* TFmode arguments and return values are passed by reference. */
|
||||
if (GET_MODE (this_arg) == TFmode)
|
||||
{
|
||||
if (GET_CODE (this_arg) == MEM)
|
||||
{
|
||||
this_arg = XEXP (this_arg, 0);
|
||||
int force_stack_temp;
|
||||
|
||||
/* Make sure the output is not in the same place
|
||||
as one of our inputs. */
|
||||
if (i == 0)
|
||||
{
|
||||
for (j = 1; j < nargs; j++)
|
||||
if (rtx_equal_p (operands[0], operands[j]))
|
||||
break;
|
||||
force_stack_temp = 0;
|
||||
if (TARGET_BUGGY_QP_LIB && i == 0)
|
||||
force_stack_temp = 1;
|
||||
|
||||
if (j != nargs)
|
||||
{
|
||||
ret_slot = assign_stack_temp (TFmode,
|
||||
GET_MODE_SIZE (TFmode), 0);
|
||||
this_arg = XEXP (ret_slot, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (CONSTANT_P (this_arg))
|
||||
if (GET_CODE (this_arg) == MEM
|
||||
&& ! force_stack_temp)
|
||||
this_arg = XEXP (this_arg, 0);
|
||||
else if (CONSTANT_P (this_arg)
|
||||
&& ! force_stack_temp)
|
||||
{
|
||||
this_slot = force_const_mem (TFmode, this_arg);
|
||||
this_arg = XEXP (this_slot, 0);
|
||||
|
|
|
@ -2598,6 +2598,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
|
||||
|
|
Loading…
Add table
Reference in a new issue