有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 新ちゃん 于 2020-10-1 13:01 编辑
RV32F32位整数和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]
完
|