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

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

指令手册R-type

在 RV32 上把两个整数寄存器拼成一个双精度浮点寄存器位模式。

指令语法

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

指令行为说明

FMVP.D.X 是 Zfa 为 RV32+D 提供的位移动指令,把 x[rs1] 作为低 32 位、x[rs2] 作为高 32 位组合后写入 f[rd]。这是位复制,不执行整数到浮点数值转换,也不设置浮点异常标志。

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

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

rd
rs1
rs2
fmvp.d.x
,
,
执行环境
fmt=D (01)
FLEN>=64
31..27
26..25
24..20
19..15
14..12
11..7
6..0
10110
funct5=to-f
01
fmt=D
01100
rs2 (high word)
01011
rs1
000
funct3=000
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xB2C58553
opcode
1010011 -> OP-FP
funct5/fmt
10110 + 01 -> funct7 1011001
rs2
01100 -> a2(x12) (high word)
rd/rs1
fa0(f10) / a1(x11) (low) / a2(x12) (high)
read bits
a1(x11)[31:0]=0x54442D18; a2(x12)[31:0]=0x400921FB
bit move
concatenate rs2[31:0]:rs1[31:0] -> 0x400921FB54442D18
write
fa0(f10) = 0x400921FB54442D18; fflags unchanged
当前步骤

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

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

encoding: 0xB2C58553
syntax : fmvp.d.x fa0(f10), a1(x11), a2(x12)
result : fa0(f10) = 0x400921FB54442D18; fflags unchanged
位模式搬移视图
a1(x11) low 32
0x54442D18
a2(x12) high 32
0x400921FB
assembled double bits
0x400921FB54442D18
writeback
fa0(f10) = 0x400921FB54442D18

FMVP.D.X 仅在 RV32+D+Zfa 上定义:x[rs1] 提供 bits 31:0,x[rs2] 提供 bits 63:32,合成为原样双精度位模式写入 f[rd]。

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

快速理解与检索要点

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

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

常见使用场景

浮点位移动

结合 «fmvp.d.x f10, x11, x12 ; f10 = {x12, x11} (RV32 double)» 等实际代码理解该场景。

RV32 双精度数据搬移

结合 «fmvp.d.x f10, x11, x12 ; f10 = {x12, x11} (RV32 double)» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

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

常见问题

FMVP.D.X 是 FCVT 吗?

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

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

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