prev UP NEXT Using and Porting GNU CC

16.5.1: Basic Characteristics of Registers

FIRST_PSEUDO_REGISTER
Number of hardware registers known to the compiler. They receive numbers 0 through FIRST_PSEUDO_REGISTER-1; thus, the first pseudo register's number really is assigned the number FIRST_PSEUDO_REGISTER.
FIXED_REGISTERS
An initializer that says which registers are used for fixed purposes all throughout the compiled code and are therefore not available for general allocation. These would include the stack pointer, the frame pointer (except on machines where that can be used as a general register when no frame pointer is needed), the program counter on machines where that is considered one of the addressable registers, and any other numbered register with a standard use.

This information is expressed as a sequence of numbers, separated by commas and surrounded by braces. The nth number is 1 if register n is fixed, 0 otherwise.

The table initialized from this macro, and the table initialized by the following one, may be overridden at run time either automatically, by the actions of the macro CONDITIONAL_REGISTER_USAGE, or by the user with the command options `-ffixed-reg', `-fcall-used-reg' and `-fcall-saved-reg'.

CALL_USED_REGISTERS
Like FIXED_REGISTERS but has 1 for each register that is clobbered (in general) by function calls as well as for fixed registers. This macro therefore identifies the registers that are not available for general allocation of values that must live across function calls.

If a register has 0 in CALL_USED_REGISTERS, the compiler automatically saves it on function entry and restores it on function exit, if the register is used within the function.

CONDITIONAL_REGISTER_USAGE
Zero or more C statements that may conditionally modify two variables fixed_regs and call_used_regs (both of type char []) after they have been initialized from the two preceding macros.

This is necessary in case the fixed or call-clobbered registers depend on target flags.

You need not define this macro if it has no work to do.

If the usage of an entire class of registers depends on the target flags, you may indicate this to GCC by using this macro to modify fixed_regs and call_used_regs to 1 for each of the registers in the classes which should not be used by GCC. Also define the macro REG_CLASS_FROM_LETTER to return NO_REGS if it is called with a letter for a class that shouldn't be used.

(However, if this class is not included in GENERAL_REGS and all of the insn patterns whose constraints permit this class are controlled by target switches, then GCC will automatically avoid using these registers when the target switches are opposed to them.)

NON_SAVING_SETJMP
If this macro is defined and has a nonzero value, it means that setjmp and related functions fail to save the registers, or that longjmp fails to restore them. To compensate, the compiler avoids putting variables in registers in functions that use setjmp.
INCOMING_REGNO (out)
Define this macro if the target machine has register windows. This C expression returns the register number as seen by the called function corresponding to the register number out as seen by the calling function. Return out if register number out is not an outbound register.
OUTGOING_REGNO (in)
Define this macro if the target machine has register windows. This C expression returns the register number as seen by the calling function corresponding to the register number in as seen by the called function. Return in if register number in is not an inbound register.