Commit 5c4cdc9f by Jim Wilson

(assign_parms): Handle PARALLEL parameter in ENTRY_PARM.

From-SVN: r12191
parent ae73d3be
...@@ -3495,9 +3495,17 @@ assign_parms (fndecl, second_time) ...@@ -3495,9 +3495,17 @@ assign_parms (fndecl, second_time)
* (PARM_BOUNDARY / BITS_PER_UNIT)); * (PARM_BOUNDARY / BITS_PER_UNIT));
if (! second_time) if (! second_time)
move_block_from_reg (REGNO (entry_parm), {
validize_mem (stack_parm), nregs, /* Handle calls that pass values in multiple non-contiguous
int_size_in_bytes (TREE_TYPE (parm))); locations. The Irix 6 ABI has examples of this. */
if (GET_CODE (entry_parm) == PARALLEL)
emit_group_store (validize_mem (stack_parm),
entry_parm);
else
move_block_from_reg (REGNO (entry_parm),
validize_mem (stack_parm), nregs,
int_size_in_bytes (TREE_TYPE (parm)));
}
entry_parm = stack_parm; entry_parm = stack_parm;
} }
} }
...@@ -3621,10 +3629,13 @@ assign_parms (fndecl, second_time) ...@@ -3621,10 +3629,13 @@ assign_parms (fndecl, second_time)
Set DECL_RTL to that place. */ Set DECL_RTL to that place. */
if (nominal_mode == BLKmode) if (nominal_mode == BLKmode || GET_CODE (entry_parm) == PARALLEL)
{ {
/* If a BLKmode arrives in registers, copy it to a stack slot. */ /* If a BLKmode arrives in registers, copy it to a stack slot.
if (GET_CODE (entry_parm) == REG) Handle calls that pass values in multiple non-contiguous
locations. The Irix 6 ABI has examples of this. */
if (GET_CODE (entry_parm) == REG
|| GET_CODE (entry_parm) == PARALLEL)
{ {
int size_stored int size_stored
= CEIL_ROUND (int_size_in_bytes (TREE_TYPE (parm)), = CEIL_ROUND (int_size_in_bytes (TREE_TYPE (parm)),
...@@ -3655,10 +3666,15 @@ assign_parms (fndecl, second_time) ...@@ -3655,10 +3666,15 @@ assign_parms (fndecl, second_time)
if (TREE_READONLY (parm)) if (TREE_READONLY (parm))
RTX_UNCHANGING_P (stack_parm) = 1; RTX_UNCHANGING_P (stack_parm) = 1;
move_block_from_reg (REGNO (entry_parm), /* Handle calls that pass values in multiple non-contiguous
validize_mem (stack_parm), locations. The Irix 6 ABI has examples of this. */
size_stored / UNITS_PER_WORD, if (GET_CODE (entry_parm) == PARALLEL)
int_size_in_bytes (TREE_TYPE (parm))); emit_group_store (validize_mem (stack_parm), entry_parm);
else
move_block_from_reg (REGNO (entry_parm),
validize_mem (stack_parm),
size_stored / UNITS_PER_WORD,
int_size_in_bytes (TREE_TYPE (parm)));
} }
DECL_RTL (parm) = stack_parm; DECL_RTL (parm) = stack_parm;
} }
......
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