TASKING SmartCode v10.3r1
Release Note
Scope
This release note covers the release of v10.3r1 of TASKING SmartCode.
For release notes prior to v10.3r1, please visit the TASKING
SmartCode support website.
Contents
This is the third public release of TASKING SmartCode which supports Infineon's TC4xx family of devices.
The product includes the following features:
- TASKING SmartCode contains the toolsets for TriCore, ARC (PPU), 8051 (SCR) and MCS (GTM).
- TASKING SmartCode is available in two flavours, the Base edition and the Performance edition.
The Base edition provides support for the TriCore toolset only, excluding Hardware Debugger support.
The Performance edition is the full-fledged version, supporting all toolsets and all features, including Hardware Debugger support and the PPU-RTE environment.
- The ARC/PPU toolset compiles code that is intended to run on the ARC/PPU which employs
Synopsys DesignWare ARC EV7x Processor IP.
- The ARC/PPU toolset supports both ARCv2 baseline and Vector DSP Instruction Set Architecture.
- TASKING SmartCode supports all AURIX TC4x devices that are currently (or soon will be) available, i.e. TC45x, TC4Dx, TC49xA and TC49xN.
- TASKING SmartCode is shipped with a PPU Run-Time environment, which makes use of the ARC/PPU to offload the TriCore or to
speedup calculations.
See section New in v10.3r1 for more information on this topic.
- The ARC/PPU debugger is included in the product, but there is currently no debug target in the product available to
debug your ARC project. The Synopsys Metaware Simulator must be purchased from Synopsys separately.
- TASKING SmartCode supports the winIDEA debugger and this debugger can be started from the TASKING Eclipse environment.
- Note 1: The winIDEA debugger included in the product will be installed the first time you create a new debug configuration.
You can also start the installation manually. From the Window->Preferences dialog, select TASKING winIDEA and click the
Install button. This Install button changes into an Update button after installation is done. The Update button is enabled
when a new version of the winIDEA debugger is available.
- Note 2: The winIDEA debugger is not supported under Linux.
- The safety manuals for the TriCore and ARC toolsets are included in the product.
- TASKING SmartCode is a 64-bit product. It shall be installed on
64-bit versions of the Windows operating system. The release has been tested on Windows 7, Windows 10 and on
Windows 11 (all 64-bit), using the included simulator of Infineon.
- TASKING Eclipse plugins support all toolsets included in the product.
- The Eclipse/CDT distribution version 2023-03 is shipped with the product.
- The Eclipse/CDT distribution includes a plugin containing the JustJ Java Runtime Environment.
This JRE will be used during the execution of the TASKING Eclipse environment.
All executable files in this release have the following build number: Build 24092244.
TriCore toolset updates
TriCore C compiler improvements and optimizations
This is a non-exhaustive list of improvements and optimizations.
- The TriCore C compiler now more often applies double-word load/store optimizations.
- The TriCore C compiler now more often uses combined condition instructions.
- The TriCore C compiler now optimizes bit pattern operations with offset zero.
- The TriCore C compiler now even better optimizes shift and mask combinations.
- The TriCore C compiler now more often merges consecutive bitfield assignments.
- The TriCore C compiler now more often moves invariant code out of loops.
- The TriCore C compiler now more often optimizes indexing into arrays.
- The TriCore C compiler now more often optimizes loops using SIMD instructions.
- The TriCore C compiler now recognizes memcpy and memset type of loops.
- The TriCore C compiler now more often removes duplicate code by tail merging.
- The TriCore C compiler now more often reduces the number of jump instructions.
- The TriCore C compiler now more often eliminates redundant ALU and MOVE instructions.
- The TriCore C compiler now uses post-increment more often to eliminate ADD and LEA instructions.
- The TriCore C compiler now more often uses
shuffle
and crcn
instructions for CRC calculation.
- The TriCore C compiler uses the MISRA C 2012 standard as the default for MISRA C checking.
- The TriCore C compiler supports option
--silicon-bug=cpu-tc146
to work around errata CPU_TC.146.
- A compilation time regression introduced in SmartCode v10.2r1 is addressed.
TriCore linker updates
- The TriCore linker performance is improved to shorten the overall link time.
TriCore SFR updates
- The SFR files have been split in a basic package and a security package, containing the SFR files for the cyber security module.
The basic package is shipped with the product, the security package is available from Infineon on request.
ARC toolset updates
ARC C compiler Modulo Scheduler
- The ARC C compiler is equipped with a Modulo Scheduler, an algorithm for generating software pipelining.
- This is a first implementation and must be considered a beta version and is therefore disabled by default.
- The Modulo Scheduler can be enabled by using the pragma
modulo_schedule
. Usage:
#pragma modulo_schedule n // n is the max number of overlapping iterations
// inner-most loop ...
#pragma end_modulo_schedule
With this option you can enable modulo scheduling and control the maximum number of overlapping iterations:
- Values greater than 0 activate modulo scheduling for the loop.
- Higher numbers may improve parallelism, but may also have side effects such as increased code size and register pressure.
ARC Libraries
- The missing libraries libcp_fpu.a and libcxx_fpu.a were added to the ARC toolset.
Other noteworthy updates
Device Support
- The TASKING SmartCode v10.3r1 supports new devices TC45x and TC49xN, but since no hardware was available for these devices at the
time of the TASKING SmartCode v10.3r1 release, testing was limited to the simulator.
- The new device TC45x contains a single precision floating-point unit, but it does not have a double precision floating-point unit.
The TriCore C compiler currently does not support that configuration well.
- If you invoke the TriCore C compiler with option
--fp-model=s
, it will use the software floating-point library.
- If you invoke the TriCore C compiler with option
--fp-model=S
,
it uses single precision floating-point hardware instructions when you use float
in your program and
it uses double precision floating-point hardware instructions in case you use double
in your program.
That means that when you use solely single precision floating-points in your application you are able to use the --fp-model=S
option.
If you need to use double precision floating-point numbers in your application you are restricted to use the --fp-model=s
option.
In a future release the compiler will be updated to better support this configuration.
Safety Manual
- The archiver is added to the list of qualified tools.
- The safety guidelines as mentioned in the safety manual are available in the so-called Requirements Interchange Format (ReqIF).
The documents with extension
reqif
are located in the ctc\doc
directory and can be imported in a
requirements engineering tool of your choice.
PPU Run-Time Environment
-
The TASKING RTE for TriCore/PPU is a run-time environment to exchange data between the TriCore and the PPU. The so-called
Bare-Bones RTE uses the PPU either to offload the TriCore or to speedup calculations by using the vector processing
capabilities (Vector DSP Unit) of the PPU. Due to its parallelism, operations on data objects can potentially be executed
much faster on the PPU than on a TriCore. However, to use the PPU, the data is first transferred to the local PPU vector
memory (VCCM). After the vectorized operations on the data, the results are transferred from the PPU vector memory to a
memory that is accessible by the offloading application. The PPU run-time system enables TriCore applications to invoke
pre-installed vectorized functions on the PPU.
- The current implementation is ASIL level QM.
Fixed Problems
- SMRT-143 - C compiler: wrong code generation: dextr/extr.u with pos = 32 (out of range)
- SMRT-256 - Linker segmentation fault on very long symbol names
- SMRT-322 - Software implementation of C standard library function fma may return 1.0 instead of INFINITY
- SMRT-325 - Using LSL group fill keyword without a value does not fill alignment gaps with zeros
- SMRT-326 - S911 error when automatic inlining enabled plus size/speed tradeoff value less than 2
- SMRT-327 - Float values need to be word aligned and not halfword aligned
- SMRT-334 - PPU copytable processing causes ECC memory issues on TC49x hardware
- SMRT-422 - Run-time stack check will fail when project uses separate interrupt stack
- SMRT-495 - Erroneous reserved size calculated in memory usage section
- SMRT-529 - Header file Ifx_TypesReg.h does not support C++ compiler usage
- SMRT-552 - Incremental linking breaks weak definition replacement for references in same object file
- SMRT-585 - TriCore compiler does not warn about an extern __uncached__ variable declaration
- SMRT-704 - Invalid floating-point transformation x - x == 0
- SMRT-711 - Function strcpy() can produce bus interrupt
- SMRT-712 - Intrinsic function __builtin_strcpy() can produce bus interrupt
- SMRT-713 - Function strcmp() can produce bus interrupt
- SMRT-715 - Assembler emits an invalid call when the offset between functions at fixed addresses (__at) is too large
- SMRT-717 - Common debug info section generated by C compiler may contain references to code sections
- SMRT-723 - C compiler: missing cast to short
- SMRT-724 - C Compiler: ctc F112: register allocation failed
- SMRT-730 - Erroneous spilling of 64-bit variables
- SMRT-732 - C Compiler: incorrect result of comparison
- SMRT-733 - C Compiler: S900: internal consistency check failed
- SMRT-734 - C Compiler: ctc S900: internal consistency check failed with simple loop
- SMRT-735 - Erroneous code generation for a specific use case
- SMRT-737 - Erroneous code due to a missing cast in a specific use case
- SMRT-739 - Wrong result for signed right shift-and with immediate values
- SMRT-744 - ARC linker rejects object files with zero e_flags field when targeting TC4Dx
- SMRT-747 - Incorrect sign extension for compound operation on bit-field with -OE
- SMRT-749 - Incorrect constant folding with __sat types
- SMRT-751 - Store merging may give wrong result
- SMRT-757 - High byte missing from short with --mil-split
- SMRT-759 - Erroneous code for do-while loop
- SMRT-762 - Header file stdarg.h includes the undocumented data types __builtin_va_list and __builtin_va_arg
- SMRT-765 - PPU compiler calculates wrong iteration count for some do-while loops
- SMRT-773 - Compiler reports false positive warning W529 for a use case
- SMRT-776 - C compiler error S911: internal consistency check failed for a use case using goto labels
- SMRT-778 - Compiler ignores cast in a specific use case
- SMRT-779 - C compiler should not issue warning W542: missing braces around initializer for a universal zero initialization
- SMRT-780 - C Compiler: pointer value overwritten
- SMRT-781 - C Compiler: incorrect shift calculation for long long cast int
- SMRT-783 - Scheduler incorrectly reorders loads and stores
- SMRT-787 - Read from union member incorrectly removed by optimization
- SMRT-788 - C Compiler: incorrect optimization of cast operation from int to short
- SMRT-789 - C Compiler: assignment in loop ignored
- SMRT-791 - HLL dump tool does not generate address information for struct members in array of structs
- SMRT-792 - Loop variable does not get initialized
- SMRT-797 - Linker does not verify a possible overlap in the section name in a section select statement
- SMRT-803 - Incorrect copy table code for unaligned destination in non byte addressable memory regions
- SMRT-809 - Loop with iterator wrap-around terminates prematurely
- SMRT-816 - Wrong code generation when pure functions are used
- SMRT-820 - Incorrect iteration count when iterator limit variables have very large values
- SMRT-824 - Jump threading can behave incorrectly when variables have their address taken
- SMRT-833 - Propagation error in some compile time constant computations involving loops with iterator wrap-around
- SMRT-834 - Safety and Cybersecurity Manual Errata
- SMRT-843 - C compiler error S900 internal consistency check failed when a function local non static __packed__ struct including an anonymous enum is used
- SMRT-844 - Inter-core symbol reference to 'uncached' variable may get address in cached range
- SMRT-847 - Incorrect code generation for a boolean test
- SMRT-850 - TASKING properties export does not include file/folder local settings
- SMRT-851 - C Compiler: initialization of an automatic struct member removed by optimization
- SMRT-874 - Packed structure is initialized with normal store instead of __unaligned store
- SMRT-885 - Forward store optimizes vector assignment incorrectly
- SMRT-891 - C compiler : error S900 internal consistency check failed
- SMRT-893 - C compiler generates invalid conditional arithmetic
- SMRT-894 - C compiler generates invalid arithmetic
- SMRT-896 - C Compiler : Aliasing not detected
- SMRT-902 - Missing cast to unsigned char
TASKING products are protected with TASKING license management software.
License key
You need a license key when you install a TASKING product on a computer. When you order a TASKING
product from TASKING or one of its distributors, a license key will be sent to you by email or on paper.
See the TASKING License Management (TLM) Support page
for information on obtaining a license.
Improved Verbose Logging
You can set the TSK_LOG_VERBOSE
option in licopt.txt
,
or as an environment variable, to different verbose levels.
With level 3 or higher, detailed license configuration information is shown, which
is useful for debugging licensing problems. For example, it shows the environment variables
or options used, the license key and the search path.
Support for wait for a free license
You can now set the TSK_LICENSE_WAIT
option in licopt.txt
to a
configurable time period to wait for a free license seat to become available instead of directly
terminating when a license request is denied.
Wait for Available Process
If your license specifies a maximum number of processes you are allowed to use,
you can set the TSK_PROCESS_WAIT
option in licopt.txt
,
or as an environment variable, to the parallel process time-out (default: unlimited).
This specifies the number of seconds the system is allowed to wait for a process to
run if the maximum number of parallel processes permitted by the license is already
running.
Better Support for Comments
In all license files (licopt.txt
, licdopt.txt
,
licfile.txt
, licdfile.txt
, licdaccess.txt
) you can
add comments, not only on a separate comment line, but also at the end of a line.
Comments start with the # character.