43 lines
2.1 KiB
TeX
43 lines
2.1 KiB
TeX
\section{Problem Statement}
|
|
|
|
Writing a native code generator for any language is a significant
|
|
investment, especially for todays modern processors with require extensive
|
|
compiler support to achieve high performance. The algorithms that must
|
|
be used to generate high quality code are complex, sometimes quite
|
|
delicate, and require substantial infrastructure.
|
|
|
|
\image{Retargeting compiler}{pictures/png/uncol2.png}{align=right}
|
|
A specific architecture has a
|
|
relatively short life time in relation to the time taken to build
|
|
the code generator, and one quickly needs the ability to retarget
|
|
to new versions of the architecture, or to different target
|
|
architectures. This is by no means an open problem. There are many
|
|
compilers today that target multiple architectures, however the
|
|
quality of code varies. For example,
|
|
\begin{color}{red}\begin{Italics}lcc\end{Italics}\end{color}
|
|
by Chris Fraser and David Hansen does
|
|
no back end optimizations;
|
|
\begin{color}{red}\begin{Italics}gcc\end{Italics}\end{color}
|
|
from the Free Software Foundation does extensive peephole and simple
|
|
data flow optimizations, and falls short on advanced superscalar
|
|
optimizations; and finally the
|
|
\begin{color}{red}\begin{Italics}IMPACT\end{Italics}\end{color}
|
|
compiler done by the Impact group at the
|
|
University of Illinois specializes in more advanced superscalar
|
|
and predicated architectures.
|
|
|
|
\br{clear=right}
|
|
|
|
\image{UNCOL?}{pictures/png/uncol.png}{align=left} Assuming
|
|
the retargeting issue is solved, one would like to use all the
|
|
developed infrastructure for multiple source languages. This
|
|
problem is far from solved; even though \italics{gcc} has been used
|
|
for multiple languages like Ada, Pascal, and Modula III, each of
|
|
these have similiar execution models or were forced to adopt C
|
|
conventions. \italics{gcc} cannot be used directly for languages
|
|
such as Lisp, Smalltalk, Haskell, or ML that have radically
|
|
different execution models and special requirements to support
|
|
advanced language features.
|
|
|
|
|