In conjunction with instruction set extensions it is necessary
to adapt a compiler. To preserve compatibility to existing
software it is obvious to modify an intermediate language
compiler. The main convenience of modifying an
intermediate language compiler for this purpose can be understood
by looking at the two-stage compiler chain of such
architecture. In contrast to conventional proceeding of
hardware compliant compiling, source code is first compiled
to hardware independent intermediate language,
which is later compiled to hardware specific instructions
just in time at first execution time. Intermediate language is
based on a virtual stack machine, therefore porting the
needed JIT compiler or interpreter to other target hardware
platforms like register architecture is basically possible.
Another advantage of using architectures like .NET is, that
most of the supported high level languages completely hiding
pointer functionality from the programmer cause of the
high error potential of handling pointer. Additionally buffer
overflows due to pointer abuse are prevented by implicit
bound checks before critical memory access. The insertion
of this software bound checks happens in the second compiling
stage while compiling intermediate language assembly
to hardware specific instructions. An assembly is an executable
file in .NET and contains code in an intermediate
format and Meta data information related to data types and
structure of the intermediate language code module. For
further considerations, it will be necessary to extract the
Meta data and deliver type related information to hardware.