Vector Integer Instructions

vadd

Vector single-width integer add.

vadd.vv vd, vs2, vs1, vm
vadd.vx vd, vs2, rs1, vm
vadd.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000000

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000000

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000000

vm

vs2

imm[4:0]

011

vd

1010111

vsub

Vector single-width integer subtract.

vsub.vv vd, vs2, vs1, vm
vsub.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000010

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000010

vm

vs2

rs1

100

vd

1010111

vrsub

Integer reverse subtract, vd[i] = x[rs1](imm) - vs2[i].

vrsub.vx vd, vs2, rs1, vm
vrsub.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000011

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000011

vm

vs2

imm[4:0]

011

vd

1010111

vminu

Unsigned minimum.

vminu.vv vd, vs2, vs1, vm
vminu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000100

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000100

vm

vs2

rs1

100

vd

1010111

vmin

Signed minimum.

vmin.vv vd, vs2, vs1, vm
vmin.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000101

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000101

vm

vs2

rs1

100

vd

1010111

vmaxu

Unsigned maximum.

vmaxu.vv vd, vs2, vs1, vm
vmaxu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000110

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000110

vm

vs2

rs1

100

vd

1010111

vmax

Signed maximum.

vmax.vv vd, vs2, vs1, vm
vmax.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

000111

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

000111

vm

vs2

rs1

100

vd

1010111

vand

Bitwise logical and.

vand.vv vd, vs2, vs1, vm
vand.vx vd, vs2, rs1, vm
vand.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

001001

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001001

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001001

vm

vs2

imm[4:0]

011

vd

1010111

vor

Bitwise logical or.

vor.vv vd, vs2, vs1, vm
vor.vx vd, vs2, rs1, vm
vor.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

001010

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001010

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001010

vm

vs2

imm[4:0]

011

vd

1010111

vxor

Bitwise logical xor.

vxor.vv vd, vs2, vs1, vm
vxor.vx vd, vs2, rs1, vm
vxor.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

001011

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001011

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

001011

vm

vs2

imm[4:0]

011

vd

1010111

vadc

Vector integer add-with-carry instruction to produce sum with carry.

# vd[i] = vs2[i] + vs1[i] + v0.mask[i]
vadc.vvm vd, vs2, vs1, v0
# vd[i] = vs2[i] + x[rs1] + v0.mask[i]
vadc.vxm vd, vs2, rs1, v0
# vd[i] = vs2[i] + imm + v0.mask[i]
vadc.vim vd, vs2, imm, v0

31-26

25

24-20

19-15

14-12

11-7

6-0

010000

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010000

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010000

vm

vs2

imm[4:0]

011

vd

1010111

vmadc

Vector integer add-with-carry instruction to produce carry out in mask register format.

# vd.mask[i] = carry_out(vs2[i] + vs1[i] + v0.mask[i])
vmadc.vvm vd, vs2, vs1, v0 # Vector-vector
# vd.mask[i] = carry_out(vs2[i] + x[rs1] + v0.mask[i])
vmadc.vxm vd, vs2, rs1, v0 # Vector-scalar
# vd.mask[i] = carry_out(vs2[i] + imm + v0.mask[i])
vmadc.vim vd, vs2, imm, v0 # Vector-immediate
# vd.mask[i] = carry_out(vs2[i] + vs1[i])
vmadc.vv vd, vs2, vs1 # Vector-vector, no carry-in
# vd.mask[i] = carry_out(vs2[i] + x[rs1])
vmadc.vx vd, vs2, rs1 # Vector-scalar, no carry-in
# vd.mask[i] = carry_out(vs2[i] + imm)
vmadc.vi vd, vs2, imm # Vector-immediate, no carry-in

31-26

25

24-20

19-15

14-12

11-7

6-0

010001

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010001

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010001

vm

vs2

imm[4:0]

011

vd

1010111

vsbc

Vector integer subtract-with-borrow instruction to produce difference with borrow.

# vd[i] = vs2[i] - vs1[i] - v0.mask[i]
vsbc.vvm vd, vs2, vs1, v0 # Vector-vector
# vd[i] = vs2[i] - x[rs1] - v0.mask[i]
vsbc.vxm vd, vs2, rs1, v0 # Vector-scalar

31-26

25

24-20

19-15

14-12

11-7

6-0

010010

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010010

vm

vs2

rs1

100

vd

1010111

vzext/vsext

Vector integer extension to zero- or sign- extend a source vector integer operand with EEW less than SEW to fill SEW-sized elements in the destination.

vzext.vf2 vd, vs2, vm # Zero-extend SEW/2 source to SEW destination, with vs1 = '00110'.
vsext.vf2 vd, vs2, vm # Sign-extend SEW/2 source to SEW destination, with vs1 = '00111'.
vzext.vf4 vd, vs2, vm # Zero-extend SEW/4 source to SEW destination, with vs1 = '00100'.
vsext.vf4 vd, vs2, vm # Sign-extend SEW/4 source to SEW destination, with vs1 = '00101'.
vzext.vf8 vd, vs2, vm # Zero-extend SEW/8 source to SEW destination, with vs1 = '00010'.
vsext.vf8 vd, vs2, vm # Sign-extend SEW/8 source to SEW destination, with vs1 = '00011'.

31-26

25

24-20

19-15

14-12

11-7

6-0

010010

vm

vs2

vs1

010

vd/rd

1010111

vmsbc

Vector integer subtract-with-borrow instruction to borrow out in mask register format.

 # vd.mask[i] = borrow_out(vs2[i] - vs1[i] - v0.mask[i])
vmsbc.vvm vd, vs2, vs1, v0 # Vector-vector
# vd.mask[i] = borrow_out(vs2[i] - x[rs1] - v0.mask[i])
vmsbc.vxm vd, vs2, rs1, v0 # Vector-scalar
# vd.mask[i] = borrow_out(vs2[i] - vs1[i])
vmsbc.vv vd, vs2, vs1 # Vector-vector, no borrow-in
# vd.mask[i] = borrow_out(vs2[i] - x[rs1])
vmsbc.vx vd, vs2, rs1 # Vector-scalar, no borrow-in

31-26

25

24-20

19-15

14-12

11-7

6-0

010011

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

010011

vm

vs2

rs1

100

vd

1010111

vmseq

Integer compare instruction to set bit if equal.

vmseq.vv vd, vs2, vs1, vm
vmseq.vx vd, vs2, rs1, vm
vmseq.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011000

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011000

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011000

vm

vs2

imm[4:0]

011

vd

1010111

vmsne

Integer compare instruction to set bit if not equal.

vmsne.vv vd, vs2, vs1, vm
vmsne.vx vd, vs2, rs1, vm
vmsne.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011001

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011001

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011001

vm

vs2

imm[4:0]

011

vd

1010111

vmsltu

Integer compare instruction to set bit if less than, unsigned.

vmsltu.vv vd, vs2, vs1, vm
vmsltu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011010

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011010

vm

vs2

rs1

100

vd

1010111

vmslt

Integer compare instruction to set bit if less than, signed.

vmslt.vv vd, vs2, vs1, vm
vmslt.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011011

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011011

vm

vs2

rs1

100

vd

1010111

vmsleu

Integer compare instruction to set bit if less than or equal, unsigned.

vmsleu.vv vd, vs2, vs1, vm
vmsleu.vx vd, vs2, rs1, vm
vmsleu.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011100

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011100

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011100

vm

vs2

imm[4:0]

011

vd

1010111

vmsle

Integer compare instruction to set bit if less than or equal, signed.

vmsle.vv vd, vs2, vs1, vm
vmsle.vx vd, vs2, rs1, vm
vmsle.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011101

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011101

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011101

vm

vs2

imm[4:0]

011

vd

1010111

vmsgtu

Integer compare instruction to set bit if greater than, unsigned.

vmsgtu.vx vd, vs2, rs1, vm
vmsgtu.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011110

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011110

vm

vs2

imm[4:0]

011

vd

1010111

vmsgt

Integer compare instruction to set bit if greater than, signed.

vmsgt.vx vd, vs2, rs1, vm
vmsgt.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

011111

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

011111

vm

vs2

imm[4:0]

011

vd

1010111

vdivu

Unsigned divide.

vdivu.vv vd, vs2, vs1, vm
vdivu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100000

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100000

vm

vs2

rs1

110

vd/rd

1010111

vdiv

Signed divide.

vdiv.vv vd, vs2, vs1, vm
vdiv.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100001

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100001

vm

vs2

rs1

110

vd/rd

1010111

vremu

Unsigned remainder.

vremu.vv vd, vs2, vs1, vm
vremu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100010

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100010

vm

vs2

rs1

110

vd/rd

1010111

vrem

Signed remainder.

vrem.vv vd, vs2, vs1, vm
vrem.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100011

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100011

vm

vs2

rs1

110

vd/rd

1010111

vmulhu

Unsigned multiply, returning low bits of product.

vmulhu.vv vd, vs2, vs1, vm
vmulhu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100100

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100100

vm

vs2

rs1

110

vd/rd

1010111

vsll

Logical shift left.

vsll.vv vd, vs2, vs1, vm
vsll.vx vd, vs2, rs1, vm
vsll.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100101

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100101

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100101

vm

vs2

imm[4:0]

011

vd

1010111

vmul

Signed multiply, returning low bits of product.

vmul.vv vd, vs2, vs1, vm
vmul.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100101

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100101

vm

vs2

rs1

110

vd/rd

1010111

vmulhsu

Signed(vs2)-Unsigned multiply, returning high bits of product.

vmulhsu.vv vd, vs2, vs1, vm
vmulhsu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100110

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100110

vm

vs2

rs1

110

vd/rd

1010111

vmulh

Signed multiply, returning high bits of product.

vmulh.vv vd, vs2, vs1, vm
vmulh.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

100111

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

100111

vm

vs2

rs1

110

vd/rd

1010111

vsrl

Logical shift right.

vsrl.vv vd, vs2, vs1, vm
vsrl.vx vd, vs2, rs1, vm
vsrl.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101000

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101000

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101000

vm

vs2

imm[4:0]

011

vd

1010111

vsra

Arithmetic shift right.

vsra.vv vd, vs2, vs1, vm
vsra.vx vd, vs2, rs1, vm
vsra.vi vd, vs2, imm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101001

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101001

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101001

vm

vs2

imm[4:0]

011

vd

1010111

vmadd

Integer multiply-add, overwrite multiplicand.

vmadd.vv vd, vs2, vs1, vm
vmadd.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101001

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101001

vm

vs2

rs1

110

vd/rd

1010111

vnmsub

Integer multiply-sub, overwrite multiplicand.

vnmsub.vv vd, vs2, vs1, vm
vnmsub.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101011

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101011

vm

vs2

rs1

110

vd/rd

1010111

vnsrl

Narrowing shift right logical, SEW = (2*SEW) >> SEW.

vnsrl.wv vd, vs2, vs1, vm
vnsrl.wx vd, vs2, rs1, vm
vnsrl.wi vd, vs2, uimm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101100

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101100

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101100

vm

vs2

imm[4:0]

011

vd

1010111

vnsra

Narrowing shift right arithmetic, SEW = (2*SEW) >> SEW.

vnsra.wv vd, vs2, vs1, vm
vnsra.wx vd, vs2, rs1, vm
vnsra.wi vd, vs2, uimm, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101101

vm

vs2

vs1

000

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101101

vm

vs2

rs1

100

vd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101101

vm

vs2

imm[4:0]

011

vd

1010111

vmacc

Integer multiply-add, overwrite addend.

vmacc.vv vd, vs2, vs1, vm
vmacc.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101101

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101101

vm

vs2

rs1

110

vd/rd

1010111

vnmsac

Integer multiply-sub, overwrite minuend.

vnmsac.vv vd, vs2, vs1, vm
vnmsac.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

101111

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

101111

vm

vs2

rs1

110

vd/rd

1010111

vwaddu

Widening unsigned integer add, 2*SEW = SEW + SEW.

vwaddu.vv vd, vs2, vs1, vm
vwaddu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110000

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110000

vm

vs2

rs1

110

vd/rd

1010111

vwadd

Widening signed integer add, 2*SEW = SEW + SEW.

vwadd.vv vd, vs2, vs1, vm
vwadd.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110001

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110001

vm

vs2

rs1

110

vd/rd

1010111

vwsubu

Widening unsigned integer subtract, 2*SEW = SEW - SEW.

vwsubu.vv vd, vs2, vs1, vm
vwsubu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110010

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110010

vm

vs2

rs1

110

vd/rd

1010111

vwsub

Widening signed integer subtract, 2*SEW = SEW - SEW.

vwsub.vv vd, vs2, vs1, vm
vwsub.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110011

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110011

vm

vs2

rs1

110

vd/rd

1010111

vwaddu.w

Widening unsigned integer add, 2*SEW = 2*SEW + SEW.

vwaddu.wv vd, vs2, vs1, vm
vwaddu.wx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110100

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110100

vm

vs2

rs1

110

vd/rd

1010111

vwadd.w

Widening signed integer add, 2*SEW = 2*SEW + SEW.

vwadd.wv vd, vs2, vs1, vm
vwadd.wx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110101

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110101

vm

vs2

rs1

110

vd/rd

1010111

vwsubu.w

Widening unsigned integer subtract, 2*SEW = 2*SEW - SEW.

vwsubu.wv vd, vs2, vs1, vm
vwsubu.wx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110110

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110110

vm

vs2

rs1

110

vd/rd

1010111

vwsub.w

Widening signed integer subtract, 2*SEW = 2*SEW - SEW.

vwsub.wv vd, vs2, vs1, vm
vwsub.wx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

110111

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

110111

vm

vs2

rs1

110

vd/rd

1010111

vwmulu

Widening unsigned-integer multiply.

vwmulu.vv vd, vs2, vs1, vm
vwmulu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111000

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111000

vm

vs2

rs1

110

vd/rd

1010111

vwmulsu

Widening signed(vs2)-unsigned integer multiply.

vwmulsu.vv vd, vs2, vs1, vm
vwmulsu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111010

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111010

vm

vs2

rs1

110

vd/rd

1010111

vwmul

Widening signed-integer multiply.

vwmul.vv vd, vs2, vs1, vm
vwmul.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111011

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111011

vm

vs2

rs1

110

vd/rd

1010111

vwmaccu

Widening unsigned-integer multiply-add, overwrite addend.

vwmaccu.vv vd, vs2, vs1, vm
vwmaccu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111100

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111100

vm

vs2

rs1

110

vd/rd

1010111

vwmacc

Widening signed-integer multiply-add, overwrite addend.

vwmacc.vv vd, vs2, vs1, vm
vwmacc.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111101

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111101

vm

vs2

rs1

110

vd/rd

1010111

vwmaccus

Widening unsigned-signed-integer multiply-add, overwrite addend.

vwmaccus.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111110

vm

vs2

rs1

110

vd/rd

1010111

vwmaccsu

Widening signed-unsigned-integer multiply-add, overwrite addend.

vwmaccsu.vv vd, vs2, vs1, vm
vwmaccsu.vx vd, vs2, rs1, vm

31-26

25

24-20

19-15

14-12

11-7

6-0

111111

vm

vs2

vs1

010

vd/rd

1010111

31-26

25

24-20

19-15

14-12

11-7

6-0

111111

vm

vs2

rs1

110

vd/rd

1010111