Skip to content

SDK v8.1.0

Compare
Choose a tag to compare
@github-actions github-actions released this 04 Dec 19:04
· 232 commits to main since this release

New targets

  • #250 - Atari 8-bit XEGS (bank-switched) cartridge support - @cwedgwood

New features

  • llvm-mos/llvm-mos#10 - Floating Point Support
    • llvm-mos now supports the float and double data types, with binary32 and binary64 IEEE 754 implementations, respectively. The soft float library comes from LLVM's compiler-rt, and it isn't very well optimized for the 6502. Printf support may be manually included by passing -lprintf_flt. Unfortunatly, at present, printf must operate over doubles, and the simulator is the only target large enough to support a full printf implementation. Work is underway to make this smaller.
    • All relevant llvm-test-suite end-to-end floating-point tests pass.

Optimizations

  • llvm-mos/llvm-mos#419 - Strict inlining costs
    • The inliner no longer forces inlining to occur when an indirect call can be elided. This happened with printf, which could cause up to a complete printf implementations to be duplicated up to four times.

Bug fixes

  • Ignore empty records in ABI: Empty unions could cause the compiler to crash.

Known issues

  • The floating point libcalls are huge; this suggests they should be kept out of LTO, since ultimately unused libcalls present in LTO can still end up permanently bringing things in. Unfortunately, libcalls must be either fully included in LTO or fully excluded, since they are implicitly treated as __attribute__((leaf)). I opted for the latter, which means that this release regresses performance of large libcalls, since they can no longer use the zero page or static stacks. Work is underway to provide better stripping for unused libcalls, which will allow us to summarily pull in all libcalls to LTO in a future release.

Misc