\section{MontiumC}
+\label{MontiumC}
Since having just a piece of hardware is not enough, we also need some way to
program the Montium. To this end, the MontiumC language was created. The
MontiumC language is a language very similar to C. It allows very fine grained
MontiumC: By using a normal C compiler, a MontiumC program can be functionally
simulated on normal hardware.
+On the other hand, MontiumC defines a number of special functions which are
+mapped onto the Montium ALU when compiling with the montium-specific
+backend. When compiling with a normal C compiler, these functions are
+implemented by a library implemented in C.
+
Figure \ref{CompilingMontiumC} show the flow for compiling a MontiumC program
into a Montium binary file, which can be loaded directly onto a Montium. The
process is roughly divided into two parts (each of which corresponds to a
different program in the compiler suite): The frontend and the backend.
The frontend takes in a MontiumC program and turns it into a lower level
-description of the program. The frontend is responsible for mapping higher level
+description of the program (LLVM Intermediate Representation, see the next
+section). The frontend is responsible for mapping higher level
C constructs onto simpler instructions, for canonicalizing and simplifying the
code. These canonicalizations and simplifications ensure that the backend can be
kept simpler and does not have to deal with all the complexities of the original