先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
VNCLIPU.WX 是 RVV 无符号定点窄化裁剪指令,把 2*SEW 源按 vxrm 舍入并饱和到 SEW。
VNCLIPU.WX 读取活动 2*SEW 宽 vs2 元素,按来自 x[rs1] 标量值的移位量执行定点舍入右移,然后裁剪到无符号 SEW 范围并写回 SEW 宽 vd;任一活动元素饱和会设置 sticky vxsat。
从 OP-V 编码字段开始,展示 VNCLIPU 如何读取 2*SEW 宽 vs2,按移位量和 vxrm 舍入右移,再无符号饱和到 SEW 宽 vd,并在饱和时设置 vxsat。
vnclipu.wx 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 rs1 字段放在同一条编码带中。
动画只展示官方 V 扩展定义的 ISA 可见关系:OP-V 字段解析、活动元素读取、2*SEW 到 SEW 窄化裁剪整数无符号窄化裁剪、vxrm 定点舍入和 vd 写回;本示例会设置 sticky vxsat;不模拟流水线、缓存或执行时延。
VNCLIPU.WX 用于把宽定点中间结果缩回 SEW 宽度:先根据 shift amount 和 vxrm 做舍入右移,再按无符号目标范围饱和裁剪,并用 vxsat 记录活动元素是否发生饱和。
阅读 VNCLIPU.WX 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vnclipu.wx v8, v12, x5, v0.t» 等实际代码理解该场景。
结合 «vnclipu.wx v8, v12, x5, v0.t» 等实际代码理解该场景。
结合 «vnclipu.wx v8, v12, x5, v0.t» 等实际代码理解该场景。
VNCLIPU.WX 使用 vxrm 对移出的位舍入,并在结果超出无符号 SEW 范围时饱和且设置 vxsat;VNSRL/VNSRA 是窄化右移,不做饱和裁剪。
当任一活动元素的舍入右移结果超出无符号 SEW 范围并被裁剪时,本条指令设置 sticky vxsat。被 v0.t 掩码关闭的元素不参与该判断。