Readme for C2000 Code Generation Tools v22.6.2.LTS

Table of Contents


LTS Release


The C2000 CGT v22.6.x.LTS release is an LTS release.

Definitions


Compiler Downloads and Documentation


Documentation for the “TI C2000 Optimizing Compiler User’s Guide” and the “TI C2000 Assembly Language User’s Guide” is available online at:

https://www.ti.com/tool/C2000-CGT


TI E2E Community


Questions concerning TI Code Generation Tools can be posted to the TI E2E Community forums at:

The following is the top-level webpage for all of TI’s Code Generation Tools.

If submitting a defect report, please attach a scaled-down test case with command-line options and the compiler version number to allow us to reproduce the issue easily.


Defect Tracking Database


Compiler defect reports can be tracked at the Development Tools bug database at:

https://sir.ext.ti.com/


New Features:



New option --fp_single_precision_constant treats unsuffixed floating point constants as 32-bit


New option --fp_single_precision_constant treats unsuffixed floating-point constants as single precision instead of implicitly converting them to double-precision constants.


Interrupt save/restore efficiency improvement


The C2000 compiler now only saves/restores any registers that were used in an interrupt service routine (ISR). Additionally, if an ISR makes function calls, then all save-on-call (SoC) registers will get saved/restored. For FPU compilations, the RB register is saved/restored for all low priority ISRs, however, for high priority ISRs, the RB register is only saved/restored if the ISR may use an RPTB instruction.

The compiler user guide states:
“If a C/C++ interrupt routine does not call any other functions, only those registers that the interrupt handler uses are saved and restored”
However, prior to this update, above has not been the case since at least release 6.4 and the actual behavior has been to save/restore all SoC registers as long as any single SoC register was used.


Performance improvements CLA



Performance improvements C28



Hex tool: new options --boot_align_sect and --boot_block_size=size




Resolved defects


Resolved defects in v22.6.2.LTS:

ID Summary
CODEGEN-13324 symbol table entry for the compiled file should indicate source file name but instead has either a temp file name or the file's assembly file name
CODEGEN-13283 LFU: when compiler uses assembly temp file name, lfu preserve fails for static variables.
CODEGEN-12829 LFU: lfu compile emits false error for a default-preserved const variable with size change in lfu build even though const variables are no longer default preserved.
CODEGEN-12801 Incorrect value from conditional statement computing a bool
CODEGEN-12673 C28 saturation optimization for if/ternary max check generates incorrect results for values above max limit for fpu64 with volatile variable
CODEGEN-12663 Compiler may generate incorrect code for ternary max idiom with integers
CODEGEN-12534 C28 math.h exp2f/expf with –tmu_support=tmu1 and –fp_mode=relaxed generates incorrect results for negative inputs
CODEGEN-12362 lfu: for variables with lfu attribute(preserve), the linker incorrectly combines sections with initialized variables with sections for variables that have attribute(persistent).
CODEGEN-12270 An inlined cast from int32_t to float32_t may get an incorrect optimization
CODEGEN-12112 attribute constructor does not support optional priority input but silently accepts it
CODEGEN-12108 LFU: attribute((update)) does not work for CLA and will not generate warm_init records
CODEGEN-11933 Compiler may ignore necessary truncation of signed integers when used in array access
CODEGEN-11691 LFU: DATA_SECTION attribute/pragma is ignored for lfu builds with variables also marked as attribute(update)
CODEGEN-11690 LFU: for lfu builds, the linker incorrectly generates .cinit records for lfu “preserve” variables that are placed in output sections with type=NOINIT via DATA_SECTION pragma or section attribute
CODEGEN-11639 Functions with constructor attribute are incorrectly discarded
CODEGEN-11634 Compiler fails with internal error “Bad kind: TYPE::type_pointed_to”
CODEGEN-11523 When using –opt_level=3, for a loop, compiler may emit assignment to member of a struct in the wrong place
CODEGEN-11515 Compiler hangs on compile-time access of non-zero indices
CODEGEN-8789 std::is_trivially_destructible<array of non-trivially destructible> should return false
CODEGEN-8528 Assembler incorrectly issues the warning: Register write access is in the delay slot of a write of the same register
CODEGEN-8437 Expression with large numbers optimized incorrectly

Known defects (dynamic)


The following link will lead to an updated list of known defects in this release:

Known defects – dynamic ***