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 |