\section{Goals and Strategy}
\label{introduction}

The goal of this project is to improve execution time of {\bf Hermes}
object code by recoding {\bf Hermes} target language instructions in
{\bf C}.

Ancillary goals are:

\begin{itemize}
\item Apply optimization techniques to further improve the code.
\item Preserve the interpreter interface of object code, so as
to enable continuing use of built-in capabilities, such as
profiling, and to permit convenient testing of novel imple-
mentations (e.g. hash-tables).
\item Reduce the overall size of the object code.
\end{itemize}

The strategy proposed to achieve these goals has two
major parts.

{\bf Program Preparation}

\begin{itemize}
\item Transform the {\bf li}-coded {\tt program} into a
residual {\bf li}-coded {\tt program}
and a {\bf C}-coded function.
\item Compile and link the {\bf C}-coded module.
\item Combine the residual li-coded {\tt program} with the
{\bf C}-coded object module.
\end{itemize}

{\bf Program Execution}
\begin{itemize}
\item Add the combined object module to the interpreter
by dynamic linking.
\item  Pass control to the appropriate part of the {\bf C}-coded function
of the combined object module as necessary.
\end{itemize}

{\bf Implementation Policy}
\begin{itemize}
\item Code is not reordered.
\item All improvements are local, except where global improvements
can be made without flow analysis.
\item Improvements are conservative.
\end{itemize}

