这些浮点指令使用 vxrm 吗?
不使用。普通 RVV 浮点运算和浮点转换使用浮点舍入模式 frm 或指令指定的固定舍入;vxrm 用于定点舍入指令。
按活动元素的升序将 SEW 宽 vs2 元素提升为 2*SEW 后求和;宽 vs1[0] 是初值,只有宽 vd[0] 承载归约结果,其余目标元素为 tail。
扩展条件:V 1.0,RV32/RV64;要求受支持的浮点格式、合法 vtype、VS/FS 已启用。标准 V 支持 SEW=32 到 FP64;不保证 SEW=64 到 FP128。
VFWREDOSUM.VS 是 RVV 的拓宽有序浮点归约求和。它把 vl 内活动的 vs2 浮点元素从 SEW 提升到 2*SEW,并从宽 vs1[0] 开始按元素编号升序相加;只有宽 vd[0] 承载归约结果,其他目标元素是按当前 tail policy 管理的 tail。掩码关闭的元素不影响结果或浮点异常标志。vl=0 时不执行操作且不更新目标;vl 非零而没有活动源元素时不做加法,初值写入 vd[0]。
可核验的 FP32 到 FP64 归约示例;固定合法 vtype、VS/FS 已启用、有效 frm=RNE、ta,输入先表示为 FP32、宽初值为 FP64,每次加法按 RNE 舍入为 FP64。非有限输入/结果和异常标志不在模型内;教学步骤不是处理器周期。
宽标量结果:任意 v0-v31 的元素 0
SEW 窄源;不能和宽 vs1 使用同一寄存器
宽初值:任意寄存器的元素 0;掩码时不能为 v0
非空有限 FP64 示例值
恰好 4 个可表示为有限 FP32 的值
恰好 4 个 0/1 位
0xcc861257活动且已提升的元素:1, 3, 4
归约过程:
写回
v4[0] = 9
按活动元素的升序执行此演示。
显示 OP-V 指令编码;非法输入不会产生编码。
VFWREDOSUM.VS 把窄 vs2 元素提升后,按活动元素的升序从宽 vs1[0] 开始求和;归约结果在宽 vd[0],其他目标元素为 tail。
语法 vfwredosum.vs vd, vs2, vs1[, v0.t];32 位 OP-V:opcode=1010111, funct3=001, funct6=110011。
vs2 的 EEW=SEW、EMUL=LMUL;vs1[0] 和 vd[0] 为 2×SEW 宽,分别是任意单个向量寄存器的元素 0(EMUL=1),不要求偶数起点。目标可以与源和 v0 重叠;源不能以不同 EEW 读取同一寄存器。
从宽 vs1[0] 开始,将活动 vs2 元素提升后按索引升序逐次相加,每次按动态 frm 舍入到宽格式。vl>0 而无活动源元素时原样复制初值,不 canonicalize NaN、不设置异常。
省略 v0.t 为 vm=1,写出为 vm=0;掩码关闭源不产生浮点异常,活动异常累积到 fflags。同一寄存器不能同时作为 EEW=1 掩码与不同 EEW 数据源。初值始终参与,不受掩码位0控制;非零 vstart 为非法指令。vl=0 不更新目标,也不复制初值;其余目标元素为 tail,仅由 vta 处理。ta/ma 不保证清零;成功执行复位 vstart=0。
V 1.0 适用于 RV32/RV64,依赖 F/D;要求受支持的格式、合法 vtype、VS/FS 已启用。H 且虚拟化 V=1 时 vsstatus.VS/FS 也须启用。无效 frm 的使用保留(包括 vl=0),vxrm 不参与。动画固定 SEW=32、LMUL=m1、VLEN=4096、vstart=0、RNE 和有限输入,不完整模拟 NaN、无穷或 fflags。
假定 V/VS/FS 已启用、合法 e32,m1、所需格式受支持、frm=RNE、VLMAX≥4、a0=4;vsetvli 后 vl=4、vstart=0。v0.t 选择 lane 0、2、3,初值始终参与;v12[0](binary64)=1, v8(binary32)=[1,2,3,4], v0 mask=1011 → v4[0](binary64)=9。tail 按 ta 处理,不保证清零。
不使用。普通 RVV 浮点运算和浮点转换使用浮点舍入模式 frm 或指令指定的固定舍入;vxrm 用于定点舍入指令。