VLE16.V 会自动设置 vl 吗?
不会。vl/vtype 由此前的 vsetvli、vsetivli 或 vsetvl 设置;向量加载/存储按当前配置执行。
从 x[rs1] 开始按单位步长装入 16 位元素到 vd。
VLE16.V 是 RISC-V V 扩展的 16 位单位步长向量装载指令。活动 body 元素从 x[rs1] + i * 2 字节的连续地址读取内存元素并写入 vd;vm=0 时由 v0.t 选择元素,掩码关闭元素不访问内存。
从编码字段解析 16 位单位步长装载,再逐元素计算 x[rs1] + i * 2。
教学环境:VLEN=4096,SEW=EEW=16,LMUL=EMUL=m1,VLMAX=256,vstart=0,合法 vtype,VS 已启用,ta/ma。基址选项自然对齐;rs1=x0 时基址固定为 0。仅演示所选同步异常场景,假定其余所选内存可读;不保证实际系统地址可访问。横向逐元素步骤只说明地址与结果,不表示实际访问顺序或处理器周期。inactive/tail 可保留旧值或写全 1,未显示确定结果;正常完成后 vstart=0。
动画从 32 位向量内存指令编码开始,按官方位段显示 nf、mew、mop、vm、rs2/vs2 或 lumop/sumop、width、寄存器字段和 opcode。
VLE16.V 是 RVV 16 位单位步长向量装载:每个活动元素使用地址 x[rs1] + i * 2 字节从内存读取,元素数据写入目标向量寄存器组 vd。vl 和 v0.t 掩码决定哪些 body 元素真正访问内存。
vd 接收 EEW=16 位内存 bit pattern;EMUL=(EEW/SEW)×LMUL,必须在 1/8..8 内且寄存器组起点合法。它不把元素扩展为 XLEN 宽标量。
rs1 是整数基址寄存器;元素 i 地址为 x[rs1]+i×2 字节,rs1=x0 时基址为 0。v0.t 表示 vm=0;省略为 vm=1。
需要启用 V、合法 vtype。活动 body 为 vstart≤i<vl 且掩码开启;masked vd 不能覆盖 v0。关闭元素不访问内存;inactive/tail 按 vma/vta,prestart 保持不变。VL=0 或 vstart≥vl 时目标不更新。
本指令按当前 vl 执行,不修改 vl;正常完成后 vstart=0。非自然对齐可成功或触发未对齐异常;单位步长不保证各元素访问顺序。
假定 V/VS 已启用、合法 e16,m1、VLMAX≥4、AVL=4,vsetvli 后 vl=4、vstart=0、ta/ma,目标不与源掩码重叠。除所选故障外内存均可读,地址步长=2 字节:a0=0x8000, v0=[1,0,1,1], mem=[10,20,30,40] → vd=[10,agnostic,30,40]。agnostic 可保留旧值或写全 1;不保证清零。
假定 V/VS 已启用、合法 e16,m1、VLMAX≥4、AVL=4,vsetvli 后 vl=4、vstart=0、ta/ma,目标不与源掩码重叠。除所选故障外内存均可读,地址步长=2 字节:a0=0x8000, v0=[1,0,1,1], mem=[10,20,30,40] → vd=[10,agnostic,30,40]。agnostic 可保留旧值或写全 1;不保证清零。
不会。vl/vtype 由此前的 vsetvli、vsetivli 或 vsetvl 设置;向量加载/存储按当前配置执行。
第 i 个活动元素使用 x[rs1] + i * 2 字节;这是连续内存访问,不是任意 gather/scatter。
不会。vm=0 且对应 v0.t 位为 0 的 body 元素不会执行该元素的装载内存访问。