\begin{abstract}
Recore Systems is working on the Montium architecture, which is a coarse grained
reconfigurable architecture, aiming at high flexibility, paired with low power
usage and high performance. For programming the Montium, a flavour of C was
developed, called MontiumC. MontiumC is a subset of standard C, providing a
library of builtin functions to access the extra features of the Montium.

The assignment of this internship focusses on improving the MontiumC compiler.
The main goal is to make the compiler consistently support all valid MontiumC
programs, instead of giving unexpected compilation errors when some (seemingly)
valid constructs are used in certain combinations.

As a first subtask, a specification of MontiumC was created. This specification
is still conservative, limited to the constructs that the compiler can
consistently support. The specification is not yet automatically checked, so
input that is outside of the specification might or might not work and will not
give the best error messages yet.

The MontiumC compiler heavily relies on the LLVM (Low Level Virtual Machine)
project, which provides libraries and code for compiler development. This
greatly simplifies the maintainance work for the compiler, but at the cost of
extra integration effort. Since the LLVM project mainly focusses on "regular"
architectures, its code is not always directly usable. This is mostly solvable
by adding extra extension hooks to the LLVM code, but sometimes local changes to
LLVM are still in use.

Outside of the original assignment, there was also some work on the new hardware
design, for the next generation Montium. Issues here centered around software
pipelining and code compression, and finding the balance between various
tradeoffs between flexibility, performance, complexity/area, code size). This
work was not finished within the internship, but provided a good learning
experience.

Currently, the MontiumC compiler is still far from perfect. There are plenty of
areas for improvement, including: Checking of specifications and improved error
messages, debug info (or line number) propagation to the backend, integrating
the (currently separate) backend codegenerator.
\end{abstract}
