首页/指令库/VFMV-F-S
VFMV.F.S

RISC-V VFMV.F.S 指令详解

指令手册V-type (OP-V / OPFVV)

将vs2的元素0(浮点)复制到标量f寄存器rd。

指令语法

vfmv.f.s rd, vs2
操作数说明
语法 rd, vs2;rd 是浮点 f0–f31(或 ABI 名称),vs2 是单个向量寄存器;只复制 vs2[0] 的 SEW 位。
funct6=010000、funct3=001、vs1=00000、vm=1;vm=0 保留,没有执行掩码操作数。
忽略 LMUL 和向量寄存器组;即使 vstart≥vl 或 vl=0 也写浮点标量。写入比 FLEN 窄的结果时,上方位全为 1,形成有效 NaN-box。
V 支持 FP32/FP64 并依赖 F/D;SEW=16 的此搬移需 Zvfh。动画只展示 SEW=FLEN=64 的有限值位复制,不展示浮点异常标志。
要求合法 vtype、受支持的浮点宽度和对应标量浮点扩展、VS/FS 已启用;H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留,即使 vl=0 或不依赖舍入;vxrm 不控制浮点运算。
V向量运算寄存器移动

指令行为说明

VFMV.F.S 将向量源 vs2 的 SEW 宽元素 0 复制到浮点标量寄存器 rd。它忽略 LMUL 和向量寄存器组;即使 vstart >= vl 或 vl=0 也执行。vm=0 的掩码编码保留,因此该指令以 vm=1 执行。SEW=16 时只有实现 Zvfh 才定义该指令。

VFMV.F.S 指令解析与执行动画

教学环境固定 SEW=FLEN=64、VLEN=4096、合法 vtype、frm=RNE、VS/FS 已启用且支持所选 vstart;输入先表示为有限 binary64,再复制位模式。模型展示搬移、编码和 vstart/vl 条件,不模拟 NaN、异常标志或微架构。

输入的指令
执行环境
FP stateFS enabledFS=Off 会触发非法指令
编码字段
funct6=010000 | vm=1 | vs2=v8 | vs1/rs1=00000 | funct3=001 | vd/rd=00000 | opcode=1010111
hex: 0x42801057

两种 element-0 浮点标量搬移的 vm=0 编码均保留。

架构可见数据路径

v8[0] -> f[ft0]

步骤 1 / 4

VFMV.F.S 使用 OP-V;vm 固定为 1,vm=0 的掩码编码保留。

快速理解与检索要点

VFMV.F.S 是向量元素 0 到浮点标量寄存器的搬移。

不要把它当作受普通执行掩码控制的逐元素向量算术。

向量执行上下文

语法 rd, vs2;rd 是浮点 f0–f31(或 ABI 名称),vs2 是单个向量寄存器;只复制 vs2[0] 的 SEW 位。

funct6=010000、funct3=001、vs1=00000、vm=1;vm=0 保留,没有执行掩码操作数。

忽略 LMUL 和向量寄存器组;即使 vstart≥vl 或 vl=0 也写浮点标量。写入比 FLEN 窄的结果时,上方位全为 1,形成有效 NaN-box。

V 支持 FP32/FP64 并依赖 F/D;SEW=16 的此搬移需 Zvfh。动画只展示 SEW=FLEN=64 的有限值位复制,不展示浮点异常标志。

要求合法 vtype、受支持的浮点宽度和对应标量浮点扩展、VS/FS 已启用;H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留,即使 vl=0 或不依赖舍入;vxrm 不控制浮点运算。

The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, Chapter 31

常见使用场景

归约结果提取

假定 V/VS/FS 已启用、合法 vtype、frm=RNE、e32,m1 与所需浮点格式可用、FLEN=64、VLMAX≥4、a0=4,vsetvli 后 vstart=0。写回 ft0 时形成有效的 binary32 NaN-box。示例未掩码:v1[0]=2.25 → ft0=2.25。此形式只写浮点标量,不更新向量目的。

标量-向量接口

假定 V/VS/FS 已启用、合法 vtype、frm=RNE、e32,m1 与所需浮点格式可用、FLEN=64、VLMAX≥4、a0=4,vsetvli 后 vstart=0。写回 ft0 时形成有效的 binary32 NaN-box。示例未掩码:v1[0]=2.25 → ft0=2.25。此形式只写浮点标量,不更新向量目的。

使用前检查清单

语法检查
  • 语法 rd, vs2;rd 是浮点 f0–f31(或 ABI 名称),vs2 是单个向量寄存器;只复制 vs2[0] 的 SEW 位。
  • funct6=010000、funct3=001、vs1=00000、vm=1;vm=0 保留,没有执行掩码操作数。
语义检查
  • 忽略 LMUL 和向量寄存器组;即使 vstart≥vl 或 vl=0 也写浮点标量。写入比 FLEN 窄的结果时,上方位全为 1,形成有效 NaN-box。
  • V 支持 FP32/FP64 并依赖 F/D;SEW=16 的此搬移需 Zvfh。动画只展示 SEW=FLEN=64 的有限值位复制,不展示浮点异常标志。
  • 要求合法 vtype、受支持的浮点宽度和对应标量浮点扩展、VS/FS 已启用;H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留,即使 vl=0 或不依赖舍入;vxrm 不控制浮点运算。

容易混淆 / 常见误区

只复制元素 0,不复制整条向量;即使 vstart >= vl 或 vl=0 也执行。
目的寄存器是浮点标量寄存器;整数版本是 VMV.X.S。

常见问题

它会复制整条向量吗?

不会。它只读取 vs2 的元素 0 并写入浮点标量寄存器 rd。