SPRUJG0C December   2024  – October 2026 F29H850DM , F29H850TU , F29H859TU-Q1 , F29P329SM-Q1 , F29P589DM-Q1 , F29P589DU-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. 1Introduction
  5. 2Performance Optimization
    1. 2.1 Compiler Settings
      1. 2.1.1 Enabling Debug and Source Inter-Listing
      2. 2.1.2 Optimization Control
      3. 2.1.3 Floating-Point Math
      4. 2.1.4 Fixed-Point Division
      5. 2.1.5 Single vs Double-Precision Floating Point
      6. 2.1.6 Link-Time Optimization (LTO)
    2. 2.2 Memory Settings
      1. 2.2.1 Executing Code From RAM
      2. 2.2.2 Executing Code From Flash
      3. 2.2.3 Data Placement
    3. 2.3 Code Construction and Configuration
      1. 2.3.1 Inlining
      2. 2.3.2 Intrinsics
      3. 2.3.3 Volatile Variables
      4. 2.3.4 Function Arguments
      5. 2.3.5 Enabling Wider Data Accesses
      6. 2.3.6 Auto-Generated Code
      7. 2.3.7 Accurately Profiling Code
    4. 2.4 Application Code Optimization
      1. 2.4.1 Optimized SDK Libraries
      2. 2.4.2 Optimizing Code-Size With Libraries
      3. 2.4.3 C29 Special Instructions
      4. 2.4.4 C29 Parallelism
      5. 2.4.5 32-Bit Variables and Writes Preferred
      6. 2.4.6 Coding Style and Impact on Performance
  6. 3References
  7. 4Revision History

Single vs Double-Precision Floating Point

If FPU64 is available (CPU3 on F29H85x), double-precision floating point operations can be efficiently performed. Without this, double-precision floating point operations need to be implemented using integer instructions on the CPU. They cannot be implemented using FPU32 instructions, since single-precision and double-precision floating point formats are different. To enable use of the FPU64, use the compiler option:

-mfpu=f64

On the C29, EABI is the only supported executable format. COFF is not supported. With EABI, the double type is 64-bits. User code that contains literal constants (1.54) without a trailing 'f' (1.54f) is interpreted as double-precision per the C standard. This leads to implicit conversion of other associated variables to double-precision, which negatively impacts performance when FPU64 is not available (CPU3 on F29H85x).

Using the following compiler option generates warnings when the above promotion to double-precision occurs:

-Wdouble-promotion

The following compiler option can be used to limit floating-point constants to single-precision. This eliminates the need to add a trailing 'f' to every floating-point constant. However, with this approach, all floating-point constants become single-precision.

-cl-single-precision-constant