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 指令解析与执行动画

展示 D 扩展 FMV 位模式搬移:解析 OP-FP 编码,读取源寄存器位模式,按官方规则不做数值转换地写回目标寄存器。

rd
rs1
fmv.x.d
,
执行环境
fmt=D (01)
FLEN>=64
31..27
26..25
24..20
19..15
14..12
11..7
6..0
11100
funct5=to-x
01
fmt=D
00000
rs2=00000
01011
rs1
000
funct3=000
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE2058553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + 01 -> funct7 1110001
rs2
00000 fixed for FMV.X.D
rd/rs1
a0(x10) / fa1(f11)
read bits
fa1(f11) = 0x400921FB54442D18
bit move
copy 64-visible bits -> 0x400921FB54442D18
write
a0(x10) = 0x400921FB54442D18; fflags unchanged
当前步骤

Fetch:展示 32-bit OP-FP 编码

机器码按 R-type OP-FP 字段切分;FMV 位搬移指令使用 opcode 1010011。

encoding: 0xE2058553
syntax : fmv.x.d a0(x10), fa1(f11)
result : a0(x10) = 0x400921FB54442D18; fflags unchanged
位模式搬移视图
FP source bits
0x400921FB54442D18
unchanged payload
0x400921FB54442D18
writeback
a0(x10) = 0x400921FB54442D18

FMV.X.D 只在 XLEN>=64 时定义,双精度 64 位编码原样写入整数寄存器,不设置 fflags。

该动画只展示 RISC-V D 扩展 FMV 的 ISA 可见编码和位模式搬移;不模拟 FPU 流水线、浮点数值解释、异常处理或微架构实现。

快速理解与检索要点

FMV.X.D 只在 XLEN>=64 时定义,用于把双精度 64 位编码原样移动到整数寄存器。它不把 double 转成整数数值,也不会规范化 NaN payload。

D 扩展中该 64 位搬移形式要求 XLEN>=64。
传输位保持不变,包括非规范 NaN payload。
不使用 rm,不舍入,不设置浮点异常标志。

常见使用场景

双精度位模式检查

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

NaN payload 保留

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

RV64 原始编码调试

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

使用前检查清单

语法检查
  • rd/rs 字段按指令方向分别表示整数寄存器或浮点寄存器。
  • FMV 类指令复制位模式,不执行 FCVT 数值转换,也不使用 rm。
语义检查
  • 确认这是位复制,不是浮点/整数数值转换。
  • 确认目标寄存器方向、符号扩展或 NaN-boxing 规则符合该 FMV 变体。

容易混淆 / 常见误区

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

常见问题

FMV.X.D 能在 RV32 使用吗?

不能。官方 D 扩展只在 XLEN>=64 时定义 FMV.X.D / FMV.D.X 这类 64 位整数/浮点寄存器搬移。

FMV.X.D 和 FCVT.L.D 有什么区别?

FMV.X.D 保留 64 位编码位;FCVT.L.D 执行双精度到 64 位整数的数值转换,可能舍入并设置 fflags。