Readme for C2000 Code Generation Tools v21.12.0.STS

Table of Contents


Short-Term Support Release


The C2000 CGT v21.12.0.STS release is an STS (Short-Term Support) 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:



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



Resolved defects


Resolved defects in v21.12.0.STS:

ID Summary
CODEGEN-9423 C28 high priority fpu interrupt routines may not always save/restore RB register when isr uses RPTB
CODEGEN-9422 C28 –isr_save_vcu_regs=on does not always save/restore VCU registers
CODEGEN-9399 Temp file name collison causes compilation failure at –opt_level=4
CODEGEN-9330 Severe slowdown of link-time DWARF compaction in COFF projects
CODEGEN-9245 Compiler manual incorrectly states switch tables go in the .econst section
CODEGEN-9019 Compiler user guide spru514 incorrectly lists intrinsics __fmin64 __fmax64

Known defects


Known defects in v21.12.0.STS:

ID Summary
CODEGEN-9517 Using a compound statement inside parenthesis in C++ causes the compiler to fail with INTERNAL ERROR: ac2000 experienced a segmentation fault
CODEGEN-9407 Incorrect initialization of array of structures of length determined by initialization values
CODEGEN-9046 C2000 compiler manual does not explain the layout of bit fields which are larger than 16-bits
CODEGEN-8576 Loop that iterates a very large number of times causes compiler to fail with: Optimizer terminated abnormally
CODEGEN-8528 Assembler incorrectly issues the warning: Register write access is in the delay slot of a write of the same register
CODEGEN-8471 Hex utility, when splitting a section as required by the bootloader, ignores the section alignment for the second part of the split
CODEGEN-8462 LFU: CLA .scratchpad not currently being initialized during LFU warm start
CODEGEN-8377 C++ header files do not build clean with –issue remarks
CODEGEN-8214 Rounding error in floating point division of constant values
CODEGEN-7388 The option –preproc_dependency mishandles spaces in directory names
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-4960 Using –gen_profile_info with code with CLA source fails to build
CODEGEN-4342 cerr.tie() returns the wrong value
CODEGEN-4329 Initializing unordered_map with an initializer_list fails with -o2 or higher
CODEGEN-4323 1 ULP rounding error in double addition
CODEGEN-4318 libcxx/include/random uses unsigned for unsigned long
CODEGEN-4305 Compiler aborts with excessive inlining of C++ functions
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
CODEGEN-4248 armcl allows non-default arguments to be specified after default arguments
CODEGEN-4247 Internal error when assigning default arguments to a parameter pack
CODEGEN-4245 Multiple non-variables may be declared using auto or decltype(auto)
CODEGEN-4234 No error generated for lambda-expression in default argument cannot capture any entity.
CODEGEN-4158 TI compiler does not emit clang error: constexpr function never produces a constant expression
CODEGEN-4157 error with using constexpr for return from end() with empty std::initializer_list
CODEGEN-4132 cannot find matching “==” operator definition
CODEGEN-4124 Failure to defer access control checks
CODEGEN-4122 decltype cannot be used as a destructor name
CODEGEN-4119 user-supplied allocator function is not called
CODEGEN-4099 Composing operations for valarray may fail to compile
CODEGEN-4090 Unimplemented core issue 475: std::uncaught_exception is not true when constructing the thrown object
CODEGEN-4087 wostringstream::fill(WCHAR_MAX) incorrectly sets the fill value to ' 'L.
CODEGEN-4076 Exception propagating out of noexcept function does not call std::terminate
CODEGEN-4072 Unimplemented core issue 1769: Catching a thrown derived class by reference to base clas
CODEGEN-4071 <regex> never throws error_ctype
CODEGEN-4069 std::linear_congruential_engine doesn't support 8-bit results
CODEGEN-4044 libcxx istreambuf_iterator points to end of string instead of character past match
CODEGEN-1194 hex2000, while using -b option, mistakenly states a section “falls in unconfigured memory”
CODEGEN-1031 C2000 float software multiply doesn't handle -1*INF properly
CODEGEN-1028 C2000 can't print 0 with %a format
CODEGEN-580 C2000 RTS float arithmetic functions do not round correctly
CODEGEN-322 Structure is not initialized correctly when using -o2 or -o3 optimization
CODEGEN-104 Linker gives misleading warning when dot expressions used in SECTION directive for .stack section
CODEGEN-88 strcmp doesn't correctly handle values with uppermost bit set
CODEGEN-71 Extern inline functions are not supported in the C/C++ Compiler with COFF ABI
CODEGEN-63 DWARF does not correctly represent variables stored in register pairs
CODEGEN-62 pow(2,x) has fairly significant rounding error
CODEGEN-60 printf gives wrong value for pointer when its value is incremented
CODEGEN-56 Forward reference in .space generates an internal error