Miguel de Icaza (miguel@{ximian.com,gnome.org}),
Paolo Molaro (lupus@{ximian.com,debian.org})
-
+ This documents overall design of the Mono JIT up to version
+ 2.0. After Mono 2.0 the JIT engine was upgraded from
+ a tree-based intermediate representation to a linear
+ intermediate representation.
+
+ The Linear IL is documented here:
+
+ http://www.mono-project.com/Linear_IL
+
* Abstract
Mini is a new compilation engine for the Mono runtime. The
CIL code on the fly to marshal parameters, and then this
code is in turned processed by the JIT engine.
+ Mono has now gone through three different JIT engines, these
+ are:
+
+ * Original JIT engine: 2002, hard to port, hard to
+ implement optimizations.
+
+ * Second JIT engine, used up until Mono 2.0, very
+ portable, many new optimizations.
+
+ * Third JIT engine, replaced the code generation layer from
+ being based on a tree representation to be based on a linear
+ representation.
+
+ For more information on the code generation changes, see our
+ web site for the details on the Linear IL:
+
+ http://www.mono-project.com/Linear_IL
+
* Previous Experiences
Mono has built a JIT engine, which has been used to bootstrap
application domains, or generate code that will not be shared
across application domains.
-* Objectives of the new JIT engine.
+* Second Generation JIT engine.
We wanted to support a number of features that were missing:
necessary that the JIT engine works in most of today's
commercial hardware platforms.
-* Features of the new JIT engine.
+* Features of the Second JIT engine.
The new JIT engine was architected by Dietmar Maurer and Paolo
Molaro, based on the new objectives.
temporary variables generated during the various
optimizations.
-** Instruction selection
+** Instruction selection: Only used up until Mono 2.0
At this point, the BURS instruction selector is invoked to
transform the tree-based representation into a list of
registers, fixed registers and clobbered registers by each
operation.
-* BURG Code Generator Generator
+* BURG Code Generator Generator: Only used up to Mono 2.0
monoburg was written by Dietmar Maurer. It is based on the
papers from Christopher W. Fraser, Robert R. Henry and Todd
processors, and some of the framework exists today in our
register allocator and the instruction selector to cope with
this, but has not been finished. The instruction selection
- would happen at the same time as local register allocation. <
\ No newline at end of file
+ would happen at the same time as local register allocation. <