Skip to content
Andrey Eliseev edited this page Jul 24, 2026 · 18 revisions

Welcome to the CDM-16 LLVM wiki!

Here you can find general information about the project, technical details, CDM-specific API docs and some step-by-step guides.

What is this project

CDM-16 is an educational RISC processor architecture created at Novosibirsk State University for studying at the digital platforms course. Development is primarily done in the cdm-processors GitHub organization. The main way of programming for the CDM-16 processor is in assembly, using Cocas, an assembler/linker written in Python specifically for CDM-16. It is part of cdm-devkit, the official toolchain for the CDM processor family.

There has been an ongoing effort to build a fully-fledged C compiler targeting CDM-16 based on the LLVM compiler infrastructure. This project is the latest iteration.

Features

The C compiler has the following notable features:

  • two target triples with different compilation drivers
    • cdm-cocas - uses Cocas for assembling and linking, compatible with existing projects
    • cdm - independent from Cocas, uses common formats (GNU assembly, ELF objects), much more flexible
  • support for von Neumann and Harvard memory models
  • support for CDM-16 ISA extensions
  • standard library (startup code, software arithmetic, freestanding subset of libc)
  • platform-specific API headers (special registers, interrupts, processor state)

Each of these features is covered in a separate page of this wiki.

Rust compiler

In addition to the C compiler, there is also an experimental version of the Rust toolchain based on the CDM-16 LLVM backend. It is already working well enough to write non-trivial programs with relatively little friction. It is located in a separate GitHub repository: ylab-nsu/cdm16-rust.

Clone this wiki locally