[PATCH] ARM: exclude fixed_regs for stack-alignment save/restore
Richard Earnshaw
rearnsha@arm.com
Tue Jul 24 11:54:00 GMT 2012
On 17/07/12 21:42, Roland McGrath wrote:
> Richard, here is the patch against the current trunk, as I promised
> last week in Prague. Please apply.
>
Done.
I've tweaked the comments slightly, but the functional modification is
unchanged.
R.
>
> Thanks,
> Roland
>
>
> gcc/
> 2012-07-17 Roland McGrath <mcgrathr@google.com>
>
> * config/arm/arm.c (arm_get_frame_offsets): Never use a fixed register
> as the extra register to save/restore for stack-alignment padding.
>
> diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
> index e2f625c..189f71e 100644
> --- a/gcc/config/arm/arm.c
> +++ b/gcc/config/arm/arm.c
> @@ -16121,7 +16121,12 @@ arm_get_frame_offsets (void)
> else
> for (i = 4; i <= (TARGET_THUMB1 ? LAST_LO_REGNUM : 11); i++)
> {
> - if ((offsets->saved_regs_mask & (1 << i)) == 0)
> + /* While the gratuitous register save/restore is ordinarily
> + harmless, if a register is marked as fixed or global it
> + may be entirely forbidden by the system ABI to touch it,
> + so we should avoid those registers. */
> + if (!fixed_regs[i]
> + && (offsets->saved_regs_mask & (1 << i)) == 0)
> {
> reg = i;
> break;
>
More information about the Gcc-patches
mailing list