VFADD.VF 使用 vxrm 吗?
不使用。普通 RVV 浮点算术使用浮点舍入环境 frm 或指令规定的浮点舍入规则;vxrm 用于定点舍入指令。
VFADD.VF 对 VL 范围内的活动元素执行向量-标量浮点加法:vd[i] = vs2[i] + f[rs1]。
VFADD.VF 是 RVV 单宽浮点加法指令,语法为 vfadd.vf vd, vs2, rs1, vm。每个活动元素按当前 SEW 的浮点格式执行 vd[i] = vs2[i] + f[rs1];标量源来自浮点寄存器 f[rs1],不是整数 x[rs1]。当 FLEN 大于 SEW 时,只有有效 NaN-boxed 标量的低 SEW 位可用,否则使用 canonical NaN。vm=0 时 v0.t 控制活动元素,vm=1 时不使用执行掩码。舍入模式和异常标志遵循官方 RVV 浮点规则,定点 vxrm 不控制这些指令。
从 OP-V 编码解码到逐元素浮点加法:第二源来自 scalar f[rs1]。
lane 0: 1 + 1.5 -> 2.5
显示的 lane 与当前步骤高亮同步;其余逐元素结果位于下方。
V 扩展浮点指令使用 OP-V 主操作码,字段包含 funct6、源寄存器、vm、funct3、vd 和 opcode。
VFADD.VF 的学习重点是 OP-V 编码、浮点标量寄存器 f[rs1]、v0.t 掩码和逐元素 vd[i] = vs2[i] + f[rs1]。
vd 与 vs2 是 SEW 位向量寄存器组;同 EEW 源/目标可重叠,同名源读取相同初值。
rs1 选择浮点寄存器 f0–f31;若 FLEN>SEW,要求有效 NaN-box,否则按 canonical NaN 输入;不支持的浮点宽度编码保留。
活动元素按动态 frm 执行 vs2[i]+f[rs1];仅活动元素的异常累积到 fflags。无效 frm 的使用保留,即使 VL=0;FS=Off 触发非法指令。
要求 V、向量状态已启用且 vtype 受支持;活动元素满足 vstart≤i<vl 且(vm=1 或 v0[i]=1),VL=0 时目标完全不更新。省略 v0.t 表示 vm=1。inactive/tail 遵循 vma/vta;masked vd 不得覆盖 v0,v0 不能同时以 EEW=1 和 SEW 作为源读取。
假定 V/向量状态已启用、vstart=0、e32,m1 可用、VLMAX≥4 且 a0=4;示例未掩码,全部四个 body 元素执行。FP 状态已启用、frm=RNE,ft0=1.5(FLEN>32 时有效 NaN-boxed),v2=[1,2,-3,4.5],得到 v1=[2.5,3.5,-1.5,6]。尾元素按 ta 处理,不假定清零。
假定 V/向量状态已启用、vstart=0、e32,m1 可用、VLMAX≥4 且 a0=4;示例未掩码,全部四个 body 元素执行。FP 状态已启用、frm=RNE,ft0=1.5(FLEN>32 时有效 NaN-boxed),v2=[1,2,-3,4.5],得到 v1=[2.5,3.5,-1.5,6]。尾元素按 ta 处理,不假定清零。
不使用。普通 RVV 浮点算术使用浮点舍入环境 frm 或指令规定的浮点舍入规则;vxrm 用于定点舍入指令。
vm=0 表示用 v0.t 作为执行掩码;vm=1 表示不使用执行掩码。它不是一个普通数据源寄存器。
不会。只有活动浮点元素产生的异常才会累积到 fflags。无活动元素也仍要求有效的 frm;mstatus.FS=Off 时指令会产生非法指令异常。