How does VCLMUL.VX use masking?
Append optional v0.t for vm=0; omit it for vm=1. vm is an encoding field, not an assembly register operand. Mask and register-group overlap constraints still apply.
Vector-scalar carry-less multiply low: GF(2) polynomial multiplication, low 64 bits; SEW=64 only.
vd, vs2 select v0–v31; rs1 selects x0–x31, with x0 always zero. Optional v0.t means vm=0; omission means vm=1. No immediate operand.
32-bit OP-V: funct6=001100, vm[25], vs2[24:20], rs1[19:15], funct3=110, vd[11:7], opcode=1010111.
Zvbc depends on Zve64x. Only SEW=64 is defined; other SEWs are reserved. Active elements perform GF(2) carry-less multiplication and return the low 64 bits of the 128-bit product; RV32 zero-extends x[rs1] to 64 bits.
Enable vector state and use a legal supported vtype. Same-width sources/destination may overlap, reading original source values; LMUL>1 groups must be aligned. A masked destination cannot overlap v0; v0 cannot supply both SEW data and an EEW=1 mask.
Process mask-enabled elements where vstart≤i<vl. Prestart elements are undisturbed; inactive/tail elements follow vma/vta and may retain values or become all ones. vstart≥vl (including vl=0) changes no destination. Success resets vstart; implementations may reject unsupported nonzero vstart.
vclmul.vx zero-extends or truncates x[rs1] to SEW, carry-less multiplies it with vs2[i], and writes the low 64 bits. It is defined only for SEW=64.
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=001100, funct3=110, Zvbc
vclmul.vx is provided by Zvbc for vector-scalar carry-less multiply low. Only SEW=64 is defined.
vd, vs2 select v0–v31; rs1 selects x0–x31, with x0 always zero. Optional v0.t means vm=0; omission means vm=1. No immediate operand.
32-bit OP-V: funct6=001100, vm[25], vs2[24:20], rs1[19:15], funct3=110, vd[11:7], opcode=1010111.
Zvbc depends on Zve64x. Only SEW=64 is defined; other SEWs are reserved. Active elements perform GF(2) carry-less multiplication and return the low 64 bits of the 128-bit product; RV32 zero-extends x[rs1] to 64 bits.
Enable vector state and use a legal supported vtype. Same-width sources/destination may overlap, reading original source values; LMUL>1 groups must be aligned. A masked destination cannot overlap v0; v0 cannot supply both SEW data and an EEW=1 mask.
Process mask-enabled elements where vstart≤i<vl. Prestart elements are undisturbed; inactive/tail elements follow vma/vta and may retain values or become all ones. vstart≥vl (including vl=0) changes no destination. Success resets vstart; implementations may reject unsupported nonzero vstart.
With the listed extension and vector state enabled, legal vtype, LMUL=1, VLEN≥128, vl=1, vstart=0 and no mask: SEW=64, v8[0]=0x3, x11=0x3: 0x3 XOR (0x3 << 1) = 0x5, written to v4[0].
Append optional v0.t for vm=0; omit it for vm=1. vm is an encoding field, not an assembly register operand. Mask and register-group overlap constraints still apply.
Only SEW=64; other SEW encodings are reserved. Zvbc depends on Zve64x; RV32 zero-extends scalar x[rs1] to 64 bits.