RISC-V指令集手册:软浮点调用与RV32E约定解析

需积分: 50 286 下载量 74 浏览量 更新于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架构的兼容性和灵活性。