Code:
Testing Time: 13.99s
Passed: 1224
All 1224 relevant LLVM SingleSource test cases now compile at -Os and execute with the correct output under the SDK's 6502 simulator.
This includes quite a few of the tests with a 32-bit integer dependence; I repaired as many as I could to work in a 16-bit integer context.
What this means is that a good amount of highly varied code now can compile in one specific configuration of the compiler: -Os optimization mode, allowing compiler use of the entire zero page, and a specific set of linker scripts. In particular, this doesn't mean that any other configuration (including -O0) works very well, that the compiler is C99 compliant, that the compiler has no bugs, fewer bugs than cc65, or any other such thing. We'll also reserve the right to break the ABI at any time until we declare a formal v1.0 (using Semantic Versioning, that's quite a ways off).
The reason I'm saying all this is because the compiler is considerably more reliable than it was, probably reliable enough to try out, if you really wanted to. Some folks (mrk and company) are hacking on a rust port for instance, and the recent weeks-worth of bugfixes have unblocked a lot of their work. You'll need to be comfortable compiling the SDK yourself if you want to generate target binaries, as we don't have any release automation set up around it yet. I don't know of any other major issues on the C99 path though, so long as you keep usage within the scope of what we've tested.
If you do try it out, please do report any issues you find, and please do refrain from making extensive performance comparisons between this and cc65/vbcc. We literally haven't even started looking at the optimization story yet beyond the early "is it possible" work; all our focus is still on getting the compiler well-tested and functionally complete. The generated code is absolute crap compared to what I'd consider acceptable for a first release. For example, it compares integers by XORing all the bytes together, not because that's a sane thing for a 6502 compiler to do, but because that was the fewest lines of LLVM legalizer code required to get a working version of integer comparison.
From here, we'll be working to automate releases on the SDK and tests in the test suite, expand coverage to other optimization modes, and audit the compiler's passes to make sure we didn't miss anything. From there, we do still need to hammer down the semantics of inline assembly, since that's the only "special" (i.e. we have to do something for it to work) GCC extension we're planning on supporting for the first release.
Once all that's done, we'll need to get a few key automated benchmarks working, so we can have an objective measure of executable performance. From there, initial performance optimization will begin in earnest, in preparation for our first release.
It's been a long road from there to here, and there's still a long way to go before our first official release. Stay tuned!