This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: ARM port bug
- To: Richard Henderson <rth at redhat dot com>
- Subject: Re: ARM port bug
- From: Richard Earnshaw <rearnsha at arm dot com>
- Date: Fri, 01 Jun 2001 18:30:32 +0100
- cc: Richard dot Earnshaw at arm dot com, gcc at gcc dot gnu dot org, Denis Chertykov <denisc at overta dot ru>
- Organization: ARM Ltd.
- Reply-To: Richard dot Earnshaw at arm dot com
> On Fri, Jun 01, 2001 at 11:43:02AM +0100, Richard Earnshaw wrote:
> > Thinking about this section, how is this supposed to work when
> >
> > (jump_insn n n n (return))
> >
> > also restores the registers automatically?
>
> It isn't supposed to work under those conditions.
So how is one supposed to describe an epilogue where some registers are
restored manually, and some by the return instruction? Eg, on the ARM, we
*could* expand the epilogue for the sequence
lfmfd f4, 1, [sp]!
ldmfd sp!, {r4, r5, r6, pc}
We would need to expand this as two insns, one that restored the floating
point registers, and one that restored the integer registers *and
returned*.
>
> > Should we consider registers that are implicitly restored by the epilogue
> > as "local" (ie with LOCAL_REGNO)?
>
> Hmm. If you were careful and return false before reload_completed,
> I suppose this would be ok.
I tried this (though without the before reload bit), and it did seem to
solve the abort problem... I'll test it a bit further.
R.