Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Remove Zjpm work since the latest Zjpm proposal is private and significantly changed

This page gives an overview of the extension and feature support in the RISC-V SW ecosystem.

Table of Contents

Overview

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
Ratified?
SpikeQemuBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinux kernel

GDB

RV32I
y
upstreamupstreamupstreamupstreamupstreamupstreamupstreamupstreamnot supportedupstreamupstream
RV64I
y
upstreamupstreamupstreamupstreamupstreamupstreamupstreamupstreamupstreamupstreamupstream
Big-endian support
y
upstream

upstream
upstream


not supported
not supported
upstream
M (Multiplication and Division)
v2.0y
upstreamupstreamupstreamupstreamn/an/aupstreamn/an/an/aupstream
A (Atomic)
y
upstreamupstreamupstreamupstreamn/an/aupstreamupstream (atomics)upstream (atomics)upstream (atomics)upstream
F (SP float)
y
upstreamupstreamupstreamupstreamupstreamupstreamupstream
upstreamupstreamupstream
D (DP float)
y
upstreamupstreamupstreamupstreamupstreamupstreamupstream
upstreamupstreamupstream
Q (QP float)
y


upstream
upstream



not supported
not supported
upstream
RVWMO
yExtensionRatified?SpikeQemuyyyupstream
upstream (emulation is seq. consistent)upstream (emulation is seq. consistent)n/an/an/an/an/aupstream (barriers and locks)upstream (barriers and locks)upstream (barriers and locks), but needs optimizationupstream
C (compressed)upstreamupstreamupstreamupstreamBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinuxGDBRV32In/an/aupstream
upstreamupstream
Zifenceiupstreamupstreamupstreamupstream

not supported
upstreamupstream
Machine ISA: CSRsupstreamupstreamupstream




n/a

Machine ISA: ECALL, EBREAKupstreamupstream





upstreamupstream
Machine ISA: MRET/SRET/URETupstreamnot supportedupstream





n/a

Machine ISA: WFIRV64Iupstreamupstream





upstreamupstream
Machine ISA: PMP







n/a

Supervisor ISA: CSRsupstreamupstream





upstream

Supervisor ISA: SFENCE.VMAupstreamupstream





upstreamBig-endian supportupstream
Supervisor ISA: Sv32, Sv39, Sv48upstreamupstreamnot





supportedSv39 upstreamM (Multiplication and Division) v2.0yupstreamupstreamupstreamupstreamn/an/aupstreamn/an/an/aA (Atomic)yupstreamupstreamupstreamupstreamn/an/aupstreamupstream (atomics)upstream (atomics)upstream (atomics)F (SP float)yupstreamupstreamupstreamD (DP float)yupstreamupstreamupstreamQ (QP float)yupstreamnot supportedRVWMOyupstream (emulation is seq. consistent)upstream (emulation is seq. consistent)n/an/an/an/an/aupstream (barriers and locks)upstream (barriers and locks)upstream (barriers and locks), but needs optimizationABIs (ILP32, ILP32E, ILP32F, ILP32D, LP64, LP64f, LP64D, LP64Q)ilp32, ilp32f, ilp32d, ilp32q, ilp32e, lp64, lp64f, lp64d, lp64qilp32, ilp32f, ilp32d, ilp32e, lp64, lp64f, lp64dilp32, ilp32d, lp64, lp64dilp32, ilp32f, ilp32d, ilp32e, lp64, lp64f, lp64dilp32, ilp32d, lp64, lp64dn/alp64, lp64dn/aC (compressed) v2.0yupstreamupstreamupstreamupstream (sv39)

Unpublished ratified extensions

Extensions and features in the table below are ratified, but not published in a consolidated RISC-V ISA specification document.

ExtensionSpikeQemuBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinux kernel

GDB

ZihintpauseupstreamMailpatchupstream


upstream



Vector: Zve32x, Zve32f, Zve64x, Zve64f, Zve64d, Zvl*b, Vupstream

upstream

upstreamrvv-next branch

upstreamupstream (experimental,FP16 ABI not settled)not supported

Bitmanip: Zba, Zbb, Zbc, Zbsupstreamupstream

upstream

PRdev branch
upstreamupstream (experimental)not used

FP in INT regs: Zfinx, Zdinx, Zhinx, ZhinxminPR
upstreamupstream
(Zfinx, Zdinx, Zhinx, Zhinxmin and unratified Zqinx)

Mailpatch
(Zfinx,Zdinx)




MC upstream
not supported

Half Width FP: Zfh, Zfhminupstreamupstreamupstream


upstream
not supported

ePMP: Smepmpupstreamupstream(but 0.9.3)upstream


PR
not supported

Scalar crypto: Zbkb, Zbkc, Zbkx, Zknd, Zkne, Zknh, Zksed, Zksh, Zkr, Zkt, Zkn, Zks, Zkupstreamupstreamupstreamupstream(only minimal support and wait c-api merge)



upstream


not used

Priv 1.12: 
Sm1-12, Ss1-12, Sv57

upstreamupstream




not supported

CMO base: Zicbom, Zicbop, ZicbozupstreamMailpatchupstream


PR,PR
not supporteddma-ops upstream (6.0)
Hypervisor: (H)upstreamupstreamupstreamn/an/an/a
upstream
upstreamZifencei v2.0yupstream
not supportedupstream (5.16)
State Enable: SmstateenupstreamMailpatchupstream




not supported

Time compare: Sstc
Mailpatch
upstream
upstream




not supported
upstreamupstreamZihintpause v1.0y


Counter overflow and filtering: SscofmpfPRMailpatchupstream




not supported
Zicsr v2.0


Fast TLP invalidation: Svinvalupstreamupstreamupstream




not supported

NAPOT pages: Svnapotupstreamupstreamupstream
Counters v2.0





not supported

Page-based memory types: Svpbmtupstream
n
upstreamupstream
n/an/a





not supportedupstream (5.19)
Core-local Interrupt Controller: CLINT
n/a
upstreamupstream





upstream
Machine ISA v1.11 (CSRs, ECALL, EBREAK, MRET/SRET/URET, WFI, Reset, NMIs, PMAs, PMP)
upstream (clocksource)
Zmmulupstream
y
upstreamupstreamMailpatch

patch
n/a
n/aSupervisor ISA v1.11 (CSRs, SFENCE.VMA, Sv32/Sv39/Sv48)yupstreamupstreamn/aB (bitmanip) v0.92 (Zba, Zbb, Zbc, Zbe, Zbf, Zbk, Zbp, Zbr, Zbs)n

Mailpatch (Zba, Zbb, Zbs, Zbp)

PRdev branchupstream (experimental)K (scalar crypto)nPRPRMC layer PR LLVM Intrinsic PRP (SIMD) v0.9.4nupstream (but v0.9.2!)Mailpatch (v0.9.4)PRPRPRV (vector) v0.10, Vector Extension Intrinsics, Vector Calling Conventionnupstreamupstream (but v0.7.1)upstream (experimental,FP16 ABI not settled)Ztso v0.1nnot supportedZam v0.1nnot supportedH (hypervisor) v0.6.1nupstreamupstreamdev branchn/an/an/aupstreamKVM patches on LKMLZmmul v0.1 (subset of M)J (JIT/Java)TEESnavpotnZfinxnstaging branchstaging branchstaging branchstaging-branchPRZ*inx (with new ABIs: ILP32X/LP64X)dev: PLCTdev: PLCTZfhupstreamSV57Zcedev: PLCTdev: PLCTdev branchCMO / Zicmobasen

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

E.g.: RV64I1p0M1p0A1p0F1p0D1p0 or RV32I2_M2_A2 (P extension requires underscore!)

The complete ISA extension naming convention can be found in the unpriv specification.

...



Specifications that are at least frozen

Extensions and features in the table below are either frozen or ready-for-ratification.

ExtensionSpikeQemuBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinux kernel

GDB

Code Size Reduction: Zca, Zcf, Zcd, Zcb, Zcmp, Zcmtdev branchdev branchdev branchdev branch

dev branch
not supported

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.

ExtensionSpikeQemuBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinux kernel

GDB

psABI: Standard ABIs: ILP32, ILP32F, ILP32D, LP64, LP64F, LP64D, LP64Qn/an/aupstreamilp32, ilp32f, ilp32d, lp64, lp64f, lp64dilp32, ilp32d, lp64, lp64dilp32, ilp32f, ilp32d, lp64, lp64f, lp64dilp32, ilp32d, lp64, lp64dn/alp64, lp64dn/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. 

ExtensionSpikeQemuBinutilsGCCglibcnewlibLLVMOpenSBIFreeBSDLinux kernel

GDB

Embedded ABI: ILP32E, LP64En/an/aupstreamupstreamnot supportedupstreamnot supportedn/an/an/anot supported
Packed SIMD:  Zpn, Zpsfoperand, Zbpbo, Pupstream(

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 supportedPatchwork

Gaps

  • Vector Extension Intrinsics (specification exists, but not frozen)
  • Vector Calling Convention (specification exists, but not frozen)
  • Scalar Crypto Intrinsics