Page 335 - 《软件学报》2021年第12期
P. 335
刘畅 等:RISC-V 指令集架构研究综述 3999
用于支持小型 RISC-V 实现中的组合 SIMD 定点操作.该扩展曾被认为可以由 V 扩展上的大型浮点
SIMD 操作标准化代替,而几近废弃;但考虑到小型 RISC-V 的实际需要而得以保留,并开始设计和
定义新的 P 扩展.
(13) 向量操作扩展(V 扩展):用于支持 32 位指令编码空间中的数据并行执行功能.该扩展增强了处理器
的 SIMD 操作,引入了一组向量寄存器和向量操作指令,允许将相同的操作应用于大批量的数据元
素之中,使 RISC-V 系统的数据处理能力发生质变,同时保持指令代码的精简性.
(14) 控制和状态寄存器扩展(Zicsr 扩展):RISC-V 定义了一个独立的地址空间,包含与各硬件线程相关
的 4 096 个控制与状态寄存器(control and status register,简称 CSR).Zicsr 扩展即提供了在此空间中
操作 CSR 指令的完整集合.
(15) 屏障扩展(Zifencei 扩展):仅含有一条 FENCE.I 指令,用于提供相同硬件线程上写指令内存与指令获
取之间的显式同步.
(16) 非对齐原子操作扩展(Zam 扩展):用于对非对齐的原子内存操作(atomic memory operation,简称
AMO)提供标准化支持.它是对 A 扩展的扩展,使 AMO 只需要针对具有相同地址和相同尺寸的其他
访问(包括非原子性的加载和存储)进行原子化执行即可.
(17) 全存储排序 扩展(Ztso 扩展):用于支持“全存储排序” [23] 的内存一致性模型.它提供了一种比
RVWMO 更严格的内存一致性模型.
(18) 提示暂停扩展(Zihintpause 扩展):用于指示当前硬件线程应当放缓指令的失效率.目前仅包含一条
PAUSE 指令,并且不会引起架构相关状态的更改.
(19) 半精度浮点扩展(Zfh 扩展):用于支持半精度浮点运算.添加了兼容 IEEE 754-2008 算术标准 [22] 的半
精度浮点运算指令,以操作 16 位浮点数据.它依赖于 F 扩展,需要与 F 扩展共同使用.
(20) 半精度浮点最小集扩展(Zfhmin 扩展):是 Zfh 扩展的一个子集,仅包含了数据转移转化相关的指令,
主要用于支持半精度数据的存储、以及执行更高精度的运算.与 Zfh 扩展一样,它也依赖于 F 扩展,
需要与 F 扩展共同使用.
(21) 整数寄存器单精度浮点扩展(Zfinx 扩展):用于支持在整数寄存器中进行单精度浮点运算.指令功能
与 F 扩展相似,只是操作数来自于整数寄存器而非浮点寄存器,而且不含 FLW、FSW、FMV 等转移
指令.
(22) 整数寄存器双精度浮点扩展(Zdinx 扩展):用于支持在整数寄存器中进行双精度浮点运算.与 D 扩展
类似,只是操作数来自于整数寄存器而非浮点寄存器.它依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同使
用.
(23) 整数寄存器半精度浮点扩展(Zhinx 扩展):用于支持在整数寄存器中进行半精度浮点运算.与 Zfh 扩
展类似,只是操作数来自于整数寄存器而非浮点寄存器.它依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同
使用.
(24) 整数寄存器半精度浮点最小集扩展(Zhinxmin 扩展):是 Zhinx 扩展的一个子集,与 Zfhmin 扩展的功
能及定位类似.与 Zhinx 扩展一样,它也依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同使用.
此外,RISC-V 系统设计者还可以根据实际需要,制定其他自定义扩展指令集,并将其加入指令集架构中.
2.3 RISC-V指令集的状态
RISC-V 指令集需要经过 RISC-V 国际基金会下属的技术工作组审批,成为被批准的稳定版本,才能作为
一种统一的规范和标准,供软件开发人员和硬件供应商们使用.尚未被批准的指令集可能处于“草案”或“冻
结”状态:草案状态的指令集随时有改动的可能,是指令集研究中最活跃的部分;冻结状态的指令集虽然还未
被批准,但在批准之前预计也不应有太显著的改动 [11] .表 4 总结了当前 RISC-V 各指令集的审批状态.
根据表 4 可知,当前共有 2 个基础指令集(RV32E, RV128I)和 10 个扩展指令集(Counters,L,B,J,T,P,V,Zam,
Zfh,Zfhmin)仍处于草案状态,另有 5 个扩展指令集(Zfinx,Zdinx,Zhinx,Zhinxmin,Ztso)处于冻结状态,它们需要