SPNU151V January 1998 – February 2020
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.
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 |
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 |
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 |
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 |