This page gives an overview of the extension and feature support in the RISC-V SW ecosystem.
Overview
- This page only tracks ratified extensions and features that are specified by groups (TGs, HCs) of RISC-V International.
- The extensions and features are grouped by their specification's state (published, ratified, frozen).
- Published (official) specifications can be found here: https://riscv.org/technical/specifications/
- The main repository of the ISA specifications is: https://github.com/riscv/riscv-isa-manual
Certain extensions are generated by individual TGs.
An overview of the current status of unratified extensions can be found here: Opcode and State Review
- The following wiki page lists all recently ratified extensions, that are not merged into the ISA specification yet: Ratified Extensions
- The Specification Status lists the specifications that are frozen or ready for ratification
Table description
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:
- upstream...SW support has been merged into the main development branch of the corresponding SW project
- staging branch...SW support lives in a staging branch and is not upstreamed
- PR...SW support exists in form of a pull request for upstream (in-review or waiting for ratification)
- n/a...not applicable, not relevant, or not required
- missing...currently no known implementation
- dev:X...feature is in development by X
- empty cells...unknown status (feel free to share your knowledge)
ISA extension naming conventions
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:
- Extensions with prefix Z...standard user-level
- Extensions with prefix X...non-standard user-level
- Extensions with prefix S...standard supervisor-level
- Extensions with prefix SX...non-standard supervisor-level
Published specifications (20191213)
The table below lists the status of the extensions and features of above listed published extensions.
Extension / feature | Ratified? | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|
RV32I |
---|
v2.1y | mainline | mainline | mainline | mainline | mainline | mainline | mainline | mainline | mainline | RV64I v2.1 | y | mainline | mainline | mainline | mainline | mainline | mainline | mainline | mainline | | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | not supported | upstream | upstream |
---|
RV64I | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream | upstream |
---|
mainliney | mainline | mainline | RV32E v1.9 | n | mainline |
|
| not supported |
| not supported |
| upstream |
M (Multiplication and Division) |
---|
v2.0ymainlinemainlinemainlinemainlinemainline | v2.1ymainlinemainlinemainlinemainline | | upstream | upstream (atomics) | upstream |
mainline | mainline mainline upstream (atomics) | upstream |
F (SP float) |
---|
v2.2y | mainline | mainline | D (DP float) v2.2 | y | mainline | mainline | RVWMO v2.0 | y | | upstream | upstream | upstream | upstream | upstream | upstream | upstream |
| upstream | upstream | upstream |
---|
D (DP float) | upstream | upstream | upstream | upstream | upstream | upstream | upstream |
| upstream | upstream | upstream |
---|
Q (QP float) |
|
| upstream |
|
|
| not supported |
| not supported |
| upstream |
---|
RVWMO | upstream |
---|
mainline (emulation is seq. consistent) |
mainline upstream (emulation is seq. consistent) | n/a | n/a | n/a | n/a | n/a |
mainline upstream (barriers and locks) | upstream (barriers and locks) |
mainline upstream (barriers and locks), but needs optimization |
ABIs (ILP32, ILP32E, ILP32F, ILP32D, LP64, LP64f, LP64D, LP64Q) | Documented ABIs | ilp32, ilp32d, lp64, lp64d | ilp32, ilp32d, lp64, lp64d | ilp32, ilp32d, lp64, lp64d | ilp32, ilp32d, lp64, lp64d | n/a | n/a | v2.0ymainlinemainlinemainlinemainline | mainline | Q (QP float) v2.2 | y | Zifencei v2.0 | y | mainline | mainline | mainline | mainline | Zihintpause v1.0 | Zicsr v2.0 | y | mainline | mainline | mainline | mainline | Counters v2.0 | n | mainline | mainline | n/a | n/a | n/a | mainline | mainline | Machine ISA v1.11 (CSRs, ECALL, EBREAK, MRET/SRET/URET, WFI, Reset, NMIs, PMAs, PMP) | y | mainline | upstream |
| upstream | upstream |
|
Zifencei | upstream | upstream | upstream | upstream |
|
| not supported |
| upstream | upstream |
|
---|
Machine ISA: CSRs | upstream | 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 |
---|
mainline v1.11 (CSRs, SFENCE.VMA, Sv32/Sv39/Sv48): CSRs | upstream | upstream |
|
|
|
|
|
| upstream |
|
|
---|
Supervisor ISA: SFENCE.VMA | upstream | upstream |
|
|
|
|
|
| upstream | upstream |
|
---|
Supervisor ISA: Sv32, Sv39, Sv48 | upstream | upstream |
|
|
|
|
|
| Sv39 upstream | upstream (sv39) |
|
---|
Unpublished ratified extensions
Extensions and features in the table below are ratified, but not published in a consolidated RISC-V ISA specification document.
Extension | Spike | Qemu | Binutils | GCC | glibc | newlib | LLVM | OpenSBI | FreeBSD | Linux kernel | GDB |
---|
Zihintpause | upstream | Mailpatch | upstream |
|
|
| upstream |
|
|
|
|
---|
Vector: Zve32x, Zve32f, Zve64x, Zve64f, Zve64d, Zvl*b, V | upstream | upstream | upstream | rvv-next branch |
|
| upstream | upstream (experimental,FP16 ABI not settled) | not supported |
|
|
---|
Bitmanip: |
---|
y | mainline | mainline | n/a | B (bitmanip) v0.92 (, Zbk, Zbs | upstream | upstream | upstream | PR | dev branch |
| upstream | upstream (experimental) |
---|
n | K (scalar crypto) | n | P (SIMD) v0.9.4 | n | mainline (but v0.9.2!) | PR | V (vector) v0.10, Vector Extension Intrinsics, Vector Calling Convention | n | mainline | mainline (but v0.7.1) | mainline (Zvlsseg API not settled, FP16 ABI not settled) | Ztso v0.1 | n | Zam v0.1 | n | H (hypervisor) v0.6.1 | Zmmul v0.1 (subset of M) | J (JIT/Java) | TEE | Snavpot | n | Zfinx | mainline...SW support has been merged into the main development branch of the corresponding SW project
n/a...not applicable, not relevant or not required
empty cells...unknown status (feel free to share your knowledge)
ISA extension naming conventions
E.g.: RV64I1p0M1p0A1p0F1p0D1p0 or RV32I2_M2_A2 (P extension requires underscore!)
The complete ISA extension naming convention can be found in the unpriv specification.
...
| not used |
|
|
FP in INT regs: Zfinx, Zdinx, Zhinx, Zhinxmin | PR
| upstream | upstream (Zfinx, Zdinx, Zhinx, Zhinxmin and unratified Zqinx) | Mailpatch (Zfinx,Zdinx)
|
|
| MC upstream |
| not supported |
|
|
---|
Half Width FP: Zfh, Zfhmin | upstream | upstream | upstream |
|
|
| upstream |
| not supported |
|
|
---|
ePMP: Smepmp | upstream | upstream(but 0.9.3) | upstream |
|
|
| PR |
| not supported |
|
|
---|
Scalar crypto: Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh, Zkr, Zkt, Zkn, Zks, Zk | upstream | upstream | upstream | upstream(only minimal support and wait c-api merge) |
|
| upstream |
| not used |
|
|
---|
Priv 1.12: Sm1-12, Ss1-12, Sv57 |
| upstream | upstream |
|
|
|
|
| not supported |
|
|
---|
CMO base: Zicbom, Zicbop, Zicboz | upstream | Mailpatch | upstream |
|
|
| PR,PR |
| not supported | dma-ops upstream (6.0) |
|
---|
Hypervisor: (H) | upstream | upstream | upstream | n/a | n/a | n/a |
| upstream | not supported | upstream (5.16) |
|
---|
State Enable: Smstateen | upstream | Mailpatch | upstream |
|
|
|
|
| not supported |
|
|
---|
Time compare: Sstc |
| Mailpatch | upstream |
|
|
|
|
| not supported |
|
|
---|
Counter overflow and filtering: Sscofmpf | PR | Mailpatch | upstream |
|
|
|
|
| not supported |
|
|
---|
Fast TLP invalidation: Svinval | upstream | upstream | upstream |
|
|
|
|
| not supported |
|
|
---|
NAPOT pages: Svnapot | upstream | upstream | upstream |
|
|
|
|
| not supported |
|
|
---|
Page-based memory types: Svpbmt | upstream | upstream | upstream |
|
|
|
|
| not supported | upstream (5.19) |
|
---|
Core-local Interrupt Controller: CLINT | upstream | upstream |
|
|
|
|
|
| upstream | upstream (clocksource) |
|
---|
Zmmul | upstream | upstream | upstream | Mailpatch |
|
| patch |
| n/a |
|
|
---|
Specifications that are at least frozen
Extensions and features in the table below are either frozen or ready-for-ratification.
Specifications that are at least stable
Note, that this section only lists specifications that are planned to be released in the near future, but are 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 |
|
---|
Specifications that are not stable
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 |
---|
Packed SIMD: Zpn, Zpsfoperand, Zbpbo, P | upstream( v0.9.2) | Mailpatch | PR (2.36-based) dev branch (master-based) | PR |
|
|
|
| not supported |
|
|
---|
Pointer masking: Zjpm |
|
|
|
|
|
|
|
| not supported |
|
|
---|
Resumable Non-maskable Interrupts: Smrnmi |
|
| dev branch |
|
|
|
|
| not supported |
|
|
---|
Advanced Core-local Interrupt Controller: ACLINT |
| upstream |
|
|
|
|
|
| not supported | Patchwork |
|
---|
Gaps
- Vector Extension Intrinsics (specification exists, but not frozen)
- Vector Calling Convention (specification exists, but not frozen)
- Scalar Crypto Intrinsics