首页/指令库/FMVH-X-D
FMVH.X.D

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

指令手册R-type

在 RV32 上把双精度浮点寄存器的高 32 位复制到整数寄存器。

指令语法

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

指令行为说明

FMVH.X.D 是 Zfa 为 RV32+D 提供的位移动指令,将 f[rs1] 的 bit 63:32 复制到 x[rd]。它与 FMV.X.W 配合可把一个双精度编码拆到两个整数寄存器中;这是位复制,不是数值转换。

FMVH.X.D 指令解析与执行动画

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

rd
rs1
fmvh.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
00001
rs2=00001
01011
rs1
000
funct3=000
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE2158553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + 01 -> funct7 1110001
rs2
00001 fixed for FMVH.X.D
rd/rs1
a0(x10) / fa1(f11)
read bits
fa1(f11) = 0xC00921FB54442D18
bit move
copy FP bits63:32 -> 0xC00921FB
write
a0(x10) = 0xC00921FB; fflags unchanged
当前步骤

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

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

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

FMVH.X.D 仅在 RV32+D+Zfa 上定义,复制 f[rs1] 的 bits 63:32 到 x[rd];它与 FMV.X.W 共同传输双精度位模式。

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

快速理解与检索要点

FMVH.X.D 用来补齐 RV32 上双精度 64 位编码和 32 位整数寄存器之间的位搬移路径。页面重点是位顺序和“不是数值转换”。

FMVH.X.D 取高 32 位;FMVP.D.X 用 rs1 提供低 32 位、rs2 提供高 32 位。
这些指令不使用 rm,也不会改变 NaN payload。

常见使用场景

浮点位移动

结合 «fmvh.x.d x10, f11 ; x10 = f11[63:32] (RV32 only)» 等实际代码理解该场景。

RV32 双精度数据搬移

结合 «fmvh.x.d x10, f11 ; x10 = f11[63:32] (RV32 only)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

仅用于 RV32+D 的双精度位搬移场景;RV64 通常使用 FMV.X.D/FMV.D.X。
这是位复制,不是 FCVT 数值转换。
不会设置浮点异常标志。

常见问题

FMVH.X.D 是 FCVT 吗?

不是。它只复制位模式,不按数值解释并转换。

FMVH.X.D 为什么强调 RV32?

因为 RV32 整数寄存器只有 32 位,需要成对搬移 64 位双精度编码。