14.7 Function Call Conventions
When calling a function:
- Registers W0-W7 are caller saved. The calling function must preserve these values before the function call, if their value is required subsequently from the function call. The stack is a good place to preserve these values.
- Registers W8-W14 are callee saved. The function being called must save any of these registers it will modify.
- Registers W0-W4 are used for function return values.
- Registers W0-W7 are used for argument transmission.
- DSRPAG/PSVPAG should be preserved if the
-mconst-in-code(auto_psv) memory model is being used.
| Data Type | Number and Type of Registers Required |
|---|---|
| char | 1 W register |
| short | 1 W register |
| int | 1 W register |
| any C qualified pointer | 1 W register |
| any extended qualified pointer | 2 W registers |
| long | 2 W registers, aligned to even numbered register |
| float | 2 W registers, aligned to an even numbered register |
| double (Note 1) | 2 W registers, aligned to an even numbered register |
| long long int | 4 W registers, aligned to a quad numbered register |
| long double | 4 W registers, aligned to a quad numbered register |
| _Fract | 1 W register |
| _long _Fract | 2 W registers, aligned to even numbered register |
| _Accum | 3 W registers, aligned to a quad numbered register |
| struct | 1 register per 2 bytes in structure |
Note 1: double
is equivalent to long double if
-fno-short-double is used. | |
