FMV.X.D

RISC-V FMV.X.D 指令详解

指令手册R-type

RV64 双精度位模式搬移:从浮点寄存器到整数寄存器,不做数值转换。

指令语法

fmv.x.d rd, rs1
操作数说明
rd/rs 字段按指令方向分别表示整数寄存器或浮点寄存器。
FMV 类指令复制位模式,不执行 FCVT 数值转换,也不使用 rm。
D浮点转换

指令行为说明

FMV.X.D 在整数寄存器和浮点寄存器之间搬移 IEEE 754 双精度 64 位编码。它不修改被传输位,也不规范化 NaN 载荷;该形式仅在 XLEN>=64 时定义。它把 f[rs1] 的双精度编码写入 x[rd],不设置浮点异常标志。

快速理解与检索要点

FMV.X.D 适合保存或重解释双精度编码位;它不等同于 FCVT。

传输位保持不变,包括非规范 NaN 载荷。
官方 D 扩展只在 XLEN>=64 时提供该 64 位搬移形式。

常见使用场景

浮点基本运算

结合 «fmv.x.d x10, f0 # x10 = bits of f0 (RV64)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

这是位模式搬移,不是整数/浮点数值转换;需要数值转换时使用 FCVT。
仅 XLEN>=64 定义;RV32 没有 FMV.D.X/FMV.X.D。
不会设置浮点异常标志,也不会把 NaN 载荷规范化。

常见问题

FMV.X.D 会舍入吗?

不会。它只是位搬移。

FMV.X.D 和 FCVT 有何区别?

FMV 保留编码位;FCVT 执行数值转换并可能舍入或设置异常标志。