13.1 Register Variables

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

Table 13-1. Register Conventions
Variable Working Register
char, signed char, unsigned char W0-W13, and W14, if not used as a Frame Pointer
short, signed short, unsigned short W0-W13, and W14, if not used as a Frame Pointer
int, signed int, unsigned int W0-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 long A 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 long A 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.
float A 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 double A quadruplet of contiguous registers, the first of which is a register from the set {W0, W4, W8}
structure 1 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.