0%

riscv aosp requirements

RISC-V Better Atomics (Load-Acquire/Store-Release)

是 RISC-V 体系结构的一种扩展,旨在提供更强大的原子操作支持。
在并发编程中,原子操作是一种确保多个线程或处理器可以安全地对共享变量进行操作的机制。原子操作需要满足一定的一致性和同步性质,以避免数据竞争和不确定的行为。

RISC-V Better Atomics 扩展引入了一对新的原子指令,即 Load-Acquire 和 Store-Release。

  • Load-Acquire 用于读取共享变量,并确保读取操作具有”acquire”语义,即保证在此原子操作之前的所有存储操作都可见。
  • Store-Release 用于写入共享变量,并确保写入操作具有”release”语义,即保证在此原子操作之后的所有加载操作都能看到最新的值。

使用 RISC-V Better Atomics 可以更好地控制并发访问共享变量的顺序和一致性。它提供了更细粒度的原子操作语义,以满足高性能和并发编程的需求。

在 RISCV-V 的 A 扩展下

  • Load-Acquire 指令通常以 lr.amoswap 的形式出现,例如 lr.w(Load-Reserved Word)用于加载一个字(32位数据)并获取内存序。
  • Store-Release 指令通常以 sc.amoswap 的形式出现,例如 sc.w(Store-Conditional Word)用于将一个字(32位数据)存储到内存中并释放内存序。

Saturating Operations

饱和操作(Saturating Operations)是一种特殊的操作,用于处理数值溢出的情况。当执行某种算术操作时,如果结果超出了数据类型的表示范围,饱和操作将会将结果截断为数据类型所能表示的最大或最小值,而不是简单地截断为溢出的结果。

RISC-V 架构中的饱和操作主要应用于整数数据类型。以下是一些常见的饱和操作指令:

  1. SLL.SAT:饱和左移指令,将一个寄存器中的整数左移指定的位数,并将结果截断为数据类型的最大或最小值。
  2. SRA.SAT:饱和右算术移位指令,将一个寄存器中的整数右算术移位指定的位数,并将结果截断为数据类型的最大或最小值。
  3. SRL.SAT:饱和右逻辑移位指令,将一个寄存器中的整数右逻辑移位指定的位数,并将结果截断为数据类型的最大或最小值。
  4. ADD.SAT:饱和加法指令,将两个寄存器中的整数相加,并将结果截断为数据类型的最大或最小值。
  5. SUB.SAT:饱和减法指令,将两个寄存器中的整数相减,并将结果截断为数据类型的最大或最小值。

这些饱和操作指令使得处理数值溢出的情况更加方便和可控,避免了溢出错误对程序执行的影响。

需要注意的是,饱和操作并不是所有 RISC-V 架构中都支持的标准指令。具体支持的指令和操作会根据特定的处理器和实现而有所不同。因此,在编写程序时,建议参考相关的处理器手册或编程指南,以了解特定处理器对饱和操作的支持情况和具体的指令格式。

Half-width floats (Zfh)

半精度浮点数(Half-width floats)是一种浮点数表示格式,用于表示较小的浮点数范围。在 RISC-V 中,半精度浮点数采用 IEEE 754 标准的半精度浮点格式。

半精度浮点数使用 16 位(2 字节)来表示一个浮点数,其中包括符号位、指数位和尾数位。具体的格式如下:

  • 符号位(1 位):用于表示浮点数的正负。
  • 指数位(5 位):用于表示浮点数的指数部分,可以表示范围为 -14 到 +15。
  • 尾数位(10 位):用于表示浮点数的尾数部分。

半精度浮点数相比于单精度浮点数(32 位)和双精度浮点数(64 位)具有较小的范围和精度,但占用更少的存储空间。在一些资源受限的场景中,如嵌入式系统或移动设备,半精度浮点数可以用于节省存储空间和提高计算效率。

玄铁 910 支持半精度浮点类指令

Bitmanip

RISC-V Bitmanip 扩展是 RISC-V 指令集架构的一部分,用于进行位操作和位操作相关的操作。Bitmanip 扩展引入了一组指令,以提供对位操作的支持,包括位移、位计数、位反转、位扩展等功能。

Bitmanip 扩展的主要目的是增强 RISC-V 的位操作能力,使开发者能够更高效地处理位级操作和位级数据操作。这对于一些应用场景,如加密算法、图形处理、数据压缩等,非常有用.

Bitmanip 扩展引入了一些常用的位操作指令,例如:

  • clz: 计算无符号整数的前导零位数。
  • ctz: 计算无符号整数的尾部零位数。
  • pcnt: 计算无符号整数的位计数,即二进制表示中的位为 1 的个数。
  • slo: 逻辑左移操作,将指定位数的位从右边移入。
  • sro: 逻辑右移操作,将指定位数的位从左边移入。
  • rol: 循环左移操作,将位向左循环移动。
  • ror: 循环右移操作,将位向右循环移动。

这些指令使得开发者能够更高效地进行位级操作和位级数据处理,简化代码编写和提高运行效率。

需要注意的是,具体的 Bitmanip 指令和功能会根据 RISC-V 架构扩展的版本和实现而有所不同。因此,建议查阅相关的处理器手册或编程指南以获取详细的信息和指令使用示例。

Zba扩展(Bitmanip Extension)引入了用于位级操作的指令,包括位逻辑操作(AND、OR、XOR)、位计数、位提取和位字段插入。这些指令可以高效地操作整数寄存器中的单个位和位字段,从而实现对位的精细控制。
Zbb扩展(Bitmanip Extension B)进一步增强了位操作的功能,引入了额外的指令用于位排列、位翻转和位计数等操作。这些指令提供了更高级的位操作功能,在密码学、数据压缩和信号处理等各种应用中非常有用。
Zba和Zbb扩展都是RISC-V体系结构的可选功能,在支持这些扩展的处理器中实现。要使用这些扩展,软件工具和编译器需要提供支持,以生成使用Zba和Zbb指令的代码。具体实现或处理器型号的可用性和对这些扩展的支持可能有所不同。

玄铁 C910 支持扩展的位操作指令

J extension

RISC-V J 的扩展旨在使 RISC-V 成为传统解释或 JIT 编译的语言或需要大型运行时库或语言级虚拟机的语言的一个有吸引力的目标, 包括 C# JAVA python 等.

https://github.com/riscv/riscv-j-extension

RISC-V 指针屏蔽(PM)是一个功能,当启用时,会导致 MMU 忽略有效地址的前 N 位。使得这些比特可以以应用程序选择的任何方式使用。所描述的扩展版本专门针对标签检查。当一个地址被访问时,存储在被屏蔽位中的标签与基于范围的标签进行比较。这被用于动态安全检查器,如 HWASAN[1]。这样的工具可以应用于所有的特权模式(U、S 和 M)。

ABI gaps

需要 TLSDESC 等

TLSDESC

RISC-V TLSDESC,全称为 Thread Local Storage Descriptor,是 RISC-V 指令集架构的一部分,用于支持线程本地存储(Thread Local Storage,TLS)的访问。

TLS 是一种机制,允许每个线程在共享内存的基础上拥有自己独立的数据区域,这对于多线程编程非常重要。TLS 可以用于存储线程特定的数据,例如线程的局部变量或全局状态。

RISC-V TLSDESC 扩展引入了以下指令:

TLSDESC_CALL (TLS Descriptor Call):调用 TLS 描述符以获取线程本地存储数据的地址。
TLS 描述符是一个特殊的数据结构,用于获取线程本地存储数据的地址。TLSDESC_CALL 指令用于调用 TLS 描述符,并将返回的地址存储在指定的寄存器中,以便后续访问线程本地存储数据。

需要注意的是,RISC-V TLSDESC 扩展是可选的,并不是所有的 RISC-V 架构都支持该扩展。具体的支持情况可以参考特定处理器的文档或规格说明。

TLSDESC 扩展的引入使得在 RISC-V 架构上能够更方便地使用线程本地存储,提供了对多线程编程的支持

arm 中通过 TPIDR_EL0 寄存器,每个线程可以访问自己的 TLS 数据,而不需要使用全局变量或其他机制。线程局部存储是一种为每个线程分配独立内存空间的机制,用于保存线程特定的数据。
通过将 TLS 基址存储在 TPIDR_EL0 寄存器中,线程可以通过读取该寄存器来迅速获取自己的 TLS 数据的访问地址。

HWASAN

(Hardware-assisted Address Sanitizer)是一种基于硬件辅助的地址检测工具,用于检测和调试软件中的内存错误和安全问题。它类似于其他架构上的 AddressSanitizer(ASan)工具,但专门针对 RISC-V 架构进行了优化。

该实现依赖于 J-extension(又称 “指针屏蔽)的可用性。目前,这个扩展不是官方的
需要修改编译器 (llvm) 适配该实现

TEE

there’s an Ever ratcheting bar on the hardware features that are required whether it’s trusted execution environments confidential compute virtualization or even runtime detection of memory safety errors in the hardware

需要虚拟化实现的 TEE 或者硬件内存安全错误检测机制 (如 ARM 的 trustzone 或 sifive 的 worldguard 机制)

玄铁支持 VirtualZone 技术 (PMP+IOPMP)

virtualization

硬件虚拟化, 可以用来辅助实现内存的安全隔离机制
trusted execution environments confidential compute virtualization