先看 vl
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
把整数标量 x[rs1] 移入向量寄存器元素 0。
VMV.S.X 是 RISC-V V 扩展的整数标量到向量元素移动指令。它把 x[rs1] 写入 vd[0],不是全向量广播或内存访问。SEW 小于 XLEN 时只复制低 SEW 位;SEW 大于 XLEN 时把标量符号扩展到 SEW 位。
从 OP-V 字段解析开始,展示整数标量如何在条件满足时写入向量元素 0。
固定 vm 与 vs2 字段仅在下方编码区显示,不是汇编语法操作数。
教学环境:LMUL=m1、VLMAX=64;只呈现本指令规定的元素 0 状态。
元素 1 及以后是 tail elements,遵循当前 tail agnostic/undisturbed policy;不把它们显示为固定结果。成功执行结束时 vstart 复位为 0。
OP-V 的固定字段识别该标量写入元素 0 的形式:vm=1、vs2=00000,masked vm=0 编码保留。
VMV.S.X 把整数标量写入 vd[0]。它不做算术、不访问内存,也不广播到整个向量。
阅读 VMV.S.X 时,不要只看助记符。官方 V 扩展语义还依赖当前 vl、vtype 和掩码状态。后缀和操作数形式决定源操作数来自向量、标量还是立即数。
当前 vl 决定 body 元素数量。典型代码会先执行 vsetvli、vsetivli 或 vsetvl,再执行本页指令。
当前 vtype 提供 SEW、LMUL、tail policy 和 mask policy;这些规则影响元素宽度、寄存器组大小以及非活动/尾部目标元素。
带 vm 的普通向量指令在 vm=0 时用 v0 作为执行掩码,vm=1 表示未掩码。VMERGE 等少数形式会把 v0 当作数据选择输入。
结合 «vmv.s.x v8, a0» 等实际代码理解该场景。
结合 «vmv.s.x v8, a0» 等实际代码理解该场景。
它没有 v0 执行掩码:编码固定 vm=1、vs2=0,而 vm=0 的对应编码保留。需要按 v0 选择时使用 vmerge。