How is VFWCVT.F.X.V different from VFCVT?
VFWCVT.F.X.V is a VFWCVT widening form: the source is SEW and the destination is 2*SEW. Single-width VFCVT uses the current SEW for both source and destination.
VFWCVT.F.X.V exactly widens each active vs2[i] from an SEW-wide signed integer value to a 2*SEW-wide FP result and writes vd[i].
VFWCVT.F.X.V is a RISC-V V-extension VFWCVT widening floating-point/integer conversion instruction with syntax vfwcvt.f.x.v vd, vs2, vm. It executes only for active elements within vl, uses the current SEW for source elements, and writes 2*SEW-wide destination elements; on the base V FP32/FP64 path, this page animation demonstrates SEW=32 inputs producing 64-bit destination results. The encoding uses OP-V, funct6=010010, funct3=001, and VFUNARY0 vs1 selector 01011. A double-width IEEE FP format represents every single-width integer exactly; results are independent of rounding mode, but frm must still be valid; vm=0 uses v0.t as the execution mask and vm=1 is unmasked.
Decode the OP-V encoding and execute a VFUNARY0 widening conversion lane by lane: each active lane converts the signed integer in vs2[i] to a 2*SEW FP value.
lane 0: widen_int_to_float(-8) -> -8
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.
VFWCVT.F.X.V is best understood as a VFUNARY0 widening conversion: after decoding vs1=01011, active elements convert vs2[i] from an SEW-wide signed integer value to a 2*SEW-wide FP result.
Syntax: vfwcvt.f.x.v vd, vs2[, v0.t]. 32-bit OP-V: opcode=1010111, funct3=001, funct6=010010. vs1=01011 is a VFUNARY0 selector, not a second vector source.
vs2 has EEW=SEW, EMUL=LMUL; vd has EEW=2×SEW, EMUL=2×LMUL. Groups with EMUL=2/4/8 align to their size; EMUL>8 is reserved, while EMUL≤1 does not require even register numbers.
A double-width IEEE FP format always represents a single-width integer exactly; the result is independent of rounding mode and does not raise NX. Every vector FP instruction still requires valid frm, including at vl=0; invalid frm use is reserved. vxrm is not used.
Narrow-source/wide-destination overlap requires source EMUL≥1 and equal highest register numbers; legal different-EEW overlap forces mask/tail agnostic. A masked destination cannot include v0; one register cannot be read as different-EEW data and mask sources.
Optional v0.t means vm=0; omission means vm=1. Active elements satisfy vstart≤i<vl with the mask enabled; only active-element exceptions accrue in fflags. Prestart elements do not update or raise exceptions. At vl=0 or vstart≥vl no destination elements, including tails, update. Other inactive/tail elements follow vma/vta; ta/ma does not guarantee zeros. Successful execution resets vstart=0.
Require the extensions, supported FP formats, valid vtype, and enabled VS/FS; with H and virtualization V=1, vsstatus.VS/FS must also be enabled. This animation fixes SEW=32, LMUL=m1, VLEN=4096, vstart=0, ta/ma, and finite inputs; it does not fully simulate NaNs, infinities, fflags, or microarchitectural cycles.
Assume enabled extensions and VS/FS, valid vtype, supported formats, frm=RNE, e32,m1, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Omit v0.t for unmasked execution: v4(int32)=[-2147483648,-1,0,2147483647] → v2/v3(binary64)=[-2147483648,-1,0,2147483647]. Tails follow ta without guaranteed zeros.
Assume enabled extensions and VS/FS, valid vtype, supported formats, frm=RNE, e32,m1, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Omit v0.t for unmasked execution: v4(int32)=[-2147483648,-1,0,2147483647] → v2/v3(binary64)=[-2147483648,-1,0,2147483647]. Tails follow ta without guaranteed zeros.
Assume enabled extensions and VS/FS, valid vtype, supported formats, frm=RNE, e32,m1, VLMAX≥4, and a0=4; vsetvli sets vl=4 and vstart=0. Omit v0.t for unmasked execution: v4(int32)=[-2147483648,-1,0,2147483647] → v2/v3(binary64)=[-2147483648,-1,0,2147483647]. Tails follow ta without guaranteed zeros.
VFWCVT.F.X.V is a VFWCVT widening form: the source is SEW and the destination is 2*SEW. Single-width VFCVT uses the current SEW for both source and destination.
A single-width integer always converts exactly to the double-width IEEE FP format, without NX. The result is independent of rounding mode, but frm must be valid.
vm=0 converts only active elements with v0[i]=1; vm=1 is unmasked. Inactive/tail elements follow vma/vta, with legal different-EEW overlap forcing agnostic. At vl=0 or vstart≥vl no destination elements update.
The animation focuses on the V 32-bit-source to 64-bit-destination path. V depends on F/D and does not automatically include half precision. Zvfh defines the SEW=16 path. Zvfh also defines SEW=8 integer-to-binary16 widening conversion.