RV32F
32位整数和32位浮点数的转换:
fmv.s.x rd, rs1 f[rd] = x[rs1][31:0]
fmv.x.s rd, rs1 x[rd] = f[rs1][31:0]
RV32D
32位整数和64位浮点数的交换,需要两个x
寄存器来存储一个f
寄存器的值,没有直接指令可以用。首先将f
寄存器存储到堆栈,然后从堆栈读到两个x
寄存器:
假设64位浮点数保存在 f8
,用两个32位整数寄存器 x8
、x9
组合表示64位。
反过来也类似:
RV64F
64位整数和32位浮点数的交换,64位整数寄存器仅使用低32位:
fmv.s.x rd, rs1 f[rd] = x[rs1][31:0]
fmv.x.s rd, rs1 x[rd] = sext(f[rs1][31:0])
RV64D
64位整数和64位浮点数的交换:
fmv.d.x rd, rs1 f[rd] = x[rs1][63:0]
fmv.x.d rd, rs1 x[rd] = f[rs1][63:0]