1. 浮点寄存器状态
"F"扩展加入了32个32位宽度的浮点寄存器f0~f31和一个浮点控制/状态寄存器fcsr,它用来记录浮点操作模式和异常状态。 浮点寄存器的宽度用FLEN来描述,对于单精度单元来讲FLEN=32。浮点指令一般都是浮点寄存器中的我呢见进行操作,load和store 则在储存器和浮点寄存器之间传输数据。同时也有从整数寄存器中读写数据的指令。
虽然整数、浮点可以采用统一的寄存器文件,甚至这样还可以简化软件上寄存器的分配和调用约定,但是分开以后可以简化浮点单元内部结构,容易于增加寄存器总数,为超标量计算提供强力支持。
2. 浮点控制/状态寄存器
浮点控制/状态寄存器fcsr属于一个RISC-V控制/状态寄存器(CSR)。它是一个32位读/写寄存器,用于浮点算术操作选择动态的舍入模式,并保存产生异常标志,如下。
控制/状态寄存器fcsr可以用FRCSR/FSCSR指令来实施读写操作,但它们均由底层的CSR访问指令实现。
FRCSR通过将fcsr的值复制到整数寄存器rd中来实现读取操作。
FSCSR通过将fcsr原来的值复制到rd,然后将整数寄存器rs1中的值写入fcsr来实现写操作。
fcsr中的字段也可以通过不同的CSR寻址方式来单独访问,并为这些访问在汇编上定义了伪指令。
FRRM指令读取舍入模式字段frm,并将其复制到整数寄存器rs1最低3位中,其他位置0。
FSRM通过将frm的旧值复制到整数寄存器rd中,然后将整数寄存器rs1中的低3位中的值作为新值写入frm中,来实现交换frm。
FRFLA