FMV.D.X

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

指令手册R-type

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

指令语法

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

指令行为说明

FMV.D.X 在整数寄存器和浮点寄存器之间搬移 IEEE 754 双精度 64 位编码。它不修改被传输位,也不规范化 NaN 载荷;该形式仅在 XLEN>=64 时定义。当 FLEN>64 时,写入浮点寄存器的双精度值按 NaN-boxing 规则形成有效较窄值。

快速理解与检索要点

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

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

常见使用场景

浮点基本运算

结合 «fmv.d.x f0, x10 # f0 gets bits from x10 (NaN-boxed if FLEN>64)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

FMV.D.X 会舍入吗?

不会。它只是位搬移。

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

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