Optimizer Level 6
The C166 Compiler now supports Optimizer Level 6
(OPTIMIZE(6)) which adds the following new optimizations:
Global constant propagation.
Enhanced peephole optimization.
Enhanced access to huge and xhuge
objects.
Loop rotation generates code that is faster and more
efficient.
Conversion of MUL and DIV operations with constant numbers
into shift operations.
Faster long-shift operations with constant shift
factors.
Global Common Subexpressions Elimination
The global common subexpressions optimization is improved.
Enhanced C167 Instruction Set Code Generation
The code generated for the C167
microcontroller is improved. Library routines are no longer used to
access huge and xhuge variables.
Enhanced Startup Code
The startup files (STARTUP.A66 and START167.A66) are
rewritten to include initialization of ADDRSEL and
BUSCON registers and flexible assignment of DPP
registers with the linker's DPPUSE
directive.
HCompact Memory Model
The C166 Compiler now supports the HCompact memory model for the C167
CPU. This memory model increases the available address space for
near objects and improves the generated code's performance.
Furthermore, the linear memory programming model is much easier to
understand.
HLarge Memory Model
The C166 Compiler now supports the HLarge memory model for the C167 CPU.
This memory model increases the available address space for
near objects and improves the generated code's performance.
Furthermore, the linear memory programming model is much easier to
understand.
New Library Routines Support xhuge Objects
Many new library routines now support the xhuge memory type.
_chkfloat_ Library Routine
The _chkfloat_ library
routine supports rapid floating-point number error checking.
_chkdouble_ Library Routine
The _chkdouble_ library
routine supports rapid floating-point number error checking.
NODPPSAVE Directive
The NODPPSAVE directive
instructs the compiler not to preserve the DPP0 and
DPP3 registers inside interrupt functions.
NOFIXDPP Directive
The NOFIXDPP directive
instructs the compiler to generate code independent of DPP
register contents.
REENTRANT Directive
The REENTRANT directive
instructs the compiler to store automatic variables that cannot be
allocated to a CPU register on the user stack.
STATIC Directive
The STATIC directive instructs
the compiler to use static memory locations for automatic variables
that cannot be allocated to a CPU register.
UNSIGNED_CHAR Directive
The UNSIGNED_CHAR
directive instructs the compiler to treat all variables declared
with char as unsigned char variables.
INCDIR Directive
The INCDIR directive specifies
the location of the compiler include files.
NOALIAS Directive
The NOALIAS directive
instructs the compiler to ignore pointer write operations during
the optimization phase.
L166 DPPUSE Directive
The DPPUSE
directive allows reassignment of the DPP registers to support up to
64K of NDATA and NCONST memory.
This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.
ARM websites use two types of cookie: (1) those that enable the site to function and perform as required; and (2) analytical cookies which anonymously track visitors only while using the site. If you are not happy with this use of these cookies please review our Privacy Policy to learn how they can be disabled. By disabling cookies some features of the site will not work.