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.
Table 14-1. Registers Required
Data TypeNumber and Type of Registers Required
char1 W register
short1 W register
int1 W register
any C qualified pointer1 W register
any extended qualified pointer2 W registers
long2 W registers, aligned to even numbered register
float2 W registers, aligned to an even numbered register
double (Note 1)2 W registers, aligned to an even numbered register
long long int4 W registers, aligned to a quad numbered register
long double4 W registers, aligned to a quad numbered register
_Fract1 W register
_long _Fract2 W registers, aligned to even numbered register
_Accum3 W registers, aligned to a quad numbered register
struct1 register per 2 bytes in structure
Note 1: double is equivalent to long double if -fno-short-double is used.