The Itanium architecture provides for defining up to 128 application registers (Ar0 Ar127), which are 64 bits in width and can thus accommodate address pointers and either signed or unsigned integers of that size: These registers perform specific tasks in association with various instructions and operations in application-level software running on an Itanium system.
Table D-5 gives the nomenclature and standardized uses of currently defined Itanium application registers. Undefined registers are denoted as either reserved or ignored. Attempted access to a reserved register causes an illegal operation fault. A read operation on an ignored register will return zero; a write operation on an ignored register will have no effect. The column headed Unit indicates with I or M whether the instruction to access a particular register must be mov.i or mov.m or either. A register is read-only if its value is dynamically maintained at the hardware level or by the operating system, but cannot be modified by an application program. A register is special if it has some purpose assigned to it, either at the hardware level or by software convention. A register is scratch if it may be freely used by a routine at any calling level (caller must save anything important). A register is preserved if a calling routine depends on its contents (any called procedure must save and restore its contents for its caller). A register is automatic if its name (number) only has a dynamic correspondence to a physical register; such registers are automatically spilled to and filled from memory at allocation times by the hardware, as necessary.
|