This discusses registers that address the stack frame.
STACK_POINTER_REGNUM FIXED_REGISTERS . On most machines, the hardware determines which register this is.
FRAME_POINTER_REGNUM
HARD_FRAME_POINTER_REGNUM FRAME_POINTER_REGNUM the number of a special, fixed register to be used internally until the offset is known, and define HARD_FRAME_POINTER_REGNUM to be actual the hard register number used for the frame pointer.
You should define this macro only in the very rare circumstances when it is not possible to calculate the offset between the frame pointer and the automatic variables until after register allocation has been completed. When this macro is defined, you must also indicate in your definition of ELIMINABLE_REGS how to eliminate FRAME_POINTER_REGNUM into either HARD_FRAME_POINTER_REGNUM or STACK_POINTER_REGNUM .
Do not define this macro if it would be the same as FRAME_POINTER_REGNUM .
ARG_POINTER_REGNUM FIXED_REGISTERS , or arrange to be able to eliminate it (see Elimination).
STATIC_CHAIN_REGNUM STATIC_CHAIN_INCOMING_REGNUM STATIC_CHAIN_INCOMING_REGNUM , while the register number as seen by the calling function is STATIC_CHAIN_REGNUM . If these registers are the same, STATIC_CHAIN_INCOMING_REGNUM need not be defined. The static chain register need not be a fixed register.
If the static chain is passed in memory, these macros should not be defined; instead, the next two macros should be defined.
STATIC_CHAIN STATIC_CHAIN_INCOMING mem expressions that denote where they are stored. STATIC_CHAIN and STATIC_CHAIN_INCOMING give the locations as seen by the calling and called functions, respectively. Often the former will be at an offset from the stack pointer and the latter at an offset from the frame pointer.
The variables stack_pointer_rtx , frame_pointer_rtx , and arg_pointer_rtx will have been initialized prior to the use of these macros and should be used to refer to those items.
If the static chain is passed in a register, the two previous macros should be defined instead.