首页/指令库/VFMIN-VF
VFMIN.VF

RISC-V VFMIN.VF 指令详解

指令手册R-type

比较vs2每个元素与f[rs1],将较小者写入vd。

指令语法

vfmin.vf vd, vs2, rs1, vm
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
VZvfh向量运算浮点

指令行为说明

VFMIN.VF 逐元素比较浮点操作数,并按 RISC-V 浮点 min/max 规则选择较小值写入 vd。它不是 FMA 指令;NaN、sNaN invalid flag 和有符号零行为遵循标量 FMIN/FMAX 规则。 向量 FP32/FP64 操作需要相应标量 F/D 支持;FP16 由相应向量半精度扩展控制,基础 V 扩展不自动包含半精度算术。

快速理解与检索要点

VFMIN.VF 是向量浮点最小值选择,页面应按 FMIN/FMAX 语义理解 NaN 和有符号零。

一个 NaN 与一个数值操作数的情况不等同于普通 NaN 传播;sNaN 仍按规则设置 invalid flag。
只对 vl 范围内的活动元素执行;非活动元素和尾部元素受当前 vma/vta 策略影响。
vm=0 使用 v0 作为执行掩码,vm=1 表示不使用掩码。
浮点算术和转换遵循 RVV 浮点规则;普通浮点舍入来自 frm,定点 vxrm 不控制这些指令。
向量 FP32/FP64 操作需要相应标量 F/D 支持;FP16 由相应向量半精度扩展控制,基础 V 扩展不自动包含半精度算术。

常见使用场景

信号处理

结合 «vsetvli t0, a0, e32, m1, ta, ma vfmin.vf v1, v2, ft0 # v1[i] = min(v2[i], ft0)» 等实际代码理解该场景。

阈值裁剪

结合 «vsetvli t0, a0, e32, m1, ta, ma vfmin.vf v1, v2, ft0 # v1[i] = min(v2[i], ft0)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

不要把 NaN 行为简单理解为“任一操作数为 NaN 就传播 NaN”;应按 RISC-V FMIN/FMAX 规则处理。
这是选择最值,不是饱和运算,也不是 FMA。
向量 FP32/FP64 操作需要相应标量 F/D 支持;FP16 由相应向量半精度扩展控制,基础 V 扩展不自动包含半精度算术。

常见问题

这些指令使用 vxrm 吗?

不使用。浮点算术和转换使用 frm 或指令规定的固定舍入;vxrm 用于定点舍入指令。