vredor.vsmnemonicvredor:整数归约
vredor 是 RISC-V V 1.0 的整数归约指令。不同操作数后缀属于同一助记符并集中列在本页。
vredor.vs 02vd, vs2, vs1, vmvredor.vsmnemonicvredor:整数归约
vd, vs2, vs1, vmdestination该形式的操作数顺序;其他形式见下表。
li a0, 10
vsetvli t0, a0, e32, m4, tu, mu # VLEN=128
vredor.vs v0, v8, v12[511:0][511:0][511:0]| 语法 | 说明 |
|---|---|
vredor.vs vd, vs2, vs1, vm | RISC-V V 1.0 规范形式 |
元素 0 位于寄存器组最低 SEW 位;活动 body 元素按 reduction 类语义处理。VLMAX = LMUL × VLEN / SEW,实际写入范围由 vstart、vl、执行掩码和尾部策略共同决定。
if vstart != 0: illegal_instruction
acc = convert(vs1[0], SEW 整数)
# 实现允许按规范构造任意归约树
for i = 0 .. vl - 1:
if vm == 1 or v0.mask[i] == 1:
acc = bit_or(acc, convert(vs2[i], SEW 整数))
vd[0] = acc
vd[1 .. VLMAX-1] = tail_agnostic
vstart = 0活动目标元素写入 vd,来源保持不变;prestart 元素不变,被掩码元素由 vma、尾部元素由 vta 决定保持或 agnostic,正常完成后 vstart=0。目标与来源须满足 LMUL/EMUL 对齐、编号范围和重叠限制。
该指令只使用寄存器,不访问数据内存,因此没有内存对齐要求。整数、掩码和排列操作不修改 x86 风格条件码;浮点运算按规范累积 fflags。
vsetvli t0, a0, e32, m1, tu, mu
vredor.vs v0, v8, v12