Does VFSUB.VF use vxrm?
No. This instruction rounds using dynamic FP frm; vxrm controls fixed-point rounding. Only active-element FP exceptions accrue in fflags.
VFSUB.VF computes vs2[i] - f[rs1] for active elements, rounding to SEW and writing vd[i].
VFSUB.VF performs single-width FP subtraction. Vector inputs and results are SEW wide. Active elements compute vs2[i] - f[rs1]; subtract the second source from vs2. Results round using dynamic frm; only active-element exceptions accrue in fflags. Fixed-point vxrm is not used. V 1.0 provides FP32/FP64 on RV32/RV64 and depends on F/D; SEW=16 arithmetic requires Zvfh.
Decode the OP-V encoding and execute lane-wise FP subtraction with the second source from scalar f[rs1].
lane 0: 1 - 1.5 -> -0.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.
The teaching context fixes VLEN=4096, LMUL=m1, vstart=0, valid vtype, enabled VS/FS, FLEN=64, frm=RNE, and ta/ma. The selected binary32/64 subtraction is supported; same-width destination/source overlap is legal. Equal sources require equal initial bits. VF scalars at SEW=32 assume valid NaN-boxing. VL=0 updates no destination elements, including tails; other inactive/tail values are not specified in this display. Only finite RNE results are calculated, without NaNs, infinities, overflow, invalid NaN boxes, or full fflags; these model limits do not imply illegal architectural FP execution. Steps are not processor cycles.
VFSUB.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].
Syntax: vfsub.vf vd, vs2, rs1[, v0.t]. Compute vs2[i] - f[rs1] element by element. 32-bit OP-V: funct6=000010, funct3=101, opcode=1010111. Both inputs are SEW wide.
Vector source/result EEW=SEW and EMUL=LMUL; same-width destination/source overlap is legal. Equal sources require equal initial bits. Use VFRSUB.VF for scalar minus vector.
rs1 selects an FP f register. With FLEN>SEW, a valid NaN box supplies low SEW bits; otherwise use canonical NaN. FLEN<SEW is reserved.
Optional v0.t means vm=0; omission means vm=1. Active elements satisfy vstart≤i<vl with the mask enabled. A masked destination cannot overlap v0; one source register cannot be read at both data EEW and mask EEW=1.
Prestart elements do not update or raise exceptions. At vl=0 or vstart≥vl all destination elements, including tails, remain unchanged. Other inactive/tail values follow vma/vta; ta/ma does not guarantee zeros. Successful execution resets vstart=0.
Dynamic frm controls FP rounding; only active-element exceptions accrue in fflags. vxrm is not used. Valid frm is required even at vl=0; invalid frm use is reserved. V 1.0 supports FP32/FP64 on RV32/RV64 and depends on F/D. SEW=16 arithmetic requires Zvfh. Require valid vtype, supported widths, enabled VS/FS, and, with H and virtualization V=1, enabled vsstatus.VS/FS.
The animation fixes LMUL=m1, VLEN=4096, vstart=0, FLEN=64, frm=RNE, and ta/ma. VF scalars at SEW=32 assume valid NaN-boxing. Only finite results are calculated, without NaNs, infinities, overflow, or full fflags; teaching steps are not processor cycles.
Assume V/VS/FS enabled, valid vtype, supported FP formats, frm=RNE, e32,m1, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Results are binary32; vector inputs are binary32. ft0 is validly NaN-boxed at FLEN=64. Omitting v0.t makes this unmasked: v2=[1,2,-3,0], ft0=0.5 → v1=[0.5,1.5,-3.5,-0.5]. Tails follow ta without guaranteed zeros.
Assume V/VS/FS enabled, valid vtype, supported FP formats, frm=RNE, e32,m1, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Results are binary32; vector inputs are binary32. ft0 is validly NaN-boxed at FLEN=64. Omitting v0.t makes this unmasked: v2=[1,2,-3,0], ft0=0.5 → v1=[0.5,1.5,-3.5,-0.5]. Tails follow ta without guaranteed zeros.
No. This instruction rounds using dynamic FP frm; vxrm controls fixed-point rounding. Only active-element FP exceptions accrue in fflags.
No. Optional v0.t denotes vm=0, while omission denotes vm=1. Do not write numeric 0 or 1 as an ordinary operand.