首页/指令库/整数寄存器对移入双精度位模式
FMVP.D.X

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

指令手册R-type

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

指令语法

fmvp.d.x rd, rs1, rs2
操作数说明
rd:浮点 f0–f31,f0 可写;rs1、rs2:独立整数源 x0–x31,分别提供低、高 32 位。
x0 读零;同一源寄存器的两半字必须相同。不要求源相邻或偶数;无 rm、rs3 或立即数。
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

假定 RV32、D 和 Zfa 存在且浮点状态已启用;x0 所在半字必须为零,相同整数源的两半字必须相同。更宽 FLEN 的目标高位写 1。

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
尚未读取源寄存器
bit move
等待 Execute 拼接
write
尚未写回
当前步骤

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 : 尚未写回
位模式搬移视图
a1(x11) low 32
0x54442D18
a2(x12) high 32
0x400921FB
assembled double bits
等待 Execute 拼接
writeback
尚未写回

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 位整数寄存器之间的位搬移路径。页面重点是位顺序和“不是数值转换”。

仅 RV32 Zfa+D,且浮点状态须已启用;rd 选择 f0–f31,rs1 和 rs2 分别选择独立的整数 x0–x31。
32 位 OP-FP R-type:funct7=1011001、rs2[24:20]、rs1[19:15]、funct3=000、rd[11:7]、opcode=1010011。没有 rm 或立即数。
f[rd][63:0] = (x[rs2][31:0] << 32) | x[rs1][31:0];rs1 是低半字,rs2 是高半字。相同源寄存器提供相同初值,x0 提供零。
这是位复制,不做 FCVT 数值转换、不舍入、不规范化 NaN payload,也不设置浮点异常标志。FLEN>64 时结果高位写 1,形成有效 NaN-box。

常见使用场景

浮点位移动

假定 RV32 Zfa+D、浮点状态启用,x11=0x89ABCDEF、x12=0x01234567:示例写 f10[63:0]=0x0123456789ABCDEF,fflags 不变。FLEN=128 时高 64 位全为 1;此例不按浮点数值解释位模式。

RV32 双精度数据搬移

假定 RV32 Zfa+D、浮点状态启用,x11=0x89ABCDEF、x12=0x01234567:示例写 f10[63:0]=0x0123456789ABCDEF,fflags 不变。FLEN=128 时高 64 位全为 1;此例不按浮点数值解释位模式。

使用前检查清单

语法检查
  • rd:浮点 f0–f31,f0 可写;rs1、rs2:独立整数源 x0–x31,分别提供低、高 32 位。
  • x0 读零;同一源寄存器的两半字必须相同。不要求源相邻或偶数;无 rm、rs3 或立即数。
语义检查
  • 确认这是位复制,不是浮点/整数数值转换。
  • 确认目标寄存器方向、符号扩展或 NaN-boxing 规则符合该 FMV 变体。

容易混淆 / 常见误区

仅在 RV32 且同时支持 Zfa 与 D 时定义;不是 RV64 指令。rs1、rs2 独立编码,不要求相邻或偶数寄存器。
这是位复制,不是 FCVT 数值转换。
不会设置浮点异常标志。

常见问题

FMVP.D.X 是 FCVT 吗?

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

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

该指令仅在 RV32 Zfa+D 中定义,把两个独立选择的 32 位整数源拼成 64 位双精度位模式;不是 RV64 指令。