Does VROL.VX change element width?
No. The result element width remains the current SEW.
Vector rotate left by scalar amount; each vs2 element uses the low log2(SEW) bits of the amount.
Syntax: vrol.vx vd, vs2, rs1[, v0.t]. Vector registers select v0–v31; rs1 selects x0–x31, with x0 always zero. Omit v0.t for vm=1 or include it for vm=0. No immediate operand.
32-bit OP-V: funct6=010101, vm[25], vs2[24:20], rs1[19:15], funct3=100, vd[11:7], opcode=1010111.
Zvbb or Zvkb depends on Zve32x and supports SEW=8/16/32, with 64 additionally requiring Zve64x. Rotate each active vs2 element left by the low log2(SEW) bits of x[rs1], keeping SEW-bit results.
Enable vector state with a legal supported vtype. Same-width sources/destination may overlap, reading original values; LMUL>1 groups must be aligned. With vm=0, vd must not overlap v0, which cannot supply both SEW data and an EEW=1 mask.
Only active body elements are processed. Prestart is undisturbed; inactive/tail follow vma/vta. vstart≥vl (including vl=0) changes no destination elements; successful execution resets vstart. Unsupported nonzero vstart may be rejected by the implementation.
VROL.VX is a Zvbb or Zvkb vector rotate-left instruction. Each active element takes data from vs2 and rotates it by the amount from x[rs1]; only the low log2(SEW) bits of the amount are used.
This bounded model shows only lane 0 ISA-visible state; it does not model a pipeline, a cryptographic protocol, or unspecified inactive/tail values.
Execution context: enable the listed extension and vector state, use a legal supported vtype, LMUL=1 and VLEN≥64×SEW. Only lane 0 is expanded; vl=32/64 does not replicate it to other elements. SEW=64 requires Zve64x. Nonzero vstart assumes implementation support; otherwise an illegal-instruction exception is permitted.
funct6=010101, funct3=100, Zvbb/Zvkb
Rotates each active vs2 element left using the low log2(SEW) bits of integer register x[rs1]; the result remains SEW bits wide.
Syntax: vrol.vx vd, vs2, rs1[, v0.t]. Vector registers select v0–v31; rs1 selects x0–x31, with x0 always zero. Omit v0.t for vm=1 or include it for vm=0. No immediate operand.
32-bit OP-V: funct6=010101, vm[25], vs2[24:20], rs1[19:15], funct3=100, vd[11:7], opcode=1010111.
Zvbb or Zvkb depends on Zve32x and supports SEW=8/16/32, with 64 additionally requiring Zve64x. Rotate each active vs2 element left by the low log2(SEW) bits of x[rs1], keeping SEW-bit results.
Enable vector state with a legal supported vtype. Same-width sources/destination may overlap, reading original values; LMUL>1 groups must be aligned. With vm=0, vd must not overlap v0, which cannot supply both SEW data and an EEW=1 mask.
Only active body elements are processed. Prestart is undisturbed; inactive/tail follow vma/vta. vstart≥vl (including vl=0) changes no destination elements; successful execution resets vstart. Unsupported nonzero vstart may be rejected by the implementation.
With the listed extension and vector state enabled, legal supported vtype, LMUL=1, VLEN=256, vstart=0 and no mask: SEW=32, vl=1, v8[0]=0x12345678, x11=4: v4[0]=0x23456781. Only the active group/element is shown; tu keeps tails undisturbed. Success resets vstart=0.
With the listed extension and vector state enabled, legal supported vtype, LMUL=1, VLEN=256, vstart=0 and no mask: SEW=32, vl=1, v8[0]=0x12345678, x11=4: v4[0]=0x23456781. Only the active group/element is shown; tu keeps tails undisturbed. Success resets vstart=0.
No. The result element width remains the current SEW.
x0 supplies a zero rotate amount. XLEN>SEW uses the low SEW bits and XLEN<SEW sign-extends first; only the low log2(SEW) bits then control rotation.