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
Which software layer needs to change to support each RVA23 extension?
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:
V) becomes mandatory in U64 — every conformant chip ships RVV 1.0. SIMD is no longer optional. New in RVA23.H) becomes mandatory in S64 via the Sha umbrella — KVM-RISCV, pKVM, Android protected VMs. Was optional in RVA22S64. The biggest single change for system silicon.Zvbb + Zvkt (vector bit-manipulation + data-independent timing). AES-GCM via optional Zvkng / SM4-GCM via Zvksg. Closes the ~13-year gap to Arm's AESE/AESD/PMULL.Supm) mandatory in U64 — tagged-pointer ABI for HWASan, GC-style runtimes, plus parity with Arm TBI / MTE's userspace control surface.Zicond (conditional move), Zfa (FP additions / immediate loads), Zicboz + Zicbom (cache-block ops), Zawrs (low-power spin) — closes long-standing scalar performance gaps with Arm and x86.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.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. |
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.
| 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:
|
GCC march | LLVM march | Linux kernel | Layer | Notes |
|---|
| 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:
|
GCC march | LLVM march | Linux kernel | Layer | Notes |
|---|
H-extension G-stage translation. Linux: drivers/iommu/riscv/ (v6.13+).Ssaia / Smaia extensions, optional and not listed in RVA23. Linux: drivers/irqchip/irq-riscv-{imsic,aplic}-*.c.ACPI RHCT or DT riscv,isa-extensions; SBI capability probing.