先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
VFADD.VF 对 VL 范围内的活动元素执行向量-标量浮点加法:vd[i] = vs2[i] + f[rs1]。
VFADD.VF 是 RVV 单宽浮点加法指令,语法为 vfadd.vf vd, vs2, rs1, vm。每个活动元素按当前 SEW 的浮点格式执行 vd[i] = vs2[i] + f[rs1];标量源来自浮点寄存器 f[rs1],不是整数 x[rs1]。 vm=0 时 v0.t 控制活动元素,vm=1 时不使用执行掩码。舍入模式和异常标志遵循官方 RVV 浮点规则,定点 vxrm 不控制这些指令。
从 OP-V 编码解码到逐元素浮点加法:第二源来自 scalar f[rs1]。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFADD.VF 的学习重点是 OP-V 编码、浮点标量寄存器 f[rs1]、v0.t 掩码和逐元素 vd[i] = vs2[i] + f[rs1]。
阅读 VFADD.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 vfadd.vf v1, v2, ft0» 等实际代码理解该场景。
结合 «vsetvli t0, a0, e32, m1, ta, ma vfadd.vf v1, v2, ft0» 等实际代码理解该场景。
不使用。普通 RVV 浮点算术使用浮点舍入环境 frm 或指令规定的浮点舍入规则;vxrm 用于定点舍入指令。
vm=0 表示用 v0.t 作为执行掩码;vm=1 表示不使用执行掩码。它不是一个普通数据源寄存器。