Tonight I hit a major milestone in that effort: 43 of 54 compiler tests are now passing. This is the result of dozens of bugfixes and a truly hideous amount of surgery on the JIT code.
Of the tests that still fail, there are four major classes of issue:
- Missing instructions, such as function pointer invocation or other specialized functionality (3)
- Missing library functions, such as operator implementations (3)
- Missing features such as marshaling into C libraries (and back out), global variables, specialized types, etc. (4)
- Bugs due to stripping out so much code at once (1)
Some of these, like missing library functions, are easy to fix; others, such as marshaling and function pointer invocation, will take more time and thought.
All in all, though, this is solid progress and I'm really encouraged. The code base is continuing to shrink and get cleaner, and the lack of a VM to maintain is making the future look very bright indeed.
My one big wishlist item right now is better debugging facilities; figuring out what's going on from disassembly listings is pretty painful at times. It's good low-level debugging practice, to be sure, but it's not exactly optimally productive most of the time.
Once the VM-less compiler is passing all its tests, I'll do some more final polish and look at shipping Release 14 just for fun.