20.2 How to Enable Optimization
MPLAB XC16 is derived from the GCC source-base which provides many different individual switches for controlling optimizations.
It is recommended that you use the 'big O' optimization switches. The more common variants of GCC (Arm, MIPS, ix86, etc.) may update optimization switches more quickly than the dsPIC port, so consequently there may be individual switches that appear and disappear. Sticking with the big O optimizations is a good way to remove surprises.
The big O optimizations are organized into four categories, declared using
the -On
option, where n is a numerical value in the range of 0 to 3.
Additionally, there is the -Os
option, which falls somewhere between
-O2
and -O3
. For optimizations supported in Free
(unlicensed) compilers and additional options supported in PRO (licensed) compiler, see
Optimizations.
In general, the larger the value of n
, the more
optimizations are performed. Some techniques are designed to reduce code size, some are
designed to increase the performance of the generated code, and some do both. You will need
to determine what is most important for you (speed vs. size trade-offs) and choose the
option appropriate for your application.
MPLAB XC16 also supports procedural abstraction, sometimes called
function-outlining, via the -mpa
option. This optimization intends to
reduce the code size by abstracting common generated code into individual functions (i.e.,
the opposite of function inlining). This can reduce code size and is performed on assembly
code, post compilation.
Additionally MPLAB XC16 supports -moptimize-page-setting
which attempts to minimize the effect of DSRPAG swapping with the named address space
qualifiers.