opcodestr | unmasked(vm=1) | masked(vm=0) |
---|---|---|
Configuration-Setting Instructions (no vm bit) |
||
vsetvli |
√ |
|
vsetvl |
√ |
|
Vector Unit-Stride Instructions |
||
vlb.v |
√ |
|
vlh.v |
√ |
|
vlw.v |
√ |
|
vlbu.v |
√ |
|
vlhu.v |
√ |
|
vlwu.v |
√ |
|
vle.v |
√ |
|
vsb.v |
√ |
|
vsh.v |
√ |
|
vsw.v |
√ |
|
vse.v |
√ |
|
Vector Strided Instructions |
||
vlsb.v |
√ |
|
vlsh.v |
√ |
|
vlsw.v |
√ |
|
vlsbu.v |
√ |
|
vlshu.v |
√ |
|
vlswu.v |
√ |
|
vlse.v |
√ |
|
vssb.v |
√ |
|
vssh.v |
√ |
|
vssw.v |
√ |
|
vsse.v |
√ |
|
Vector Indexed Instructions |
||
vlxb.v |
√ |
|
vlxh.v |
√ |
|
vlxw.v |
√ |
|
vlxbu.v |
√ |
|
vlxhu.v |
√ |
|
vlxwu.v |
√ |
|
vlxe.v |
√ |
|
vsxb.v |
√ |
|
vsxh.v |
√ |
|
vsxw.v |
√ |
|
vsxe.v |
√ |
|
vsuxb.v |
√ |
|
vsuxh.v |
√ |
|
vsuxw.v |
√ |
|
vsuxe.v |
√ |
|
Unit-stride Fault-Only-First Loads Instructions |
||
vlbff.v |
√ |
|
vlhff.v |
√ |
|
vlwff.v |
√ |
|
vlbuff.v |
√ |
|
vlhuff.v |
√ |
|
vlwuff.v |
√ |
|
vleff.v |
√ |
|
Vector Load/Store Segment Instructions |
||
TODO |
||
Vector AMO Operations |
||
TODO |
||
Vector Load/Store Whole Register Instructions (v-0.8 included) |
||
TODO |
||
Vector Single-Width Integer Add and Subtract Instructions |
||
vadd.vv |
√ |
|
vadd.vx |
√ |
|
vadd.vi |
√ |
|
vsub.vv |
√ |
|
vsub.vx |
√ |
|
vrsub.vx |
√ |
|
vrsub.vi |
√ |
|
Vector Widening Integer Add and Subtract Instructions |
||
vwaddu.vv |
√ |
|
vwaddu.vx |
√ |
|
vwsubu.vv |
√ |
|
vwsubu.vx |
√ |
|
vwadd.vv |
√ |
|
vwadd.vx |
√ |
|
vwsub.vv |
√ |
|
vwsub.vx |
√ |
|
vwaddu.wv |
√ |
|
vwaddu.wx |
√ |
|
vwsubu.wv |
√ |
|
vwsubu.wx |
√ |
|
vwadd.wv |
√ |
|
vwadd.wx |
√ |
|
vwsub.wv |
√ |
|
vwsub.wx |
√ |
|
Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions |
||
vadc.vvm |
reserved |
√ |
vadc.vxm |
reserved |
√ |
vadc.vim |
reserved |
√ |
vmadc.vv(m) |
√ |
√ |
vmadc.vx(m) |
√ |
√ |
vmadc.vi(m) |
√ |
√ |
vsbc.vvm |
reserved |
√ |
vsbc.vxm |
reserved |
√ |
vmsbc.vv(m) |
√ |
√ |
vmsbc.vx(m) |
√ |
√ |
Vector Bitwise Logical Instructions |
||
vand.vv |
√ |
|
vand.vx |
√ |
|
vand.vi |
√ |
|
vor.vv |
√ |
|
vor.vx |
√ |
|
vor.vi |
√ |
|
vxor.vv |
√ |
|
vxor.vx |
√ |
|
vxor.vi |
√ |
|
Vector Single-Width Bit Shift Instructions |
||
vsll.vv |
√ |
|
vsll.vx |
√ |
|
vsll.vi |
√ |
|
vsrl.vv |
√ |
|
vsrl.vx |
√ |
|
vsrl.vi |
√ |
|
vsra.vv |
√ |
|
vsra.vx |
√ |
|
vsra.vi |
√ |
|
Vector Narrowing Integer Right Shift Instructions (v-0.8 suffix changed) |
||
vnsrl.{v/w}v |
√ |
|
vnsrl.{v/w}x |
√ |
|
vnsrl.{v/w}i |
√ |
|
vnsra.{v/w}v |
√ |
|
vnsra.{v/w}x |
√ |
|
vnsra.{v/w}i |
√ |
|
Vector Integer Comparison Instructions |
||
vmseq.vv |
√ |
|
vmseq.vx |
√ |
|
vmseq.vi |
√ |
|
vmsne.vv |
√ |
|
vmsne.vx |
√ |
|
vmsne.vi |
√ |
|
vmsltu.vv |
√ |
|
vmsltu.vx |
√ |
|
vmslt.vv |
√ |
|
vmslt.vx |
√ |
|
vmsleu.vv |
√ |
|
vmsleu.vx |
√ |
|
vmsleu.vi |
√ |
|
vmsle.vv |
√ |
|
vmsle.vx |
√ |
|
vmsle.vi |
√ |
|
vmsgtu.vx |
√ |
|
vmsgtu.vi |
√ |
|
vmsgt.vx |
√ |
|
vmsgt.vi |
√ |
|
Vector Integer Min/Max Instructions |
||
vminu.vv |
√ |
|
vminu.vx |
√ |
|
vmin.vv |
√ |
|
vmin.vx |
√ |
|
vmaxu.vv |
√ |
|
vmaxu.vx |
√ |
|
vmax.vv |
√ |
|
vmax.vx |
√ |
|
Vector Single-Width Integer Multiply Instructions |
||
vmul.vv |
√ |
|
vmul.vx |
√ |
|
vmulh.vv |
√ |
|
vmulh.vx |
√ |
|
vmulhu.vv |
√ |
|
vmulhu.vx |
√ |
|
vmulhsu.vv |
√ |
|
vmulhsu.vx |
√ |
|
Vector Integer Divide Instructions |
||
vdivu.vv |
√ |
|
vdivu.vx |
√ |
|
vdiv.vv |
√ |
|
vdiv.vx |
√ |
|
vremu.vv |
√ |
|
vremu.vx |
√ |
|
vrem.vv |
√ |
|
vrem.vx |
√ |
|
Vector Widening Integer Multiply Instructions |
||
vwmul.vv |
√ |
|
vwmul.vx |
√ |
|
vwmulu.vv |
√ |
|
vwmulu.vx |
√ |
|
vwmulsu.vv |
√ |
|
vwmulsu.vx |
√ |
|
Vector Single-Width Integer Multiply-Add Instructions |
||
vmacc.vv |
√ |
|
vmacc.vx |
√ |
|
vnmsac.vv |
√ |
|
vnmsac.vx |
√ |
|
vmadd.vv |
√ |
|
vmadd.vx |
√ |
|
vnmsub.vv |
√ |
|
vnmsub.vx |
√ |
|
Vector Widening Integer Multiply-Add Instruction |
||
vwmaccu.vv |
√ |
|
vwmaccu.vx |
√ |
|
vwmacc.vv |
√ |
|
vwmacc.vx |
√ |
|
vwmaccsu.vv |
√ |
|
vwmaccsu.vx |
√ |
|
vwmaccus.vx |
√ |
|
Vector Quad-Widening Integer Multiply-Add Instructions (v-0.8 included) |
||
TODO |
||
Vector Integer Merge and Move Instructions (share the encoding) |
||
vector-vector |
vmv.v.v(√) |
vmerge.vvm(√) |
vector-scalar |
vmv.v.x(√) |
vmerge.vxm(√) |
vector-immediate |
vmv.v.i(√) |
vmerge.vim(√) |
Vector Single-Width Saturating Add and Subtract Instructions |
||
vsaddu.vv |
√ |
|
vsaddu.vx |
√ |
|
vsaddu.vi |
√ |
|
vsadd.vv |
√ |
|
vsadd.vx |
√ |
|
vsadd.vi |
√ |
|
vssubu.vv |
√ |
|
vssubu.vx |
√ |
|
vssub.vv |
√ |
|
vssub.vx |
√ |
|
Vector Single-Width Averaging Add and Subtract Instructions (v-0.8 changed) |
||
vaaddu.vv (v-0.8 included) |
||
vaaddu.vx (v-0.8 included) |
||
vaadd.vv |
√ |
|
vaadd.vx |
√ |
|
vaadd.vi (v-0.8 removed) |
√ |
|
vasubu.vv (v-0.8 included) |
||
vasubu.vx (v-0.8 included) |
||
vasub.vv |
√ |
|
vasub.vx |
√ |
|
Vector Single-Width Fractional Multiply Instructions with Rounding and Saturation |
||
vsmul.vv |
√ |
|
vsmul.vx |
√ |
|
Vector Widening Saturating Scaled Multiply-Add Instructions (v-0.8 removed) |
||
vwsmaccu.vv (v-0.8 removed) |
√ |
|
vwsmaccu.vx (v-0.8 removed) |
√ |
|
vwsmacc.vv (v-0.8 removed) |
√ |
|
vwsmacc.vx (v-0.8 removed) |
√ |
|
vwsmaccsu.vv (v-0.8 removed) |
√ |
|
vwsmaccsu.vx (v-0.8 removed) |
√ |
|
vwsmaccus.vx (v-0.8 removed) |
√ |
|
Vector Single-Width Scaling Shift Instructions |
||
vssrl.vv |
√ |
|
vssrl.vx |
√ |
|
vssrl.vi |
√ |
|
vssra.vv |
√ |
|
vssra.vx |
√ |
|
vssra.vi |
√ |
|
Vector Narrowing Fixed-Point Clip Instructions (v-0.8 suffix changed) |
||
vnclipu.{v/w}v |
√ |
|
vnclipu.{v/w}x |
√ |
|
vnclipu.{v/w}i |
√ |
|
vnclip.{v/w}v |
√ |
|
vnclip.{v/w}x |
√ |
|
vnclip.{v/w}i |
√ |
|
Vector Single-Width Floating-Point Add/Subtract Instructions |
||
vfadd.vv |
√ |
|
vfadd.vf |
√ |
|
vfsub.vv |
√ |
|
vfsub.vf |
√ |
|
vfrsub.vf |
√ |
|
Vector Widening Floating-Point Add/Subtract Instructions |
||
vfwadd.vv |
√ |
|
vfwadd.vf |
√ |
|
vfwsub.vv |
√ |
|
vfwsub.vf |
√ |
|
vfwadd.wv |
√ |
|
vfwadd.wf |
√ |
|
vfwsub.wv |
√ |
|
vfwsub.wf |
√ |
|
Vector Single-Width Floating-Point Multiply/Divide Instructions |
||
vfmul.vv |
√ |
|
vfmul.vf |
√ |
|
vfdiv.vv |
√ |
|
vfdiv.vf |
√ |
|
vfrdiv.vf |
√ |
|
Vector Widening Floating-Point Multiply Instructions |
||
vfwmul.vv |
√ |
|
vfwmul.vf |
√ |
|
Vector Single-Width Floating-Point Fused Multiply-Add Instructions |
||
vfmacc.vv |
√ |
|
vfmacc.vf |
√ |
|
vfnmacc.vv |
√ |
|
vfnmacc.vf |
√ |
|
vfmsac.vv |
√ |
|
vfmsac.vf |
√ |
|
vfnmsac.vv |
√ |
|
vfnmsac.vf |
√ |
|
vfmadd.vv |
√ |
|
vfmadd.vf |
√ |
|
vfnmadd.vv |
√ |
|
vfnmadd.vf |
√ |
|
vfmsub.vv |
√ |
|
vfmsub.vf |
√ |
|
vfnmsub.vv |
√ |
|
vfnmsub.vf |
√ |
|
Vector Widening Floating-Point Fused Multiply-Add Instructions |
||
vfwmacc.vv |
√ |
|
vfwmacc.vf |
√ |
|
vfwnmacc.vv |
√ |
|
vfwnmacc.vf |
√ |
|
vfwmsac.vv |
√ |
|
vfwmsac.vf |
√ |
|
vfwnmsac.vv |
√ |
|
vfwnmsac.vf |
√ |
|
Vector Floating-Point Square-Root Instruction |
||
vfsqrt.v |
√ |
|
Vector Floating-Point MIN/MAX Instructions |
||
vfmin.vv |
√ |
|
vfmin.vf |
√ |
|
vfmax.vv |
√ |
|
vfmax.vf |
√ |
|
Vector Floating-Point Sign-Injection Instructions |
||
vfsgnj.vv |
√ |
|
vfsgnj.vf |
√ |
|
vfsgnjn.vv |
√ |
|
vfsgnjn.vf |
√ |
|
vfsgnjx.vv |
√ |
|
vfsgnjx.vf |
√ |
|
Vector Floating-Point Compare Instructions |
||
vmfeq.vv |
√ |
|
vmfeq.vf |
√ |
|
vmfne.vv |
√ |
|
vmfne.vf |
√ |
|
vmflt.vv |
√ |
|
vmflt.vf |
√ |
|
vmfle.vv |
√ |
|
vmfle.vf |
√ |
|
vmfgt.vf |
√ |
|
vmfge.vf |
√ |
|
vmford.vv (v-0.8 removed) |
√ |
|
vmford.vf (v-0.8 removed) |
√ |
|
Vector Floating-Point Classify Instruction |
||
vfclass.v |
√ |
|
Vector Floating-Point Merge and Move Instructions (share the encoding) |
||
vector-scalar |
vfmv.v.x(√) |
vfmerge.vxm(√) |
Single-Width Floating-Point/Integer Type-Convert Instructions |
||
vfcvt.xu.f.v |
√ |
|
vfcvt.x.f.v |
√ |
|
vfcvt.f.xu.v |
√ |
|
vfcvt.f.x.v |
√ |
|
Widening Floating-Point/Integer Type-Convert Instructions |
||
vfwcvt.xu.f.v |
√ |
|
vfwcvt.x.f.v |
√ |
|
vfwcvt.f.xu.v |
√ |
|
vfwcvt.f.x.v |
√ |
|
vfwcvt.f.f.v |
√ |
|
Narrowing Floating-Point/Integer Type-Convert Instructions (v-0.8 suffix changed) |
||
vfncvt.xu.f.{v/w} |
√ |
|
vfncvt.x.f.{v/w} |
√ |
|
vfncvt.f.xu.{v/w} |
√ |
|
vfncvt.f.x.{v/w} |
√ |
|
vfncvt.f.f.{v/w} |
√ |
|
Vector Single-Width Integer Reduction Instructions |
||
vredsum.vs |
√ |
|
vredmaxu.vs |
√ |
|
vredmax.vs |
√ |
|
vredminu.vs |
√ |
|
vredmin.vs |
√ |
|
vredand.vs |
√ |
|
vredor.vs |
√ |
|
vredxor.vs |
√ |
|
Vector Widening Integer Reduction Instructions |
||
vwredsumu.vs |
√ |
|
vwredsum.vs |
√ |
|
Vector Single-Width Floating-Point Reduction Instructions |
||
vfredosum.vs |
√ |
|
vfredsum.vs |
√ |
|
vfredmax.vs |
√ |
|
vfredmin.vs |
√ |
|
Vector Widening Floating-Point Reduction Instructions |
||
vfwredosum.vs |
√ |
|
vfwredsum.vs |
√ |
|
Vector Mask-Register Logical Instructions |
||
vmand.mm |
√ |
|
vmnand.mm |
√ |
|
vmandnot.mm |
√ |
|
vmxor.mm |
√ |
|
vmor.mm |
√ |
|
vmnor.mm |
√ |
|
vmornot.mm |
√ |
|
vmxnor.mm |
√ |
|
Vector mask Instructions |
||
v(m)popc.m (v-0.8 changed) |
√ |
|
v(m)first.m (v-0.8 changed) |
√ |
|
vmsbf.m (v-0.8 changed) |
√ |
|
vmsif.m (v-0.8 changed) |
√ |
|
vmsof.m (v-0.8 changed) |
√ |
|
viota.m |
√ |
|
vid.v |
√ |
|
Integer Extract Instruction |
||
vext.x.v (v-0.8 removed) |
√ |
|
Integer Scalar Move Instructions |
||
vmv.x.s (v-0.8 included) |
||
vmv.s.x |
√ |
|
Floating-Point Scalar Move Instructions |
||
vfmv.f.s |
√ |
|
vfmv.s.f |
√ |
|
Vector Slide Instructions |
||
vslideup.vx |
√ |
|
vslideup.vi |
√ |
|
vslidedown.vx |
√ |
|
vslidedown.vi |
√ |
|
vslide1up.vx |
√ |
|
vslide1down.vx |
√ |
|
Vector Register Gather Instructions |
||
vrgather.vv |
√ |
|
vrgather.vx |
√ |
|
vrgather.vi |
√ |
|
Vector Compress Instruction |
||
vcompress.vm |
√ |
reserved |
Whole Vector Register Move (v-0.8 included) |
||
TODO |
||
Vector Integer Dot-Product Instructions |
||
vdotu.vv |
√ |
|
vdot.vv |
√ |
|
Vector Floating-Point Dot-Product Instruction |
||
vfdot.vv |
√ |