新ちゃん 发表于 2020-10-1 12:12:10

RISC-V 整数寄存器(x0~x31)与浮点寄存器(f0~f31)数据交换

本帖最后由 新ちゃん 于 2020-10-1 13:01 编辑

RV32F32位整数和32位浮点数的转换:
fmv.s.x rd, rs1 f = x
fmv.x.s rd, rs1 x = f
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 = xfmv.x.s rd, rs1 x = sext(f)
RV64D
64位整数和64位浮点数的交换:
fmv.d.x rd, rs1 f = x
fmv.x.d rd, rs1 x = f

页: [1]
查看完整版本: RISC-V 整数寄存器(x0~x31)与浮点寄存器(f0~f31)数据交换