sparc.c (emit_soft_tfmode_libcall): Do not allow result to overlap input operands in memory.
2002-05-06 David S. Miller <davem@redhat.com> * config/sparc/sparc.c (emit_soft_tfmode_libcall): Do not allow result to overlap input operands in memory. From-SVN: r53204
This commit is contained in:
parent
95ff5d3fad
commit
0ac941a072
@ -1,3 +1,8 @@
|
||||
2002-05-06 David S. Miller <davem@redhat.com>
|
||||
|
||||
* config/sparc/sparc.c (emit_soft_tfmode_libcall): Do not
|
||||
allow result to overlap input operands in memory.
|
||||
|
||||
2002-05-06 Neil Booth <neil@daikokuya.demon.co.uk>
|
||||
|
||||
doc:
|
||||
|
@ -2476,7 +2476,7 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
|
||||
rtx *operands;
|
||||
{
|
||||
rtx ret_slot = NULL, arg[3], func_sym;
|
||||
int i;
|
||||
int i, j;
|
||||
|
||||
/* We only expect to be called for conversions, unary, and binary ops. */
|
||||
if (nargs < 2 || nargs > 3)
|
||||
@ -2491,7 +2491,25 @@ emit_soft_tfmode_libcall (func_name, nargs, operands)
|
||||
if (GET_MODE (this_arg) == TFmode)
|
||||
{
|
||||
if (GET_CODE (this_arg) == MEM)
|
||||
this_arg = XEXP (this_arg, 0);
|
||||
{
|
||||
this_arg = XEXP (this_arg, 0);
|
||||
|
||||
/* 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;
|
||||
|
||||
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))
|
||||
{
|
||||
this_slot = force_const_mem (TFmode, this_arg);
|
||||
|
Loading…
Reference in New Issue
Block a user