What does the vm operand control for VFMIN.VV?
With vm=0, only active elements selected by v0.t execute; vm=1 is unmasked. The page formula is vd[i] = min(vs2[i], vs1[i]).
VFMIN.VV is an RVV single-width floating-point minimum selection instruction with syntax vfmin.vv vd, vs2, vs1, vm; each active element compares vs2[i] with vs1[i] and writes the minimum to vd[i].
VFMIN.VV performs lane-wise floating-point minimum selection on active elements within vl. The second source is same-lane vs1[i]; with vm=0, v0.t controls which elements execute, and vm=1 is unmasked. NaN handling, signaling-NaN invalid flag, signed zero, and result selection follow the official RISC-V FMIN/FMAX rules; this is not integer min/max, saturation, or fused multiply-add.
Decode the OP-V encoding and execute lane-wise FP minimum selection with the second source from same-lane vs1.
lane 0: min(1, 0.5) -> 0x3f000000 (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.
This teaching context fixes VS/FS enabled, valid vtype, frm=RNE, and FLEN=64; a SEW=32 scalar input represents the low 32 bits of a valid NaN box. Equal sources require equal bits. Same-width destination/source overlap is legal; ta/ma gives no definite inactive or tail value. At VL=0 no destination elements, including tails, are updated.
VFMIN.VV is best understood through OP-V encoding, same-lane vs1[i], v0.t masking, and per-active-element vd[i] = min(vs2[i], vs1[i]).
vd and vs2 are SEW-wide vector groups; same-EEW destination/source overlap is legal and equal sources read equal initial values. There is no immediate operand.
vs1 provides the second SEW-wide FP value in the same lane; this is not a cross-lane reduction.
Assembly vm is optional v0.t; omission means vm=1. Only active elements with vstart≤i<vl and (vm=1 or v0[i]=1) perform minimumNumber/maximumNumber.
Require V, supported vtype and FP widths, and enabled VS/FS; V supports FP32/FP64 and depends on F/D. With H and virtualization V=1, vsstatus.VS/FS must also be enabled. Invalid frm use is reserved even if no rounding occurs or vl=0.
Prestart is unchanged; vl=0 or vstart≥vl leaves every destination element, including tails, unchanged. Otherwise inactive/tail elements follow vma/vta, with no guaranteed zeroing or preservation.
With vm=0, vd cannot overlap v0; v0 cannot supply both an EEW=1 selection/mask source and SEW data. Successful execution resets vstart to zero.
Assume V/VS/FS enabled, valid frm, supported e32,m1, VLMAX≥4, x10=4, vstart=0, and v2=[1,-2,3,+0]; scalars are validly NaN-boxed. v3=[2,-3,1,-0] → v1=[1,-3,1,-0]. Min/max examples omit v0.t, so all four body elements execute; merge uses v0 only for selection. Tails follow ta without assumed zeroing.
Assume V/VS/FS enabled, valid frm, supported e32,m1, VLMAX≥4, x10=4, vstart=0, and v2=[1,-2,3,+0]; scalars are validly NaN-boxed. v3=[2,-3,1,-0] → v1=[1,-3,1,-0]. Min/max examples omit v0.t, so all four body elements execute; merge uses v0 only for selection. Tails follow ta without assumed zeroing.
With vm=0, only active elements selected by v0.t execute; vm=1 is unmasked. The page formula is vd[i] = min(vs2[i], vs1[i]).
No. It produces one destination vector element per lane; cross-element min/max reductions use the corresponding vector reduction instructions.
One NaN input returns the non-NaN input; two NaNs return canonical NaN. Any signaling NaN raises fflags.NV even when a number is returned; quiet NaN alone does not. For min/max, -0.0 is less than +0.0; equal-sign zeros retain their sign.