6.6.1.16 -mpa, -mpa=n, -mno-pa
Note: These options are currently unsupported on dsPIC33A devices.
Definitions of these options are:
-mpa
: Enable the procedure abstraction optimization. There is no limit on the nesting level.-mpa=n
: Enable the procedure abstraction optimization up to leveln
. Ifn
is zero, the optimization is disabled. Ifn
is 1, first level of abstraction is allowed; that is, instruction sequences in the source code may be abstracted into a subroutine. Ifn
is 2, a second level of abstraction is allowed; that is, instructions that were put into a subroutine in the first level may be abstracted into a subroutine one level deeper. This pattern continues for larger values ofn
. The net effect is to limit the subroutine call nesting depth to a maximum ofn
.-mno-pa:
Do not enable the procedure abstraction optimization (This is the default).
Optimization levels depend on the compiler edition (see section 19 Optimizations).
Important: The procedure abstractor behaves as the inverse of inlining
functions. The pass is designed to extract common code sequences from multiple sites
throughout a translation unit and place them into a common area of code. Although this
option generally does not improve the run-time performance of the generated code, it can
reduce the code size significantly. Programs compiled with
-mpa
can be
harder to debug.
The procedure abstractor is invoked as a separate phase of compilation,
after the production of an assembly file. This phase does not optimize across
translation units. When the procedure-optimizing phase is enabled, inline assembly code
must be limited to valid machine instructions. Invalid machine instructions or
instruction sequences, or assembler directives (sectioning directives, macros, include
files, etc.), must not be used, or the procedure abstraction phase will fail, inhibiting
the creation of an output file.