news 2026/4/15 5:55:21

RISCV instr 第11-20章

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RISCV instr 第11-20章

Chapter 20. "F" Extension for Single-Precision Floating-Point, Version 2.2

本章介绍了针对单精度浮点数的标准指令集扩展,该扩展被命名为“F”,并增加了符合 IEEE 754-2008 运算标准(ANSI/IEEE 标准 754-2008,《浮点运算标准》,2008 年)的单精度浮点数计算指令。F 扩展依赖于“Zicsr”扩展来实现控制和状态寄存器的访问。

首先,NaN值的定义是指数位全1,尾数位不全为0的浮点数。

对于二进制表示,IEEE 754-2008标准中只定义了Quiet NaNSignaling NaN,其中Quiet NaN是指尾数最高位(也称quiet bit)为1的NaN值,Signaling NaN是指尾数quiet bit为0,其余低位不全为0的NaN值。

在RISC-V中还定义了Canonical NaN,指符号位为0,指数位全1,尾数quiet bit为1,其余位全0的Quiet NaN值。对于单精度浮点,其编码为0x7fc00000。 // QNaN SNaN

20.1. F Register State

F 扩展增加了 32 个浮点寄存器,编号为 f0 至 f31,每个寄存器均为 32 位宽,并且还有一个浮点控制和状态寄存器 fcsr,其中包含了浮点单元的运行模式和异常状态。增加的状态信息如表 24 所示。我们使用术语 FLEN 来描述 RISC-V 指令集架构中浮点寄存器的宽度,对于 F 单精度浮点扩展,FLEN = 32。大多数浮点指令操作数都在浮点寄存器文件中。浮点load和store指令在寄存器和内存之间传输浮点值。还提供了将数据传输到和从整数寄存器文件中的指令。

我们曾考虑为整数和浮点值共用一个统一的寄存器文件,因为这能简化软件中的寄存器分配和调用约定,并减少用户状态的总量。然而,分段式组织会增加在给定指令宽度下可访问的寄存器总数,简化为宽超标量指令提供足够的寄存器文件端口的功能,支持解耦式浮点单元架构,并简化内部浮点编码技术的使用。对于分段式寄存器文件架构的编译器支持和调用约定已得到充分理解,而且在浮点寄存器文件状态上使用脏位可以降低上下文切换的开销。

20.2. Floating-Point Control and Status Register

浮点控制与状态寄存器(fcsr)是 RISC-V 的控制与状态寄存器(CSR)。它是一个 32 位可读写寄存器,用于选择浮点运算的动态舍入模式,并保存累积的异常标志,如“浮点控制与状态寄存器”所示。

fcsr 寄存器可以通过 FRCSR 和 FSCSR 指令进行读取和写入操作,这些指令是基于底层 CSR 访问指令构建的汇编伪指令。FRCSR 通过将 fcsr 复制到整数寄存器 rd 来读取 fcsr。FSCSR 通过将 fcsr 中的原始值复制到整数寄存器 rd 中,然后将从整数寄存器 rs1 获得的新值写入 fcsr 来交换 fcsr 中的值。
fcsr 内部的字段也可以通过不同的 CSR 地址单独访问,并且针对这些访问定义了单独的汇编伪指令。FRRM 指令读取 Rounding Mode 字段 frm(fcsr 的第 7 至 5 位)并将其复制到整数寄存器 rd 的最低有效三位中,其余位全为零。FSRM 通过将 frm 中的原始值复制到整数寄存器 rd 中,然后将从整数寄存器 rs1 的最低三位中获得的新值写入 frm 来交换 frm 中的值。FRFLAGS 和 FSFLAGS 对于累加异常标志字段 fflags(fcsr 的第 4 至 0 位)也以类似的方式定义。

fcsr 的第 31 至 8 位被预留用于其他标准扩展。若这些扩展未被启用,则实现程序应忽略对这些位的写入操作,并在读取时提供零值。标准软件应保留这些位的原有内容。

浮点运算要么使用指令中编码的静态舍入模式,要么使用存储在 frm 中的动态舍入模式。舍入模式的编码方式如表 25 所示。指令的 rm 字段中值为 111 时,会选择存储在 frm 中的动态舍入模式。当使用保留的舍入模式执行依赖于舍入模式的浮点指令时,这些指令的行为是保留的,包括静态保留舍入模式(101 - 110)和动态保留舍入模式(101 - 111)。一些指令,包括扩展转换,虽然有 rm 字段,但其数学行为不受舍入模式的影响;软件应将 rm 字段设置为 RNE(000),但实现必须像往常一样处理 rm 字段(特别是要区分合法编码和保留编码的解码)

C99 语言标准明确要求必须提供一个动态舍入模式寄存器。在通常的实现中,对动态舍入模式 CSR 状态的写入会阻塞流水线。静态舍入模式用于实现那些经常需要频繁切换不同舍入模式的特殊算术运算。
F 规范的批准版本规定,当执行带有保留动态舍入模式的指令时,应引发非法指令异常。这一规定已被弱化为保留模式,这与静态舍入模式指令的行为一致。在遇到保留编码时引发非法指令异常仍然是有效的行为,因此符合批准规范的实现也与弱化后的规范兼容。

累积的异常标志指示了自该字段上次由软件重置以来,在任何浮点运算指令中出现的异常情况,如表 26 所示。RISC-V 基础指令集架构并不支持在设置浮点异常标志时触发陷阱。

根据标准的规定,我们在 F 扩展中不支持对浮点异常的陷阱处理,而是要求在软件中进行标志的显式检查。我们曾考虑添加由浮点累积异常标志的内容直接控制的分支指令,但最终决定省略这些指令,以保持指令集架构的简洁性。

20.3. NaN Generation and Propagation

除非另有说明,若浮点运算的结果为 NaN(非数字),则该 NaN 为标准 NaN。标准 NaN 具有正的符号位,所有有效数字位清零(除了最高有效位,即无声位)。对于单精度浮点数,这对应于模式 0x7fc00000。

我们曾考虑按照标准的建议采用 NaN 有效负载的方式,但这一决定会增加硬件成本。此外,由于该功能在标准中是可选的,所以无法在可移植代码中使用。
实现者可以自由地提供一种 NaN 有效负载传播方案,作为非标准扩展通过非标准操作模式启用。然而,上述描述的规范性 NaN 方案必须始终得到支持,并且应当是默认模式。

我们要求实现方案在出现异常情况时能够自动返回标准规定的默认值,且无需用户级软件进行任何额外干预(这与阿尔法指令集的浮点陷阱屏障不同)。我们认为,针对异常情况的全硬件处理将会变得更加普遍,因此我们希望避免对用户级指令集进行复杂修改以优化其他方法。实现方案可以随时将异常情况捕获到机器模式的软件处理程序中,以提供异常情况下的默认值。

20.4. Subnormal Arithmetic

对亚正常数的运算按照 IEEE 754-2008 标准进行处理。按照 IEEE 标准的术语,细微性是在舍入后进行检测的。

在进行圆整操作后检测微小值,能够减少虚假的下溢信号。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 13:49:49

基于SpringBoot+Vue的物品租赁管理系统的设计与实现

背景分析传统物品租赁行业多依赖手工记录或单机版管理系统,存在信息孤岛、效率低下、数据易丢失等问题。随着共享经济的发展,租赁场景多样化(如设备、服装、工具等),数字化管理需求激增。技术选型意义SpringBoot后端优…

作者头像 李华
网站建设 2026/4/12 23:53:22

bash start_app.sh命令权限不够?chmod赋权操作指南

bash start_app.sh命令权限不够?chmod赋权操作指南 在部署一个本地AI应用时,你是否曾遇到这样的场景:满怀期待地进入项目目录,敲下 bash start_app.sh,结果终端却冷冷地返回一句: bash: ./start_app.sh: Pe…

作者头像 李华
网站建设 2026/4/12 21:38:24

tail -f 命令查看HeyGem日志:Linux运维人员的调试利器

tail -f 命令查看 HeyGem 日志:Linux 运维人员的调试利器 在部署和维护 AI 应用的过程中,系统日志从来都不是可有可无的附属品——它是诊断问题的第一道防线。尤其是在运行像 HeyGem 这类基于大模型的数字人视频生成系统时,任务动辄持续数分钟…

作者头像 李华
网站建设 2026/4/10 22:44:46

【C# 12拦截器配置终极指南】:掌握高性能AOP编程的7个关键步骤

第一章:C# 12拦截器的核心概念与演进 C# 12 引入的拦截器(Interceptors)是一项实验性语言特性,旨在允许开发者在编译期将函数调用动态重定向到其他方法,而无需修改原始调用代码。这一机制特别适用于构建领域特定语言&a…

作者头像 李华
网站建设 2026/4/13 16:13:53

场论笔记(三)矢量分析基础

场论笔记(三)矢量分析基础 ​ 矢量分析是矢量代数的继续,是场论的基础知识,同时也是弹性波动力学等其他学科的有用工具。其本笔记主要内容是介绍矢性函数,矢端曲线及其微分,积分计算及其性质。 1.1矢…

作者头像 李华
网站建设 2026/4/10 22:31:59

HeyGem系统安全性评估:数据是否上传云端?本地运行保障隐私

HeyGem系统安全性评估:数据是否上传云端?本地运行保障隐私 在企业宣传、在线教育和虚拟主播等场景中,AI驱动的数字人视频正迅速成为内容生产的新标准。只需一段音频,系统就能让静态人物“开口说话”,实现逼真的唇形同步…

作者头像 李华