Do these vector BF16 instructions support any SEW?
No. The official vector BF16 instructions reserve encodings when SEW is not 16; this page animation fixes SEW=16.
BF16 vector-scalar widening fused multiply-accumulate into FP32 vd.
VFWMACCBF16.VF, with SEW=16, reads a scalar BF16 value from f[rs1], BF16 elements from vs2, and the FP32 accumulator in vd, multiplies the BF16 sources, adds the unrounded product to the corresponding FP32 accumulator, then rounds by frm and writes FP32 vd; it belongs to Zvfbfwma.
Decode the OP-V encoding and execute BF16 widening fused multiply-accumulate: each active lane multiplies f[rs1] and vs2[i] as BF16 sources and accumulates into FP32 vd[i].
lane 0: fma_rne(1.5, 1.5, 0.5) -> 2.75 / 0x40300000
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 SEW=16, LMUL=m1, VLEN=4096, VLMAX=256, vstart=0, valid vtype, enabled VS/FS, and ta/ma. BF16 sources occupy single registers; the FP32 accumulator occupies an even vd..vd+1 group. Since the accumulator is also a source, it cannot overlap a BF16 source read at a different EEW. Equal BF16 sources require equal bits. Numeric input is represented as FP32 and then as BF16 under RNE; raw patterns directly provide BF16 bits. The exact product-plus-FP32-addend is rounded once by the selected frm; scalar input assumes valid NaN-boxing. VL=0 updates no destination elements; inactive/tail values are unspecified by this display. NaNs, infinities, and fflags are outside this finite-sample model; exceeding its range does not mean an illegal instruction.
SEW=16, BF16 sources come from vs2 and vs1/rs1, and vd is both the FP32 accumulator input and FP32 result. The animation exactly widens BF16 sources first, then shows the equivalent FP32 fused multiply-accumulate path; exception flags follow the official BF16 rules.This is the BF16 vector-scalar widening FMA: the syntax is vd, rs1, vs2, vm; rs1 is a BF16 scalar in an FP register, and vd is the FP32 accumulator and result.
SEW=16. Active elements satisfy vstart<=i<vl and mask enablement. vstart>=vl (including vl=0) updates no destination elements; prestart stays unchanged, while inactive/tail follow vma/vta. BF16 sources use EMUL=LMUL and FP32 accumulator/results use EMUL=2*LMUL<=8. Require valid supported vtype, required extensions and enabled vector/FP state; each active element uses one fused rounding by frm.
The RISC-V Instruction Set Manual, Volume I: Unprivileged Architecture — Version 20260120, §25.5.5Understand this scenario with real code like «vfwmaccbf16.vf v4, f0, v8 # v4[fp32] += bf16(f0) * bf16(v8[i])».
Understand this scenario with real code like «vfwmaccbf16.vf v4, f0, v8 # v4[fp32] += bf16(f0) * bf16(v8[i])».
No. The official vector BF16 instructions reserve encodings when SEW is not 16; this page animation fixes SEW=16.
No. BF16 has 1 sign bit, 8 exponent bits, and 7 fraction bits; it differs from half-precision binary16 in exponent and fraction widths.
Not exactly. The official description gives an equivalent sequence that widens BF16 sources to FP32 and then uses vfmacc, but the source format, SEW=16 restriction, and Zvfbfwma requirement are different.