RISC-V International
This page gives an overview of the extension and feature support in the RISC-V SW ecosystem.
The subsections below contain tables that summarize the current state of extensions and features. The following description helps to interpret the table cell's contents:
This is just a summary of the naming convention as defined in the unpriv specification.
ISA extension description example: RV64I1p0M1p0A1p0F1p0D1p0 or RV32I2_M2_A2 (P extension requires underscore!)
Prefixes:
The table below lists the status of the extensions and features of above listed published extensions.
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|---|---|---|---|---|---|---|---|---|---|---|
RV32I | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | not supported | upstream | upstream |
RV64I | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream |
Big-endian support | upstream | upstream | not supported | not supported | upstream | ||||||
M (Multiplication and Division) | upstream | upstream | upstream | upstream | n/a | n/a | upstream | n/a | n/a | n/a | upstream |
A (Atomic) | upstream | upstream | upstream | upstream | n/a | n/a | upstream | upstream (atomics) | upstream (atomics) | upstream (atomics) | upstream |
F (SP float) | upstream | upstream | upstream | upstream | upstream | upstream | |||||
D (DP float) | upstream | upstream | upstream | upstream | upstream | upstream | |||||
Q (QP float) | upstream | not supported | not supported | upstream | |||||||
RVWMO | upstream (emulation is seq. consistent) | upstream (emulation is seq. consistent) | n/a | n/a | n/a | n/a | n/a | upstream (barriers and locks) | upstream (barriers and locks) | upstream (barriers and locks), but needs optimization | upstream |
C (compressed) | upstream | upstream | upstream | upstream | n/a | n/a | upstream | upstream | upstream | ||
Zifencei | upstream | upstream | upstream | not supported | upstream | upstream | |||||
Machine ISA: CSRs | upstream | upstream | n/a | ||||||||
Machine ISA: ECALL, EBREAK | upstream | upstream | upstream | upstream | |||||||
Machine ISA: MRET/SRET/URET | upstream | upstream | n/a | ||||||||
Machine ISA: WFI | upstream | upstream | upstream | upstream | |||||||
Machine ISA: PMP | n/a | ||||||||||
Supervisor ISA: CSRs | upstream | upstream | upstream | ||||||||
Supervisor ISA: SFENCE.VMA | upstream | upstream | upstream | upstream | |||||||
Supervisor ISA: Sv32, Sv39, Sv48 | upstream | upstream | Sv39 upstream | upstream (sv39) |
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|---|---|---|---|---|---|---|---|---|---|---|
Zihintpause | upstream | not supported |
Extensions and features in the table below are either frozen or ready-for-ratification.
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|---|---|---|---|---|---|---|---|---|---|---|
Vector: Zvamo, Zvlsseg, Zvediv, Zvqmac, Zve32x, Zve32f, Zve64x, Zve64f, Zve64d, Zvfh, Zve | upstream | upstream(but v0.7.1) | upstream (but v0.7.1) | upstream | upstream (experimental,FP16 ABI not settled) | not supported | |||||
Bitmanip: Zba, Zbb, Zbc, Zbs | upstream | upstream | PR | dev branch | upstream | upstream (experimental) | not used | ||||
FP in INT regs: Zfinx | staging branch | staging branch | upstream(Zfinx, Zdinx) | PR | not supported | ||||||
Half Width FP: Zfh, Zfhmin | upstream | staging branch | upstream | not supported | |||||||
ePMP: Smepmp | not supported | ||||||||||
Scalar crypto: Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh, Zkn, Zks, Zkt, Zk, Zkr | upstream | staging branch | upstream | upstream(only minimal support and wait c-api merge) | MC layer PR LLVM Intrinsic PR | not used | |||||
Priv 1.12: Sm1-12, Ss1-12, Sv57 | not supported | ||||||||||
CMO base: Zicbom, Zicbop, Zicboz | staging branch | not supported | |||||||||
Hypervisor: H | upstream | upstream | dev branch | n/a | n/a | n/a | upstream | not supported | upstream (5.16) | ||
State Enable: Smstateen | not supported | ||||||||||
Time compare: Sstc | not supported | ||||||||||
Counter overflow and filtering: Sscofmpf | not supported | ||||||||||
Fast TLP invalidation: Svinval | upstream | staging branch | not supported | ||||||||
NAPOT pages: Svnapot | upstream | staging branch | not supported | ||||||||
Page-based memory types: Svpbmt | upstream | staging branch | not supported | ||||||||
Code Size Reduction: Zcee | dev branch | dev branch | dev branch | dev branch | dev-branch | not supported | |||||
Packed SIMD: Zpn, Zpsfoperand, Zprvsfextra | upstream( v0.9.2) | PR | PR | not supported | |||||||
Resumable Non-maskable Interrupts: Smrnmi | not supported | ||||||||||
Core-local Interrupt Controller: CLINT | upstream | upstream | upstream | upstream (clocksource) | |||||||
Advanced Core-local Interrupt Controller: ACLINT | upstream | not supported | Patchwork | ||||||||
Zmmul | upstream | Mailpatch | Mailpatch | patch | n/a | ||||||
Pointer masking: Zjpm | not supported |
Note, that this section only lists specifications that are planned to be released in the near future, but not frozen yet.
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|---|---|---|---|---|---|---|---|---|---|---|
psABI: Standard ABIs: ILP32, ILP32F, ILP32D, LP64, LP64F, LP64D, LP64Q | n/a | n/a | upstream | ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d | ilp32, ilp32d, lp64, lp64d | ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d | ilp32, ilp32d, lp64, lp64d | n/a | lp64, lp64d | n/a |
Note that this section only exists for historical purposes and the table below is not considered complete. Further, there are no attempts to track the SW support of unstable features here.
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|---|---|---|---|---|---|---|---|---|---|---|
Embedded ABI: ILP32E, LP64E | n/a | n/a | upstream | upstream | not supported | upstream | not supported | n/a | n/a | n/a | not supported |