To describe the assembler support routines in chapter Instr-Chapter and the complicated control conventions in chapter Control-Conventions requires that we talk about the allocation of the 16 32-bit general purpose registers provided by the IBM RT PC.
This register contains an index into the current code vector when a Lisp function is about to be called. When a miscop is called, it contains the return address. It may be used as a super temporary between miscop and function calls.
This register contains a pointer to the active function object. It is used to access the symbol and constant area for the currently running function.
This register contains a pointer to the current active frame on the control stack. It is used to access the arguments and local variables stored on the control stack.
This register contains the current binding stack pointer. The binding stack is a downward growing stack and follows a decrement-write/increment-read discipline.
These registers contain locals and saved arguments for the currently executing function. Functions may use these registers, so that stack accesses can be reduced, since a stack access is relatively expensive compared to a register access.
These registers contain arguments to a function or miscop that has just been called. On entry to a function or miscop, they contain the first three arguments. The first thing a function does is to move the contents of these registers into the local registers.
This register is used to pass a fourth argument to miscops requiring four or more arguments. It is also used as a super temporary by the compiler.
The stack pointer for the control stack, an object of type Control-Stack-Pointer. Points to the last used word in Control-Stack space; this upward growing stack uses a increment-write/read-decrement discipline.
These registers are used to contain non-Lisp values. They will normally be used during miscop calls, but may also be used in in-line code to contain temporary data. These are the only two registers never examined by the garbage collector, so no pointers to Lisp objects should be stored here (since they won’t get updated during a garbage collection).