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 (AP) |
| Stack pointer | Holds the address of the top of the software stack (SP) |
| Link register | Contains the return address of a function call (LR) |
| Program counter | Contains the current address of code being executed |
| Register | Usage | Save on Call | Save on Entry |
|---|---|---|---|
| R0.w0 | Expression register | Yes | |
| R1 | Expression register | Yes | |
| R2 | Stack pointer (SP) | ||
| R3.w0 | Expression register | ||
| R3.w2 | Expression register (usually used as Link register to store the return address) | Yes | |
| R4 | Argument pointer (AP) | Yes | |
| R5 | Expression register | Yes | |
| R6 | Expression register | Yes | |
| R7 | Expression register | Yes | |
| R8 | Expression register | Yes | |
| R9 | Expression register | Yes | |
| R10 | Expression register | Yes | |
| R11 | Expression register | Yes | |
| R12 | Expression register | Yes | |
| R13 | Expression register | Yes | |
| R14 | Return register | Yes | |
| R15 | Expression register | Yes | |
| R16 | Expression register | Yes | |
| R17 | Expression register | Yes | |
| R18 | Expression register | Yes | |
| R19 | Expression register | Yes | |
| R20 | Expression register | Yes | |
| R21 | Expression register | Yes | |
| R22 | Expression register | Yes | |
| R23 | Expression register | Yes | |
| R24 | Expression register | Yes | |
| R25 | Expression register | Yes | |
| R26 | Expression register | Yes | |
| R27 | Expression register | Yes | |
| R28 | Expression register | Yes | |
| R29 | Expression register | Yes | |
| R30 | Control register | ||
| R31 | Control register |