VMFNE.VV 写入普通向量元素吗?
不写。VMFNE.VV 写目标掩码 vd,每个活动元素产生一个布尔位。
逐元素执行浮点不相等比较,并把布尔结果写入目标掩码 vd。
VMFNE.VV 是 RISC-V V 扩展的向量浮点比较指令。它在 vl 范围内对活动元素计算 vs2[i] != 同 lane 的 vs1[i],并把每个布尔结果写入目标掩码寄存器 vd 的对应位。vm=0 时 v0.t 选择活动元素,vm=1 表示不使用执行掩码;NaN、invalid 异常标志和 tail-agnostic 结果规则遵循官方 RVV 浮点比较语义。
从 OP-V 编码解码到逐元素浮点比较:每个活动元素计算 vs2[i] != vs1[i],并把布尔结果写入目标掩码位。
lane 0: 1 != 0.5 -> mask=1
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
教学环境固定 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。VMFNE.VV 的核心是从 OP-V 编码解码出 vv 形式,对活动元素计算 vs2[i] != 同 lane 的 vs1[i],并把 true/false 写成目标 mask 位。
活动元素计算 vs2[i] != vs1[i],写单个 mask 寄存器的 bit i。任一 NaN 写1,仅 sNaN 置 NV;+0/-0 相等,inactive 不置 NV。
32 位 OP-V:opcode=1010111、funct6=011100、funct3=001。[, v0.t] 可选:省略为 vm=1,给出为 vm=0。
mask 目标可为 v0;与数据源不同 EEW 的重叠须从源组最低寄存器开始,并强制 ma/ta。masked 数据源不可为 v0。两个同名源必须提供相同初始位模式。
需 V 1.0、合法 vtype、VS 已启用与受支持 SEW,以及 FS 已启用、受支持浮点格式、有效 frm(即使比较不舍入)。body 为 vstart≤i<vl;prestart 不更新,inactive 按 vma,mask tail 始终 agnostic。vl=0 或 vstart≥vl 不更新任何目标(含 tail)。动画固定 m1、VLEN=4096、vstart=0;步骤不是处理器周期。
假定 RV32/RV64 V 1.0、VS 已启用、合法 e32,m1、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE,未掩码;v2=[1.5,-0,2,1.5], v4=[1.5,0,1.5,1.5] → v1.mask[0..3]=[0,0,1,0]。本次不置 NV,不清除旧 fflags;mask tail 始终 agnostic。
假定 RV32/RV64 V 1.0、VS 已启用、合法 e32,m1、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE,未掩码;v2=[1.5,-0,2,1.5], v4=[1.5,0,1.5,1.5] → v1.mask[0..3]=[0,0,1,0]。本次不置 NV,不清除旧 fflags;mask tail 始终 agnostic。
假定 RV32/RV64 V 1.0、VS 已启用、合法 e32,m1、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE,未掩码;v2=[1.5,-0,2,1.5], v4=[1.5,0,1.5,1.5] → v1.mask[0..3]=[0,0,1,0]。本次不置 NV,不清除旧 fflags;mask tail 始终 agnostic。
不写。VMFNE.VV 写目标掩码 vd,每个活动元素产生一个布尔位。
可以。官方 V 规范允许生成 mask 的比较指令目标与源 mask v0 重叠,这一点不同于普通 masked vector 指令。
仅活动比较处理 NaN:VMFNE 遇任一 NaN 写1,仅 sNaN 置 NV。