FMV.X.H

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

指令手册R-type

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

指令语法

fmv.x.h rd, rs1
操作数说明
rd:整数寄存器 x0–x31;x0 丢弃写回。
rs1:唯一的浮点源 f0–f31。没有立即数或 rm 操作数。
编码 rs2=00000 是固定选择子,不是第二个源寄存器;同编号 x/f 属于不同寄存器文件。
ZfhZfhmin浮点位搬移

扩展条件:RV32/RV64,要求 Zfh 1.0 或 Zfhmin 1.0(均依赖 F)。 标准特权架构中,浮点状态 FS=Off 时访问浮点状态产生非法指令异常。

指令行为说明

FMV.X.H 由 Zfh 或 Zfhmin 提供(两者都依赖 F),将 f[rs1] 中的半精度浮点编码按位复制到 x[rd];bit 15 会复制到整数寄存器的高 XLEN-16 位。这是位移动,不是浮点到整数数值转换;不会舍入,也不会设置浮点异常标志。

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

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

rd
rs1
fmv.x.h
,
执行环境
fmt=H (10)
FLEN>=32; H payload=16

假定所需扩展存在且浮点状态已启用。整数源输入覆盖 XLEN 位;浮点源输入只提供所选格式的位片段,上方 NaN-box 位被忽略。

31..27
26..25
24..20
19..15
14..12
11..7
6..0
11100
funct5=to-x
10
fmt=H
00000
rs2=00000
01011
rs1
000
funct3=000
01010
rd
1010011
OP-FP
执行数据路径
instruction
0xE4058553
opcode
1010011 -> OP-FP
funct5/fmt
11100 + 10 -> funct7 1110010
rs2
00000 fixed for FMV.X.H
rd/rs1
a0(x10) / fa1(f11)
read bits
fa1(f11) = 0xC100
bit move
copy 16 bits; sign-extend bit15 -> 0xFFFFC100
write
尚未写回
当前步骤

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

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

encoding: 0xE4058553
syntax : fmv.x.h a0(x10), fa1(f11)
result : 尚未写回
位模式搬移视图
FP source bits
0xC100
unchanged payload
0xC100
writeback
尚未写回

FMV.X.H 将半精度 bit15 符号扩展到 XLEN=32 的高位;不进行数值转换。

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

快速理解与检索要点

FMV.X.H 的核心是“位模式搬移”。如果想按数值转换并舍入,应查 FCVT;如果想保留 NaN payload 或检查原始编码,才使用 FMV 类指令。

32 位 OP-FP 编码:funct7=1110010、rs2=00000、funct3=000、opcode=1010011;rs2 是固定选择子,不是汇编操作数。
FMV.X.H 可由 Zfh 或 Zfhmin 提供;两者都依赖 F。
FMV 类指令不使用 rm 字段。
位移动不规范化 NaN,也不按数值大小改变输入;FMV.X.H 把 bit 15 复制到整数寄存器高位。
浮点位传出忽略高位 NaN-boxing;位传入在 FLEN 大于有效位宽时把高位全部置 1。

常见使用场景

浮点位移动

结合 «fmv.x.h x10, f0 # f0[15:0]=0xC100 -> RV32: 0xFFFFC100; RV64: 0xFFFFFFFFFFFFC100» 等实际代码理解该场景。

调试与位模式检查

结合 «fmv.x.h x10, f0 # f0[15:0]=0xC100 -> RV32: 0xFFFFC100; RV64: 0xFFFFFFFFFFFFC100» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd:整数寄存器 x0–x31;x0 丢弃写回。
  • rs1:唯一的浮点源 f0–f31。没有立即数或 rm 操作数。
  • 编码 rs2=00000 是固定选择子,不是第二个源寄存器;同编号 x/f 属于不同寄存器文件。
语义检查
  • 确认这是位复制,不是浮点/整数数值转换。
  • 确认目标寄存器方向、符号扩展或 NaN-boxing 规则符合该 FMV 变体。

容易混淆 / 常见误区

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

常见问题

FMV.X.H 和 FCVT 有什么区别?

FMV 复制位模式;FCVT 执行数值转换,可能舍入并设置异常标志。

FMV.X.H 会设置 fflags 吗?

不会。它不是算术或数值转换。