This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: ARM port bug


> 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.



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]