HPlogo PA-RISC Procedure Calling Conventions Reference Manual > Chapter 3 Register Usage and Parameter Passing

3.4 Summary of Dedicated Register Usage

MPE documents

Complete PDF
Table of Contents

Table 3-1, Table 3-2, and Table 3-3 show the required conventions regarding argument and return value passing. Users risk the unintentional destruction of necessary data if their programs do not adhere to the standard conventions.

Table 3-1 Space Register Usage

Register Name Other Names Usage Convention
sr0 Caller-saves space register or millicode (nested or external) millicode return space register.
sr1sarg sret Space argument and return register or caller-saves space register.
sr2 Caller-saves space register.
sr3 Callee-saves space register.
sr4 Code space register (stubs save and restore on inter-module calls).
sr5 Data space register, modified only by privileged code.
sr6 System space register, modified only by privileged code.
sr7 System space register, modified only by privileged code.


NOTE: If the routine in question is a non-leaf routine, gr2 must be stored because subsequent calls will modify it. Once stored, it is available to be used as a scratch register by the code generators.

Although common, it is not absolutely necessary that gr2 be restored before exit; a branch (BV) using another caller-saves register is allowed.

Table 3-2 General Register Usage

Register Name Other Names Usage Convention
gr0 Zero value register. (Writing to this register does not affect its contents.)
gr1 Scratch register (caller-saves). (can be destroyed by call mechanism).
gr2RP Return pointer and scratch register.
gr3 - gr18 General purpose callee-saves registers.
gr19 - gr22 General purpose caller-saves registers.
gr23arg3 Argument register 3 or general purpose caller-saves register.
gr24arg2 Argument register 2 or general purpose caller-saves register.
gr25arg1 Argument register 1 or general purpose caller-saves register.
gr26arg0 Argument register 0 or general purpose caller-saves register.
gr27DP Global data pointer; may not be used to hold other values. (Stubs save and restore on inter-module calls)
gr28ret0 Function return register on exit or function result address on entry. May also be used as a general purpose caller-saves register.
gr29SL ret1 Static link register (on entry), millicode function return or function return register for upper part of a 33 to 64 bit function result. May also be used as a general purpose caller-saves register.
gr30SP Stack pointer, may not be used to hold other values.
gr31 Millicode return pointer or scratch register (caller-saves).

Table 3-3 Floating-Point Register Usage

Register Name Other Names Usage Convention
fr0 Floating-point coprocessor status. See discussion in the text of this chapter.
fr1 - fr3 Floating-point exception registers. Cannot be modified by user code.
fr4fret farg0 Floating-point return register, single-precision argument register 0, or floating-point caller-saves register.
fr5farg1 Single-precision argument register 1, double-precision argument register 0 or floating-point caller-saves register.
fr6farg2 Single-precision argument register 2, or floating-point caller-saves register.
fr7farg3 Single-precision argument register 3, double-precision argument register 1 or floating-point caller-saves register.
fr8 - fr11 Floating-point caller-saves registers.
fr12 - fr15 Floating-point callee-saves registers.
fr16 - fr21 Floating-point callee-saves registers, only available on PA-RISC version 1.1 or later processors.
fr22 - fr31 Floating-point caller-saves registers, only available on PA-RISC version 1.1 or later processors.




3.3 The Floating-Point Coprocessor Status Register


3.5 Parameter Passing and Function Results