Commit 30082223 by Richard Stallman

(expand_call): If PCC_STATIC_STRUCT_RETURN and TARGET

is zero, copy result from static location.

From-SVN: r4677
parent 34f921d8
...@@ -1838,15 +1838,21 @@ expand_call (exp, target, ignore) ...@@ -1838,15 +1838,21 @@ expand_call (exp, target, ignore)
{ {
if (target == 0) if (target == 0)
{ {
target = gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)), /* We used leave the value in the location that it is
copy_to_reg (valreg)); returned in, but that causes problems if it is used more
MEM_IN_STRUCT_P (target) than once in one expression. Rather than trying to track
= (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE when a copy is required, we always copy when TARGET is
|| TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE not specified. This calling sequence is only used on
|| TREE_CODE (TREE_TYPE (exp)) == UNION_TYPE a few machines and TARGET is usually nonzero. */
|| TREE_CODE (TREE_TYPE (exp)) == QUAL_UNION_TYPE); if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
target = assign_stack_temp (BLKmode,
int_size_in_bytes (TREE_TYPE (exp)),
1);
else
target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
} }
else if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
if (TYPE_MODE (TREE_TYPE (exp)) != BLKmode)
emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)), emit_move_insn (target, gen_rtx (MEM, TYPE_MODE (TREE_TYPE (exp)),
copy_to_reg (valreg))); copy_to_reg (valreg)));
else else
......
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