Can we have details on what subset of c89 you've implemented? I wrote
a jvm backend for GCC back in '98 and the result was extremely poor
performance of output. The big problems if I remember correctly were:
* implementing pointers sensibly is hard
* the JVM's lack of unsigned types makes compiling C code with
unsigned types in it very inefficient (you need to boost all those
unsigned 32 bit types to signed 64 bit ones to get anywhere)
* doing a sensible class division is hard, so you end up with a
few large classes instead of a lot of small classes, and the JVM isn't
optimised for this.
Of course, if you're changing the JVM in any way or making your own
JIT that is closely tied to patterns in your code generation then
you're just cheating