Node: Caller Saves, Next: , Previous: Aggregate Return, Up: Stack and Calling



Caller-Saves Register Allocation

If you enable it, GCC can save registers around function calls. This makes it possible to use call-clobbered registers to hold variables that must live across calls.

DEFAULT_CALLER_SAVES
Define this macro if function calls on the target machine do not preserve any registers; in other words, if CALL_USED_REGISTERS has 1 for all registers. When defined, this macro enables -fcaller-saves by default for all optimization levels. It has no effect for optimization levels 2 and higher, where -fcaller-saves is the default.
CALLER_SAVE_PROFITABLE (refs, calls)
A C expression to determine whether it is worthwhile to consider placing a pseudo-register in a call-clobbered hard register and saving and restoring it around each function call. The expression should be 1 when this is worth doing, and 0 otherwise.

If you don't define this macro, a default is used which is good on most machines: 4 * calls < refs.

HARD_REGNO_CALLER_SAVE_MODE (regno, nregs)
A C expression specifying which mode is required for saving nregs of a pseudo-register in call-clobbered hard register regno. If regno is unsuitable for caller save, VOIDmode should be returned. For most machines this macro need not be defined since GCC will select the smallest suitable mode.