Keil Logo Arm Logo

C166 User's Guide

Version 2.6 Differences

  • 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.

Keil logo

Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.