Repository navigation
Vision
- Andrey Eliseev (@aelsi2, a.eliseev2@g.nsu.ru)
- Matvey Zenin (@proletcultist, m.zenin1@g.nsu.ru)
- Alexander Volk (@sxrose, a.volk@g.nsu.ru)
- Stepan Kuchenkov (@netscapenav, s.kuchenkov@g.nsu.ru)
CdM is a family of ISAs and their implementations used for educational purposes. These virtual processors and the surrounding ecosystem is in active use in the “Digital Platforms” course at NSU Faculty of Information Technologies (FIT). The ecosystem has seen many developments happening within various programs, courses, and educational events held by NSU FIT. One such development is maintaining and fixing the LLVM back-end for CdM-16 (as an llvm-project repository fork).
For now, CdM-16 LLVM back-end is tailored to compiling C programs. That means the only properly functioning compiler is clang’s C front-end. Not only that, while part of our team was working on the back-end many problems arose: tablegen code readability, undiscovered bugs, a hard-to-work-with testing system, and uncovered cases in existing tests. We think this project is a great opportunity to take the current back-end to the next level of maturity.
The first goal for the project is to compile and run Rust programming language programs on CdM-16. We take on this challenge for it to serve as a benchmark for back-end’s versatility and correctness. The second goal is to make the existing C compiler work out of the box without any workarounds. Our areas of work will be:
- Fixing known and new issues and bugs
- Refactoring of existing code
- Implementing subset of C standard library
- Rebuilding the testing system to ensure coverage of all possible IR-to-assembly translations and their correctness
- Hacking the rustc front-end
- Possibly developing new tools for testing and debugging the compiler and/or the platform
- Home
- LLVM targets
- Memory models
- ISA extensions
- Standard library
- Platform C headers
- Default linker scripts
- CDM ABI
- Getting started
- Setting up a project
- Using C and assembly together
- Memory-mapped IO
- Interrupt handlers