FMV.X.W

RISC-V FMV.X.W 指令详解

指令手册R-type

把单精度浮点编码按位复制到整数寄存器。

指令语法

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

指令行为说明

FMV.X.W 将 f[rs1] 中的单精度浮点编码按位复制到 x[rd];在 RV64 上结果的 bit 31 会被复制到整数寄存器高 32 位。这是位移动,不是浮点到整数数值转换;不会舍入,也不会设置浮点异常标志。

FMV.X.W 指令解析与执行动画

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

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

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

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

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

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

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

快速理解与检索要点

FMV.X.W 从浮点寄存器取单精度 32 位编码并写入整数寄存器。它保留原始位模式;RV64 上整数结果不是零扩展,而是用 bit31 填充高 32 位。

OP-FP 编码使用 fmt=S,固定字段选择 FMV.X.W 位搬移形式。
这是位模式搬移,不使用 rm,不舍入,不设置浮点异常标志。
RV64 上 x[rd] 的高 32 位由源单精度 bit31 填充。

常见使用场景

浮点位模式检查

结合 «fmv.x.w x10, f0 # x10[31:0] = f0 bits; RV64: x10[63:32]=sign» 等实际代码理解该场景。

NaN payload 保留

结合 «fmv.x.w x10, f0 # x10[31:0] = f0 bits; RV64: x10[63:32]=sign» 等实际代码理解该场景。

调试原始编码

结合 «fmv.x.w x10, f0 # x10[31:0] = f0 bits; RV64: x10[63:32]=sign» 等实际代码理解该场景。

使用前检查清单

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

容易混淆 / 常见误区

这是位复制,不是 FCVT 数值转换。
不使用 rm,也不会设置 fflags。
目标整数寄存器保存的是编码位模式;RV64 上高位按 bit 31 符号扩展,不是舍入后的整数。

常见问题

FMV.X.W 会把浮点数转换成整数吗?

不会。它复制单精度编码位;需要数值转换时使用 FCVT.W.S 或相关 FCVT 指令。

FMV.X.W 在 RV64 上高 32 位是什么?

官方规则是把源 bit31 复制到整数寄存器高 32 位,因此结果可能表现为符号扩展的 64 位位模式。