Commit e16c591a by Richard Stallman

*** empty log message ***

From-SVN: r985
parent 611314a1
...@@ -2710,6 +2710,21 @@ assign_parms (fndecl, second_time) ...@@ -2710,6 +2710,21 @@ assign_parms (fndecl, second_time)
if (second_time) if (second_time)
continue; continue;
/* If we can't trust the parm stack slot to be aligned enough
for its ultimate type, don't use that slot after entry.
We'll make another stack slot, if we need one. */
{
#ifdef FUNCTION_ARG_BOUNDARY
int thisparm_boundary
= FUNCTION_ARG_BOUNDARY (passed_mode, passed_type);
#else
int thisparm_boundary = PARM_BOUNDARY;
#endif
if (GET_MODE_ALIGNMENT (nominal_mode) > thisparm_boundary)
stack_parm = 0;
}
/* Now adjust STACK_PARM to the mode and precise location /* Now adjust STACK_PARM to the mode and precise location
where this parameter should live during execution, where this parameter should live during execution,
if we discover that it must live in the stack during execution. if we discover that it must live in the stack during execution.
...@@ -2856,6 +2871,7 @@ assign_parms (fndecl, second_time) ...@@ -2856,6 +2871,7 @@ assign_parms (fndecl, second_time)
as we make here would screw up life analysis for it. */ as we make here would screw up life analysis for it. */
if (nominal_mode == passed_mode if (nominal_mode == passed_mode
&& GET_CODE (entry_parm) == MEM && GET_CODE (entry_parm) == MEM
&& entry_parm == stack_parm
&& stack_offset.var == 0 && stack_offset.var == 0
&& reg_mentioned_p (virtual_incoming_args_rtx, && reg_mentioned_p (virtual_incoming_args_rtx,
XEXP (entry_parm, 0))) XEXP (entry_parm, 0)))
...@@ -3088,6 +3104,9 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl, ...@@ -3088,6 +3104,9 @@ locate_and_pad_parm (passed_mode, type, in_regs, fndecl,
#endif /* ARGS_GROW_DOWNWARD */ #endif /* ARGS_GROW_DOWNWARD */
} }
/* Round the stack offset in *OFFSET_PTR up to a multiple of BOUNDARY.
BOUNDARY is measured in bits, but must be a multiple of a storage unit. */
static void static void
pad_to_arg_alignment (offset_ptr, boundary) pad_to_arg_alignment (offset_ptr, boundary)
struct args_size *offset_ptr; struct args_size *offset_ptr;
......
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