Readme for C2000 Code Generation Tools v22.6.3.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.3.LTS:

ID Summary
CODEGEN-14346 Cannot use char16_t for 16-bit wide string literals
CODEGEN-14342 Dwarf call frame information contains frame description entries with instructions with the wrong address
CODEGEN-14324 Compiler fails with INTERNAL ERROR: opt2000 experienced a segmentation fault
CODEGEN-14240 C28 silicon bug workaround: FastIntDiv or DIVF64 instruction preceded by certain FPU 2p operations
CODEGEN-13621 Compiler generates illegal parallel instruction that causes assembler to issue a valid error
CODEGEN-13483 Right shift of int40_t value converted from float causes compiler to fail with INTERNAL ERROR: no match for SRL
CODEGEN-13346 C28 intrinsic, __iexp2(float), uses TMU1 instruction IEXP2F32 which has accuracy issues when base/exponent are outside specified ranges
CODEGEN-13286 long long or double value passed as 10th argument to a function that returns a struct may be corrupted
CODEGEN-12562 Compiler incorrectly optimizes implicit cast to pointer expression (int32)(uint16+constant) to within expression ((int32)uint16+constant)
CODEGEN-12500 Optimizer incorrectly distributes a float type into an unsigned integer expression of smaller size
CODEGEN-12282 Missing warning for C89 with integer literal too large for long
CODEGEN-12260 C2000 MOVDL instruction tries to simultaneously access two memory locations across DP boundary
CODEGEN-11909 Documentation needs to state that building C++ files with –abi=eabi forces runtime type identification (RTTI) to be included
CODEGEN-10306 For EABI cinit copy “compression”, the linker incorrectly sets the number of bytes to copy for smaller copy initialization sizes
CODEGEN-9407 Flexible array of structs does not correctly initialize last element with implicitly initialized struct members.

Known defects (dynamic)


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

Known defects – dynamic ***