VREDMAX.VS 的初值和结果在哪里?
初值为 vs1[0];vl>0 时 SEW 宽结果只写入单个寄存器的 vd[0],其余元素为 tail,按 vta 处理。
VREDMAX.VS 在 vl>0 时以 vs1[0] 为初值归约活动 vs2 元素的有符号最大值,只把结果写入 vd[0]。
VREDMAX.VS 是 V 1.0 单宽整数有符号最大值归约指令。vl>0 且 vstart=0 时,vs1[0] 始终参与,vs2 的活动元素按 max 归约,SEW 宽结果写入单个目标寄存器的 vd[0]。其他目标元素为 tail;vl=0 不更新 vd。
从 OP-V 编码字段开始,展示 VREDMAX 如何以 vs1[0] 为初值,只归约活动 vs2 元素,并把SEW 宽结果写入 vd[0]。
要求 V 1.0、已启用向量状态及合法受支持 vtype/SEW。固定 LMUL=m1、vstart=0、VLEN=4096,VLMAX=4096/16=256。归约指令的 vstart 非零会触发非法指令异常,因此不提供该值作为可执行输入。归约只写单个 vd 的元素0,其余元素是 tail,按 vta 处理;vd 可与源或 v0 重叠。vs2=vs1 时 seed 必须等于 vs2[0]。v0 提供 EEW=1 掩码时不可同时作 SEW 数据源。VL=0 不更新任何目标元素;这里只展示 body,不伪造 inactive/tail 的确定值。步骤是教学分解,不是处理器周期。
vredmax.vs 使用 OP-V 编码。动画把固定字段、寄存器字段、vm 和 vs1 字段放在同一条编码带中。
动画展示 OP-V 字段解析、活动元素读取、以 vs1[0] 为初值的整数有符号最大值归约、mask 参与元素筛选和 vd[0] 写回。步骤是教学分解,不表示流水线、缓存或执行时延。
VREDMAX.VS 在 vl>0 时以 vs1[0] 为初值归约活动 vs2 元素的有符号最大值,只把结果写入 vd[0]。
语法:vredmax.vs vd, vs2, vs1[, v0.t];省略 v0.t 为 vm=1,给出为 vm=0。32 位 OP-V:opcode=1010111、funct3=010 (OPMVV)、funct6=000111。
vs2 是 SEW/LMUL 源向量组;vs1[0] 是 SEW 宽初值,vd[0] 是 SEW 宽结果,标量各在单个向量寄存器中,独立于 LMUL。
vl>0 时总是包含 vs1[0],只归约活动 vs2 元素;全部 mask-off 仍将初值写入 vd[0]。其余目标元素是 tail,按 vta 保留或作 agnostic;vl=0 整个 vd 不更新。vstart 非零触发非法指令异常。
vd 可与源和 v0 重叠;同名 vs2/vs1 必须从同一寄存器读取一致的元素0。v0 用作 EEW=1 掩码时不可同时作 SEW 数据源。源组起点按 EMUL 对齐,EMUL≤8。
要求 V 1.0、已启用向量状态和合法受支持 vtype/SEW;成功执行后 vstart 复位为0。动画按其声明的 m1/vstart=0 条件展示,不表示处理器周期。
假定 V/VS 已启用、合法 m1、VLEN≥128、支持 SEW、vl=4、vstart=0、v0.mask[0..3]=1111,源已初始化。SEW=8, v4[0]=254 (-2), v12=[1,128,2,3] → v8[0]=3。先纳入初值,再归约所有活动源元素;其余目标元素按 vta 作为 tail 处理。vl=0 时不更新目标。
初值为 vs1[0];vl>0 时 SEW 宽结果只写入单个寄存器的 vd[0],其余元素为 tail,按 vta 处理。
不同。vl>0 时即使全部 vs2 元素 mask-off,也把初值写入 vd[0];vl=0 时整个 vd 不更新。vstart 非零触发非法指令异常。