O.k. I have been going incrementally and have just finished the register allocator. I built the compiler on an optimization framework which took a little more work than I expected but things have been going good so far.
My test code base is the L440GX ram initialization in C, that I wrong a while ago. With a small change smbus_read_byte so that it does not take a pointer argument but instead does the classic getchar trick for return a status and a data byte in the same return value.
So far it compiles it all with just 8 registers except for 2 lines of code. So a little bit of tweaking of will probably be called for.
I will publish the code as soon as I have it generating x86 assembly. The big thing I want to measure now is how much of a code size increase all of that unconditional inline gives. If it significant I have a optimization on the back burner that will not inline a function if there are sufficient registers available to call it out of line.
Upgrading the compiler to optionally use the MMX and/or the SSE registers for additional storage should take about an hour. The generic code really does not care. Of almost as much usefulness I have not yet implemented constant propagation which should reduce the register pressure as well.
The compiler itself is probably not especially shareable with other projects as it first and foremost optimizes register usage. But I don't think it will be a major maintenance burden either. So far it comes to about 8000 lines of code with a noticeable chunk of that being code to dump the the various forms of intermediate code. Though I expect it to probably stabilize around 10000 lines of code.
My tentative name for the compiler is romcc. If anyone has a better one I'm all ears. So far romcc is the only name I have thought of that someone else isn't already using.
Eric