a³ release 23.04

Improved dependencies editor

Improved memory usage

Improved statistics

Improved TraceVisualizer

New targets

  • StackAnalyzer, ValueAnalyzer, and TimingProfiler are now available for RL78.
  • Initial support for the analysis of dynamically linked ELF executables for ARM, PowerPC, RISC-V, and x86.

Qualification Support Kits

  • New QSKs for StackAnalyzer for ARM with the instruction sets AArch64 and generic.
  • The driver program to run QSK packages has been renamed to qualify.
  • Fixed the content of compiler command line in TOVVCP of compiler-specific QSK packages.
  • Improved wording with respect to high-level requirements.
  • Added a description of the QSK test structure strategy.
  • New test cases:
    all architectures
    qk_setting_extract_constant_memory_regionsall except C16x
    qk_setting_trace_snippetsall generic TimeWeaver packages
    qk_setting_extract_annotations_from_executablesARM and PPC
    qk_setting_traceformat_lauterbach_branchflowARM and PPC (TimeWeaver)
    qk_setting_unsupported_instruction_valuex86, i386, dsPIC (StackAnalyzer)
    AURIX TC377
  • The test case qk_ais2_context_specification_trace_partitioning now covers local partitioning and performs additional checks.
  • The test case qk_setting_cache_specification now covers the line size attribute.
  • Fixed expected memory-type name in qk_setting_output_object_size_statistics_mpc5777c.
  • Updated generic AIS2 test cases for MPC5777C.


  • Significantly improved support-archive generation for large and very large projects.
  • Comparing projects (via Project → Compare projects…) now takes configurations into account.
  • The analysis overview now offers more optional columns, including last analysis results and maximum memory consumption.
  • Improved handling of messages with multiple locations.
  • The Memory Usage view now also shows the available physical memory.
  • Improved handling of license-server network connection issues.
  • Improved handling of paths containing a comma in XTC.
  • Improved handling of configurations.
  • In AIS file editors, the new button “select affected analyses” selects all analyses influenced by the currently edited AIS file. This includes all analyses which use or include the AIS file in question, as well as analyses that depend on the analysis results. The selected analyses can then be easily rerun by pressing Play.
  • The Analysis Dependencies editor now shows both dependencies and dependents.

Visualization and results

  • Now reporting multiple annotation locations for area contents specified through different contains data annotations.
  • Faster switching between contexts in the context-selection view for interactive value and pipeline analysis.
  • The context-selection view can now be hidden from within interactive value and pipeline analysis views.
  • Improved handling of blocks with multiple associated source files.
  • Improved annotation target context menus when many locations in the CRL graph are affected.
  • The WCET and variable usage per context in the Statistics view now displays its data as a flame graph.
  • The interactive value analysis allows searching for locations that change the value of a register or memory cell.
  • Improved representation of graph search results.
  • Better visualization of feasibility states in the graph search results.
  • A running interactive value analysis can be used to query the contents of const variables in the Symbols view.


  • Decoding statistics in XML reports now include (unresolved) computed returns.


  • Improved visualization.
  • Improved search filter.
  • A specific event can now be examined in more detail either by double-clicking on it or via a dedicated context menu entry.
  • In the flame graph, the first and last trace line is now shown for each task instance.
  • Improved handling of large data sets.


  • Any program point specified by the entry annotation will now be considered as entry point to decode when performing an analysis for “All functions” or “All code labels”.
  • Labels may now be defined by means of symbolic expressions:
    # define label whose name is given by the analysis ID
    label attribute("analysis_id"): 0x1000;
  • New functor concat(arg_1, ..., arg_n) for constructing symbol names:
    # define labels for interrupt service routines 
       for ("i" : 0 to 255) {
           label concat("ISR_", var("i")): 0xf0000000 + (0x20 * var("i"));
  • It is now possible to use the result of a computation in other analyses, e.g. to create a dependency via a takes annotation.


  • Decoding statistics now include the number of instructions that read from or write to memory.
  • Decoder patterns that rely on symbol-table or debug information are now classified as unsafe.
  • Improved detection of the CompCert compiler.

Value analysis

  • Reduced memory consumption.
  • Improved handling of registers with sub-registers.
  • Improved precision for copies of registers with sub-registers.
  • Faster value analysis for x86_64.
  • Faster loop analysis.
  • Now allowing the width functor to be evaluated during the value analysis phase.
  • The value analysis now reports whether a function becomes (fully) backwards infeasible.


  • Improved extraction of global datatypes.


  • Improved automatic switch table decoding.
  • Stack pointer guessing for flat and long mode.
  • Info messages about guessed/specified stack pointer and specified stack area.
  • Relaxed restrictions for assignments to segment registers in 32-bit flat mode and 64-bit long mode.
  • Am486/i386: Improved handling of expand-down segments.
  • x86-64: Improved decoding of computed calls via function pointer arrays.
  • x86-64: Improved automatic decoding of two-dimensional function pointer arrays.


  • Instruction support extended up to ARMv9.3, with certain exceptions listed in the user manual.
  • Improved switch table decoding for Clang.


  • Improved automatic decoding of computed control-flow transitions.
  • Improved switch table decoding for TI.


  • Improved automatic decoding of computed control-flow transitions.
  • Improved switch table decoding for Tasking.

Cache and pipeline analysis

  • e200: Redirect usage of memory type SRAM_A or SRAM_B to SRAM.
  • TriCore AURIX 2nd GEN: Improved handling of core-local DLMU memory accesses and of fast call/return operations.


  • More flexible selection of trace snippets to extract.
  • Timing annotations for routines and loops.


  • Improved handling of routines that contain endless loops.
  • Improved handling of tasks that have been interrupted during execution and can be called again by the interrupt handler.