先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
将 x[rs1] 与 vs2 的乘积低 SEW 位加到旧 vd。
VMACC.VX 是 RISC-V V 扩展的破坏性整数乘加指令。对每个活动元素,它把 x[rs1] 与 vs2[i] 的乘积低 SEW 位加到旧 vd[i],并将 SEW 宽结果写回 vd[i]。当 XLEN 大于 SEW 时使用 x[rs1] 的低 SEW 位;当 XLEN 小于 SEW 时对 x[rs1] 符号扩展。
从 OP-V 编码字段开始,展示 VMACC 如何读取旧 vd 累加器,将两个 SEW 源的乘积低半加到它,并写回 SEW 宽结果。
教学模型固定 LMUL=m1、vstart=0,只展示所选 VL 的 body 元素。普通掩码形式的 inactive 与 tail 元素按 vtype.vma/vta 处理,不在结果行中伪造确定值;VADC/VMADC/VSBC/VMSBC 则对所有 body 元素执行,v0 位仅作 carry/borrow-in。
vmacc.vx 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 rs1 字段放在同一条编码带中。
动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、SEW 宽度整数、mask 控制和 vd 写回;不模拟流水线、缓存或执行时延。
VMACC.VX 只写活动元素;整数溢出保留低 SEW 位,不产生陷入。
阅读 VMACC.VX 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。.vx:一个向量源和一个整数标量源参与运算。
当前 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 vmacc.vx v8, a1, v4» 等实际代码理解该场景。
结合 «vsetvli t0, a0, e32, m1, ta, ma vmacc.vx v8, a1, v4» 等实际代码理解该场景。
结合 «vsetvli t0, a0, e32, m1, ta, ma vmacc.vx v8, a1, v4» 等实际代码理解该场景。
vm=0 时用 v0 选择活动元素,vm=1 时所有 body 元素都参与;非活动和尾部元素按当前策略处理。