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​​寄存器:

fsd f8, 0(x2)
lw x8, 0(x2)
lw x9, 4(x2)

假设64位浮点数保存在 ​​f8​​​ ,用两个32位整数寄存器 ​​x8​​​、​​x9​​ 组合表示64位。

反过来也类似:

sw x8, 0(x2)
sw x9, 4(x2)
fld f8, 0(x2)

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]​