VFWMUL.VV 读取旧 vd 作为累加器吗?
不读取旧 vd 作为累加器。活动元素写入双宽乘积;合法的窄源与宽目标重叠仍会读取重叠处的源值。
将 vs2[i] 与同 lane 的 vs1[i] 相乘,并将 2*SEW 宽的结果写入 vd[i]。
扩展条件:V 1.0,适用于 RV32/RV64;所需浮点格式和 vtype 必须受支持,VS/FS 必须启用。标准 V 支持此处 SEW=32 到 binary64 的路径;不表示 SEW=64 可生成受支持的 binary128。
VFWMUL.VV 执行逐元素拓宽浮点乘法:每个活动元素计算 vs2[i] × vs1[i],结果以 2*SEW 宽度写入 vd[i]。它不读取旧 vd 作为累加项;掩码、vl 和当前 vtype 决定哪些元素执行。
从 OP-V 编码解码到逐元素拓宽浮点乘法:两个 SEW=32 源先扩展,乘积写入 2*SEW=64 的结果。
lane 0: 1 * 0.5 -> 0.5
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFWMUL.VV 将每个活动的 vs2[i] 与 vs1[i] 相乘,并把拓宽到 2*SEW 的结果写到 vd[i];没有旧 vd 累加项。
语法 vfwmul.vv vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=111000。旧 vd 不是累加器。
窄向量源 EEW=SEW、EMUL=LMUL;vd 的 EEW=2×SEW、EMUL=2×LMUL。EMUL=2/4/8 按组大小对齐,EMUL>8 保留。窄源与宽目标重叠须源 EMUL≥1 且最高编号寄存器相同;不同 EEW 的合法重叠强制 mask/tail agnostic。同名窄源读取相同初值。
每个活动元素计算 (vs1[i] * vs2[i]),生成双宽乘积。真实指令使用动态 frm,vxrm 不参与。两个乘数来自同索引的向量元素。
省略 v0.t 为 vm=1,写出为 vm=0;仅 vstart≤i<vl 且掩码允许的元素执行并累积浮点异常到 fflags。masked 目标不得含 v0;同一寄存器不能同时作为 EEW=1 掩码源和不同 EEW 数据源读取。
prestart 不更新、不产生异常;vl=0 或 vstart≥vl 时包括 tail 在内的全部目标不更新。其余 inactive/tail 按 vma/vta 处理,ta/ma 不保证清零;成功执行复位 vstart=0。
V 1.0 适用于 RV32/RV64,依赖 F/D;要求受支持的浮点格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留(包括 vl=0)。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、RNE、ta/ma 与有限输入,不完整模拟 NaN、无穷或 fflags。
假定 V/VS/FS 已启用、合法 e32,m1、所需格式受支持、frm=RNE、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。省略 v0.t,未掩码:v4(binary32)=[3,-1,2,5], v6(binary32)=[2,4,-2,0] → v2/v3(binary64)=[6,-4,-4,0]。tail 按 ta 处理,不保证清零。
不读取旧 vd 作为累加器。活动元素写入双宽乘积;合法的窄源与宽目标重叠仍会读取重叠处的源值。