VSLL.VV 的移位量可以大于 SEW 吗?
源值可大于 SEW,但只取低 log2(SEW) 位,因此实际移位量范围为 0..SEW-1。
逐元素逻辑左移。
VSLL.VV 对活动元素计算 vd[i]=(vs2[i]<<shamt) mod 2^SEW,shamt 取 vs1[i] 的低 log2(SEW) 位。vm=0 时由 v0.t 选择 body 元素;inactive/tail 分别按 vma/vta 处理。
从 OP-V 编码字段开始,展示 VSLL 如何取移位量低位、对活动元素逻辑左移,并写回低 SEW 位结果。
教学环境:V 1.0、向量状态已启用、合法受支持 vtype/SEW,LMUL=m1、VLEN=4096、vstart=0,VLMAX=4096/16。同宽源/目标可重叠;同名源须有相同元素。v0.t 时 vd/vs2/vs1 不可为 v0。只取移位量低 log2(SEW) 位,结果保留低 SEW 位;inactive/tail 不显示确定值。VL=0 不更新目标;步骤不是处理器周期。
vsll.vv 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 vs1 字段放在同一条编码带中。
动画展示 OP-V 解码、移位量低位选择、逐元素逻辑左移与目标写回;不模拟流水线或执行时延。
左移并低位补零,结果仅保留低 SEW 位。vstart≥vl(包括 vl=0)时,整个目标保持不变。
vd/vs2 是 SEW/LMUL 向量组;vs1 提供逐元素移位量;同名源必须读取相同初值。
32位 OP-V:opcode=1010111、funct6=100101、funct3=000;vm 在 bit25,vs2 在 bits24:20,vs1 在 bits19:15,vd 在 bits11:7。
活动 vd[i]=(vs2[i]<<shamt) mod 2^SEW;shamt 仅取低 log2(SEW) 位。低位补0,不舍入、不饱和。同宽源/目标可重叠;masked vd 不可包含 v0,v0 不可同时提供 EEW=1 掩码与 SEW 数据。
可选 v0.t 对应vm=0,省略为vm=1。仅 vstart≤i<vl 且掩码允许的元素计算;prestart不变,inactive/tail分别按vma/vta处理。vstart≥vl(含vl=0)不更新任何目标。示例假设SEW=16、LMUL=m1、vl=8、vstart=0,源和掩码已初始化。
要求 V 1.0、向量状态已启用及合法受支持 vtype/SEW;正常完成后 vstart=0。动画是教学分解,不代表处理器周期。
假定 V/VS 已启用、合法受支持 m1、VLEN=4096、XLEN=64、vstart=0,源已初始化且v0.t允许全部body。SEW=8, vl=4, v4=[3,3,3,3], v12=[1,31,128,255] → v8=[8,248,0,248]。inactive/tail按vma/vta;成功后vstart=0。
假定 V/VS 已启用、合法受支持 m1、VLEN=4096、XLEN=64、vstart=0,源已初始化且v0.t允许全部body。SEW=8, vl=4, v4=[3,3,3,3], v12=[1,31,128,255] → v8=[8,248,0,248]。inactive/tail按vma/vta;成功后vstart=0。
假定 V/VS 已启用、合法受支持 m1、VLEN=4096、XLEN=64、vstart=0,源已初始化且v0.t允许全部body。SEW=8, vl=4, v4=[3,3,3,3], v12=[1,31,128,255] → v8=[8,248,0,248]。inactive/tail按vma/vta;成功后vstart=0。
源值可大于 SEW,但只取低 log2(SEW) 位,因此实际移位量范围为 0..SEW-1。
VSLL 是左移,右侧空出的低位补 0;VSRL 是逻辑右移,高位补 0;VSRA 是算术右移,按有符号元素复制符号位。