Do these instructions use vxrm?
No. FP arithmetic and conversions use frm or an instruction-specified fixed rounding mode; vxrm is for fixed-point rounding instructions.
VFMSUB.VF computes vd[i] = (f[rs1] * old vd[i]) - vs2[i] on active elements, with a single rounding of the fused result.
VFMSUB.VF computes vd[i] = (f[rs1] * old vd[i]) - vs2[i] on active elements. Multiplication and subtraction are fused, with only the final result rounded by frm; old vd is the multiplicand and vs2 is the subtrahend. V provides FP32/FP64 with matching scalar F/D support. FP16 arithmetic additionally requires Zvfh; base V does not include it.
Decode the OP-V encoding and execute fused multiply-subtract lane by lane: each active lane multiplies f[rs1] and old vd[i], then subtracts vs2[i] with one rounding.
lane 0: fma(1.5, 0.5, -(1)) -> -0.25
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.
Old vd is the multiplicand. Equal vector registers must have equal initial bits. VF scalars are read at FLEN=64, with valid NaN-boxing assumed for SEW=32; this animation computes finite RNE results without displaying fflags.
The teaching context fixes VLEN=4096, LMUL=m1, vstart=0, enabled VS/FS, and supported SEW. FP inputs are first represented as binary32/64. VL=0 updates no destination elements; same-width source/destination overlap is allowed. Inactive and tail values follow ma/ta without definite displayed values.
vd[i] = (f[rs1] * old vd[i]) - vs2[i]; old vd is the multiplicand, and the fused result rounds once.
Ternary assembly order is vd, rs1, vs2, vm. Old vd is the multiplicand and vs2 is the subtrahend. Same-width overlap is legal; equal registers read equal initial values.
rs1 selects FP f0–f31 or an ABI name. FLEN>SEW checks NaN-boxing and supplies canonical NaN for an invalid box; FLEN<SEW is reserved.
Only active elements with vstart≤i<vl and (vm=1 or v0[i]=1) compute; prestart is unchanged. At vl=0 or vstart≥vl all destination elements, including tails, remain unchanged. Otherwise inactive/tail values follow vma/vta; successful execution resets vstart=0.
Assembly vm is optional v0.t; omission means vm=1. Masked vd cannot overlap v0; v0 cannot supply both an EEW=1 mask and SEW data.
Require valid vtype, supported FP widths and matching scalar FP extensions, and enabled VS/FS; with H and virtualization V=1, vsstatus.VS/FS must also be enabled. Invalid frm use is reserved even at vl=0; vxrm is not used. Only active-element exceptions accrue in fflags.
V supports FP32/FP64 and depends on F/D; FP16 arithmetic requires Zvfh. The animation fixes VLEN=4096, m1, vstart=0, valid NaN-boxing and finite RNE paths, without full fflags.
Assume V/VS/FS enabled, frm=RNE, vstart=0, supported e32,m1, VLMAX≥4 and a0=4; the example is unmasked and VF scalars are validly NaN-boxed at FLEN=64. old v1=[1,2,-3,4], v2=[2,4,-2,0], ft0=1.5 → v1=[-0.5,-1,-2.5,6]. Tails follow ta without assumed zeroing.
No. FP arithmetic and conversions use frm or an instruction-specified fixed rounding mode; vxrm is for fixed-point rounding instructions.