先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
VFRSUB.VF 对 VL 范围内的活动元素执行向量-标量浮点反向减法:vd[i] = f[rs1] - vs2[i]。
VFRSUB.VF 是 RVV 单宽浮点反向减法指令,语法为 vfrsub.vf vd, vs2, rs1, vm。每个活动元素按当前 SEW 的浮点格式执行 vd[i] = f[rs1] - vs2[i];它是标量减向量元素,不是 VF.SUM 或整数反向减法。 vm=0 时 v0.t 控制活动元素,vm=1 时不使用执行掩码。舍入模式和异常标志遵循官方 RVV 浮点规则,定点 vxrm 不控制这些指令。
从 OP-V 编码解码到逐元素反向浮点减法:每个活动元素计算 f[rs1] - vs2[i]。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFRSUB.VF 的学习重点是 OP-V 编码、浮点标量寄存器 f[rs1]、v0.t 掩码和逐元素 vd[i] = f[rs1] - vs2[i]。
阅读 VFRSUB.VF 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。.vf:一个向量源和一个浮点标量源参与运算。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vsetvli t0, a0, e32, m1, ta, ma vfrsub.vf v1, v2, ft0 # v1[i] = ft0 - v2[i]» 等实际代码理解该场景。
不使用。普通 RVV 浮点算术使用浮点舍入环境 frm 或指令规定的浮点舍入规则;vxrm 用于定点舍入指令。
vm=0 表示用 v0.t 作为执行掩码;vm=1 表示不使用执行掩码。它不是一个普通数据源寄存器。