Hello,
I'm working for an R&D organization of STMicroelectronics. Within our
team we have decided to write a gcc back-end that produces CIL binaries
(compliant with ECMA specification, see
http://www.ecma-international.org/publications/standards/Ecma-335.htm).
Our main motivation is the ability to produce highly-optimized CIL
binaries out of plain C code (and C++ in the future), and possibly to
add some optimizations to improve, if needed, the quality of the
generated code.
There are other open source projects that come with a C to CIL compiler,
but none is comparable with gcc in terms of program optimizations.
In CIL, the semantic of a program is expressed in the form of a bytecode
executable by a stack-based virtual machine (similarly with how Java works).
As a new port, CIL substantially differs from the "typical" gcc target.
For instance, RTL representation seems inappropriate since the virtual
machine lacks registers, stack frames, ecc. and since RTL itself lacks
high-level information (classes, methods, fields, exceptions...)
required by CIL.
In other words, compiling for CIL demands a more high-level intermediate
representation, which gimple looks to match quite closely.
Therefore, we think that the best way to target CIL is to cut gcc
compilation flow at gimple level and to provide the simplest machine
description that doesn't break gcc and that meaningfully drives the
heuristics of the tree passes.
Every so often CIL looks to poke in the works of the mailing list, but I
haven't been able to track the current status of the discussion on the
topic.
What do you think about such a port? Are there any people interested?
Of course, opinions, suggestions or any sort of feedback are highly
appreciated.
We would be glad to share our development.
Cheers,
Roberto