The compiler partitions the MSP430 general purpose registers into two sets.

The registers in the first set, R12 through R15, are used for parameter passing and returning function results and are not preserved across functions calls.

The registers in the second set, R4 through R11, are used for registerized variables, working storage, and temporary results and must be preserved across function calls.