汇编指令全是f开头;转换指令都是fcvt..(s->single,d->double,w->word,wu->word unsigned);存取数指令是word和doubleword;RV32F的存取数指令第12位为0,RV32D为1;RV32F的其他指令第25位为0,RV32D为1
32个f寄存器
为啥不用x寄存器存浮点数?因为这样会增加指令格式中寄存器字段的长度
增加一组f寄存器对于指令集有什么影响?需要增加f寄存器和内存之间、f寄存器和x寄存器之间的数据传输指令
RV32F和RV32D对于f寄存器的使用有什么区别?RV32F使用单精度数据,故只用f寄存器的低32位
f寄存器和x寄存器在ABI上的主要区别?f寄存器没有硬连线0,且只有s、a、t三类
浮点算数的舍入模式
浮点计算:四则运算、求平方根、取最小值和最大值、先将两个操作数相乘然后将乘积或对乘积取负后加上或减去第三个操作数最后将结果写入目的寄存器[R4-type]
比较:等于feq、小于flt、小于等于fle;会把比较结果写入x寄存器;可以结合RV32I中的branch指令来实现条件分支
存取数:flw、fsw、fld、fsd
浮点转换fcvt:s、d、w、wu四个之间的转换,不包括w和wu之间的转换
数据传送fmv:支持x寄存器和f寄存器之间的直接数据传送 fmv.x.w fmv.w.x
复制并操作符号位:
伪指令:
复制fmv、取反fneg、取绝对值fabs分别对应fsgnj、fsgnjn、fsgnjx
对浮点数据分类:
fclass检查源操作数rs1(f寄存器)满足下面10种浮点数属性的哪一种,将结果写入目的操作数rd(x寄存器)的低10位
10位种仅有1位为1,其余位为0