Supported ISA

xemu implements the RISC-V unprivileged ISA plus the privileged model, across both RV32 and RV64 via cfg_if.

Base + standard extensions

ExtDescriptionRV32RV64
IBase integer
MMultiply / divide
AAtomic (LR/SC + 9 AMO ops, .w and .d)
FSingle-precision float
DDouble-precision float
CCompressed
ZicsrCSR access
Zifenceifence.i

DTS advertisement: riscv,isa = "rv64imafdcsu_sstc".

Privileged ISA

  • M / S / U modes with full trap delegation (medeleg / mideleg).
  • Vectored and direct mtvec / stvec.
  • mret / sret with MPRV handling.
  • Sstc — S-mode direct stimecmp.

MMU

ModeSupport
Bare (identity)
Sv32 (RV32)
Sv39 (RV64)✅ — hardware A/D bit update
Sv48Descriptor exists; write to satp masks it off
Sv57Not wired
  • TLB: 64-entry direct-mapped, ASID-tagged, global-page aware.
  • PMP: 16 entries, TOR / NA4 / NAPOT, lock semantics, partial-overlap detection.

Float details

  • softfloat_pure — pure Rust Berkeley softfloat-3.
  • NaN-boxing for F operands when D is also active.
  • fcsr / fflags / frm are shifted subfield aliases of one canonical fcsr (see CSR subsystem).
  • mstatus.FS tracked as Off / Initial / Clean / Dirty, with SD recomputed on every mstatus / fcsr write.

What's not implemented

  • V (vector) — RVV is not supported.
  • H (hypervisor) — no HS-mode.
  • Zba / Zbb / Zbc / Zbs (bit-manipulation) — deferred.
  • Zicbom / Zicboz (cache management) — no caches modelled.
  • Svnapot / Svpbmt — not wired.

Instruction table

For the full per-mnemonic implementation status, see ../../spec/inst/SPEC.md.