Register Conventions

Strict conventions associate specific registers with specific operations in the C/C++ environment. If you plan to interface an assembly language routine to a C/C++ program, you must understand and follow these register conventions.

The register conventions dictate how the compiler uses registers and how values are preserved across function calls. Table 6-3 shows the types of registers affected by these conventions.Table 6-4 summarizes how the compiler uses registers and whether their values are preserved across calls. For information about how values are preserved across calls, see Section 6.4.

Table 6-3 How Register Types Are Affected by the Conventions

Register Type Description
Argument register Passes arguments during a function call
Return register Holds the return value from a function call
Expression register Holds a value
Argument pointer Used as a base value from which a function's parameters (incoming arguments) are accessed
Stack pointer Holds the address of the top of the software stack
Link register Contains the return address of a function call
Program counter Contains the current address of code being executed

Table 6-4 Register Usage

Register Alias Usage Preserved by Function(1)
R0 A1 Argument register, return register, expression register Parent
R1 A2 Argument register, return register, expression register Parent
R2 A3 Argument register, expression register Parent
R3 A4 Argument register, expression register Parent
R4 V1 Expression register Child
R5 V2 Expression register Child
R6 V3 Expression register Child
R7 V4, AP Expression register, argument pointer Child
R8 V5 Expression register Child
R9 V6 Expression register Child
R10 V7 Expression register Child
R11 V8 Expression register Child
R12 V9, 1P Expression register, instruction pointer Parent
R13 SP Stack pointer Child(2)
R14 LR Link register, expression register Child
R15 PC Program counter N/A
CPSR Current program status register Child
SPSR Saved program status register Child
The parent function refers to the function making the function call. The child function refers to the function being called.
The SP is preserved by the convention that everything pushed on the stack is popped off before returning.

Table 6-5 VFP Register Usage

32-Bit Register 64-Bit Register Usage Preserved by Function(1)
FPSCR Status register N/A
S0 D0 Floating-point expression, return values, pass arguments N/A
S1
S2 D1 Floating-point expression, return values, pass arguments N/A
S3
S4 D2 Floating-point expression, return values, pass arguments N/A
S5
S6 D3 Floating-point expression, return values, pass arguments N/A
S7
S8 D4 Floating-point expression, pass arguments N/A
S9
S10 D5 Floating-point expression, pass arguments N/A
S11
S12 D6 Floating-point expression, pass arguments N/A
S13
S14 D7 Floating-point expression, pass arguments N/A
S15
S16 D8 Floating-point expression Child
S17
S18 D9 Floating-point expression Child
S19
S20 D10 Floating-point expression Child
S21
S22 D11 Floating-point expression Child
S23
S24 D12 Floating-point expression Child
S25
S26 D13 Floating-point expression Child
S27
S28 D14 Floating-point expression Child
S29
S30 D15 Floating-point expression Child
S31
D16-D31 Floating-point expression
The child function refers to the function being called.

Table 6-6 Neon Register Usage

64-Bit Register Quad Register Usage Preserved by Function(1)
D0 Q0 SIMD register N/A
D1
D2 Q1 SIMD register N/A
D3
D4 Q2 SIMD register N/A
D5
D6 Q3 SIMD register N/A
D7
D8 Q4 SIMD register Child
D9
D10 Q5 SIMD register Child
D11
D12 Q6 SIMD register Child
D13
D14 Q7 SIMD register Child
D15
D16 Q8 SIMD register N/A
D17
D18 Q9 SIMD register N/A
D19
D20 Q10 SIMD register N/A
D21
D22 Q11 SIMD register N/A
D23
D24 Q12 SIMD register N/A
D25
D26 Q13 SIMD register N/A
D27
D28 Q14 SIMD register N/A
D29
D30 Q15 SIMD register N/A
D31
FPSCR Status register N/A
The child function refers to the function being called.