C2000 C/C++ Code Generation Tools v20.2.1.LTS Release Notes

Table of Contents


Long-term Support Release


The C2000 CGT v20.2.0.LTS release is a long term support (LTS) release. This release will be supported for roughly 2 years with periodic bug fix updates.


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. The “Development Tools” forum can be found at:

https://e2e.ti.com/support/tools


Defect Tracking Database


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

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


New Features:



Integer Division Unit (HWINTDIV) updates


The Integer Division Unit feature support has below updates. Feature enabled with --idiv_support=idiv0 and requires --abi=eabi and --float_support=fpu32/fpu64.


Support inline memcpy operations larger than 255 words


Inlining of memcpy for operations less than or equal 255 words is already supported with use of the instruction: RPT #imm

Support has been added for inlining memcpy of operations larger than 255 words by using the RPT instruction with register operand.

Both memcpy inlining uses of RPT can be disabled with --rpt_threshold


FPU64 Run Time Support (RTS) library routine updates



New diagnostic checks



Hex utility --cmac option, supported added for --boot tables


The hex conversion utility’s Cipher-based Message Authentication Protocol (CMAC) feature now supports boot tables with CMAC tags.

To enable, use --cmac=key_file with --boot along with other required boot table options. The CMAC algorithm assumes a fill value of 1’s for gaps between boot table regions which requires setting --fill.


Hex utility --cmac option (cipher-based message authentication protocol)


The hex conversion utility supports the secure flash boot capability provided by TMS320F2838x devices, which have both C28 and ARM cores. The secure flash boot applies the Cipher-based Message Authentication Protocol (CMAC) algorithm to verify CMAC tags for regions of allocated memory.

In order to apply the CMAC algorithm to the appropriate regions in allocated memory, use the hex conversion utility as follows: --cmac=file where file contains a 128-bit hex CMAC key

NOTE: above additionally requires --image or --load_image options.

CMAC tag locations need to be defined in the user’s C code using below symbols along with LOCATION and RETAIN pragmas: secure boot regions: cmac_sb_1 cmac_sb_2 cmac_sb_3 or cmac_sb_4 user-specified region: cmac_all

The hex utility will then apply the CMAC algorithm to all the CMAC tags defined in the user’s C code.

See TMS320C28x Assembly Language Tools User Guide for details.


VCU register save/restore support for interrupt service routines


In prior releases, interrupt service routines (ISR) did not save/restore VCU registers.

Below new option generates VCU register save/restore to stack for ISR’s so vcu code can be re-entrant. If an ISR interrupts a VCU computation then it will not impact results.

 --isr_save_vcu_regs=on,off 

NOTE: VCU save/restore are only emitted for ISR’s that call other functions since leaf ISR routines will not have any VCU register usage as there is no current VCU code generation aside from below save/restore.

For --vcu_support=vcu0/vcu2, below are added to ISR’s:

 VMOV32 SP++,VCRC 
VMOV32
SP++,VSTATUS

VMOV32 VSTATUS,–SP
VMOV32 VCRC,
–SP

For --vcu_support=vcrc, below are added to ISR’s:

 VMOV32 SP++,VCRC 
VMOV32
SP++,VSTATUS
VMOV32 SP++,VCRCPOLY
VMOV32
SP++,VCRCSIZE

VMOV32 VCRCSIZE,–SP
VMOV32 VCRCPOLY,
–SP
VMOV32 VSTATUS,–SP
VMOV32 VCRC,
–SP


Default file extension for compiler generated object files


The default file extensions for object files created by the compiler have changed in order to prevent conflicts when C and C++ files have the same names. Object files generated from C source files have the .c.obj extension. Object files generated from C++ source files have the .cpp.obj extension.


Resolved defects


Resolved defects in v20.2.x.LTS:

ID Summary
CODEGEN-7297 C28 –advice:performance parser segfault for tmu advice for indirect function calls
CODEGEN-7146 Compiler loses conversion to size_t in length argument to memcpy
CODEGEN-7144 Documentation of linker options –rom_model and –ram_model is inconsistent
CODEGEN-7141 Simple division expression optimized into incorrect complicated expression
CODEGEN-7117 Assembly tools manual mixes up RAM and ROM model description
CODEGEN-7098 Incorrect optimization of expression that mixes the types long and short
CODEGEN-7011 Compiler intermittently fails with INTERNAL ERROR: opt2000 experienced a segmentation fault
CODEGEN-6911 Floating point comparison that fits min/max-index pattern can produce incorrect code
CODEGEN-6787 C28x compiler manual does not document that types larger than 16-bits are aligned on 2-word address boundaries
CODEGEN-6783 Ensure C std headers do not issue MISRA warnings
CODEGEN-6682 Combination of many include paths and .cdecls causes assembler to segmentation fault
CODEGEN-6666 64-bit to 32-bit assignment with predecrement causes compiler crash with INTERNAL ERROR: no match for ASG
CODEGEN-6477 Using –vcu_support may lead to INTERNAL ERROR: Register allocation failed
CODEGEN-6456 Under eabi, the cinit entry for zero fill an of uninitialized section has a length that is 1/2 of what it should be
CODEGEN-6354 C28 Compiler should emit performance advice 2614 for atanf, et al
CODEGEN-6289 Pointer to VLA 2D array computation in IF condition is double-adjusted and garbled
CODEGEN-6132 pdd tool fails when program includes unused file
CODEGEN-5843 Use of –check_misra=14.10 causes non-MISRA related warning to be emitted
CODEGEN-5563 Checking for MISRA rule 20.1 causes macro redefinition to be ignored
CODEGEN-1678 Document #pragma once

Known defects


Known defects in v20.2.x.LTS:

ID Summary
CODEGEN-7354 C28x compiler shell cl2000 incorrectly claims to support –analyze=callgraph
CODEGEN-6509 Compiler error: no instance of function template matches the argument list
CODEGEN-6070 Erroneous “redeclared with incompatible type” involving two tagless structs with same form
CODEGEN-5179 When a symbol is remapped, DW_TAG_TI_branch/DW_AT_name is not updated
CODEGEN-5078 Simple syntax error causes assembler to fail with INTERNAL ERROR
CODEGEN-4985 Typo on ULP Advisor message
CODEGEN-4943 MISRA 12.2 is incorrectly issued when one variable is used multiple times as an array index in the same expression
CODEGEN-4934 Incorrect issue MISRA diagnostic 10.5: If the bitwise operators ~ and << are applied
CODEGEN-4789 Compiler incorrectly issues MISRA diagnostic 12.7 Bitwise operators shall not be applied to operands whose underlying type is signed
CODEGEN-4712 No MISRA 10.1 and 10.6 diagnostics issued on initializations
CODEGEN-4346 MISRA 19.4 error fails to identify itself as MISRA diagnostic when problem is on the command line
CODEGEN-4304 C++ feature causes runtime failure on unaligned access on ARM9
CODEGEN-4298 Internal error when passing a temporary array of objects
CODEGEN-4297 Cannot take the address of std::ctype<char>::table_size
CODEGEN-4296 Undefined symbol isblank with -g or -ooff
CODEGEN-4290 wstring runtime failure - likely bug in swprintf
CODEGEN-4281 Unexpected type returned by bitset [] operator
CODEGEN-4276 std::multimap::clear is not noexcept
CODEGEN-4275 std::num_get does not parse floating-point strings correctly
CODEGEN-4259 noexcept(typeid(d)) runtime fail on polymorphic class type
CODEGEN-4258 deeply nested lambda functions hang the codegen
CODEGEN-4250 regex_constants::ECMAScript not expected to be 0