SPRUJG0B December   2024  – November 2025 F29H850TU , F29H859TU-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 Code-Generation Tools
      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

Floating-Point Math

-ffast-math is a compiler option that is recommended for floating-point computations. This option is a collection of several options, of which the two that significantly improve performance are -fapprox-funcs and -freassoc. It lets the compiler make aggressive assumptions about floating-point math, resulting in limited loss in accuracy. Details on controlling floating-point behavior can be found in the Clang Compiler User's manual and in the C29 Clang Compiler Tools User's Guide. Details on -ffast-math can also be found in the Clang Compiler User's manual and in the C29 Clang Compiler Tools User's Guide.

With -ffast-math, the compiler replaces calls to many standard RTS library functions with the corresponding TMU instruction. The TMU is built into the C29 CPU.

Single-precision floating-point division using the C '/' operator is implemented using PREDIVF, SUBC4F (7 times), and POSTDIVF instructions. Double-precision floating-point division using the C '/' operator is implemented using PREDIVF, SUBC3F (19 times), and POSTDIVF instructions. With the -ffast-math compiler option, single-precision floating-point division is implemented using the DIVF instruction (which estimates the reciprocal of the denominator and multiplies with the numerator).