VMFEQ.VF 写入普通向量元素吗?
不写。VMFEQ.VF 写目标掩码 vd,每个活动元素产生一个布尔位。
逐元素执行浮点相等比较,并把布尔结果写入目标掩码 vd。
VMFEQ.VF 是 RISC-V V 扩展的向量浮点比较指令。它在 vl 范围内对活动元素计算 vs2[i] == 浮点标量 f[rs1],并把每个布尔结果写入目标掩码寄存器 vd 的对应位。vm=0 时 v0.t 选择活动元素,vm=1 表示不使用执行掩码;NaN、invalid 异常标志和 tail-agnostic 结果规则遵循官方 RVV 浮点比较语义。
从 OP-V 编码解码到逐元素浮点比较:每个活动元素计算 vs2[i] == f[rs1],并把布尔结果写入目标掩码位。
lane 0: 1 == 1.5 -> mask=0
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
教学环境固定 VLEN=4096、LMUL=m1、vstart=0、合法 vtype、VS/FS 已启用、FLEN=64 和有效 frm。支持所选 binary32/64;SEW=32 标量假定有效 NaN-box。vd 是单寄存器 mask,可与 v0 或 vs2 同起点重叠;masked vs2 不可为 v0(EEW 不同)。vd 与 vs2 的不同 EEW 重叠还强制 mask-agnostic,不受 vma 控制。非活动位不显示确定值,mask tail 始终 agnostic;VL=0 不更新任何目标位。显示本次执行是否置 NV,不清除旧 fflags;比较结果不受舍入选择影响,但无效 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。VMFEQ.VF 对活动元素比较 vs2[i] 与浮点标量 f[rs1] 是否相等,把每个布尔结果写入目标掩码 vd 的一位。
vd 是单个 mask 目标,每个元素一位;rs1 选择浮点 f 寄存器,非整数寄存器。活动元素写 vs2[i]==f[rs1];+0 与 -0 相等,NaN 写0,仅活动 sNaN 输入置 NV。
32 位 OP-V:opcode=1010111、funct6=011000、funct3=101。省略 v0.t 为 vm=1,给出为 vm=0。
允许 mask 目标与 v0 重叠;数据源与 mask 共用寄存器而 EEW 不同的编码保留。LMUL=m1 时 vd 可与 vs2 同起点重叠。
需合法 vtype、VS/FS 已启用、受支持浮点格式和有效 frm;FLEN>SEW 时无效 NaN-box 视作 canonical NaN,FLEN<SEW 保留。比较不按 frm 舍入,但无效 frm 使用仍保留。
body 为 vstart≤i<vl;prestart 不更新,inactive 按 vma,mask tail 始终 agnostic。VL=0 或 vstart≥vl 不更新任何目标(含 tail)。动画固定 LMUL=m1、VLEN=4096、vstart=0,步骤不是处理器周期。
假定 V/VS 已启用、e32,m1 可用、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE、FLEN=64,f0 为有效 NaN-box,未掩码。v2=[1.5,-0,2,1.5], f0=1.5 → v1.mask[0..3]=[1,0,0,1], NV unchanged。tail 不保证清零;mask 目标始终 tail-agnostic。
假定 V/VS 已启用、e32,m1 可用、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE、FLEN=64,f0 为有效 NaN-box,未掩码。v2=[1.5,-0,2,1.5], f0=1.5 → v1.mask[0..3]=[1,0,0,1], NV unchanged。tail 不保证清零;mask 目标始终 tail-agnostic。
假定 V/VS 已启用、e32,m1 可用、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE、FLEN=64,f0 为有效 NaN-box,未掩码。v2=[1.5,-0,2,1.5], f0=1.5 → v1.mask[0..3]=[1,0,0,1], NV unchanged。tail 不保证清零;mask 目标始终 tail-agnostic。
假定 V/VS 已启用、e32,m1 可用、VLEN≥128、vl=4、vstart=0、ta/ma,源已初始化;FS 已启用、frm=RNE、FLEN=64,f0 为有效 NaN-box,未掩码。v2=[1.5,-0,2,1.5], f0=1.5 → v1.mask[0..3]=[1,0,0,1], NV unchanged。tail 不保证清零;mask 目标始终 tail-agnostic。
不写。VMFEQ.VF 写目标掩码 vd,每个活动元素产生一个布尔位。
可以。官方 V 规范允许生成 mask 的比较指令目标与源 mask v0 重叠,这一点不同于普通 masked vector 指令。
NaN 比较写 0;只有 signaling NaN 输入设置 invalid。