What does the vm operand control for VFDIV.VV?
With vm=0, only active elements selected by v0.t execute; vm=1 is unmasked. The page formula is vd[i] = vs2[i] / vs1[i].
VFDIV.VV is an RVV single-width floating-point divide instruction with syntax vfdiv.vv vd, vs2, vs1, vm; each active element computes vd[i] = vs2[i] / vs1[i].
VFDIV.VV performs same-lane floating-point division on active elements within vl. The second source is vs1[i], not a scalar register; with vm=0, v0.t controls which elements execute, and vm=1 is unmasked. Rounding mode, NaNs, infinities, divide-by-zero, and exception flags follow the official RVV floating-point rules; fixed-point vxrm does not control this instruction.
Decode the OP-V encoding and execute lane-wise FP division with the second source from same-lane vs1.
lane 0: 1 / 0.5 -> 2
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, 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.
VFDIV.VV divides same-lane vs2[i] by vs1[i] and writes vd[i]; it is ordinary FP division, not a reciprocal estimate or integer division.
vd and vs2 are SEW-wide vector groups; same-EEW source/destination overlap is allowed. The assembly vm operand is optional v0.t; omitting it means vm=1.
vs1 is the same-SEW vector divisor and vs2 the dividend; equal source registers read equal initial values. Compute vs2[i]/vs1[i].
Require V, enabled VS/FS, and supported vtype. V supports binary32/64; these instructions at SEW=16 require Zvfh. VS/FS=Off raises illegal instruction; with H and virtualization V=1, vsstatus.VS/FS must also be enabled.
Active elements satisfy vstart≤i<vl and (vm=1 or v0[i]=1). Prestart elements are unchanged; inactive/tail elements follow vma/vta. VL=0 or vstart≥vl leaves the entire destination unchanged; successful completion resets vstart=0.
Masked vd cannot overlap v0; v0 cannot supply both an EEW=1 mask and SEW data source. Invalid frm use is reserved even at VL=0 or vstart≥vl; an illegal-instruction exception is not guaranteed. Only active-element exceptions accrue in fflags; fixed-point vxrm is not used.
The FP quotient rounds using dynamic frm. The animation fixes RNE and shows only finite results and non-zero divisors; legal zero divisors, NaNs, infinities, overflow, and fflags are outside this model.
Assume V/VS/FS enabled, frm=RNE, vstart=0, supported e32,m1, VLMAX≥4 and a0=4. The example is unmasked, so all four body elements execute. Initial values and results: v2=[1,2,-3,4.5], v3=[0.5,-1,3,1.5] → v1=[2,-2,-1,3]. VF scalars are assumed validly NaN-boxed; tails follow ta without assumed zeroing.
Assume V/VS/FS enabled, frm=RNE, vstart=0, supported e32,m1, VLMAX≥4 and a0=4. The example is unmasked, so all four body elements execute. Initial values and results: v2=[1,2,-3,4.5], v3=[0.5,-1,3,1.5] → v1=[2,-2,-1,3]. VF scalars are assumed validly NaN-boxed; tails follow ta without assumed zeroing.
Assume V/VS/FS enabled, frm=RNE, vstart=0, supported e32,m1, VLMAX≥4 and a0=4. The example is unmasked, so all four body elements execute. Initial values and results: v2=[1,2,-3,4.5], v3=[0.5,-1,3,1.5] → v1=[2,-2,-1,3]. VF scalars are assumed validly NaN-boxed; 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] = vs2[i] / vs1[i].
No. Ordinary RVV floating-point operations use the floating-point rounding mode frm and set FP exception flags; vxrm is for fixed-point rounding instructions.
Divide-by-zero, 0/0, NaN operands, and infinity inputs are handled by the FP rules. Results, rounding, and fflags follow the official RVV floating-point rules; this page does not simplify them into integer-style fixed results.