TASKING SmartCode v10.4r1
Release Note
Scope
This release note covers release v10.4r1 of TASKING SmartCode.
For release notes prior to v10.4r1, please visit the TASKING
SmartCode support website.
Contents
This is the fourth 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).
- 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 AURIX TC4x devices that are currently (or soon will be) available, i.e. TC45x, TC46x, TC48x, TC49xA, TC49xN and TC4Dx.
- 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.
- 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 you can start it from the TASKING Eclipse environment.
- Note 1: The winIDEA debugger version 9.21.356 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.
The included version of winIDEA requires an unlock key for TC4Dx devices. Later versions with a TC4xx devices update do not require an unlock key.
- Note 2: When you want to start a debug session for device TC45x, TC46x or TC48x, be aware that from the launch configuration in Eclipse
you need to select Preset the PC to application's entry point in the After download radio button on the TASKING winIDEA tab.
The default selection Start boot core normally does not work yet.
- Note 3: 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 2025-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.
- The Eclipse/CDT distribution supports the Eclipse Martketplace, where you can install specific solutions, such as e.g. GitHub Copilot.
All executable files in this release have the following build number: Build 25100274.
TriCore toolset updates
TriCore C++ compiler improvements and optimizations
- The TriCore C++ compiler supports the ISO C++17 standard.
- The TriCore C++ compiler supports individual aligned struct members.
TriCore C compiler improvements and optimizations
- The TriCore C compiler supports a new set of intrinsic functions to calculate the absolute difference of two values. The new available intrinsics are:
__absdif(), __absdifb(), __absdifh(),
__absdifs() and __absdifhs().
- The TriCore C compiler has a new optimization
-Oj/-OJ to control advanced jump threading.
- The TriCore C compiler has a new optimization
-O+unswitch/-unswitch to move loop invariant conditions outside of the loop.
TriCore linker updates
- LSL macros that users can define to configure LSL files are all documented in a comment block at the start of
each device specific LSL file.
- An LSL section selection specifier
group=<name> is introduced to select the ROM copies of the initialized data sections
in the referenced LSL group, in the same order, and to emit an error if one of the ROM copies could not be selected. Due to this change, for LSL files with address spaces that do not have any connected memory,
more checks are now done. For example, multiple copy tables in a separate LSL core did not cause an error if the additional copy tables were in address spaces without any memory, while with this release, the error message "ltc F017: an internal error occurred: setting copytable twice" is issued.
- Next to the existing functionality of assigning data or code sections by using the section name in a LSL group,
the TriCore linker supports making a selection by object or archive filename in LSL.
TriCore SFR updates
- The SFR header files for devices TC46x and TC48x are added to the product.
ARC toolset updates
ARC C++ compiler improvements and optimizations
- The ARC C++ compiler supports the ISO C++17 standard.
ARC C compiler improvements and optimizations
- The ARC C compiler supports intrinsic functions
__lr() and __sr() to load from and
store to auxilary registers respectively.
- The ARC C compiler was improved by making auto-vectorization predominate over loop fusion.
- The ARC C compiler has a new optimization
-Oj/-OJ to control advanced jump threading.
- The ARC C compiler has a new optimization
-O+unswitch/-unswitch to move loop invariant conditions outside of the loop.
ARC Libraries
-
The SmartCode product is extended with a native ARC/PPU library containing both mathematical functions and matrix functions,
optimized to make best use of the ARC/PPU. These functions can be categorized in:
- Element-wise basic vector operations.
- Basic linear algebra functions on complex vectors.
- Basic linear algebra functions on real matrices.
- Discrete filters and Fourier transformations.
- Element-wise operations on matrices.
For more information on the available functions, refer to chapter 12 Libraries of the the ARC/PPU User Guide.
- The native ARC/PPU math library is available for all supported TC4x devices having a PPU.
Note that you will need a license key for the Performance edition to unpack these libraries.
Other noteworthy updates
Device Support
- The SmartCode product supports new devices TC46x and TC48x.
- In contrast to most other devices of the TC4x family, the TC45x does have a single precision floating-point unit but it does
not have a double precision floating-point unit.
To support this different configuration a new option
--fpu=[no|sp|dp] was introduced, while it replaces obsolete options --no-fpu
and option --fp-model=+/-soft.
For applications targeting TC45x you must use option --fpu=sp, while for applications targeting the cyber security module you must use option --fpu=no.
When you do not specify the option, the default --fpu=dp is used.
In the linker, separate core architectures TC1V1.8_DPFPU, TC1V1.8_SPFPU, and TC1V1.8_NOFPU are now available. In a custom LSL file based on an older release, you can replace architecture TC1V1.8 by TC1V1.8_DPFPU. The exception is the cyber security core, which should get architecture TC1V1.8_NOFPU.
Note that when you use the control program together with the --cpu option, it will take care of providing this option correctly.
PPU Run-Time Environment
- The PPU Run-Time Environment is made more configurable by allowing the user to specify which TriCore cores will use the RTE and which of those cores
will startup the RTE. Only for the cores that are used by the RTE a notification interrupt handler will be setup. The user specifies which of these cores
handles the PPU Inter Core Interrupt. Interrupt priorities have a default that can be changed by the user. The used software interrupts have a default
value the can be changed by the user.
- For the PPU Run-Time Environment to perform well, it is required the clock is set up correctly. For that reason, the rte_multicore_demo example was
extended to show how to properly initialize the clock using AURIX iLLD drivers.
- The PPU Run-Time library is available for all supported TC4x devices having a PPU.
Note that you will need a license key for the Performance edition to unpack these libraries.
Eclipse Improvements
- In generated makefiles, absolute paths as used for linked files and folders are replaced with relative paths using macros WORKSPACE_LOC, ECLIPSE_HOME,
PARENT_LOC and PROJECT_LOC when possible. These macros are defined in the header of the top makefile.
Safety Manuals Improvements
- Annex C about requirements tracing to EN 50657 has been updated to the newer standard EN 50716.
- Annex G about requirements tracing to IEC 62304 was added to the safety manual.
Fixed Problems
- SMRT-405 - Unclarity about the interpretation of Safety Manual guideline "Verify object file"
- SMRT-487 - C compiler: VLA: error S911: internal consistency check failed - please report
- SMRT-512 - Refer to another project information in getting started manual is incomplete
- SMRT-554 - Structs including function or data pointers are not initialized in a PIM application
- SMRT-760 - HLL object dump tool generates multiple label entries for static functions with the same name in ADX output
- SMRT-810 - Missing diagnostic for an empty include file name
- SMRT-811 - Missing diagnostic for *&non_lvalue
- SMRT-812 - Constant expressions are more general than defined by the C standard
- SMRT-813 - Missing diagnostic for some cases with name redeclaration
- SMRT-814 - Missing diagnostic for some uses of the _Alignof operator
- SMRT-891 - C compiler : error S900 internal consistency check failed
- SMRT-909 - Compiler errors E276 and E333 using designated initializers with a non constant value
- SMRT-915 - Compiler error S911 internal consistency check failed
- SMRT-916 - Wrong type conversion in SIMD codegen
- SMRT-920 - Aliasing not detected for static variables
- SMRT-921 - Aliasing issue for struct/union argument passed by value
- SMRT-922 - Wrong type conversion for signed/unsigned char data type
- SMRT-924 - Incorrect forward store optimization
- SMRT-926 - Missing MISRA C:2012 rule 9.1 violation error for conditional initialized automatic with -OP
- SMRT-927 - Modified static variable is not written back
- SMRT-933 - Long symbol and section names are spread across multiple lines within a map file
- SMRT-942 - CPU functional problem bypass checkboxes do not show actual selection for TC49x
- SMRT-950 - Unexpected MISRA C:2012 rule 10.4 violation when enum with 2 elements is used in a comparison
- SMRT-955 - C++ compiler run-time problem using variable length array (VLA)
- SMRT-956 - Passing struct to function not by value
- SMRT-958 - Incorrect aliasing analysis of restrict pointer expression after PRE
- SMRT-961 - Erroneous struct size using __packed__ attribute in a type definition
- SMRT-965 - Wrong loop iteration count for do ... while loop with -t0
- SMRT-966 - Compiler is using a return from a fast call instruction where a return from a call instruction is required
- SMRT-969 - Incorrect optimization when using bitwise AND operator on an 8-bit variable at 255
- SMRT-972 - Linker fails to locate contiguous sections with alignment constraints using first-fit-decreasing strategy
- SMRT-978 - Linker: option --chip-output truncates data and code in hex files for successive memories
- SMRT-993 - Incorrect peephole optimization when using xor
- SMRT-995 - Incorrect peephole optimization when using the right shift and xor operation
- SMRT-999 - Alias not detected in C51 peephole optimizations
- SMRT-1001 - C compiler: TC4xx SFR file contains incorrect addresses for MCS
- SMRT-1002 - C Compiler: Wrong constant propagation when aliasing
- SMRT-1014 - Incorrect wrap-around behavior when converting from a 64-bit integral type to a 32-bit __sat type
- SMRT-1015 - Aliasing not detected for static variables
- SMRT-1021 - Pointer argument wrongfully marked as restrict by the compiler
- SMRT-1030 - Incorrect assumption on sign/zero extension information
- SMRT-1033 - Safety Manual qualified option remarks for --dep-file, --dep-format and --make-target
- SMRT-1035 - Undetected aliases generated by function calls on local pointers
- SMRT-1038 - Incorrect aliasing analysis of restrict pointer expression after PRE while strength reduction is disabled
- SMRT-1051 - Pointsto analysis can confused by aliases
- SMRT-1058 - Run-time comparison to a floating-point NaN returns true in some cases
- SMRT-1060 - Compiler ignores __sfrbit16 keyword and emits byte access instead of halfword
- SMRT-1067 - Identical calls or other side effects can be dropped in a range test
- SMRT-1068 - Erroneous C compiler error ctc E231: expression must be constant or S900 internal consistency check failed error
- SMRT-1084 - C compiler error S900 for specific use case
SMRT-891 was errornously not included in v10.3r1 but is now included in v10.4r1.
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.
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 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.
See section Wait for a Free License
in the TASKING License Management online documentation.
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.