Does VFADD.VF use vxrm?
No. Ordinary RVV FP arithmetic uses the floating-point rounding environment frm or the instruction-defined FP rounding rule; vxrm is for fixed-point rounding instructions.
VFADD.VF performs vector-scalar FP add on active elements within VL: vd[i] = vs2[i] + f[rs1].
VFADD.VF is an RVV single-width floating-point addition instruction with syntax vfadd.vf vd, vs2, rs1, vm. Each active element uses the current SEW FP format to execute vd[i] = vs2[i] + f[rs1]; the scalar source is the floating-point register f[rs1], not integer x[rs1]. When FLEN is greater than SEW, only the low SEW bits of a valid NaN-boxed scalar are used; otherwise the canonical NaN is used. With vm=0, v0.t controls active elements; with vm=1, execution is unmasked. Rounding mode and exception flags follow the official RVV floating-point rules, and fixed-point vxrm does not control these instructions.
Decode the OP-V encoding and execute lane-wise FP addition with the second source from scalar f[rs1].
lane 0: 1 + 1.5 -> 2.5
This lane follows the current-step highlight; the remaining lane results appear below.
V-extension FP instructions use the OP-V major opcode, with funct6, source registers, vm, funct3, vd, and opcode fields.
VFADD.VF is best understood through OP-V encoding, the floating-point scalar register f[rs1], v0.t masking, and per-element vd[i] = vs2[i] + f[rs1].
vd and vs2 are SEW-wide vector groups; same-EEW source/destination overlap is allowed and equal sources read equal initial values.
rs1 selects FP register f0–f31; with FLEN>SEW, valid NaN-boxing is required or the canonical NaN is supplied. Unsupported FP widths have reserved encodings.
Active elements add vs2[i]+f[rs1] using dynamic frm; only active-element exceptions accrue in fflags. Invalid frm use is reserved even at VL=0; FS=Off raises illegal instruction.
Require V, enabled vector state, and supported vtype. Active elements satisfy vstart≤i<vl and (vm=1 or v0[i]=1); VL=0 leaves the entire destination unchanged. Omitting v0.t means vm=1. Inactive/tail elements follow vma/vta; masked vd cannot overwrite v0, and v0 cannot supply both EEW=1 and SEW sources.
Assume V/vector state enabled, vstart=0, supported e32,m1, VLMAX≥4, and a0=4. The example is unmasked, so all four body elements execute. FP state is enabled, frm=RNE, ft0=1.5 (validly NaN-boxed when FLEN>32), and v2=[1,2,-3,4.5], giving v1=[2.5,3.5,-1.5,6]. Tail elements follow ta without assumed zeroing.
Assume V/vector state enabled, vstart=0, supported e32,m1, VLMAX≥4, and a0=4. The example is unmasked, so all four body elements execute. FP state is enabled, frm=RNE, ft0=1.5 (validly NaN-boxed when FLEN>32), and v2=[1,2,-3,4.5], giving v1=[2.5,3.5,-1.5,6]. Tail elements follow ta without assumed zeroing.
No. Ordinary RVV FP arithmetic uses the floating-point rounding environment frm or the instruction-defined FP rounding rule; vxrm is for fixed-point rounding instructions.
vm=0 uses v0.t as the execution mask; vm=1 is unmasked. It is not an ordinary data source register.
No. Only exceptions from active FP elements accrue in fflags. A valid frm is still required with no active elements; mstatus.FS=Off raises an illegal-instruction exception.