Commit ddc54eaa by Nick Clifton Committed by Nick Clifton

Cope with inlining functions which return a multiword CONCAT value

From-SVN: r24328
parent c49445e0
Tue Dec 15 11:55:30 1998 Nick Clifton <nickc@cygnus.com>
* integrate.c (copy_rtx_and_substitute): If a SUBREG is
replaced by a CONCAT whoes components do not have the same
mode as the original SUBREG, use a new SUBREG to restore the
mode.
* emit-rtl.c (subreg_realpart_p): Cope with subregs containing
multiword complex values.
1998-12-15 Zack Weinberg <zack@rabi.phys.columbia.edu>
* cppalloc.c: Add xstrdup here.
......
......@@ -942,7 +942,7 @@ subreg_realpart_p (x)
if (GET_CODE (x) != SUBREG)
abort ();
return SUBREG_WORD (x) == 0;
return SUBREG_WORD (x) * UNITS_PER_WORD < GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (x)));
}
/* Assuming that X is an rtx (e.g., MEM, REG or SUBREG) for a value,
......
......@@ -2451,7 +2451,17 @@ copy_rtx_and_substitute (orig, map)
return gen_rtx_SUBREG (GET_MODE (orig), SUBREG_REG (copy),
SUBREG_WORD (orig) + SUBREG_WORD (copy));
else if (GET_CODE (copy) == CONCAT)
return (subreg_realpart_p (orig) ? XEXP (copy, 0) : XEXP (copy, 1));
{
rtx retval = subreg_realpart_p (orig) ? XEXP (copy, 0) : XEXP (copy, 1);
if (GET_MODE (retval) == GET_MODE (orig))
return retval;
else
return gen_rtx_SUBREG (GET_MODE (orig), retval,
(SUBREG_WORD (orig) %
(GET_MODE_UNIT_SIZE (GET_MODE (SUBREG_REG (orig)))
/ (unsigned) UNITS_PER_WORD)));
}
else
return gen_rtx_SUBREG (GET_MODE (orig), copy,
SUBREG_WORD (orig));
......
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