Do not assign long long argument to memory in prologue if loaded in register.

OKed by Richard Henderson.

From-SVN: r76648
This commit is contained in:
Fariborz Jahanian 2004-01-26 17:43:46 +00:00
parent c353b8e3fb
commit 6e290f1155
1 changed files with 4 additions and 1 deletions

View File

@ -4374,6 +4374,7 @@ assign_parms (tree fndecl)
int in_regs;
int partial = 0;
int pretend_bytes = 0;
int loaded_in_reg = 0;
/* Set LAST_NAMED if this is last named arg before last
anonymous args. */
@ -4745,6 +4746,7 @@ assign_parms (tree fndecl)
emit_group_store (parmreg, entry_parm, TREE_TYPE (parm),
int_size_in_bytes (TREE_TYPE (parm)));
SET_DECL_RTL (parm, parmreg);
loaded_in_reg = 1;
if (regno >= max_parm_reg)
{
@ -4776,7 +4778,8 @@ assign_parms (tree fndecl)
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)
|| (GET_CODE (entry_parm) == PARALLEL
&& (!loaded_in_reg || !optimize)))
{
int size = int_size_in_bytes (TREE_TYPE (parm));
int size_stored = CEIL_ROUND (size, UNITS_PER_WORD);