By Guodong Xu (docularxu) | Upstream RVA23 contributor | RISC-V International Advocate | Patches | About

Sister pages: RVA23 Linux v7.0 Coverage Analysis · RVA23 Kernel Support Evolution

RVA23 Extension Software Stack Matrix

Which software layer needs to change to support each RVA23 extension?

Why RVA23 matters — the ISA milestones at a glance

RVA23 is the release where the RISC-V Application Profile reaches Armv8.0–v8.4 baseline parity for phones and servers. Inside the ISA profile itself, the headline upgrades are:

Several adjacent features that vendors typically bundle with "RVA23-class" products are not in the ISA profile and so do not appear in the U64 / S64 matrix — in particular AIA (see the dedicated AIA tab for Smaia/Ssaia/IMSIC/APLIC breakdown), IOMMU, RAS, ACPI / DT bindings, SBI v2.0+. See also the Platform-layer items not covered block at the bottom.
Arch. state class — does this extension add architectural state? (5-way refinement)

Cross-cutting with the software-layer view: which extensions add architectural state — registers or CSRs the OS must save/restore on context switch? The primary axis is binary (with vs without), grounded in the RISC-V Privileged Architecture spec's own state-tracking machinery (mstatus.FS, mstatus.VS) and the Smstateen/Ssstateen mechanism. The without side splits further into instruction-additions vs pure capability advertisements.

State class Examples Spec basis
Without architectural state — no OS save/restore needed
insn-only M, A, C, B, Zba, Zbb, Zbs, Zcb, Zicond, Zicbom, Zicboz, Zihintpause, Zawrs, Svinval, Zifencei, Zacas, Zabha, Zbc… Adds new instructions that compute on existing GPRs / memory. No new persistent state. Bitmanip rationale (B): "do not add any new architectural state." Same logic for HINTs, CMOs, atomics, fence variants.
property Zic64b, Za64rs, Za128rs, Ziccamoa, Ziccif, Zicclsm, Ziccrse, Zkt, Sv39, Sv48, Sv57, Svnapot, Svpbmt, Svade, Svadu… Named-feature / capability extensions — assert one architectural guarantee (cache geometry, atomicity rule, page-table mode value, timing property…) and add neither instructions nor state. Pure discoverable bits; hwprobe(2) reports them as flags, not feature tests.
With architectural state — OS must save/restore on context switch
fp F, D, Zfh, Zfhmin, Zfa, Zfbfmin mstatus.FS (Priv Arch §3.1.6 — "Floating-point context Status"). FPU register file f0–f31 + fcsr; spec rationale: "using dirty bits on floating-point register file state can reduce context-switch overhead."
vector V, Zvbb, Zvfh, Zvfhmin, Zvkng, Zvkt… mstatus.VS (Priv Arch §3.1.6 — "Vector context Status"). Vector register file v0–v31 + vstart, vl, vtype, vxrm, vxsat, vcsr.
csr-only H, Ss1p13, Sstc, Ssaia, Supm, Ssstateen, Sdtrig, Sscofpmf, Zicfilp, Zicfiss, Zkr Per-extension new CSR(s) or new bits in existing CSRs — no new wide register file. Many require an {m,h,s}stateen0..3 enable bit (Smstateen/Ssstateen spec §3) or have their own access-gating bit in menvcfg/senvcfg.
The 5-way scheme is an engineering refinement — not normative spec terminology. The binary split (with / without state) is anchored in mstatus.FS/VS and Smstateen; the further insn-only vs property split has no single canonical name but matches the operational reality: property extensions are invisible to compilers and userspace, only observable via discovery (e.g. Linux hwprobe). State class is orthogonal to the "Layer" column — e.g. F is fp but software-layer full-stack; Zicbom is insn-only but software-layer kernel. Hover any state tag in the table below to see its individual spec citation.
None (transparent)
Compiler
Kernel
Userspace libs
Full stack

Mandatory Extensions

Extension Description Instructions? CSRs? Arch. stateDoes this extension add architectural state?
I.e. registers or CSRs the OS must save / restore on context switch.

Without state — no save/restore:
  • insn-only — adds instructions only (compute on existing GPRs)
  • property — adds neither instructions nor state; pure capability bit (e.g. cache geometry, atomicity guarantee)
With state — OS save/restore needed:
  • fp — extends FPU state, tracked by mstatus.FS
  • vector — extends vector state, tracked by mstatus.VS
  • csr-only — adds new CSR(s) or bits, but no new wide register file
Hover any tag below for the per-extension spec citation. Full reference card is the collapsible section near the top of the page.
GCC march LLVM march Linux kernel Layer Notes

Optional Extensions

Extension Description Instructions? CSRs? Arch. stateDoes this extension add architectural state?
I.e. registers or CSRs the OS must save / restore on context switch.

Without state — no save/restore:
  • insn-only — adds instructions only (compute on existing GPRs)
  • property — adds neither instructions nor state; pure capability bit (e.g. cache geometry, atomicity guarantee)
With state — OS save/restore needed:
  • fp — extends FPU state, tracked by mstatus.FS
  • vector — extends vector state, tracked by mstatus.VS
  • csr-only — adds new CSR(s) or bits, but no new wide register file
Hover any tag below for the per-extension spec citation. Full reference card is the collapsible section near the top of the page.
GCC march LLVM march Linux kernel Layer Notes
Platform-layer items not covered: RVA23 is a CPU-ISA-only profile. The following components are required by RISC-V platform specs (Server Platform, BRS / EBBR / SBBR) but are not part of any RVA profile and so do not appear in this matrix. For a structured view of what the server platform spec adds on top of RVA23, see the Server Platform v1.0 tab above. Sources: GCC: RISC-V Options (GCC manual) | LLVM: RISCVUsage (LLVM docs) | Linux kernel: Kernel coverage tracker (v7.0-rc1) | UDB: riscv-unified-db RVA23U64 + RVA23S64 profiles
Generated: 2026-05-12 | U64 JSON data | S64 JSON data