Is v0 an execution mask in VSBC.VXM?
No. The corresponding v0 bit is borrow-in arithmetic input.
Compute vs2[i] − scalar − v0.mask[i] for every body element; write the low SEW-bit difference to vd.
VSBC.VXM is vector-scalar subtraction with borrow in V. v0 supplies borrow-in without disabling elements: every body element vstart≤i<vl executes. Results wrap at SEW; VMSBC generates borrow-out.
Starts from OP-V encoding fields, then shows how VSBC uses each v0 bit as borrow-in, performs SEW-width subtract-with-borrow, and writes the difference.
Scalar x[rs1]: XLEN>SEW takes low SEW bits; XLEN<SEW sign-extends; x0 supplies zero.
Require V 1.0, enabled vector state and valid supported vtype/SEW; fix LMUL=m1 and vstart=0. Fix VLEN=4096 and VLMAX=4096/16=256; equal-width sources/destination may overlap. Fix vm=0; vm=1 is reserved. v0 supplies borrow-in, every body element executes, and vd cannot be v0. When v0 supplies the EEW=1 mask/borrow bits it cannot also supply data. Enter nonnegative element bit patterns. VL=0 updates no destination bits. Only body is shown without definite inactive/tail values; teaching stages are not processor cycles.
vsbc.vxm uses OP-V encoding. The animation places fixed fields, register fields, vm, and the rs1 field in one encoding strip.
This animation shows OP-V field decode, subtract-with-borrow, v0 borrow-in, and vd writeback; teaching stages are not processor cycles.
VSBC is the data-result instruction for multiword subtraction: v0 supplies the input bit, vd stores the low SEW-bit result, and VMSBC generates the output bit.
vd/vs2 are SEW/LMUL vector groups; rs1 selects an integer scalar and x0 supplies zero. v0 supplies borrow-in; syntax uses no v0.t.
OPIVX: funct6=010010, funct3=100, opcode=1010111. Convert the scalar by XLEN/SEW truncation or sign-extension.
Every body element writes lowSEW(vs2[i]−scalar−v0.mask[i]). Fixed vm=0; vm=1 and vd=v0 encodings are reserved. v0 cannot also supply SEW data.
Require V 1.0, enabled vector state and valid vtype. Body is vstart≤i<vl; tails follow vta. vl=0 or vstart≥vl leaves vd unchanged.
Assume enabled V/VS, valid m1, VLEN=4096, supported widths, vl=4, vstart=0 and initialized sources, XLEN=64. SEW=8, x5=1, v12=[0,1,255,7], v0.mask[0..3]=1010 → v8=[254,0,253,6]. Every body element executes; tails follow vta. vl=0 updates no destination.
Assume enabled V/VS, valid m1, VLEN=4096, supported widths, vl=4, vstart=0 and initialized sources, XLEN=64. SEW=8, x5=1, v12=[0,1,255,7], v0.mask[0..3]=1010 → v8=[254,0,253,6]. Every body element executes; tails follow vta. vl=0 updates no destination.
No. The corresponding v0 bit is borrow-in arithmetic input.
It writes the low SEW-bit difference; borrow-out is generated by VMSBC.