Even though the underlying machine model of gcc
does not match very well with Fast,
the generated code is competitive with other RISC processors as well,
as is exemplified by other tests which will be published in [AH].
In this paper, we use the
Stanford Integer Benchmark suite [HN]
to compare the compilation of C on Fast with
compilation of C to specific implementations of MIPS and SPARC processors.
Overall, the performance of Fast is about the same as that of
the MIPS and SPARC processors.
However, this comparison also reveals some deficiencies of
the C compilation system for Fast:
The gcc compiler suffers from some shortcomings regarding the handling
of global variables.
They are not mapped into registers
although the compilers for MIPS and SPARC can do this optimization.
The re-organizer shows some deficiencies too.
While it is suited for
-Red
,
it is missing some opportunities for the code generated by gcc.
Performing some code re-organizations by hand on the critical loop
of one of the benchmark programs results in a speedup of 33%.
Fast demonstrates the advantages of a versatile stack-like organization
of the register file for the implementation of functional languages.
It provides more freedom for the compiler to use optimized parameter passing mechanisms
without the inefficiencies of fixed-size register windows.
Though tailor-made to support untyped functional languages
based on an applied
-calculus,
Fast can equally well be used as a target for the compilation of
other functional and imperative languages
as demonstrated here.