OPTIMIST Framework Download and Installation Guide

The OPTIMIST framework with complete source code and example xADML specifications for ARM9E, ARM9E Thumb, MC 56K DSP and TI C62x, installation guide and documentation, is available on this page.



In order to compile and use OPTIMIST you will need the following software: The framework was successfully compiled with Intel 8.0 compiler and GNU gcc 3.4.3 and 4.0.2. It was tested on Linux and on Windows machines under cygwin.

Remark: The OPTIMIST distributions includes the LCC compiler 4.2. You can download the official LCC version from the LCC home page.


It would be interesting for us to know who downloads and uses OPTIMIST.
Please send a short email to Christoph Kessler (chrke@ida.liu.se).
If you wish to be informed about future new releases of OPTIMIST, please let us know.


Unpack the source file into a directory. OPTIMIST will need to refer to that directory, which is done by mapping it to an environment variable $OPTROOT. For instance, if that directory is /home/agina/src/optimist, make the variable $OPTROOT point to that directory:

bash: export OPTROOT=/home/agina/src/optimist

tcsh: setenv OPTROOT /home/agina/src/optimist

Also, the following environment variable should be set: tcsh: export XERCESCROOT=/usr/local/xerces-gcc-2.7.0

To compile the OPTIMIST framework into /home/agina/build/opt (make sure that this directory exists), issue the following make command:

make BUILDDIR=/home/agina/build/opt HOSTFILE=etc/linux.c -C $OPTROOT/lcc-4.2 -f ../optcg/makefile.opt


OPTIMIST is a retargetable framework. The processor architecture is specified using our xADML specification language. We provide three example specifications: for the ARM9E processor (David Landén's master thesis), the Motorola DSP 56K processor (Yuan Yongyi's master thesis), and the Texas Instruments TI-C62x clustered VLIW DSP family (prototype):


We recommend Andrzej Bednarski's PhD thesis as comprehensive documentation of the (2006) prototype version: The xADML specification for ARM9E is described in Further publications on OPTIMIST can be found on the OPTIMIST project homepage.


The OPTIMIST framework generates time-optimal code at the basic block level. To see the command-line options that you can pass to OPTIMIST, issue the following command (in your /home/agina/build/opt directory):

./rcc -target=opt -? <file.c>

where <file.c> is the source C file.

Usage of options:

-archi=<XML file> Specify target architecture file.

-vcg Generate DAGs in VCG format.

-dot Generate DAGs in dot format.

-bb=<n> Generate code for BB number n.

-hs=<n> Heuristic: at each z generate at most n variants.

-ts=<n> Heuristic: at each stage generates at most n transfers.

-verb=[1,2,3,4] Verbosity level.

-? Show this help.

-emitter:mnemonic Prints the mnemonics instead of FORMAT assembler

-emitter:debug Prints mnemonics next to the assembler

-opt_c_debug Shows calls to back-end events

-arm_asm Assembler directives and declarations for ARM

Generates ILP data

Remove DDEP and LINK edges (resulting code might be erronous)


To compile the second basic block of the source file foo.c for the arm9e architecture, issue the following command:

./rcc -target=opt -archi=arm9e.xml -bb=1 -arm_asm foo.c


The OPTIMIST framework includes the LCC compiler and hence the license for LCC applies accordingly.


Comments and suggestions are welcome!

Please send bug reports to Mattias Eriksson (mater @ ida.liu.se).

Christoph Kessler. Page last updated: 2011/06/29