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]
Other format: [Raw text]

Re: FUNCTION_OK_FOR_SIBCALL vs INITIAL_FRAME_POINTER_OFFSET


On Mon, Mar 20, 2006 at 04:03:08PM -0000, Dave Korn wrote:
>  Do you happen to know off the top of your head when get_frame_size()
> becomes valid?

You don't get a good first-pass estimate until after all rtl 
generation has been done.  Which is later than you need.

Another possibility is to allocate an extra word high in the
stack frame for temporary storage in large frames w/ sibcalls
to functions using all arguments.  Then you'd deallocate in 
several steps:

	scratchslot = argument
	argument = stack frame size - small
	sp += argument
	argument = scratchslot
	sp += small

This scheme has the advantage that you don't need to commit
to it until the last minute.  Don't forget that you can also
handle "small" large values in a small number of steps.  E.g.
for 65k:

	sp += 32764
	sp += 32764
	sp += 1032

Which may well be faster than going through memory as above.
Of course, you wouldn't want to use this scheme for a 2mb frame.


r~


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