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

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

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

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

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

encoding: 0xF2058553
syntax : fmv.d.x fa0(f10), a1(x11)
result : fa0(f10) = 0x400921FB54442D18; fflags unchanged
位模式搬移视图
integer low bits
0x400921FB54442D18
unchanged payload
0x400921FB54442D18
writeback
fa0(f10) = 0x400921FB54442D18

FMV.D.X 只在 XLEN>=64 时定义,64 位双精度编码原样写入浮点寄存器;若 FLEN 更宽,按 NaN-boxing 形成有效较窄值。

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

快速理解与检索要点

FMV.D.X 只在 XLEN>=64 时定义,用于把整数寄存器 64 位原样写成双精度浮点编码。它不是整数到 double 的数值转换;若 FLEN 更宽,写入值按 NaN-boxing 规则表示。

D 扩展中该 64 位搬移形式要求 XLEN>=64。
传输位保持不变,包括非规范 NaN payload。
当 FLEN>64 时,双精度值按 NaN-boxing 规则形成有效较窄值。

常见使用场景

双精度位模式构造

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

NaN payload 保留

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

RV64 原始编码调试

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

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

FMV.D.X 会把整数数值转换成 double 吗?

不会。它把整数寄存器的 64 位作为双精度编码原样写入浮点寄存器;数值转换应使用 FCVT.D.L 或相关 FCVT 指令。

FMV.D.X 会设置 fflags 吗?

不会。它不执行舍入、算术或数值转换。