inactive、tail 和 prestart 都一样处理吗?
prestart 始终保持;inactive/tail 分别按 vma/vta 保持或采用 agnostic。agnostic 可保留旧值或写全1,不保证固定值。本指令宽 vd 同时是累加源,不可与窄乘数重叠。
VWMACCU.VX 将无符号乘数的完整 2*SEW 乘积加到旧 2*SEW 累加器 vd。
RISC-V V 1.0 拓宽整数乘加,使用无符号乘数。结果为旧 vd 加完整乘积,保留低 2*SEW 位。要求启用向量状态、合法 vtype 和受支持 SEW/2*SEW。仅更新掩码允许的 vstart≤i<vl 元素;prestart 不变,inactive/tail 按 vma/vta 处理;宽 vd 同时是累加源,不可与窄乘数重叠。
从 OP-V 编码字段开始,展示 VWMACCU 如何读取旧 2*SEW 宽 vd 累加器,按无符号×无符号生成乘积,并写回累加结果。
教学环境:V 1.0、向量状态已启用、合法受支持 vtype;固定 LMUL=m1、VLEN=4096、vstart=0。要求支持 SEW 和 2*SEW;SEW=64 需额外128位整数元素支持。输入非负位模式;两个乘数按无符号解释。读取旧 2*SEW 位 vd,再加上完整乘积,保留低 2*SEW 位;不饱和,不改变 vxsat。标量先按 XLEN/SEW 转换(窄于 SEW 时符号扩展,宽于 SEW 时取低位),x0 提供0。vd 是 EMUL=2 的宽累加源,须偶数起点且不可与窄乘数重叠;同名窄源须有相同初值。v0.t 时 vd 和数据源不可含v0。仅展示 body,inactive/tail 按 vma/vta,不显示确定值。VL=0 不更新任何目标;正常完成后 vstart=0。步骤不是处理器周期。
vwmaccu.vx 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 rs1 字段放在同一条编码带中。
动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、2*SEW 拓宽整数无符号拓宽乘加、旧 vd 累加器和 vd 写回;不模拟流水线、缓存或执行时延。
VWMACCU.VX 将无符号乘数的完整 2*SEW 乘积加到旧 2*SEW 累加器 vd。
RV32/RV64 V 1.0;向量状态启用、vill=0,支持 SEW 和 2*SEW。vd 为 EEW=2*SEW、EMUL=2*LMUL≤8 的读写累加器;组起点按 EMUL 对齐。SEW=64 要求额外128位整数元素支持。
32位 OP-V:opcode=1010111、funct6=111100、funct3=110 (OPMVX);vm bit25、vs2 bits24:20、rs1 bits19:15、vd bits11:7。语法源顺序是 vs1/rs1, vs2。可选v0.t表示vm=0,省略为vm=1。
按 unsigned × unsigned 得到完整2*SEW乘积,加旧vd并保留低2*SEW位。宽vd也是源,不可与窄乘数重叠,以免一个寄存器以不同EEW读取。标量先在XLEN>SEW时取低位,XLEN<SEW时符号扩展;x0提供0。
只对掩码允许的vstart≤i<vl元素计算。prestart不变;inactive/tail按vma/vta保持或agnostic(旧值或全1)。masked vd不含v0,v0不能同时提供mask与数据。vstart≥vl(含vl=0)目标全部不变;正常完成后vstart=0,不饱和、不改变vxsat。
假定 V/VS 已启用、合法 e8,m1,tu,mu、支持16位结果、VLEN=4096、XLEN=64、vl=4、vstart=0,v0.mask[0..3]=1101;old v8=[1,1,1,1], v12=[255,128,1,127], x5=255。v8=[0xfe02,0x7f81,unchanged,0x7e82](unchanged表示保持旧值)。结果为16位;lane2和tail保持旧值,不改变vxsat;正常完成后vstart=0。
prestart 始终保持;inactive/tail 分别按 vma/vta 保持或采用 agnostic。agnostic 可保留旧值或写全1,不保证固定值。本指令宽 vd 同时是累加源,不可与窄乘数重叠。
本拓宽运算要求实现支持 128 位整数元素,基础 V 不保证该支持;须确认受支持的 SEW/2*SEW 和合法寄存器组。