RISC-V指令集手册:软浮点调用与RV32E约定解析
需积分: 50 70 浏览量
更新于2024-08-09
收藏 3.65MB PDF 举报
"软浮点调用约定与RISC-V指令集手册的用户级指令集体系结构"
在RISC-V架构中,软浮点调用约定是一种针对没有浮点硬件的RV32和RV64实现的设计。这种约定不使用F、D、Q标准浮点扩展中的指令和浮点寄存器,而是依赖于整数指令来处理浮点运算。在软浮点调用约定下,整型参数和栈的管理与RVG调用约定类似,但栈只需对齐到XLEN/8字节边界,减少了对栈对齐的要求,这在内存紧张的系统中节省了空间。
浮点参数通过整数寄存器传递和返回。例如,在RV32中,一个接受一个整数和两个浮点参数的函数`double foo(int, double, long double)`,第一个参数通过a0寄存器传递,第二个参数通过a2和a3寄存器,第三个参数的引用通过a4寄存器传递。结果则会存储在a0和a1寄存器中。在RV64中,参数传递和返回则涉及更多的整数寄存器对。
对于动态舍入模式和异常标志的处理,C99头文件`fenv.h`提供了访问这些功能的例程。这意味着在软浮点调用约定中,浮点操作的控制和状态管理是通过软件实现的。
此外,RV32E调用约定是软浮点调用约定的一个子集,适用于只有16个整数寄存器的RV32E架构。在这种情况下,只有6个参数寄存器(x10-x15)、2个保存的寄存器(x8-x9)和3个临时寄存器(x5-x7)可用。栈对齐保持在4字节边界。
RISC-V指令集手册卷1描述了用户级指令集体系结构,涵盖了从基本的整数格式到浮点、压缩指令等扩展。手册的2.1版对之前的内容进行了更新和完善,包括增加注释、修正长指令编码、明确CSR指令的整数格式描述、更改了某些指令的名称(如将SCALL和SBREAK改为了ECALL和EBREAK),并进一步明确了浮点运算的处理规则,特别是NaN的处理和浮点到整数转换的溢出行为。此外,手册还包含了LR/SC指令的使用条件,以及新的RV32E基本ISA提案和C压缩扩展提案的修订。
RISC-V架构的稳定性和标准化是其设计的关键特点,使得开发者能够在未来版本中依赖这些基本的用户ISA和通用扩展,如IMAFDQ,保持不变。自1.0版本以来,ISA经历了重大改进,包括将整数基本内核与标准扩展分离,优化了立即数编码,以及对调用约定和软浮点处理的修订。这些变化旨在提高效率,简化软件开发,并增强RISC-V架构的兼容性和灵活性。
380 浏览量
2025-01-05 上传
2025-01-05 上传
2025-01-05 上传
2025-01-05 上传
锋锋老师
- 粉丝: 26
- 资源: 3838
最新资源
- formidable.css:一个CSS库,具有漂亮,可访问和可自定义的形式
- TobiasHall:我的个人资料库
- RTN(Visio图标)
- FRC2012Drive-roboRIO:Turtle Bot 的代码,2012 年与 roboRIO 相连的动力传动系统
- python爬虫demo
- Apple USB Ethernet Adapter(苹果USB网卡驱动.zip
- IPGeoLocation:检索IP地理位置信息
- PlayerBlockTracker:跟踪播放器放置的块
- 易语言-使用窗口_模糊遍历窗口() 取出本地已登录QQ帐号
- node-ble:用纯Node.js编写的蓝牙低功耗(BLE)库(无绑定)-Bluez通过DBus烘焙
- 延迟平衡器:用于平衡器Web ui的Nginx
- Fairy Tail HD Wallpapers Anime New Tab Theme-crx插件
- fortran个人上手练习项目
- 模块生成器
- here-vector-tile-examples:带有各种第三方网络地图渲染器的HERE Vector Tile API的示例
- 易语言-易语言编写一个音速启动