首页/指令库/VMFLE-VV
VMFLE.VV

RISC-V VMFLE.VV 指令详解

指令手册OPFVV

比较活动元素 vs2[i] 与vs1[i]是否小于等于,结果写入 vd 的对应掩码位。

指令语法

vmfle.vv vd, vs2, vs1[, v0.t]
操作数说明
vd 是单个 mask 寄存器:元素 i 的布尔结果在 bit i,与 SEW/LMUL 无关;不是 SEW 位 0/1 向量。
语法中的 [, v0.t] 是可选执行掩码;省略表示 vm=1,给出表示 vm=0。仅活动元素执行比较和设置 NV;inactive/tail 不保证清零。
mask 目标可为 v0;不同 EEW 的目的/源重叠须从源组最低寄存器开始,并强制 ma/ta。masked 数据源不可同时为 v0。动画固定 m1,因此 vd 可与数据源同名。
需 V 1.0、合法 vtype、VS/FS 已启用、所选浮点宽度受支持及有效 frm。vl=0 或 vstart≥vl 不更新任何目标位。动画固定 vstart=0、VLEN=4096,步骤不是处理器周期。
V向量浮点运算比较

指令行为说明

VMFLE.VV 是 RISC-V V 扩展的向量浮点比较指令。它在 vstart≤i<vl 的 body 范围内对活动元素计算 vs2[i] <= vs1[i],并把每个布尔结果写入目标掩码寄存器 vd 的对应位。vm=0 时 v0.t 选择活动元素,vm=1 表示不使用执行掩码;NaN、invalid 异常标志和 tail-agnostic 结果规则遵循官方 RVV 浮点比较语义。

VMFLE.VV 指令解析与执行动画

从 OP-V 编码解码到逐元素浮点比较:每个活动元素计算 vs2[i] <= vs1[i],并把布尔结果写入目标掩码位。

输入的指令
vmfle.vv
执行环境
LMULm1本动画固定的寄存器组倍数
VLEN4096固定向量寄存器长度(bits)
VLMAX128m1 下的最大元素数
vstart0本动画不展示 prestart 元素
frmRNE本指令不按 frm 舍入
FP stateFS enabledFS=Off 会触发非法指令;本动画固定展示 FS 已启用的架构路径
vta/vmata, ma尾部/非活动元素策略
opcode1010111OP-V 主操作码
编码字段
0x64861257
31..26
25
24..20
19..15
14..12
11..7
6..0
011001
funct6
0
vm
01000
vs2
01100
vs1
001
funct3
00100
vd
1010111
OP-V
执行数据路径

lane 0: 1 <= 0.5 -> mask=0

显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。

步骤 1 / 15
读取 OP-V 编码字段

V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。

逐元素结果
本次执行不置 NV长向量在模块内部横向滚动,不造成页面溢出。
i=0活动
1 <= 0.5
mask=0
i=1活动
1.5 <= 1
mask=0
i=2跳过
v0.t=0,不执行
--
i=3活动
2.5 <= 2
mask=0
i=4活动
-3 <= 2.5
mask=1
i=5活动
3.5 <= 3
mask=0
i=6跳过
v0.t=0,不执行
--
i=7活动
4.5 <= 4
mask=0

教学环境固定 VLEN=4096、LMUL=m1、vstart=0、合法 vtype、VS/FS 已启用、有效 frm=RNE 与 ta/ma,支持所选 binary32/64。两个向量源同宽;同名源必须提供相同初始位模式。vd 是单寄存器 mask,可为 v0,也可与数据源同起点重叠;不同 EEW 的合法重叠强制 mask/tail agnostic。masked 数据源不可为 v0,因为不能同时读取 EEW=1 掩码与 SEW 数据。非活动位不显示确定值,mask tail 始终 agnostic;VL=0 不更新任何目标位。NV 只表示本次执行是否置 invalid,不清除旧 fflags。比较不按 frm 舍入,但无效 frm 使用仍保留。步骤不是处理器周期。

SEW=32 / binary32 示例接受有限数值或完整 IEEE 十六进制位模式,因此可检查 qNaN/sNaN。活动元素写入目标掩码位 0/1,并在需要时显示本次执行的 fflags.NV。官方规则中,VMFEQ/VMFNE 仅在 signaling NaN 输入时置 invalid;VMFLT/VMFLE/VMFGT/VMFGE 对 signaling 或 quiet NaN 都置 invalid;除 VMFNE 遇 NaN 写 1 外,其它比较遇 NaN 写 0。

快速理解与检索要点

活动元素计算 vs2[i] <= vs1[i];每个布尔结果写成单个目标 mask 寄存器 vd 的 bit i。

32 位 OP-V:opcode=1010111、funct6=011001、funct3=001(OPFVV)。
活动元素计算 vs2[i] <= vs1[i],结果写入 vd.mask[i],不是 SEW 位整数或浮点结果。
省略 v0.t 表示 vm=1;给出 v0.t 表示 vm=0,只在 v0.mask[i]=1 的 body 元素上比较。
mask tail 始终 tail-agnostic,不受 vta 控制。inactive 按 vma;不同 EEW 的合法源/目标重叠强制 mask/tail agnostic。
mask 目标可为 v0。不同 EEW 的目的/源重叠须从源组最低寄存器开始;masked 数据源不能同时为 v0。
仅活动元素设置异常标志;有序比较遇 qNaN 或 sNaN 都置 NV。本指令遇任一 NaN 写 0,+0 与 -0 比较相等。
需要 V 1.0、VS/FS 已启用、合法 vtype、受支持的浮点宽度及有效 frm;比较不按 frm 舍入,但无效 frm 使用仍保留,包括 vl=0。
body 为 vstart≤i<vl;prestart 不更新。vl=0 或 vstart≥vl 时不更新任何目标位,包括 tail;正常完成后 vstart=0,vl 不变。

向量执行上下文

vd 是单个 mask 寄存器:元素 i 的布尔结果在 bit i,与 SEW/LMUL 无关;不是 SEW 位 0/1 向量。

语法中的 [, v0.t] 是可选执行掩码;省略表示 vm=1,给出表示 vm=0。仅活动元素执行比较和设置 NV;inactive/tail 不保证清零。

mask 目标可为 v0;不同 EEW 的目的/源重叠须从源组最低寄存器开始,并强制 ma/ta。masked 数据源不可同时为 v0。动画固定 m1,因此 vd 可与数据源同名。

需 V 1.0、合法 vtype、VS/FS 已启用、所选浮点宽度受支持及有效 frm。vl=0 或 vstart≥vl 不更新任何目标位。动画固定 vstart=0、VLEN=4096,步骤不是处理器周期。

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

常见使用场景

生成浮点比较掩码

假定 RV32/RV64 V 1.0、VS/FS 已启用、合法 e32,m1、VLEN≥128、vl=4、vstart=0、frm=RNE、ta/ma,源已初始化;未掩码。v2=[1.5,-0,2,1.5], v4=[1.5,0,1.5,1.5] → v1.mask[0..3]=[1,1,0,1],本次不置 NV,不清除旧 fflags;tail 始终 agnostic。

使用 v0.t 控制比较元素

假定 RV32/RV64 V 1.0、VS/FS 已启用、合法 e32,m1、VLEN≥128、vl=4、vstart=0、frm=RNE、ta/ma,源已初始化;未掩码。v2=[1.5,-0,2,1.5], v4=[1.5,0,1.5,1.5] → v1.mask[0..3]=[1,1,0,1],本次不置 NV,不清除旧 fflags;tail 始终 agnostic。

使用前检查清单

语法检查
  • vd 是单个 mask 寄存器:元素 i 的布尔结果在 bit i,与 SEW/LMUL 无关;不是 SEW 位 0/1 向量。
  • 语法中的 [, v0.t] 是可选执行掩码;省略表示 vm=1,给出表示 vm=0。仅活动元素执行比较和设置 NV;inactive/tail 不保证清零。
语义检查
  • mask 目标可为 v0;不同 EEW 的目的/源重叠须从源组最低寄存器开始,并强制 ma/ta。masked 数据源不可同时为 v0。动画固定 m1,因此 vd 可与数据源同名。
  • 需 V 1.0、合法 vtype、VS/FS 已启用、所选浮点宽度受支持及有效 frm。vl=0 或 vstart≥vl 不更新任何目标位。动画固定 vstart=0、VLEN=4096,步骤不是处理器周期。

容易混淆 / 常见误区

结果写入掩码寄存器布局,每个元素一位;它不是 0/-1 或 0/1 的普通整数向量。
比较类指令的目标是 mask,tail 元素按 tail-agnostic 处理;不要按普通浮点结果解释尾部位。
vm=0 时使用 v0.t 作为执行掩码;比较指令允许目标掩码 vd 与 v0 源掩码重叠。
VMFLE.VV 的第二源是同 lane 的向量元素 vs1[i];它没有标量 rs1 或 f[rs1] 操作数。
仅活动元素设置异常标志;有序比较遇 qNaN 或 sNaN 都置 NV。本指令遇任一 NaN 写 0,+0 与 -0 比较相等。

常见问题

VMFLE.VV写浮点向量吗?

不写。每个活动元素写入目标 mask vd 的一个位。

VMFLE.VV在 vm=0 时可以写 v0 吗?

可以。生成 mask 的比较指令允许覆盖源掩码 v0。

VMFLE.VV如何处理 NaN?

仅活动元素设置异常标志;有序比较遇 qNaN 或 sNaN 都置 NV。本指令遇任一 NaN 写 0,+0 与 -0 比较相等。