14.1 Register Variables

Register variables use one or more working registers, as shown in the following table.

Table 14-1. Register Conventions
VariableWorking Register
char, signed char, unsigned charW0-W13, and W14, if not used as a Frame Pointer
short, signed short, unsigned shortW0-W13, and W14, if not used as a Frame Pointer
int, signed int, unsigned intW0-W13, and W14, if not used as a Frame Pointer
void * (or any pointer)W0-W13, and W14, if not used as a Frame Pointer
long, signed long, unsigned longA pair of contiguous registers, the first of which is a register from the set {W0, W2, W4, W6, W8, W10, W12}
long long, signed long long, unsigned long longA quadruplet of contiguous registers, the first of which is a register from the set {W0, W4, W8}. Successively higher-numbered registers contain successively more significant bits.
floatA pair of contiguous registers, the first of which is a register from the set {W0, W2, W4, W6, W8, W10, W12}
double1.A pair of contiguous registers, the first of which is a register from the set {W0, W2, W4, W6, W8, W10, W12}
long doubleA quadruplet of contiguous registers, the first of which is a register from the set {W0, W4, W8}
structure1 contiguous register per 2 bytes in the structure
_Fract

_Sat _Fract

W0-W13, and W14, if not used as a Frame Pointer
long _Fract

_Sat long _Fract

A pair of contiguous registers, the first of which is a register from the set {W0, W2, W4, W6, W8, W10, W12}
_Accum

_Sat _Accum

Three contiguous registers where the first register starts in the set {W0, W4, W8, W12}; W12 is included only if W14 is not used as a frame pointer.
Note 1: double is equivalent to long double if -fno-short-double is used.