先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
按 vs1 选择掩码保序压缩 vs2 元素到 vd 起始位置。
VCOMPRESS.VM 使用显式 vs1 掩码选择 vs2 中的元素,并按原顺序从 vd[0] 开始连续写入;它编码为未掩码指令,压缩结果之后的目标元素属于尾部元素。
从 OP-V 编码字段开始,展示 VCOMPRESS 如何按显式 vs1 选择掩码保序压缩 vs2 元素,并从 vd[0] 开始连续写入。
vcompress.vm 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 vs1 字段放在同一条编码带中。
动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、元素索引/压缩/选择/移动重排整数掩码压缩、边界/选择规则和 vd 写回;不模拟流水线、缓存或执行时延。
vcompress.vm 对 vl 范围内 vs1=1 的源 lane 做稳定压缩:第 1 个选中元素写 vd[0],第 2 个写 vd[1],依此类推。
阅读 VCOMPRESS.VM 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 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 vmsgt.vi v0, v8, 10 vcompress.vm v12, v8, v0» 等实际代码理解该场景。
结合 «vsetvli t0, a0, e32, m1, ta, ma vmsgt.vi v0, v8, 10 vcompress.vm v12, v8, v0» 等实际代码理解该场景。
不会这样定义。未选中源元素不进入连续压缩结果;压缩结果之后的目标元素属于尾部元素,受 vtype.vta 策略影响。