VLE8FF.V 和 VLE8.V 有什么区别?
两者地址计算和 EEW 都相同;VLE8FF.V 的区别是 fault-only-first 异常规则,后续活动元素的同步异常会将 vl 缩短到故障元素索引。
从 x[rs1] 开始按 1 字节单位步长执行 8 位 fault-only-first 向量装载;元素 0 之后的同步异常会将 vl 缩短到故障元素索引。
VLE8FF.V 是 RISC-V V 扩展的 8 位单位步长 fault-only-first 向量装载。活动 body 元素按地址 x[rs1] + i * 1 字节读取内存并写入 vd;若元素 0 发生同步异常,该指令按普通装载精确陷入且不修改 vl;若元素 0 之后的活动元素发生同步异常,不产生该陷入并将 vl 缩短到故障元素索引。vm=0 时由 v0.t 选择访问元素,掩码关闭元素不发起内存访问。
从编码字段解析 8 位 fault-only-first装载,再逐元素计算 x[rs1] + i * 1。
教学环境:VLEN=4096,SEW=EEW=8,LMUL=EMUL=m1,VLMAX=512,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。
VLE8FF.V 仍是单位步长装载:活动元素 i 使用 x[rs1] + i * 1 字节。它的特殊点是 fault-only-first 异常边界:首元素故障正常陷入,后续活动元素的同步异常会把 vl 缩短为故障元素索引。
vd 接收 EEW=8 位内存 bit pattern;EMUL=(EEW/SEW)×LMUL,必须在 1/8..8 内且寄存器组起点合法。它不把元素扩展为 XLEN 宽标量。
rs1 是整数基址寄存器;元素 i 地址为 x[rs1]+i×1 字节,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 时目标不更新。
同步异常发生在元素 0 时陷入且 vl 不变;发生在元素 i>0 时不产生该陷入而设 vl=i。这是元素索引,不是第一个 active 元素。即使无异常也可缩短 vl;vstart=0 且原 vl>0 时至少处理一个元素。
超过 FF 缩短点但在原 vl 内的活动目标可能被写入与内存无关的值。中断时实现应保留 vl 并设 vstart;后续 debug watchpoint 应触发 debug 陷入,不用缩短 vl 代替。
假定 V/VS 已启用、合法 e8,m1、VLMAX≥4、AVL=4,vsetvli 后 vl=4、vstart=0、ta/ma,目标不与源掩码重叠。除所选故障外内存均可读,地址步长=1 字节:a0=0x8000, v0=[1,0,1,1], mem=[10,20,30,40] → vd=[10,agnostic,30,unreliable], element 3 synchronous fault → vl=3, no fault trap。agnostic 可保留旧值或写全 1;不保证清零。
假定 V/VS 已启用、合法 e8,m1、VLMAX≥4、AVL=4,vsetvli 后 vl=4、vstart=0、ta/ma,目标不与源掩码重叠。除所选故障外内存均可读,地址步长=1 字节:a0=0x8000, v0=[1,0,1,1], mem=[10,20,30,40] → vd=[10,agnostic,30,unreliable], element 3 synchronous fault → vl=3, no fault trap。agnostic 可保留旧值或写全 1;不保证清零。
假定 V/VS 已启用、合法 e8,m1、VLMAX≥4、AVL=4,vsetvli 后 vl=4、vstart=0、ta/ma,目标不与源掩码重叠。除所选故障外内存均可读,地址步长=1 字节:a0=0x8000, v0=[1,0,1,1], mem=[10,20,30,40] → vd=[10,agnostic,30,unreliable], element 3 synchronous fault → vl=3, no fault trap。agnostic 可保留旧值或写全 1;不保证清零。
两者地址计算和 EEW 都相同;VLE8FF.V 的区别是 fault-only-first 异常规则,后续活动元素的同步异常会将 vl 缩短到故障元素索引。
不会。元素 0 的同步异常按普通装载精确陷入,该指令不会通过修改 vl 来继续执行。
不会。掩码关闭的 body 元素不发起内存访问,因此不会成为该指令的故障边界。