[llvm] 12d2acd - [LoongArch][MC] Add testcases for LSX instructions

via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 6 20:22:48 PDT 2023


Author: chenli
Date: 2023-07-07T11:21:54+08:00
New Revision: 12d2acdf4acc4c31e9ff483685d766b1f4f22b4e

URL: https://github.com/llvm/llvm-project/commit/12d2acdf4acc4c31e9ff483685d766b1f4f22b4e
DIFF: https://github.com/llvm/llvm-project/commit/12d2acdf4acc4c31e9ff483685d766b1f4f22b4e.diff

LOG: [LoongArch][MC] Add testcases for LSX instructions

Depends on D154183

Reviewed By: SixWeining

Differential Revision: https://reviews.llvm.org/D154197

Added: 
    llvm/test/MC/LoongArch/lsx/absd.s
    llvm/test/MC/LoongArch/lsx/add.s
    llvm/test/MC/LoongArch/lsx/adda.s
    llvm/test/MC/LoongArch/lsx/addi.s
    llvm/test/MC/LoongArch/lsx/addw.s
    llvm/test/MC/LoongArch/lsx/and.s
    llvm/test/MC/LoongArch/lsx/andi.s
    llvm/test/MC/LoongArch/lsx/andn.s
    llvm/test/MC/LoongArch/lsx/avg.s
    llvm/test/MC/LoongArch/lsx/avgr.s
    llvm/test/MC/LoongArch/lsx/bitclr.s
    llvm/test/MC/LoongArch/lsx/bitrev.s
    llvm/test/MC/LoongArch/lsx/bitsel.s
    llvm/test/MC/LoongArch/lsx/bitseli.s
    llvm/test/MC/LoongArch/lsx/bitset.s
    llvm/test/MC/LoongArch/lsx/bsll.s
    llvm/test/MC/LoongArch/lsx/bsrl.s
    llvm/test/MC/LoongArch/lsx/clo.s
    llvm/test/MC/LoongArch/lsx/clz.s
    llvm/test/MC/LoongArch/lsx/div.s
    llvm/test/MC/LoongArch/lsx/exth.s
    llvm/test/MC/LoongArch/lsx/extl.s
    llvm/test/MC/LoongArch/lsx/extrins.s
    llvm/test/MC/LoongArch/lsx/fadd.s
    llvm/test/MC/LoongArch/lsx/fclass.s
    llvm/test/MC/LoongArch/lsx/fcmp.s
    llvm/test/MC/LoongArch/lsx/fcvt.s
    llvm/test/MC/LoongArch/lsx/fcvth.s
    llvm/test/MC/LoongArch/lsx/fcvtl.s
    llvm/test/MC/LoongArch/lsx/fdiv.s
    llvm/test/MC/LoongArch/lsx/ffint.s
    llvm/test/MC/LoongArch/lsx/flogb.s
    llvm/test/MC/LoongArch/lsx/fmadd.s
    llvm/test/MC/LoongArch/lsx/fmax.s
    llvm/test/MC/LoongArch/lsx/fmaxa.s
    llvm/test/MC/LoongArch/lsx/fmin.s
    llvm/test/MC/LoongArch/lsx/fmina.s
    llvm/test/MC/LoongArch/lsx/fmsub.s
    llvm/test/MC/LoongArch/lsx/fmul.s
    llvm/test/MC/LoongArch/lsx/fnmadd.s
    llvm/test/MC/LoongArch/lsx/fnmsub.s
    llvm/test/MC/LoongArch/lsx/frecip.s
    llvm/test/MC/LoongArch/lsx/frint.s
    llvm/test/MC/LoongArch/lsx/frsqrt.s
    llvm/test/MC/LoongArch/lsx/frstp.s
    llvm/test/MC/LoongArch/lsx/fsqrt.s
    llvm/test/MC/LoongArch/lsx/fsub.s
    llvm/test/MC/LoongArch/lsx/ftint.s
    llvm/test/MC/LoongArch/lsx/haddw.s
    llvm/test/MC/LoongArch/lsx/hsubw.s
    llvm/test/MC/LoongArch/lsx/ilv.s
    llvm/test/MC/LoongArch/lsx/insgr2vr.s
    llvm/test/MC/LoongArch/lsx/invalid-imm.s
    llvm/test/MC/LoongArch/lsx/ld.s
    llvm/test/MC/LoongArch/lsx/ldi.s
    llvm/test/MC/LoongArch/lsx/ldrepl.s
    llvm/test/MC/LoongArch/lsx/madd.s
    llvm/test/MC/LoongArch/lsx/maddw.s
    llvm/test/MC/LoongArch/lsx/max.s
    llvm/test/MC/LoongArch/lsx/min.s
    llvm/test/MC/LoongArch/lsx/mod.s
    llvm/test/MC/LoongArch/lsx/mskgez.s
    llvm/test/MC/LoongArch/lsx/mskltz.s
    llvm/test/MC/LoongArch/lsx/msknz.s
    llvm/test/MC/LoongArch/lsx/msub.s
    llvm/test/MC/LoongArch/lsx/muh.s
    llvm/test/MC/LoongArch/lsx/mul.s
    llvm/test/MC/LoongArch/lsx/mulw.s
    llvm/test/MC/LoongArch/lsx/neg.s
    llvm/test/MC/LoongArch/lsx/nor.s
    llvm/test/MC/LoongArch/lsx/nori.s
    llvm/test/MC/LoongArch/lsx/or.s
    llvm/test/MC/LoongArch/lsx/ori.s
    llvm/test/MC/LoongArch/lsx/orn.s
    llvm/test/MC/LoongArch/lsx/pack.s
    llvm/test/MC/LoongArch/lsx/pcnt.s
    llvm/test/MC/LoongArch/lsx/permi.s
    llvm/test/MC/LoongArch/lsx/pick.s
    llvm/test/MC/LoongArch/lsx/pickve2gr.s
    llvm/test/MC/LoongArch/lsx/replgr2vr.s
    llvm/test/MC/LoongArch/lsx/replve.s
    llvm/test/MC/LoongArch/lsx/replvei.s
    llvm/test/MC/LoongArch/lsx/rotr.s
    llvm/test/MC/LoongArch/lsx/sadd.s
    llvm/test/MC/LoongArch/lsx/sat.s
    llvm/test/MC/LoongArch/lsx/seq.s
    llvm/test/MC/LoongArch/lsx/set.s
    llvm/test/MC/LoongArch/lsx/setallnez.s
    llvm/test/MC/LoongArch/lsx/setanyeqz.s
    llvm/test/MC/LoongArch/lsx/shuf.s
    llvm/test/MC/LoongArch/lsx/shuf4i.s
    llvm/test/MC/LoongArch/lsx/signcov.s
    llvm/test/MC/LoongArch/lsx/sle.s
    llvm/test/MC/LoongArch/lsx/sll.s
    llvm/test/MC/LoongArch/lsx/sllwil.s
    llvm/test/MC/LoongArch/lsx/slt.s
    llvm/test/MC/LoongArch/lsx/sra.s
    llvm/test/MC/LoongArch/lsx/sran.s
    llvm/test/MC/LoongArch/lsx/srani.s
    llvm/test/MC/LoongArch/lsx/srar.s
    llvm/test/MC/LoongArch/lsx/srarn.s
    llvm/test/MC/LoongArch/lsx/srarni.s
    llvm/test/MC/LoongArch/lsx/srl.s
    llvm/test/MC/LoongArch/lsx/srln.s
    llvm/test/MC/LoongArch/lsx/srlni.s
    llvm/test/MC/LoongArch/lsx/srlr.s
    llvm/test/MC/LoongArch/lsx/srlrn.s
    llvm/test/MC/LoongArch/lsx/srlrni.s
    llvm/test/MC/LoongArch/lsx/ssran.s
    llvm/test/MC/LoongArch/lsx/ssrani.s
    llvm/test/MC/LoongArch/lsx/ssrarn.s
    llvm/test/MC/LoongArch/lsx/ssrarni.s
    llvm/test/MC/LoongArch/lsx/ssrln.s
    llvm/test/MC/LoongArch/lsx/ssrlni.s
    llvm/test/MC/LoongArch/lsx/ssrlrn.s
    llvm/test/MC/LoongArch/lsx/ssrlrni.s
    llvm/test/MC/LoongArch/lsx/ssub.s
    llvm/test/MC/LoongArch/lsx/st.s
    llvm/test/MC/LoongArch/lsx/stelm.s
    llvm/test/MC/LoongArch/lsx/sub.s
    llvm/test/MC/LoongArch/lsx/subi.s
    llvm/test/MC/LoongArch/lsx/subw.s
    llvm/test/MC/LoongArch/lsx/xor.s
    llvm/test/MC/LoongArch/lsx/xori.s

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/MC/LoongArch/lsx/absd.s b/llvm/test/MC/LoongArch/lsx/absd.s
new file mode 100644
index 00000000000000..b203cab285743a
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/absd.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vabsd.b $vr14, $vr15, $vr12
+# CHECK-INST: vabsd.b $vr14, $vr15, $vr12
+# CHECK-ENCODING: encoding: [0xee,0x31,0x60,0x70]
+
+vabsd.h $vr7, $vr13, $vr10
+# CHECK-INST: vabsd.h $vr7, $vr13, $vr10
+# CHECK-ENCODING: encoding: [0xa7,0xa9,0x60,0x70]
+
+vabsd.w $vr5, $vr28, $vr29
+# CHECK-INST: vabsd.w $vr5, $vr28, $vr29
+# CHECK-ENCODING: encoding: [0x85,0x77,0x61,0x70]
+
+vabsd.d $vr7, $vr25, $vr5
+# CHECK-INST: vabsd.d $vr7, $vr25, $vr5
+# CHECK-ENCODING: encoding: [0x27,0x97,0x61,0x70]
+
+vabsd.bu $vr22, $vr16, $vr21
+# CHECK-INST: vabsd.bu $vr22, $vr16, $vr21
+# CHECK-ENCODING: encoding: [0x16,0x56,0x62,0x70]
+
+vabsd.hu $vr7, $vr29, $vr8
+# CHECK-INST: vabsd.hu $vr7, $vr29, $vr8
+# CHECK-ENCODING: encoding: [0xa7,0xa3,0x62,0x70]
+
+vabsd.wu $vr19, $vr31, $vr16
+# CHECK-INST: vabsd.wu $vr19, $vr31, $vr16
+# CHECK-ENCODING: encoding: [0xf3,0x43,0x63,0x70]
+
+vabsd.du $vr29, $vr31, $vr17
+# CHECK-INST: vabsd.du $vr29, $vr31, $vr17
+# CHECK-ENCODING: encoding: [0xfd,0xc7,0x63,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/add.s b/llvm/test/MC/LoongArch/lsx/add.s
new file mode 100644
index 00000000000000..fbc6c0fd5dd7fa
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/add.s
@@ -0,0 +1,24 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vadd.b $vr11, $vr12, $vr8
+# CHECK-INST: vadd.b $vr11, $vr12, $vr8
+# CHECK-ENCODING: encoding: [0x8b,0x21,0x0a,0x70]
+
+vadd.h $vr22, $vr3, $vr4
+# CHECK-INST: vadd.h $vr22, $vr3, $vr4
+# CHECK-ENCODING: encoding: [0x76,0x90,0x0a,0x70]
+
+vadd.w $vr13, $vr16, $vr6
+# CHECK-INST: vadd.w $vr13, $vr16, $vr6
+# CHECK-ENCODING: encoding: [0x0d,0x1a,0x0b,0x70]
+
+vadd.d $vr12, $vr9, $vr3
+# CHECK-INST: vadd.d $vr12, $vr9, $vr3
+# CHECK-ENCODING: encoding: [0x2c,0x8d,0x0b,0x70]
+
+vadd.q $vr16, $vr15, $vr10
+# CHECK-INST: vadd.q $vr16, $vr15, $vr10
+# CHECK-ENCODING: encoding: [0xf0,0x29,0x2d,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/adda.s b/llvm/test/MC/LoongArch/lsx/adda.s
new file mode 100644
index 00000000000000..31f073b055eceb
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/adda.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vadda.b $vr7, $vr14, $vr21
+# CHECK-INST: vadda.b $vr7, $vr14, $vr21
+# CHECK-ENCODING: encoding: [0xc7,0x55,0x5c,0x70]
+
+vadda.h $vr19, $vr29, $vr2
+# CHECK-INST: vadda.h $vr19, $vr29, $vr2
+# CHECK-ENCODING: encoding: [0xb3,0x8b,0x5c,0x70]
+
+vadda.w $vr2, $vr23, $vr17
+# CHECK-INST: vadda.w $vr2, $vr23, $vr17
+# CHECK-ENCODING: encoding: [0xe2,0x46,0x5d,0x70]
+
+vadda.d $vr13, $vr18, $vr24
+# CHECK-INST: vadda.d $vr13, $vr18, $vr24
+# CHECK-ENCODING: encoding: [0x4d,0xe2,0x5d,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/addi.s b/llvm/test/MC/LoongArch/lsx/addi.s
new file mode 100644
index 00000000000000..0e5795050d4ea0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/addi.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vaddi.bu $vr14, $vr3, 2
+# CHECK-INST: vaddi.bu $vr14, $vr3, 2
+# CHECK-ENCODING: encoding: [0x6e,0x08,0x8a,0x72]
+
+vaddi.hu $vr30, $vr27, 21
+# CHECK-INST: vaddi.hu $vr30, $vr27, 21
+# CHECK-ENCODING: encoding: [0x7e,0xd7,0x8a,0x72]
+
+vaddi.wu $vr16, $vr28, 27
+# CHECK-INST: vaddi.wu $vr16, $vr28, 27
+# CHECK-ENCODING: encoding: [0x90,0x6f,0x8b,0x72]
+
+vaddi.du $vr15, $vr8, 24
+# CHECK-INST: vaddi.du $vr15, $vr8, 24
+# CHECK-ENCODING: encoding: [0x0f,0xe1,0x8b,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/addw.s b/llvm/test/MC/LoongArch/lsx/addw.s
new file mode 100644
index 00000000000000..fbcc898da803d6
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/addw.s
@@ -0,0 +1,100 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vaddwev.h.b $vr2, $vr23, $vr25
+# CHECK-INST: vaddwev.h.b $vr2, $vr23, $vr25
+# CHECK-ENCODING: encoding: [0xe2,0x66,0x1e,0x70]
+
+vaddwev.w.h $vr4, $vr8, $vr30
+# CHECK-INST: vaddwev.w.h $vr4, $vr8, $vr30
+# CHECK-ENCODING: encoding: [0x04,0xf9,0x1e,0x70]
+
+vaddwev.d.w $vr8, $vr31, $vr5
+# CHECK-INST: vaddwev.d.w $vr8, $vr31, $vr5
+# CHECK-ENCODING: encoding: [0xe8,0x17,0x1f,0x70]
+
+vaddwev.q.d $vr10, $vr10, $vr13
+# CHECK-INST: vaddwev.q.d $vr10, $vr10, $vr13
+# CHECK-ENCODING: encoding: [0x4a,0xb5,0x1f,0x70]
+
+vaddwev.h.bu $vr12, $vr24, $vr25
+# CHECK-INST: vaddwev.h.bu $vr12, $vr24, $vr25
+# CHECK-ENCODING: encoding: [0x0c,0x67,0x2e,0x70]
+
+vaddwev.w.hu $vr3, $vr9, $vr30
+# CHECK-INST: vaddwev.w.hu $vr3, $vr9, $vr30
+# CHECK-ENCODING: encoding: [0x23,0xf9,0x2e,0x70]
+
+vaddwev.d.wu $vr27, $vr10, $vr17
+# CHECK-INST: vaddwev.d.wu $vr27, $vr10, $vr17
+# CHECK-ENCODING: encoding: [0x5b,0x45,0x2f,0x70]
+
+vaddwev.q.du $vr25, $vr20, $vr14
+# CHECK-INST: vaddwev.q.du $vr25, $vr20, $vr14
+# CHECK-ENCODING: encoding: [0x99,0xba,0x2f,0x70]
+
+vaddwev.h.bu.b $vr5, $vr7, $vr16
+# CHECK-INST: vaddwev.h.bu.b $vr5, $vr7, $vr16
+# CHECK-ENCODING: encoding: [0xe5,0x40,0x3e,0x70]
+
+vaddwev.w.hu.h $vr15, $vr13, $vr29
+# CHECK-INST: vaddwev.w.hu.h $vr15, $vr13, $vr29
+# CHECK-ENCODING: encoding: [0xaf,0xf5,0x3e,0x70]
+
+vaddwev.d.wu.w $vr2, $vr6, $vr8
+# CHECK-INST: vaddwev.d.wu.w $vr2, $vr6, $vr8
+# CHECK-ENCODING: encoding: [0xc2,0x20,0x3f,0x70]
+
+vaddwev.q.du.d $vr19, $vr1, $vr12
+# CHECK-INST: vaddwev.q.du.d $vr19, $vr1, $vr12
+# CHECK-ENCODING: encoding: [0x33,0xb0,0x3f,0x70]
+
+vaddwod.h.b $vr31, $vr6, $vr9
+# CHECK-INST: vaddwod.h.b $vr31, $vr6, $vr9
+# CHECK-ENCODING: encoding: [0xdf,0x24,0x22,0x70]
+
+vaddwod.w.h $vr17, $vr31, $vr2
+# CHECK-INST: vaddwod.w.h $vr17, $vr31, $vr2
+# CHECK-ENCODING: encoding: [0xf1,0x8b,0x22,0x70]
+
+vaddwod.d.w $vr11, $vr15, $vr27
+# CHECK-INST: vaddwod.d.w $vr11, $vr15, $vr27
+# CHECK-ENCODING: encoding: [0xeb,0x6d,0x23,0x70]
+
+vaddwod.q.d $vr0, $vr26, $vr17
+# CHECK-INST: vaddwod.q.d $vr0, $vr26, $vr17
+# CHECK-ENCODING: encoding: [0x40,0xc7,0x23,0x70]
+
+vaddwod.h.bu $vr30, $vr15, $vr10
+# CHECK-INST: vaddwod.h.bu $vr30, $vr15, $vr10
+# CHECK-ENCODING: encoding: [0xfe,0x29,0x32,0x70]
+
+vaddwod.w.hu $vr24, $vr22, $vr1
+# CHECK-INST: vaddwod.w.hu $vr24, $vr22, $vr1
+# CHECK-ENCODING: encoding: [0xd8,0x86,0x32,0x70]
+
+vaddwod.d.wu $vr10, $vr25, $vr13
+# CHECK-INST: vaddwod.d.wu $vr10, $vr25, $vr13
+# CHECK-ENCODING: encoding: [0x2a,0x37,0x33,0x70]
+
+vaddwod.q.du $vr16, $vr23, $vr21
+# CHECK-INST: vaddwod.q.du $vr16, $vr23, $vr21
+# CHECK-ENCODING: encoding: [0xf0,0xd6,0x33,0x70]
+
+vaddwod.h.bu.b $vr30, $vr15, $vr2
+# CHECK-INST: vaddwod.h.bu.b $vr30, $vr15, $vr2
+# CHECK-ENCODING: encoding: [0xfe,0x09,0x40,0x70]
+
+vaddwod.w.hu.h $vr24, $vr30, $vr13
+# CHECK-INST: vaddwod.w.hu.h $vr24, $vr30, $vr13
+# CHECK-ENCODING: encoding: [0xd8,0xb7,0x40,0x70]
+
+vaddwod.d.wu.w $vr10, $vr26, $vr9
+# CHECK-INST: vaddwod.d.wu.w $vr10, $vr26, $vr9
+# CHECK-ENCODING: encoding: [0x4a,0x27,0x41,0x70]
+
+vaddwod.q.du.d $vr20, $vr9, $vr16
+# CHECK-INST: vaddwod.q.du.d $vr20, $vr9, $vr16
+# CHECK-ENCODING: encoding: [0x34,0xc1,0x41,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/and.s b/llvm/test/MC/LoongArch/lsx/and.s
new file mode 100644
index 00000000000000..f9688c39ff27c3
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/and.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vand.v $vr27, $vr30, $vr18
+# CHECK-INST: vand.v $vr27, $vr30, $vr18
+# CHECK-ENCODING: encoding: [0xdb,0x4b,0x26,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/andi.s b/llvm/test/MC/LoongArch/lsx/andi.s
new file mode 100644
index 00000000000000..11732fbcbcfeab
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/andi.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vandi.b $vr10, $vr2, 181
+# CHECK-INST: vandi.b $vr10, $vr2, 181
+# CHECK-ENCODING: encoding: [0x4a,0xd4,0xd2,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/andn.s b/llvm/test/MC/LoongArch/lsx/andn.s
new file mode 100644
index 00000000000000..f682313b54b8b2
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/andn.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vandn.v $vr1, $vr26, $vr28
+# CHECK-INST: vandn.v $vr1, $vr26, $vr28
+# CHECK-ENCODING: encoding: [0x41,0x73,0x28,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/avg.s b/llvm/test/MC/LoongArch/lsx/avg.s
new file mode 100644
index 00000000000000..31b3c4a0aa37ea
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/avg.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vavg.b $vr13, $vr3, $vr24
+# CHECK-INST: vavg.b $vr13, $vr3, $vr24
+# CHECK-ENCODING: encoding: [0x6d,0x60,0x64,0x70]
+
+vavg.h $vr3, $vr6, $vr20
+# CHECK-INST: vavg.h $vr3, $vr6, $vr20
+# CHECK-ENCODING: encoding: [0xc3,0xd0,0x64,0x70]
+
+vavg.w $vr21, $vr7, $vr20
+# CHECK-INST: vavg.w $vr21, $vr7, $vr20
+# CHECK-ENCODING: encoding: [0xf5,0x50,0x65,0x70]
+
+vavg.d $vr6, $vr22, $vr23
+# CHECK-INST: vavg.d $vr6, $vr22, $vr23
+# CHECK-ENCODING: encoding: [0xc6,0xde,0x65,0x70]
+
+vavg.bu $vr13, $vr30, $vr16
+# CHECK-INST: vavg.bu $vr13, $vr30, $vr16
+# CHECK-ENCODING: encoding: [0xcd,0x43,0x66,0x70]
+
+vavg.hu $vr0, $vr15, $vr23
+# CHECK-INST: vavg.hu $vr0, $vr15, $vr23
+# CHECK-ENCODING: encoding: [0xe0,0xdd,0x66,0x70]
+
+vavg.wu $vr0, $vr17, $vr9
+# CHECK-INST: vavg.wu $vr0, $vr17, $vr9
+# CHECK-ENCODING: encoding: [0x20,0x26,0x67,0x70]
+
+vavg.du $vr7, $vr22, $vr14
+# CHECK-INST: vavg.du $vr7, $vr22, $vr14
+# CHECK-ENCODING: encoding: [0xc7,0xba,0x67,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/avgr.s b/llvm/test/MC/LoongArch/lsx/avgr.s
new file mode 100644
index 00000000000000..566feba6a130ec
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/avgr.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vavgr.b $vr22, $vr3, $vr9
+# CHECK-INST: vavgr.b $vr22, $vr3, $vr9
+# CHECK-ENCODING: encoding: [0x76,0x24,0x68,0x70]
+
+vavgr.h $vr12, $vr2, $vr6
+# CHECK-INST: vavgr.h $vr12, $vr2, $vr6
+# CHECK-ENCODING: encoding: [0x4c,0x98,0x68,0x70]
+
+vavgr.w $vr16, $vr30, $vr13
+# CHECK-INST: vavgr.w $vr16, $vr30, $vr13
+# CHECK-ENCODING: encoding: [0xd0,0x37,0x69,0x70]
+
+vavgr.d $vr5, $vr18, $vr7
+# CHECK-INST: vavgr.d $vr5, $vr18, $vr7
+# CHECK-ENCODING: encoding: [0x45,0x9e,0x69,0x70]
+
+vavgr.bu $vr22, $vr5, $vr29
+# CHECK-INST: vavgr.bu $vr22, $vr5, $vr29
+# CHECK-ENCODING: encoding: [0xb6,0x74,0x6a,0x70]
+
+vavgr.hu $vr22, $vr23, $vr8
+# CHECK-INST: vavgr.hu $vr22, $vr23, $vr8
+# CHECK-ENCODING: encoding: [0xf6,0xa2,0x6a,0x70]
+
+vavgr.wu $vr10, $vr20, $vr21
+# CHECK-INST: vavgr.wu $vr10, $vr20, $vr21
+# CHECK-ENCODING: encoding: [0x8a,0x56,0x6b,0x70]
+
+vavgr.du $vr10, $vr28, $vr13
+# CHECK-INST: vavgr.du $vr10, $vr28, $vr13
+# CHECK-ENCODING: encoding: [0x8a,0xb7,0x6b,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/bitclr.s b/llvm/test/MC/LoongArch/lsx/bitclr.s
new file mode 100644
index 00000000000000..227f90c2a6f76b
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bitclr.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbitclr.b $vr1, $vr0, $vr30
+# CHECK-INST: vbitclr.b $vr1, $vr0, $vr30
+# CHECK-ENCODING: encoding: [0x01,0x78,0x0c,0x71]
+
+vbitclr.h $vr27, $vr5, $vr28
+# CHECK-INST: vbitclr.h $vr27, $vr5, $vr28
+# CHECK-ENCODING: encoding: [0xbb,0xf0,0x0c,0x71]
+
+vbitclr.w $vr3, $vr30, $vr14
+# CHECK-INST: vbitclr.w $vr3, $vr30, $vr14
+# CHECK-ENCODING: encoding: [0xc3,0x3b,0x0d,0x71]
+
+vbitclr.d $vr25, $vr11, $vr4
+# CHECK-INST: vbitclr.d $vr25, $vr11, $vr4
+# CHECK-ENCODING: encoding: [0x79,0x91,0x0d,0x71]
+
+vbitclri.b $vr15, $vr25, 4
+# CHECK-INST: vbitclri.b $vr15, $vr25, 4
+# CHECK-ENCODING: encoding: [0x2f,0x33,0x10,0x73]
+
+vbitclri.h $vr24, $vr22, 1
+# CHECK-INST: vbitclri.h $vr24, $vr22, 1
+# CHECK-ENCODING: encoding: [0xd8,0x46,0x10,0x73]
+
+vbitclri.w $vr30, $vr20, 1
+# CHECK-INST: vbitclri.w $vr30, $vr20, 1
+# CHECK-ENCODING: encoding: [0x9e,0x86,0x10,0x73]
+
+vbitclri.d $vr5, $vr0, 16
+# CHECK-INST: vbitclri.d $vr5, $vr0, 16
+# CHECK-ENCODING: encoding: [0x05,0x40,0x11,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/bitrev.s b/llvm/test/MC/LoongArch/lsx/bitrev.s
new file mode 100644
index 00000000000000..852500be5c8be4
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bitrev.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbitrev.b $vr4, $vr31, $vr10
+# CHECK-INST: vbitrev.b $vr4, $vr31, $vr10
+# CHECK-ENCODING: encoding: [0xe4,0x2b,0x10,0x71]
+
+vbitrev.h $vr19, $vr19, $vr16
+# CHECK-INST: vbitrev.h $vr19, $vr19, $vr16
+# CHECK-ENCODING: encoding: [0x73,0xc2,0x10,0x71]
+
+vbitrev.w $vr4, $vr18, $vr7
+# CHECK-INST: vbitrev.w $vr4, $vr18, $vr7
+# CHECK-ENCODING: encoding: [0x44,0x1e,0x11,0x71]
+
+vbitrev.d $vr17, $vr31, $vr0
+# CHECK-INST: vbitrev.d $vr17, $vr31, $vr0
+# CHECK-ENCODING: encoding: [0xf1,0x83,0x11,0x71]
+
+vbitrevi.b $vr9, $vr31, 7
+# CHECK-INST: vbitrevi.b $vr9, $vr31, 7
+# CHECK-ENCODING: encoding: [0xe9,0x3f,0x18,0x73]
+
+vbitrevi.h $vr4, $vr24, 8
+# CHECK-INST: vbitrevi.h $vr4, $vr24, 8
+# CHECK-ENCODING: encoding: [0x04,0x63,0x18,0x73]
+
+vbitrevi.w $vr17, $vr19, 2
+# CHECK-INST: vbitrevi.w $vr17, $vr19, 2
+# CHECK-ENCODING: encoding: [0x71,0x8a,0x18,0x73]
+
+vbitrevi.d $vr15, $vr7, 47
+# CHECK-INST: vbitrevi.d $vr15, $vr7, 47
+# CHECK-ENCODING: encoding: [0xef,0xbc,0x19,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/bitsel.s b/llvm/test/MC/LoongArch/lsx/bitsel.s
new file mode 100644
index 00000000000000..54cce96470ffaa
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bitsel.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbitsel.v $vr2, $vr28, $vr6, $vr30
+# CHECK-INST: vbitsel.v $vr2, $vr28, $vr6, $vr30
+# CHECK-ENCODING: encoding: [0x82,0x1b,0x1f,0x0d]

diff  --git a/llvm/test/MC/LoongArch/lsx/bitseli.s b/llvm/test/MC/LoongArch/lsx/bitseli.s
new file mode 100644
index 00000000000000..6ca8a67d2de848
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bitseli.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbitseli.b $vr9, $vr0, 110
+# CHECK-INST: vbitseli.b $vr9, $vr0, 110
+# CHECK-ENCODING: encoding: [0x09,0xb8,0xc5,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/bitset.s b/llvm/test/MC/LoongArch/lsx/bitset.s
new file mode 100644
index 00000000000000..3553fc07ec85bf
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bitset.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbitset.b $vr13, $vr27, $vr14
+# CHECK-INST: vbitset.b $vr13, $vr27, $vr14
+# CHECK-ENCODING: encoding: [0x6d,0x3b,0x0e,0x71]
+
+vbitset.h $vr24, $vr6, $vr3
+# CHECK-INST: vbitset.h $vr24, $vr6, $vr3
+# CHECK-ENCODING: encoding: [0xd8,0x8c,0x0e,0x71]
+
+vbitset.w $vr31, $vr0, $vr0
+# CHECK-INST: vbitset.w $vr31, $vr0, $vr0
+# CHECK-ENCODING: encoding: [0x1f,0x00,0x0f,0x71]
+
+vbitset.d $vr6, $vr15, $vr31
+# CHECK-INST: vbitset.d $vr6, $vr15, $vr31
+# CHECK-ENCODING: encoding: [0xe6,0xfd,0x0f,0x71]
+
+vbitseti.b $vr4, $vr3, 1
+# CHECK-INST: vbitseti.b $vr4, $vr3, 1
+# CHECK-ENCODING: encoding: [0x64,0x24,0x14,0x73]
+
+vbitseti.h $vr10, $vr20, 2
+# CHECK-INST: vbitseti.h $vr10, $vr20, 2
+# CHECK-ENCODING: encoding: [0x8a,0x4a,0x14,0x73]
+
+vbitseti.w $vr14, $vr16, 4
+# CHECK-INST: vbitseti.w $vr14, $vr16, 4
+# CHECK-ENCODING: encoding: [0x0e,0x92,0x14,0x73]
+
+vbitseti.d $vr10, $vr13, 25
+# CHECK-INST: vbitseti.d $vr10, $vr13, 25
+# CHECK-ENCODING: encoding: [0xaa,0x65,0x15,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/bsll.s b/llvm/test/MC/LoongArch/lsx/bsll.s
new file mode 100644
index 00000000000000..24625180fb56ca
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bsll.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbsll.v $vr21, $vr1, 17
+# CHECK-INST: vbsll.v $vr21, $vr1, 17
+# CHECK-ENCODING: encoding: [0x35,0x44,0x8e,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/bsrl.s b/llvm/test/MC/LoongArch/lsx/bsrl.s
new file mode 100644
index 00000000000000..2b9ab996bb5bf0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/bsrl.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vbsrl.v $vr14, $vr15, 24
+# CHECK-INST: vbsrl.v $vr14, $vr15, 24
+# CHECK-ENCODING: encoding: [0xee,0xe1,0x8e,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/clo.s b/llvm/test/MC/LoongArch/lsx/clo.s
new file mode 100644
index 00000000000000..de876176aad3ea
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/clo.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vclo.b $vr2, $vr0
+# CHECK-INST: vclo.b $vr2, $vr0
+# CHECK-ENCODING: encoding: [0x02,0x00,0x9c,0x72]
+
+vclo.h $vr23, $vr31
+# CHECK-INST: vclo.h $vr23, $vr31
+# CHECK-ENCODING: encoding: [0xf7,0x07,0x9c,0x72]
+
+vclo.w $vr7, $vr28
+# CHECK-INST: vclo.w $vr7, $vr28
+# CHECK-ENCODING: encoding: [0x87,0x0b,0x9c,0x72]
+
+vclo.d $vr5, $vr11
+# CHECK-INST: vclo.d $vr5, $vr11
+# CHECK-ENCODING: encoding: [0x65,0x0d,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/clz.s b/llvm/test/MC/LoongArch/lsx/clz.s
new file mode 100644
index 00000000000000..de8c603109f5e3
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/clz.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vclz.b $vr22, $vr14
+# CHECK-INST: vclz.b $vr22, $vr14
+# CHECK-ENCODING: encoding: [0xd6,0x11,0x9c,0x72]
+
+vclz.h $vr16, $vr0
+# CHECK-INST: vclz.h $vr16, $vr0
+# CHECK-ENCODING: encoding: [0x10,0x14,0x9c,0x72]
+
+vclz.w $vr19, $vr19
+# CHECK-INST: vclz.w $vr19, $vr19
+# CHECK-ENCODING: encoding: [0x73,0x1a,0x9c,0x72]
+
+vclz.d $vr27, $vr14
+# CHECK-INST: vclz.d $vr27, $vr14
+# CHECK-ENCODING: encoding: [0xdb,0x1d,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/div.s b/llvm/test/MC/LoongArch/lsx/div.s
new file mode 100644
index 00000000000000..625c2a1b425e1f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/div.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vdiv.b $vr26, $vr17, $vr24
+# CHECK-INST: vdiv.b $vr26, $vr17, $vr24
+# CHECK-ENCODING: encoding: [0x3a,0x62,0xe0,0x70]
+
+vdiv.h $vr26, $vr23, $vr21
+# CHECK-INST: vdiv.h $vr26, $vr23, $vr21
+# CHECK-ENCODING: encoding: [0xfa,0xd6,0xe0,0x70]
+
+vdiv.w $vr1, $vr13, $vr10
+# CHECK-INST: vdiv.w $vr1, $vr13, $vr10
+# CHECK-ENCODING: encoding: [0xa1,0x29,0xe1,0x70]
+
+vdiv.d $vr4, $vr25, $vr21
+# CHECK-INST: vdiv.d $vr4, $vr25, $vr21
+# CHECK-ENCODING: encoding: [0x24,0xd7,0xe1,0x70]
+
+vdiv.bu $vr13, $vr13, $vr6
+# CHECK-INST: vdiv.bu $vr13, $vr13, $vr6
+# CHECK-ENCODING: encoding: [0xad,0x19,0xe4,0x70]
+
+vdiv.hu $vr1, $vr30, $vr5
+# CHECK-INST: vdiv.hu $vr1, $vr30, $vr5
+# CHECK-ENCODING: encoding: [0xc1,0x97,0xe4,0x70]
+
+vdiv.wu $vr27, $vr31, $vr20
+# CHECK-INST: vdiv.wu $vr27, $vr31, $vr20
+# CHECK-ENCODING: encoding: [0xfb,0x53,0xe5,0x70]
+
+vdiv.du $vr30, $vr0, $vr5
+# CHECK-INST: vdiv.du $vr30, $vr0, $vr5
+# CHECK-ENCODING: encoding: [0x1e,0x94,0xe5,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/exth.s b/llvm/test/MC/LoongArch/lsx/exth.s
new file mode 100644
index 00000000000000..3a64bd92737630
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/exth.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vexth.h.b $vr9, $vr6
+# CHECK-INST: vexth.h.b $vr9, $vr6
+# CHECK-ENCODING: encoding: [0xc9,0xe0,0x9e,0x72]
+
+vexth.w.h $vr14, $vr19
+# CHECK-INST: vexth.w.h $vr14, $vr19
+# CHECK-ENCODING: encoding: [0x6e,0xe6,0x9e,0x72]
+
+vexth.d.w $vr1, $vr20
+# CHECK-INST: vexth.d.w $vr1, $vr20
+# CHECK-ENCODING: encoding: [0x81,0xea,0x9e,0x72]
+
+vexth.q.d $vr20, $vr10
+# CHECK-INST: vexth.q.d $vr20, $vr10
+# CHECK-ENCODING: encoding: [0x54,0xed,0x9e,0x72]
+
+vexth.hu.bu $vr5, $vr1
+# CHECK-INST: vexth.hu.bu $vr5, $vr1
+# CHECK-ENCODING: encoding: [0x25,0xf0,0x9e,0x72]
+
+vexth.wu.hu $vr17, $vr26
+# CHECK-INST: vexth.wu.hu $vr17, $vr26
+# CHECK-ENCODING: encoding: [0x51,0xf7,0x9e,0x72]
+
+vexth.du.wu $vr2, $vr7
+# CHECK-INST: vexth.du.wu $vr2, $vr7
+# CHECK-ENCODING: encoding: [0xe2,0xf8,0x9e,0x72]
+
+vexth.qu.du $vr19, $vr11
+# CHECK-INST: vexth.qu.du $vr19, $vr11
+# CHECK-ENCODING: encoding: [0x73,0xfd,0x9e,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/extl.s b/llvm/test/MC/LoongArch/lsx/extl.s
new file mode 100644
index 00000000000000..cce80e2f1fe3c0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/extl.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vextl.q.d $vr14, $vr20
+# CHECK-INST: vextl.q.d $vr14, $vr20
+# CHECK-ENCODING: encoding: [0x8e,0x02,0x09,0x73]
+
+vextl.qu.du $vr26, $vr26
+# CHECK-INST: vextl.qu.du $vr26, $vr26
+# CHECK-ENCODING: encoding: [0x5a,0x03,0x0d,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/extrins.s b/llvm/test/MC/LoongArch/lsx/extrins.s
new file mode 100644
index 00000000000000..ef279b7be50550
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/extrins.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vextrins.b $vr14, $vr19, 213
+# CHECK-INST: vextrins.b $vr14, $vr19, 213
+# CHECK-ENCODING: encoding: [0x6e,0x56,0x8f,0x73]
+
+vextrins.h $vr1, $vr6, 170
+# CHECK-INST: vextrins.h $vr1, $vr6, 170
+# CHECK-ENCODING: encoding: [0xc1,0xa8,0x8a,0x73]
+
+vextrins.w $vr9, $vr4, 189
+# CHECK-INST: vextrins.w $vr9, $vr4, 189
+# CHECK-ENCODING: encoding: [0x89,0xf4,0x86,0x73]
+
+vextrins.d $vr20, $vr25, 121
+# CHECK-INST: vextrins.d $vr20, $vr25, 121
+# CHECK-ENCODING: encoding: [0x34,0xe7,0x81,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/fadd.s b/llvm/test/MC/LoongArch/lsx/fadd.s
new file mode 100644
index 00000000000000..55e67cf9096dc6
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fadd.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfadd.s $vr10, $vr2, $vr15
+# CHECK-INST: vfadd.s $vr10, $vr2, $vr15
+# CHECK-ENCODING: encoding: [0x4a,0xbc,0x30,0x71]
+
+vfadd.d $vr16, $vr1, $vr22
+# CHECK-INST: vfadd.d $vr16, $vr1, $vr22
+# CHECK-ENCODING: encoding: [0x30,0x58,0x31,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fclass.s b/llvm/test/MC/LoongArch/lsx/fclass.s
new file mode 100644
index 00000000000000..4f4ad1ef2a2259
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fclass.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfclass.s $vr24, $vr26
+# CHECK-INST: vfclass.s $vr24, $vr26
+# CHECK-ENCODING: encoding: [0x58,0xd7,0x9c,0x72]
+
+vfclass.d $vr8, $vr17
+# CHECK-INST: vfclass.d $vr8, $vr17
+# CHECK-ENCODING: encoding: [0x28,0xda,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fcmp.s b/llvm/test/MC/LoongArch/lsx/fcmp.s
new file mode 100644
index 00000000000000..c7ea5bd0441061
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fcmp.s
@@ -0,0 +1,180 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfcmp.caf.s $vr25, $vr5, $vr4
+# CHECK-INST: vfcmp.caf.s $vr25, $vr5, $vr4
+# CHECK-ENCODING: encoding: [0xb9,0x10,0x50,0x0c]
+
+vfcmp.caf.d $vr14, $vr16, $vr23
+# CHECK-INST: vfcmp.caf.d $vr14, $vr16, $vr23
+# CHECK-ENCODING: encoding: [0x0e,0x5e,0x60,0x0c]
+
+vfcmp.cun.s $vr22, $vr15, $vr4
+# CHECK-INST: vfcmp.cun.s $vr22, $vr15, $vr4
+# CHECK-ENCODING: encoding: [0xf6,0x11,0x54,0x0c]
+
+vfcmp.cun.d $vr28, $vr27, $vr9
+# CHECK-INST: vfcmp.cun.d $vr28, $vr27, $vr9
+# CHECK-ENCODING: encoding: [0x7c,0x27,0x64,0x0c]
+
+vfcmp.ceq.s $vr20, $vr24, $vr29
+# CHECK-INST: vfcmp.ceq.s $vr20, $vr24, $vr29
+# CHECK-ENCODING: encoding: [0x14,0x77,0x52,0x0c]
+
+vfcmp.ceq.d $vr15, $vr23, $vr17
+# CHECK-INST: vfcmp.ceq.d $vr15, $vr23, $vr17
+# CHECK-ENCODING: encoding: [0xef,0x46,0x62,0x0c]
+
+vfcmp.cueq.s $vr26, $vr31, $vr19
+# CHECK-INST: vfcmp.cueq.s $vr26, $vr31, $vr19
+# CHECK-ENCODING: encoding: [0xfa,0x4f,0x56,0x0c]
+
+vfcmp.cueq.d $vr27, $vr10, $vr16
+# CHECK-INST: vfcmp.cueq.d $vr27, $vr10, $vr16
+# CHECK-ENCODING: encoding: [0x5b,0x41,0x66,0x0c]
+
+vfcmp.clt.s $vr6, $vr27, $vr2
+# CHECK-INST: vfcmp.clt.s $vr6, $vr27, $vr2
+# CHECK-ENCODING: encoding: [0x66,0x0b,0x51,0x0c]
+
+vfcmp.clt.d $vr11, $vr8, $vr6
+# CHECK-INST: vfcmp.clt.d $vr11, $vr8, $vr6
+# CHECK-ENCODING: encoding: [0x0b,0x19,0x61,0x0c]
+
+vfcmp.cult.s $vr1, $vr17, $vr2
+# CHECK-INST: vfcmp.cult.s $vr1, $vr17, $vr2
+# CHECK-ENCODING: encoding: [0x21,0x0a,0x55,0x0c]
+
+vfcmp.cult.d $vr11, $vr20, $vr7
+# CHECK-INST: vfcmp.cult.d $vr11, $vr20, $vr7
+# CHECK-ENCODING: encoding: [0x8b,0x1e,0x65,0x0c]
+
+vfcmp.cle.s $vr10, $vr20, $vr23
+# CHECK-INST: vfcmp.cle.s $vr10, $vr20, $vr23
+# CHECK-ENCODING: encoding: [0x8a,0x5e,0x53,0x0c]
+
+vfcmp.cle.d $vr1, $vr8, $vr18
+# CHECK-INST: vfcmp.cle.d $vr1, $vr8, $vr18
+# CHECK-ENCODING: encoding: [0x01,0x49,0x63,0x0c]
+
+vfcmp.cule.s $vr6, $vr15, $vr11
+# CHECK-INST: vfcmp.cule.s $vr6, $vr15, $vr11
+# CHECK-ENCODING: encoding: [0xe6,0x2d,0x57,0x0c]
+
+vfcmp.cule.d $vr11, $vr28, $vr30
+# CHECK-INST: vfcmp.cule.d $vr11, $vr28, $vr30
+# CHECK-ENCODING: encoding: [0x8b,0x7b,0x67,0x0c]
+
+vfcmp.cne.s $vr29, $vr28, $vr11
+# CHECK-INST: vfcmp.cne.s $vr29, $vr28, $vr11
+# CHECK-ENCODING: encoding: [0x9d,0x2f,0x58,0x0c]
+
+vfcmp.cne.d $vr20, $vr5, $vr7
+# CHECK-INST: vfcmp.cne.d $vr20, $vr5, $vr7
+# CHECK-ENCODING: encoding: [0xb4,0x1c,0x68,0x0c]
+
+vfcmp.cor.s $vr20, $vr17, $vr12
+# CHECK-INST: vfcmp.cor.s $vr20, $vr17, $vr12
+# CHECK-ENCODING: encoding: [0x34,0x32,0x5a,0x0c]
+
+vfcmp.cor.d $vr25, $vr10, $vr16
+# CHECK-INST: vfcmp.cor.d $vr25, $vr10, $vr16
+# CHECK-ENCODING: encoding: [0x59,0x41,0x6a,0x0c]
+
+vfcmp.cune.s $vr26, $vr7, $vr8
+# CHECK-INST: vfcmp.cune.s $vr26, $vr7, $vr8
+# CHECK-ENCODING: encoding: [0xfa,0x20,0x5c,0x0c]
+
+vfcmp.cune.d $vr13, $vr31, $vr3
+# CHECK-INST: vfcmp.cune.d $vr13, $vr31, $vr3
+# CHECK-ENCODING: encoding: [0xed,0x0f,0x6c,0x0c]
+
+vfcmp.saf.s $vr26, $vr25, $vr5
+# CHECK-INST: vfcmp.saf.s $vr26, $vr25, $vr5
+# CHECK-ENCODING: encoding: [0x3a,0x97,0x50,0x0c]
+
+vfcmp.saf.d $vr5, $vr29, $vr21
+# CHECK-INST: vfcmp.saf.d $vr5, $vr29, $vr21
+# CHECK-ENCODING: encoding: [0xa5,0xd7,0x60,0x0c]
+
+vfcmp.sun.s $vr2, $vr2, $vr11
+# CHECK-INST: vfcmp.sun.s $vr2, $vr2, $vr11
+# CHECK-ENCODING: encoding: [0x42,0xac,0x54,0x0c]
+
+vfcmp.sun.d $vr30, $vr23, $vr23
+# CHECK-INST: vfcmp.sun.d $vr30, $vr23, $vr23
+# CHECK-ENCODING: encoding: [0xfe,0xde,0x64,0x0c]
+
+vfcmp.seq.s $vr4, $vr24, $vr31
+# CHECK-INST: vfcmp.seq.s $vr4, $vr24, $vr31
+# CHECK-ENCODING: encoding: [0x04,0xff,0x52,0x0c]
+
+vfcmp.seq.d $vr28, $vr28, $vr5
+# CHECK-INST: vfcmp.seq.d $vr28, $vr28, $vr5
+# CHECK-ENCODING: encoding: [0x9c,0x97,0x62,0x0c]
+
+vfcmp.sueq.s $vr2, $vr25, $vr29
+# CHECK-INST: vfcmp.sueq.s $vr2, $vr25, $vr29
+# CHECK-ENCODING: encoding: [0x22,0xf7,0x56,0x0c]
+
+vfcmp.sueq.d $vr26, $vr16, $vr0
+# CHECK-INST: vfcmp.sueq.d $vr26, $vr16, $vr0
+# CHECK-ENCODING: encoding: [0x1a,0x82,0x66,0x0c]
+
+vfcmp.slt.s $vr8, $vr22, $vr5
+# CHECK-INST: vfcmp.slt.s $vr8, $vr22, $vr5
+# CHECK-ENCODING: encoding: [0xc8,0x96,0x51,0x0c]
+
+vfcmp.slt.d $vr13, $vr8, $vr22
+# CHECK-INST: vfcmp.slt.d $vr13, $vr8, $vr22
+# CHECK-ENCODING: encoding: [0x0d,0xd9,0x61,0x0c]
+
+vfcmp.sult.s $vr16, $vr4, $vr21
+# CHECK-INST: vfcmp.sult.s $vr16, $vr4, $vr21
+# CHECK-ENCODING: encoding: [0x90,0xd4,0x55,0x0c]
+
+vfcmp.sult.d $vr28, $vr14, $vr4
+# CHECK-INST: vfcmp.sult.d $vr28, $vr14, $vr4
+# CHECK-ENCODING: encoding: [0xdc,0x91,0x65,0x0c]
+
+vfcmp.sle.s $vr13, $vr21, $vr8
+# CHECK-INST: vfcmp.sle.s $vr13, $vr21, $vr8
+# CHECK-ENCODING: encoding: [0xad,0xa2,0x53,0x0c]
+
+vfcmp.sle.d $vr3, $vr18, $vr9
+# CHECK-INST: vfcmp.sle.d $vr3, $vr18, $vr9
+# CHECK-ENCODING: encoding: [0x43,0xa6,0x63,0x0c]
+
+vfcmp.sule.s $vr8, $vr23, $vr19
+# CHECK-INST: vfcmp.sule.s $vr8, $vr23, $vr19
+# CHECK-ENCODING: encoding: [0xe8,0xce,0x57,0x0c]
+
+vfcmp.sule.d $vr22, $vr17, $vr11
+# CHECK-INST: vfcmp.sule.d $vr22, $vr17, $vr11
+# CHECK-ENCODING: encoding: [0x36,0xae,0x67,0x0c]
+
+vfcmp.sne.s $vr17, $vr25, $vr6
+# CHECK-INST: vfcmp.sne.s $vr17, $vr25, $vr6
+# CHECK-ENCODING: encoding: [0x31,0x9b,0x58,0x0c]
+
+vfcmp.sne.d $vr3, $vr1, $vr28
+# CHECK-INST: vfcmp.sne.d $vr3, $vr1, $vr28
+# CHECK-ENCODING: encoding: [0x23,0xf0,0x68,0x0c]
+
+vfcmp.sor.s $vr31, $vr20, $vr11
+# CHECK-INST: vfcmp.sor.s $vr31, $vr20, $vr11
+# CHECK-ENCODING: encoding: [0x9f,0xae,0x5a,0x0c]
+
+vfcmp.sor.d $vr18, $vr4, $vr15
+# CHECK-INST: vfcmp.sor.d $vr18, $vr4, $vr15
+# CHECK-ENCODING: encoding: [0x92,0xbc,0x6a,0x0c]
+
+vfcmp.sune.s $vr16, $vr17, $vr15
+# CHECK-INST: vfcmp.sune.s $vr16, $vr17, $vr15
+# CHECK-ENCODING: encoding: [0x30,0xbe,0x5c,0x0c]
+
+vfcmp.sune.d $vr23, $vr1, $vr19
+# CHECK-INST: vfcmp.sune.d $vr23, $vr1, $vr19
+# CHECK-ENCODING: encoding: [0x37,0xcc,0x6c,0x0c]

diff  --git a/llvm/test/MC/LoongArch/lsx/fcvt.s b/llvm/test/MC/LoongArch/lsx/fcvt.s
new file mode 100644
index 00000000000000..30689a79fdfe4a
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fcvt.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfcvt.h.s $vr30, $vr1, $vr30
+# CHECK-INST: vfcvt.h.s $vr30, $vr1, $vr30
+# CHECK-ENCODING: encoding: [0x3e,0x78,0x46,0x71]
+
+vfcvt.s.d $vr27, $vr11, $vr4
+# CHECK-INST: vfcvt.s.d $vr27, $vr11, $vr4
+# CHECK-ENCODING: encoding: [0x7b,0x91,0x46,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fcvth.s b/llvm/test/MC/LoongArch/lsx/fcvth.s
new file mode 100644
index 00000000000000..09d2dad6526b2c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fcvth.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfcvth.s.h $vr7, $vr30
+# CHECK-INST: vfcvth.s.h $vr7, $vr30
+# CHECK-ENCODING: encoding: [0xc7,0xef,0x9d,0x72]
+
+vfcvth.d.s $vr15, $vr14
+# CHECK-INST: vfcvth.d.s $vr15, $vr14
+# CHECK-ENCODING: encoding: [0xcf,0xf5,0x9d,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fcvtl.s b/llvm/test/MC/LoongArch/lsx/fcvtl.s
new file mode 100644
index 00000000000000..bb45be02c61f84
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fcvtl.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfcvtl.s.h $vr26, $vr23
+# CHECK-INST: vfcvtl.s.h $vr26, $vr23
+# CHECK-ENCODING: encoding: [0xfa,0xea,0x9d,0x72]
+
+vfcvtl.d.s $vr3, $vr7
+# CHECK-INST: vfcvtl.d.s $vr3, $vr7
+# CHECK-ENCODING: encoding: [0xe3,0xf0,0x9d,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fdiv.s b/llvm/test/MC/LoongArch/lsx/fdiv.s
new file mode 100644
index 00000000000000..cb3b536c63a418
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fdiv.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfdiv.s $vr27, $vr12, $vr26
+# CHECK-INST: vfdiv.s $vr27, $vr12, $vr26
+# CHECK-ENCODING: encoding: [0x9b,0xe9,0x3a,0x71]
+
+vfdiv.d $vr3, $vr1, $vr7
+# CHECK-INST: vfdiv.d $vr3, $vr1, $vr7
+# CHECK-ENCODING: encoding: [0x23,0x1c,0x3b,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ffint.s b/llvm/test/MC/LoongArch/lsx/ffint.s
new file mode 100644
index 00000000000000..e6340d161282cd
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ffint.s
@@ -0,0 +1,32 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vffint.s.w $vr3, $vr0
+# CHECK-INST: vffint.s.w $vr3, $vr0
+# CHECK-ENCODING: encoding: [0x03,0x00,0x9e,0x72]
+
+vffint.d.l $vr2, $vr15
+# CHECK-INST: vffint.d.l $vr2, $vr15
+# CHECK-ENCODING: encoding: [0xe2,0x09,0x9e,0x72]
+
+vffint.s.wu $vr5, $vr9
+# CHECK-INST: vffint.s.wu $vr5, $vr9
+# CHECK-ENCODING: encoding: [0x25,0x05,0x9e,0x72]
+
+vffint.d.lu $vr6, $vr13
+# CHECK-INST: vffint.d.lu $vr6, $vr13
+# CHECK-ENCODING: encoding: [0xa6,0x0d,0x9e,0x72]
+
+vffintl.d.w $vr26, $vr1
+# CHECK-INST: vffintl.d.w $vr26, $vr1
+# CHECK-ENCODING: encoding: [0x3a,0x10,0x9e,0x72]
+
+vffinth.d.w $vr18, $vr21
+# CHECK-INST: vffinth.d.w $vr18, $vr21
+# CHECK-ENCODING: encoding: [0xb2,0x16,0x9e,0x72]
+
+vffint.s.l $vr29, $vr12, $vr7
+# CHECK-INST: vffint.s.l $vr29, $vr12, $vr7
+# CHECK-ENCODING: encoding: [0x9d,0x1d,0x48,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/flogb.s b/llvm/test/MC/LoongArch/lsx/flogb.s
new file mode 100644
index 00000000000000..3c788b96fa379e
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/flogb.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vflogb.s $vr12, $vr20
+# CHECK-INST: vflogb.s $vr12, $vr20
+# CHECK-ENCODING: encoding: [0x8c,0xc6,0x9c,0x72]
+
+vflogb.d $vr3, $vr29
+# CHECK-INST: vflogb.d $vr3, $vr29
+# CHECK-ENCODING: encoding: [0xa3,0xcb,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmadd.s b/llvm/test/MC/LoongArch/lsx/fmadd.s
new file mode 100644
index 00000000000000..a31e12120ff18f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmadd.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmadd.s $vr6, $vr7, $vr13, $vr24
+# CHECK-INST: vfmadd.s $vr6, $vr7, $vr13, $vr24
+# CHECK-ENCODING: encoding: [0xe6,0x34,0x1c,0x09]
+
+vfmadd.d $vr3, $vr28, $vr2, $vr21
+# CHECK-INST: vfmadd.d $vr3, $vr28, $vr2, $vr21
+# CHECK-ENCODING: encoding: [0x83,0x8b,0x2a,0x09]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmax.s b/llvm/test/MC/LoongArch/lsx/fmax.s
new file mode 100644
index 00000000000000..8fcd32aeb55404
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmax.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmax.s $vr19, $vr25, $vr16
+# CHECK-INST: vfmax.s $vr19, $vr25, $vr16
+# CHECK-ENCODING: encoding: [0x33,0xc3,0x3c,0x71]
+
+vfmax.d $vr19, $vr21, $vr12
+# CHECK-INST: vfmax.d $vr19, $vr21, $vr12
+# CHECK-ENCODING: encoding: [0xb3,0x32,0x3d,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmaxa.s b/llvm/test/MC/LoongArch/lsx/fmaxa.s
new file mode 100644
index 00000000000000..3e35c329d126c9
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmaxa.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmaxa.s $vr2, $vr8, $vr1
+# CHECK-INST: vfmaxa.s $vr2, $vr8, $vr1
+# CHECK-ENCODING: encoding: [0x02,0x85,0x40,0x71]
+
+vfmaxa.d $vr1, $vr8, $vr28
+# CHECK-INST: vfmaxa.d $vr1, $vr8, $vr28
+# CHECK-ENCODING: encoding: [0x01,0x71,0x41,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmin.s b/llvm/test/MC/LoongArch/lsx/fmin.s
new file mode 100644
index 00000000000000..b398fe70d27f43
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmin.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmin.s $vr18, $vr17, $vr1
+# CHECK-INST: vfmin.s $vr18, $vr17, $vr1
+# CHECK-ENCODING: encoding: [0x32,0x86,0x3e,0x71]
+
+vfmin.d $vr30, $vr12, $vr5
+# CHECK-INST: vfmin.d $vr30, $vr12, $vr5
+# CHECK-ENCODING: encoding: [0x9e,0x15,0x3f,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmina.s b/llvm/test/MC/LoongArch/lsx/fmina.s
new file mode 100644
index 00000000000000..d206819aef8c00
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmina.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmina.s $vr20, $vr27, $vr20
+# CHECK-INST: vfmina.s $vr20, $vr27, $vr20
+# CHECK-ENCODING: encoding: [0x74,0xd3,0x42,0x71]
+
+vfmina.d $vr1, $vr26, $vr22
+# CHECK-INST: vfmina.d $vr1, $vr26, $vr22
+# CHECK-ENCODING: encoding: [0x41,0x5b,0x43,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmsub.s b/llvm/test/MC/LoongArch/lsx/fmsub.s
new file mode 100644
index 00000000000000..84ce341de03996
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmsub.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmsub.s $vr25, $vr30, $vr4, $vr13
+# CHECK-INST: vfmsub.s $vr25, $vr30, $vr4, $vr13
+# CHECK-ENCODING: encoding: [0xd9,0x93,0x56,0x09]
+
+vfmsub.d $vr3, $vr1, $vr0, $vr19
+# CHECK-INST: vfmsub.d $vr3, $vr1, $vr0, $vr19
+# CHECK-ENCODING: encoding: [0x23,0x80,0x69,0x09]

diff  --git a/llvm/test/MC/LoongArch/lsx/fmul.s b/llvm/test/MC/LoongArch/lsx/fmul.s
new file mode 100644
index 00000000000000..a409a6a4020d64
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fmul.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfmul.s $vr16, $vr8, $vr17
+# CHECK-INST: vfmul.s $vr16, $vr8, $vr17
+# CHECK-ENCODING: encoding: [0x10,0xc5,0x38,0x71]
+
+vfmul.d $vr3, $vr6, $vr1
+# CHECK-INST: vfmul.d $vr3, $vr6, $vr1
+# CHECK-ENCODING: encoding: [0xc3,0x04,0x39,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/fnmadd.s b/llvm/test/MC/LoongArch/lsx/fnmadd.s
new file mode 100644
index 00000000000000..1887d2688b6dab
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fnmadd.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfnmadd.s $vr26, $vr26, $vr13, $vr9
+# CHECK-INST: vfnmadd.s $vr26, $vr26, $vr13, $vr9
+# CHECK-ENCODING: encoding: [0x5a,0xb7,0x94,0x09]
+
+vfnmadd.d $vr12, $vr27, $vr31, $vr5
+# CHECK-INST: vfnmadd.d $vr12, $vr27, $vr31, $vr5
+# CHECK-ENCODING: encoding: [0x6c,0xff,0xa2,0x09]

diff  --git a/llvm/test/MC/LoongArch/lsx/fnmsub.s b/llvm/test/MC/LoongArch/lsx/fnmsub.s
new file mode 100644
index 00000000000000..e1135d1b29681d
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fnmsub.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfnmsub.s $vr2, $vr21, $vr9, $vr2
+# CHECK-INST: vfnmsub.s $vr2, $vr21, $vr9, $vr2
+# CHECK-ENCODING: encoding: [0xa2,0x26,0xd1,0x09]
+
+vfnmsub.d $vr4, $vr12, $vr27, $vr19
+# CHECK-INST: vfnmsub.d $vr4, $vr12, $vr27, $vr19
+# CHECK-ENCODING: encoding: [0x84,0xed,0xe9,0x09]

diff  --git a/llvm/test/MC/LoongArch/lsx/frecip.s b/llvm/test/MC/LoongArch/lsx/frecip.s
new file mode 100644
index 00000000000000..d8c8278d16675e
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/frecip.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfrecip.s $vr29, $vr14
+# CHECK-INST: vfrecip.s $vr29, $vr14
+# CHECK-ENCODING: encoding: [0xdd,0xf5,0x9c,0x72]
+
+vfrecip.d $vr24, $vr9
+# CHECK-INST: vfrecip.d $vr24, $vr9
+# CHECK-ENCODING: encoding: [0x38,0xf9,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/frint.s b/llvm/test/MC/LoongArch/lsx/frint.s
new file mode 100644
index 00000000000000..53a43a4d3ecf2b
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/frint.s
@@ -0,0 +1,44 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfrintrne.s $vr31, $vr2
+# CHECK-INST: vfrintrne.s $vr31, $vr2
+# CHECK-ENCODING: encoding: [0x5f,0x74,0x9d,0x72]
+
+vfrintrne.d $vr1, $vr30
+# CHECK-INST: vfrintrne.d $vr1, $vr30
+# CHECK-ENCODING: encoding: [0xc1,0x7b,0x9d,0x72]
+
+vfrintrz.s $vr16, $vr17
+# CHECK-INST: vfrintrz.s $vr16, $vr17
+# CHECK-ENCODING: encoding: [0x30,0x66,0x9d,0x72]
+
+vfrintrz.d $vr1, $vr31
+# CHECK-INST: vfrintrz.d $vr1, $vr31
+# CHECK-ENCODING: encoding: [0xe1,0x6b,0x9d,0x72]
+
+vfrintrp.s $vr11, $vr2
+# CHECK-INST: vfrintrp.s $vr11, $vr2
+# CHECK-ENCODING: encoding: [0x4b,0x54,0x9d,0x72]
+
+vfrintrp.d $vr30, $vr16
+# CHECK-INST: vfrintrp.d $vr30, $vr16
+# CHECK-ENCODING: encoding: [0x1e,0x5a,0x9d,0x72]
+
+vfrintrm.s $vr25, $vr23
+# CHECK-INST: vfrintrm.s $vr25, $vr23
+# CHECK-ENCODING: encoding: [0xf9,0x46,0x9d,0x72]
+
+vfrintrm.d $vr19, $vr11
+# CHECK-INST: vfrintrm.d $vr19, $vr11
+# CHECK-ENCODING: encoding: [0x73,0x49,0x9d,0x72]
+
+vfrint.s $vr22, $vr6
+# CHECK-INST: vfrint.s $vr22, $vr6
+# CHECK-ENCODING: encoding: [0xd6,0x34,0x9d,0x72]
+
+vfrint.d $vr26, $vr9
+# CHECK-INST: vfrint.d $vr26, $vr9
+# CHECK-ENCODING: encoding: [0x3a,0x39,0x9d,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/frsqrt.s b/llvm/test/MC/LoongArch/lsx/frsqrt.s
new file mode 100644
index 00000000000000..68b0cc091b8ae2
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/frsqrt.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfrsqrt.s $vr19, $vr30
+# CHECK-INST: vfrsqrt.s $vr19, $vr30
+# CHECK-ENCODING: encoding: [0xd3,0x07,0x9d,0x72]
+
+vfrsqrt.d $vr1, $vr0
+# CHECK-INST: vfrsqrt.d $vr1, $vr0
+# CHECK-ENCODING: encoding: [0x01,0x08,0x9d,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/frstp.s b/llvm/test/MC/LoongArch/lsx/frstp.s
new file mode 100644
index 00000000000000..86bb31a1d39d40
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/frstp.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfrstp.b $vr30, $vr25, $vr1
+# CHECK-INST: vfrstp.b $vr30, $vr25, $vr1
+# CHECK-ENCODING: encoding: [0x3e,0x07,0x2b,0x71]
+
+vfrstp.h $vr22, $vr26, $vr21
+# CHECK-INST: vfrstp.h $vr22, $vr26, $vr21
+# CHECK-ENCODING: encoding: [0x56,0xd7,0x2b,0x71]
+
+vfrstpi.b $vr12, $vr8, 28
+# CHECK-INST: vfrstpi.b $vr12, $vr8, 28
+# CHECK-ENCODING: encoding: [0x0c,0x71,0x9a,0x72]
+
+vfrstpi.h $vr5, $vr28, 29
+# CHECK-INST: vfrstpi.h $vr5, $vr28, 29
+# CHECK-ENCODING: encoding: [0x85,0xf7,0x9a,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fsqrt.s b/llvm/test/MC/LoongArch/lsx/fsqrt.s
new file mode 100644
index 00000000000000..a5df2416dfc3d0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fsqrt.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfsqrt.s $vr0, $vr3
+# CHECK-INST: vfsqrt.s $vr0, $vr3
+# CHECK-ENCODING: encoding: [0x60,0xe4,0x9c,0x72]
+
+vfsqrt.d $vr26, $vr9
+# CHECK-INST: vfsqrt.d $vr26, $vr9
+# CHECK-ENCODING: encoding: [0x3a,0xe9,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/fsub.s b/llvm/test/MC/LoongArch/lsx/fsub.s
new file mode 100644
index 00000000000000..30c36363129518
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/fsub.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vfsub.s $vr4, $vr9, $vr12
+# CHECK-INST: vfsub.s $vr4, $vr9, $vr12
+# CHECK-ENCODING: encoding: [0x24,0xb1,0x32,0x71]
+
+vfsub.d $vr12, $vr28, $vr27
+# CHECK-INST: vfsub.d $vr12, $vr28, $vr27
+# CHECK-ENCODING: encoding: [0x8c,0x6f,0x33,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ftint.s b/llvm/test/MC/LoongArch/lsx/ftint.s
new file mode 100644
index 00000000000000..9a50fddf81e58b
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ftint.s
@@ -0,0 +1,120 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vftintrne.w.s $vr25, $vr28
+# CHECK-INST: vftintrne.w.s $vr25, $vr28
+# CHECK-ENCODING: encoding: [0x99,0x53,0x9e,0x72]
+
+vftintrne.l.d $vr26, $vr27
+# CHECK-INST: vftintrne.l.d $vr26, $vr27
+# CHECK-ENCODING: encoding: [0x7a,0x57,0x9e,0x72]
+
+vftintrz.w.s $vr24, $vr29
+# CHECK-INST: vftintrz.w.s $vr24, $vr29
+# CHECK-ENCODING: encoding: [0xb8,0x4b,0x9e,0x72]
+
+vftintrz.l.d $vr17, $vr12
+# CHECK-INST: vftintrz.l.d $vr17, $vr12
+# CHECK-ENCODING: encoding: [0x91,0x4d,0x9e,0x72]
+
+vftintrp.w.s $vr1, $vr6
+# CHECK-INST: vftintrp.w.s $vr1, $vr6
+# CHECK-ENCODING: encoding: [0xc1,0x40,0x9e,0x72]
+
+vftintrp.l.d $vr8, $vr26
+# CHECK-INST: vftintrp.l.d $vr8, $vr26
+# CHECK-ENCODING: encoding: [0x48,0x47,0x9e,0x72]
+
+vftintrm.w.s $vr4, $vr30
+# CHECK-INST: vftintrm.w.s $vr4, $vr30
+# CHECK-ENCODING: encoding: [0xc4,0x3b,0x9e,0x72]
+
+vftintrm.l.d $vr18, $vr0
+# CHECK-INST: vftintrm.l.d $vr18, $vr0
+# CHECK-ENCODING: encoding: [0x12,0x3c,0x9e,0x72]
+
+vftint.w.s $vr0, $vr27
+# CHECK-INST: vftint.w.s $vr0, $vr27
+# CHECK-ENCODING: encoding: [0x60,0x33,0x9e,0x72]
+
+vftint.l.d $vr21, $vr22
+# CHECK-INST: vftint.l.d $vr21, $vr22
+# CHECK-ENCODING: encoding: [0xd5,0x36,0x9e,0x72]
+
+vftintrz.wu.s $vr8, $vr3
+# CHECK-INST: vftintrz.wu.s $vr8, $vr3
+# CHECK-ENCODING: encoding: [0x68,0x70,0x9e,0x72]
+
+vftintrz.lu.d $vr25, $vr9
+# CHECK-INST: vftintrz.lu.d $vr25, $vr9
+# CHECK-ENCODING: encoding: [0x39,0x75,0x9e,0x72]
+
+vftint.wu.s $vr8, $vr8
+# CHECK-INST: vftint.wu.s $vr8, $vr8
+# CHECK-ENCODING: encoding: [0x08,0x59,0x9e,0x72]
+
+vftint.lu.d $vr1, $vr17
+# CHECK-INST: vftint.lu.d $vr1, $vr17
+# CHECK-ENCODING: encoding: [0x21,0x5e,0x9e,0x72]
+
+vftintrne.w.d $vr4, $vr18, $vr18
+# CHECK-INST: vftintrne.w.d $vr4, $vr18, $vr18
+# CHECK-ENCODING: encoding: [0x44,0xca,0x4b,0x71]
+
+vftintrz.w.d $vr26, $vr18, $vr4
+# CHECK-INST: vftintrz.w.d $vr26, $vr18, $vr4
+# CHECK-ENCODING: encoding: [0x5a,0x12,0x4b,0x71]
+
+vftintrp.w.d $vr25, $vr0, $vr23
+# CHECK-INST: vftintrp.w.d $vr25, $vr0, $vr23
+# CHECK-ENCODING: encoding: [0x19,0xdc,0x4a,0x71]
+
+vftintrm.w.d $vr30, $vr25, $vr5
+# CHECK-INST: vftintrm.w.d $vr30, $vr25, $vr5
+# CHECK-ENCODING: encoding: [0x3e,0x17,0x4a,0x71]
+
+vftint.w.d $vr27, $vr28, $vr6
+# CHECK-INST: vftint.w.d $vr27, $vr28, $vr6
+# CHECK-ENCODING: encoding: [0x9b,0x9b,0x49,0x71]
+
+vftintrnel.l.s $vr7, $vr8
+# CHECK-INST: vftintrnel.l.s $vr7, $vr8
+# CHECK-ENCODING: encoding: [0x07,0xa1,0x9e,0x72]
+
+vftintrneh.l.s $vr21, $vr26
+# CHECK-INST: vftintrneh.l.s $vr21, $vr26
+# CHECK-ENCODING: encoding: [0x55,0xa7,0x9e,0x72]
+
+vftintrzl.l.s $vr21, $vr18
+# CHECK-INST: vftintrzl.l.s $vr21, $vr18
+# CHECK-ENCODING: encoding: [0x55,0x9a,0x9e,0x72]
+
+vftintrzh.l.s $vr22, $vr16
+# CHECK-INST: vftintrzh.l.s $vr22, $vr16
+# CHECK-ENCODING: encoding: [0x16,0x9e,0x9e,0x72]
+
+vftintrpl.l.s $vr25, $vr19
+# CHECK-INST: vftintrpl.l.s $vr25, $vr19
+# CHECK-ENCODING: encoding: [0x79,0x92,0x9e,0x72]
+
+vftintrph.l.s $vr11, $vr22
+# CHECK-INST: vftintrph.l.s $vr11, $vr22
+# CHECK-ENCODING: encoding: [0xcb,0x96,0x9e,0x72]
+
+vftintrml.l.s $vr6, $vr28
+# CHECK-INST: vftintrml.l.s $vr6, $vr28
+# CHECK-ENCODING: encoding: [0x86,0x8b,0x9e,0x72]
+
+vftintrmh.l.s $vr17, $vr11
+# CHECK-INST: vftintrmh.l.s $vr17, $vr11
+# CHECK-ENCODING: encoding: [0x71,0x8d,0x9e,0x72]
+
+vftintl.l.s $vr3, $vr28
+# CHECK-INST: vftintl.l.s $vr3, $vr28
+# CHECK-ENCODING: encoding: [0x83,0x83,0x9e,0x72]
+
+vftinth.l.s $vr11, $vr30
+# CHECK-INST: vftinth.l.s $vr11, $vr30
+# CHECK-ENCODING: encoding: [0xcb,0x87,0x9e,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/haddw.s b/llvm/test/MC/LoongArch/lsx/haddw.s
new file mode 100644
index 00000000000000..1958941fa90f6a
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/haddw.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vhaddw.h.b $vr3, $vr14, $vr11
+# CHECK-INST: vhaddw.h.b $vr3, $vr14, $vr11
+# CHECK-ENCODING: encoding: [0xc3,0x2d,0x54,0x70]
+
+vhaddw.w.h $vr3, $vr9, $vr9
+# CHECK-INST: vhaddw.w.h $vr3, $vr9, $vr9
+# CHECK-ENCODING: encoding: [0x23,0xa5,0x54,0x70]
+
+vhaddw.d.w $vr7, $vr26, $vr6
+# CHECK-INST: vhaddw.d.w $vr7, $vr26, $vr6
+# CHECK-ENCODING: encoding: [0x47,0x1b,0x55,0x70]
+
+vhaddw.q.d $vr22, $vr25, $vr19
+# CHECK-INST: vhaddw.q.d $vr22, $vr25, $vr19
+# CHECK-ENCODING: encoding: [0x36,0xcf,0x55,0x70]
+
+vhaddw.hu.bu $vr8, $vr21, $vr21
+# CHECK-INST: vhaddw.hu.bu $vr8, $vr21, $vr21
+# CHECK-ENCODING: encoding: [0xa8,0x56,0x58,0x70]
+
+vhaddw.wu.hu $vr23, $vr23, $vr20
+# CHECK-INST: vhaddw.wu.hu $vr23, $vr23, $vr20
+# CHECK-ENCODING: encoding: [0xf7,0xd2,0x58,0x70]
+
+vhaddw.du.wu $vr13, $vr7, $vr6
+# CHECK-INST: vhaddw.du.wu $vr13, $vr7, $vr6
+# CHECK-ENCODING: encoding: [0xed,0x18,0x59,0x70]
+
+vhaddw.qu.du $vr19, $vr12, $vr6
+# CHECK-INST: vhaddw.qu.du $vr19, $vr12, $vr6
+# CHECK-ENCODING: encoding: [0x93,0x99,0x59,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/hsubw.s b/llvm/test/MC/LoongArch/lsx/hsubw.s
new file mode 100644
index 00000000000000..933f5840b8c63c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/hsubw.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vhsubw.h.b $vr24, $vr26, $vr16
+# CHECK-INST: vhsubw.h.b $vr24, $vr26, $vr16
+# CHECK-ENCODING: encoding: [0x58,0x43,0x56,0x70]
+
+vhsubw.w.h $vr5, $vr28, $vr12
+# CHECK-INST: vhsubw.w.h $vr5, $vr28, $vr12
+# CHECK-ENCODING: encoding: [0x85,0xb3,0x56,0x70]
+
+vhsubw.d.w $vr8, $vr5, $vr22
+# CHECK-INST: vhsubw.d.w $vr8, $vr5, $vr22
+# CHECK-ENCODING: encoding: [0xa8,0x58,0x57,0x70]
+
+vhsubw.q.d $vr21, $vr16, $vr14
+# CHECK-INST: vhsubw.q.d $vr21, $vr16, $vr14
+# CHECK-ENCODING: encoding: [0x15,0xba,0x57,0x70]
+
+vhsubw.hu.bu $vr12, $vr31, $vr30
+# CHECK-INST: vhsubw.hu.bu $vr12, $vr31, $vr30
+# CHECK-ENCODING: encoding: [0xec,0x7b,0x5a,0x70]
+
+vhsubw.wu.hu $vr18, $vr13, $vr31
+# CHECK-INST: vhsubw.wu.hu $vr18, $vr13, $vr31
+# CHECK-ENCODING: encoding: [0xb2,0xfd,0x5a,0x70]
+
+vhsubw.du.wu $vr0, $vr1, $vr2
+# CHECK-INST: vhsubw.du.wu $vr0, $vr1, $vr2
+# CHECK-ENCODING: encoding: [0x20,0x08,0x5b,0x70]
+
+vhsubw.qu.du $vr30, $vr31, $vr5
+# CHECK-INST: vhsubw.qu.du $vr30, $vr31, $vr5
+# CHECK-ENCODING: encoding: [0xfe,0x97,0x5b,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/ilv.s b/llvm/test/MC/LoongArch/lsx/ilv.s
new file mode 100644
index 00000000000000..8775e1ce19d3d6
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ilv.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vilvl.b $vr9, $vr30, $vr20
+# CHECK-INST: vilvl.b $vr9, $vr30, $vr20
+# CHECK-ENCODING: encoding: [0xc9,0x53,0x1a,0x71]
+
+vilvl.h $vr6, $vr19, $vr30
+# CHECK-INST: vilvl.h $vr6, $vr19, $vr30
+# CHECK-ENCODING: encoding: [0x66,0xfa,0x1a,0x71]
+
+vilvl.w $vr18, $vr3, $vr15
+# CHECK-INST: vilvl.w $vr18, $vr3, $vr15
+# CHECK-ENCODING: encoding: [0x72,0x3c,0x1b,0x71]
+
+vilvl.d $vr20, $vr22, $vr9
+# CHECK-INST: vilvl.d $vr20, $vr22, $vr9
+# CHECK-ENCODING: encoding: [0xd4,0xa6,0x1b,0x71]
+
+vilvh.b $vr14, $vr4, $vr12
+# CHECK-INST: vilvh.b $vr14, $vr4, $vr12
+# CHECK-ENCODING: encoding: [0x8e,0x30,0x1c,0x71]
+
+vilvh.h $vr2, $vr0, $vr6
+# CHECK-INST: vilvh.h $vr2, $vr0, $vr6
+# CHECK-ENCODING: encoding: [0x02,0x98,0x1c,0x71]
+
+vilvh.w $vr7, $vr27, $vr15
+# CHECK-INST: vilvh.w $vr7, $vr27, $vr15
+# CHECK-ENCODING: encoding: [0x67,0x3f,0x1d,0x71]
+
+vilvh.d $vr9, $vr25, $vr29
+# CHECK-INST: vilvh.d $vr9, $vr25, $vr29
+# CHECK-ENCODING: encoding: [0x29,0xf7,0x1d,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/insgr2vr.s b/llvm/test/MC/LoongArch/lsx/insgr2vr.s
new file mode 100644
index 00000000000000..b8b8fe7fb4dfaa
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/insgr2vr.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vinsgr2vr.b $vr23, $r20, 2
+# CHECK-INST: vinsgr2vr.b $vr23, $t8, 2
+# CHECK-ENCODING: encoding: [0x97,0x8a,0xeb,0x72]
+
+vinsgr2vr.h $vr7, $r5, 7
+# CHECK-INST: vinsgr2vr.h $vr7, $a1, 7
+# CHECK-ENCODING: encoding: [0xa7,0xdc,0xeb,0x72]
+
+vinsgr2vr.w $vr8, $r6, 2
+# CHECK-INST: vinsgr2vr.w $vr8, $a2, 2
+# CHECK-ENCODING: encoding: [0xc8,0xe8,0xeb,0x72]
+
+vinsgr2vr.d $vr17, $r24, 1
+# CHECK-INST: vinsgr2vr.d $vr17, $s1, 1
+# CHECK-ENCODING: encoding: [0x11,0xf7,0xeb,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/invalid-imm.s b/llvm/test/MC/LoongArch/lsx/invalid-imm.s
new file mode 100644
index 00000000000000..fb7e24c8348817
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/invalid-imm.s
@@ -0,0 +1,55 @@
+## Test out of range immediates which are used by lsx instructions.
+
+# RUN: not llvm-mc --triple=loongarch64 %s 2>&1 | FileCheck %s
+
+## uimm1
+vreplvei.d $vr0, $vr1, 2
+# CHECK: :[[#@LINE-1]]:24: error: immediate must be an integer in the range [0, 1]
+
+## uimm4
+vsat.h $vr0, $vr1, 16
+# CHECK: :[[#@LINE-1]]:20: error: immediate must be an integer in the range [0, 15]
+
+## simm5
+vseqi.b $vr0, $vr1, 16
+# CHECK: :[[#@LINE-1]]:21: error: immediate must be an integer in the range [-16, 15]
+
+## uimm7
+vsrlni.d.q $vr0, $vr1, 128
+# CHECK: :[[#@LINE-1]]:24: error: immediate must be an integer in the range [0, 127]
+
+## simm8
+vpermi.w $vr0, $vr1, 256
+# CHECK: :[[#@LINE-1]]:22: error: immediate must be an integer in the range [0, 255]
+
+## simm8_lsl1
+vstelm.h $vr0, $a0, 255, 1
+# CHECK: :[[#@LINE-1]]:21: error: immediate must be a multiple of 2 in the range [-256, 254]
+
+## simm8_lsl2
+vstelm.w $vr0, $a0, 512, 1
+# CHECK: :[[#@LINE-1]]:21: error: immediate must be a multiple of 4 in the range [-512, 508]
+
+## simm10
+vrepli.b $vr0, 512
+# CHECK: :[[#@LINE-1]]:16: error: immediate must be an integer in the range [-512, 511]
+
+## simm8_lsl3
+vstelm.d $vr0, $a0, 1024, 1
+# CHECK: :[[#@LINE-1]]:21: error: immediate must be a multiple of 8 in the range [-1024, 1016]
+
+## simm9_lsl3
+vldrepl.d $vr0, $a0, 2048
+# CHECK: :[[#@LINE-1]]:22: error: immediate must be a multiple of 8 in the range [-2048, 2040]
+
+## simm10_lsl2
+vldrepl.w $vr0, $a0, 2048
+# CHECK: :[[#@LINE-1]]:22: error: immediate must be a multiple of 4 in the range [-2048, 2044]
+
+## simm11_lsl1
+vldrepl.h $vr0, $a0, 2048
+# CHECK: :[[#@LINE-1]]:22: error: immediate must be a multiple of 2 in the range [-2048, 2046]
+
+## simm13
+vldi $vr0, 4096
+# CHECK: :[[#@LINE-1]]:12: error: immediate must be an integer in the range [-4096, 4095]

diff  --git a/llvm/test/MC/LoongArch/lsx/ld.s b/llvm/test/MC/LoongArch/lsx/ld.s
new file mode 100644
index 00000000000000..642c842eb6e812
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ld.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vld $vr0, $r12, -536
+# CHECK-INST: vld $vr0, $t0, -536
+# CHECK-ENCODING: encoding: [0x80,0xa1,0x37,0x2c]
+
+vldx $vr21, $r14, $r20
+# CHECK-INST: vldx $vr21, $t2, $t8
+# CHECK-ENCODING: encoding: [0xd5,0x51,0x40,0x38]

diff  --git a/llvm/test/MC/LoongArch/lsx/ldi.s b/llvm/test/MC/LoongArch/lsx/ldi.s
new file mode 100644
index 00000000000000..59a1c2b27f4ee8
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ldi.s
@@ -0,0 +1,29 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-OBJ
+
+vldi $vr26, -3212
+# CHECK-INST: vldi $vr26, -3212
+# CHECK-ENCODING: encoding: [0x9a,0x6e,0xe2,0x73]
+# CHECK-OBJ: vldi $vr26, -3212
+
+vrepli.b $vr26, -512
+# CHECK-INST: vrepli.b $vr26, -512
+# CHECK-ENCODING: encoding: [0x1a,0x40,0xe0,0x73]
+# CHECK-OBJ: vldi $vr26, 512
+
+vrepli.h $vr26, -512
+# CHECK-INST: vrepli.h $vr26, -512
+# CHECK-ENCODING: encoding: [0x1a,0xc0,0xe0,0x73]
+# CHECK-OBJ: vldi $vr26, 1536
+
+vrepli.w $vr26, -512
+# CHECK-INST: vrepli.w $vr26, -512
+# CHECK-ENCODING: encoding: [0x1a,0x40,0xe1,0x73]
+# CHECK-OBJ: vldi $vr26, 2560
+
+vrepli.d $vr26, -512
+# CHECK-INST: vrepli.d $vr26, -512
+# CHECK-ENCODING: encoding: [0x1a,0xc0,0xe1,0x73]
+# CHECK-OBJ: vldi $vr26, 3584

diff  --git a/llvm/test/MC/LoongArch/lsx/ldrepl.s b/llvm/test/MC/LoongArch/lsx/ldrepl.s
new file mode 100644
index 00000000000000..75830ae20f2a10
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ldrepl.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vldrepl.b $vr3, $r3, -1553
+# CHECK-INST: vldrepl.b $vr3, $sp, -1553
+# CHECK-ENCODING: encoding: [0x63,0xbc,0xa7,0x30]
+
+vldrepl.h $vr23, $r22, 172
+# CHECK-INST: vldrepl.h $vr23, $fp, 172
+# CHECK-ENCODING: encoding: [0xd7,0x5a,0x41,0x30]
+
+vldrepl.w $vr12, $r27, -1304
+# CHECK-INST: vldrepl.w $vr12, $s4, -1304
+# CHECK-ENCODING: encoding: [0x6c,0xeb,0x2a,0x30]
+
+vldrepl.d $vr7, $r31, -1376
+# CHECK-INST: vldrepl.d $vr7, $s8, -1376
+# CHECK-ENCODING: encoding: [0xe7,0x53,0x15,0x30]

diff  --git a/llvm/test/MC/LoongArch/lsx/madd.s b/llvm/test/MC/LoongArch/lsx/madd.s
new file mode 100644
index 00000000000000..9ae6500c2efb6f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/madd.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmadd.b $vr13, $vr5, $vr10
+# CHECK-INST: vmadd.b $vr13, $vr5, $vr10
+# CHECK-ENCODING: encoding: [0xad,0x28,0xa8,0x70]
+
+vmadd.h $vr11, $vr15, $vr8
+# CHECK-INST: vmadd.h $vr11, $vr15, $vr8
+# CHECK-ENCODING: encoding: [0xeb,0xa1,0xa8,0x70]
+
+vmadd.w $vr5, $vr17, $vr16
+# CHECK-INST: vmadd.w $vr5, $vr17, $vr16
+# CHECK-ENCODING: encoding: [0x25,0x42,0xa9,0x70]
+
+vmadd.d $vr29, $vr11, $vr12
+# CHECK-INST: vmadd.d $vr29, $vr11, $vr12
+# CHECK-ENCODING: encoding: [0x7d,0xb1,0xa9,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/maddw.s b/llvm/test/MC/LoongArch/lsx/maddw.s
new file mode 100644
index 00000000000000..f346ea7860105f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/maddw.s
@@ -0,0 +1,100 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmaddwev.h.b $vr20, $vr27, $vr19
+# CHECK-INST: vmaddwev.h.b $vr20, $vr27, $vr19
+# CHECK-ENCODING: encoding: [0x74,0x4f,0xac,0x70]
+
+vmaddwev.w.h $vr6, $vr21, $vr19
+# CHECK-INST: vmaddwev.w.h $vr6, $vr21, $vr19
+# CHECK-ENCODING: encoding: [0xa6,0xce,0xac,0x70]
+
+vmaddwev.d.w $vr9, $vr20, $vr22
+# CHECK-INST: vmaddwev.d.w $vr9, $vr20, $vr22
+# CHECK-ENCODING: encoding: [0x89,0x5a,0xad,0x70]
+
+vmaddwev.q.d $vr11, $vr22, $vr5
+# CHECK-INST: vmaddwev.q.d $vr11, $vr22, $vr5
+# CHECK-ENCODING: encoding: [0xcb,0x96,0xad,0x70]
+
+vmaddwev.h.bu $vr7, $vr24, $vr12
+# CHECK-INST: vmaddwev.h.bu $vr7, $vr24, $vr12
+# CHECK-ENCODING: encoding: [0x07,0x33,0xb4,0x70]
+
+vmaddwev.w.hu $vr14, $vr10, $vr2
+# CHECK-INST: vmaddwev.w.hu $vr14, $vr10, $vr2
+# CHECK-ENCODING: encoding: [0x4e,0x89,0xb4,0x70]
+
+vmaddwev.d.wu $vr25, $vr22, $vr30
+# CHECK-INST: vmaddwev.d.wu $vr25, $vr22, $vr30
+# CHECK-ENCODING: encoding: [0xd9,0x7a,0xb5,0x70]
+
+vmaddwev.q.du $vr4, $vr5, $vr10
+# CHECK-INST: vmaddwev.q.du $vr4, $vr5, $vr10
+# CHECK-ENCODING: encoding: [0xa4,0xa8,0xb5,0x70]
+
+vmaddwev.h.bu.b $vr13, $vr17, $vr6
+# CHECK-INST: vmaddwev.h.bu.b $vr13, $vr17, $vr6
+# CHECK-ENCODING: encoding: [0x2d,0x1a,0xbc,0x70]
+
+vmaddwev.w.hu.h $vr1, $vr29, $vr13
+# CHECK-INST: vmaddwev.w.hu.h $vr1, $vr29, $vr13
+# CHECK-ENCODING: encoding: [0xa1,0xb7,0xbc,0x70]
+
+vmaddwev.d.wu.w $vr5, $vr13, $vr10
+# CHECK-INST: vmaddwev.d.wu.w $vr5, $vr13, $vr10
+# CHECK-ENCODING: encoding: [0xa5,0x29,0xbd,0x70]
+
+vmaddwev.q.du.d $vr16, $vr0, $vr26
+# CHECK-INST: vmaddwev.q.du.d $vr16, $vr0, $vr26
+# CHECK-ENCODING: encoding: [0x10,0xe8,0xbd,0x70]
+
+vmaddwod.h.b $vr29, $vr28, $vr11
+# CHECK-INST: vmaddwod.h.b $vr29, $vr28, $vr11
+# CHECK-ENCODING: encoding: [0x9d,0x2f,0xae,0x70]
+
+vmaddwod.w.h $vr10, $vr5, $vr29
+# CHECK-INST: vmaddwod.w.h $vr10, $vr5, $vr29
+# CHECK-ENCODING: encoding: [0xaa,0xf4,0xae,0x70]
+
+vmaddwod.d.w $vr16, $vr7, $vr26
+# CHECK-INST: vmaddwod.d.w $vr16, $vr7, $vr26
+# CHECK-ENCODING: encoding: [0xf0,0x68,0xaf,0x70]
+
+vmaddwod.q.d $vr1, $vr4, $vr7
+# CHECK-INST: vmaddwod.q.d $vr1, $vr4, $vr7
+# CHECK-ENCODING: encoding: [0x81,0x9c,0xaf,0x70]
+
+vmaddwod.h.bu $vr9, $vr28, $vr19
+# CHECK-INST: vmaddwod.h.bu $vr9, $vr28, $vr19
+# CHECK-ENCODING: encoding: [0x89,0x4f,0xb6,0x70]
+
+vmaddwod.w.hu $vr4, $vr6, $vr19
+# CHECK-INST: vmaddwod.w.hu $vr4, $vr6, $vr19
+# CHECK-ENCODING: encoding: [0xc4,0xcc,0xb6,0x70]
+
+vmaddwod.d.wu $vr2, $vr26, $vr26
+# CHECK-INST: vmaddwod.d.wu $vr2, $vr26, $vr26
+# CHECK-ENCODING: encoding: [0x42,0x6b,0xb7,0x70]
+
+vmaddwod.q.du $vr9, $vr18, $vr31
+# CHECK-INST: vmaddwod.q.du $vr9, $vr18, $vr31
+# CHECK-ENCODING: encoding: [0x49,0xfe,0xb7,0x70]
+
+vmaddwod.h.bu.b $vr22, $vr3, $vr25
+# CHECK-INST: vmaddwod.h.bu.b $vr22, $vr3, $vr25
+# CHECK-ENCODING: encoding: [0x76,0x64,0xbe,0x70]
+
+vmaddwod.w.hu.h $vr17, $vr20, $vr22
+# CHECK-INST: vmaddwod.w.hu.h $vr17, $vr20, $vr22
+# CHECK-ENCODING: encoding: [0x91,0xda,0xbe,0x70]
+
+vmaddwod.d.wu.w $vr21, $vr14, $vr6
+# CHECK-INST: vmaddwod.d.wu.w $vr21, $vr14, $vr6
+# CHECK-ENCODING: encoding: [0xd5,0x19,0xbf,0x70]
+
+vmaddwod.q.du.d $vr8, $vr15, $vr11
+# CHECK-INST: vmaddwod.q.du.d $vr8, $vr15, $vr11
+# CHECK-ENCODING: encoding: [0xe8,0xad,0xbf,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/max.s b/llvm/test/MC/LoongArch/lsx/max.s
new file mode 100644
index 00000000000000..2761f6913a86bc
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/max.s
@@ -0,0 +1,68 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmax.b $vr6, $vr21, $vr16
+# CHECK-INST: vmax.b $vr6, $vr21, $vr16
+# CHECK-ENCODING: encoding: [0xa6,0x42,0x70,0x70]
+
+vmax.h $vr9, $vr28, $vr16
+# CHECK-INST: vmax.h $vr9, $vr28, $vr16
+# CHECK-ENCODING: encoding: [0x89,0xc3,0x70,0x70]
+
+vmax.w $vr6, $vr0, $vr9
+# CHECK-INST: vmax.w $vr6, $vr0, $vr9
+# CHECK-ENCODING: encoding: [0x06,0x24,0x71,0x70]
+
+vmax.d $vr26, $vr3, $vr0
+# CHECK-INST: vmax.d $vr26, $vr3, $vr0
+# CHECK-ENCODING: encoding: [0x7a,0x80,0x71,0x70]
+
+vmaxi.b $vr2, $vr21, -8
+# CHECK-INST: vmaxi.b $vr2, $vr21, -8
+# CHECK-ENCODING: encoding: [0xa2,0x62,0x90,0x72]
+
+vmaxi.h $vr2, $vr21, -2
+# CHECK-INST: vmaxi.h $vr2, $vr21, -2
+# CHECK-ENCODING: encoding: [0xa2,0xfa,0x90,0x72]
+
+vmaxi.w $vr26, $vr21, -9
+# CHECK-INST: vmaxi.w $vr26, $vr21, -9
+# CHECK-ENCODING: encoding: [0xba,0x5e,0x91,0x72]
+
+vmaxi.d $vr30, $vr28, -2
+# CHECK-INST: vmaxi.d $vr30, $vr28, -2
+# CHECK-ENCODING: encoding: [0x9e,0xfb,0x91,0x72]
+
+vmax.bu $vr8, $vr7, $vr7
+# CHECK-INST: vmax.bu $vr8, $vr7, $vr7
+# CHECK-ENCODING: encoding: [0xe8,0x1c,0x74,0x70]
+
+vmax.hu $vr21, $vr10, $vr11
+# CHECK-INST: vmax.hu $vr21, $vr10, $vr11
+# CHECK-ENCODING: encoding: [0x55,0xad,0x74,0x70]
+
+vmax.wu $vr24, $vr13, $vr25
+# CHECK-INST: vmax.wu $vr24, $vr13, $vr25
+# CHECK-ENCODING: encoding: [0xb8,0x65,0x75,0x70]
+
+vmax.du $vr23, $vr11, $vr14
+# CHECK-INST: vmax.du $vr23, $vr11, $vr14
+# CHECK-ENCODING: encoding: [0x77,0xb9,0x75,0x70]
+
+vmaxi.bu $vr2, $vr9, 18
+# CHECK-INST: vmaxi.bu $vr2, $vr9, 18
+# CHECK-ENCODING: encoding: [0x22,0x49,0x94,0x72]
+
+vmaxi.hu $vr11, $vr23, 18
+# CHECK-INST: vmaxi.hu $vr11, $vr23, 18
+# CHECK-ENCODING: encoding: [0xeb,0xca,0x94,0x72]
+
+vmaxi.wu $vr15, $vr0, 29
+# CHECK-INST: vmaxi.wu $vr15, $vr0, 29
+# CHECK-ENCODING: encoding: [0x0f,0x74,0x95,0x72]
+
+vmaxi.du $vr20, $vr1, 14
+# CHECK-INST: vmaxi.du $vr20, $vr1, 14
+# CHECK-ENCODING: encoding: [0x34,0xb8,0x95,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/min.s b/llvm/test/MC/LoongArch/lsx/min.s
new file mode 100644
index 00000000000000..7843f95ea80e98
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/min.s
@@ -0,0 +1,68 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmin.b $vr24, $vr31, $vr5
+# CHECK-INST: vmin.b $vr24, $vr31, $vr5
+# CHECK-ENCODING: encoding: [0xf8,0x17,0x72,0x70]
+
+vmin.h $vr8, $vr17, $vr29
+# CHECK-INST: vmin.h $vr8, $vr17, $vr29
+# CHECK-ENCODING: encoding: [0x28,0xf6,0x72,0x70]
+
+vmin.w $vr6, $vr31, $vr20
+# CHECK-INST: vmin.w $vr6, $vr31, $vr20
+# CHECK-ENCODING: encoding: [0xe6,0x53,0x73,0x70]
+
+vmin.d $vr5, $vr11, $vr14
+# CHECK-INST: vmin.d $vr5, $vr11, $vr14
+# CHECK-ENCODING: encoding: [0x65,0xb9,0x73,0x70]
+
+vmini.b $vr8, $vr28, 0
+# CHECK-INST: vmini.b $vr8, $vr28, 0
+# CHECK-ENCODING: encoding: [0x88,0x03,0x92,0x72]
+
+vmini.h $vr12, $vr12, 0
+# CHECK-INST: vmini.h $vr12, $vr12, 0
+# CHECK-ENCODING: encoding: [0x8c,0x81,0x92,0x72]
+
+vmini.w $vr17, $vr1, 4
+# CHECK-INST: vmini.w $vr17, $vr1, 4
+# CHECK-ENCODING: encoding: [0x31,0x10,0x93,0x72]
+
+vmini.d $vr13, $vr2, -14
+# CHECK-INST: vmini.d $vr13, $vr2, -14
+# CHECK-ENCODING: encoding: [0x4d,0xc8,0x93,0x72]
+
+vmin.bu $vr30, $vr13, $vr11
+# CHECK-INST: vmin.bu $vr30, $vr13, $vr11
+# CHECK-ENCODING: encoding: [0xbe,0x2d,0x76,0x70]
+
+vmin.hu $vr13, $vr10, $vr17
+# CHECK-INST: vmin.hu $vr13, $vr10, $vr17
+# CHECK-ENCODING: encoding: [0x4d,0xc5,0x76,0x70]
+
+vmin.wu $vr29, $vr10, $vr27
+# CHECK-INST: vmin.wu $vr29, $vr10, $vr27
+# CHECK-ENCODING: encoding: [0x5d,0x6d,0x77,0x70]
+
+vmin.du $vr8, $vr1, $vr16
+# CHECK-INST: vmin.du $vr8, $vr1, $vr16
+# CHECK-ENCODING: encoding: [0x28,0xc0,0x77,0x70]
+
+vmini.bu $vr16, $vr22, 4
+# CHECK-INST: vmini.bu $vr16, $vr22, 4
+# CHECK-ENCODING: encoding: [0xd0,0x12,0x96,0x72]
+
+vmini.hu $vr1, $vr24, 20
+# CHECK-INST: vmini.hu $vr1, $vr24, 20
+# CHECK-ENCODING: encoding: [0x01,0xd3,0x96,0x72]
+
+vmini.wu $vr15, $vr5, 9
+# CHECK-INST: vmini.wu $vr15, $vr5, 9
+# CHECK-ENCODING: encoding: [0xaf,0x24,0x97,0x72]
+
+vmini.du $vr31, $vr8, 25
+# CHECK-INST: vmini.du $vr31, $vr8, 25
+# CHECK-ENCODING: encoding: [0x1f,0xe5,0x97,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/mod.s b/llvm/test/MC/LoongArch/lsx/mod.s
new file mode 100644
index 00000000000000..1033e8056d295d
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/mod.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmod.b $vr28, $vr30, $vr25
+# CHECK-INST: vmod.b $vr28, $vr30, $vr25
+# CHECK-ENCODING: encoding: [0xdc,0x67,0xe2,0x70]
+
+vmod.h $vr18, $vr31, $vr26
+# CHECK-INST: vmod.h $vr18, $vr31, $vr26
+# CHECK-ENCODING: encoding: [0xf2,0xeb,0xe2,0x70]
+
+vmod.w $vr16, $vr20, $vr1
+# CHECK-INST: vmod.w $vr16, $vr20, $vr1
+# CHECK-ENCODING: encoding: [0x90,0x06,0xe3,0x70]
+
+vmod.d $vr26, $vr27, $vr13
+# CHECK-INST: vmod.d $vr26, $vr27, $vr13
+# CHECK-ENCODING: encoding: [0x7a,0xb7,0xe3,0x70]
+
+vmod.bu $vr19, $vr8, $vr11
+# CHECK-INST: vmod.bu $vr19, $vr8, $vr11
+# CHECK-ENCODING: encoding: [0x13,0x2d,0xe6,0x70]
+
+vmod.hu $vr14, $vr21, $vr9
+# CHECK-INST: vmod.hu $vr14, $vr21, $vr9
+# CHECK-ENCODING: encoding: [0xae,0xa6,0xe6,0x70]
+
+vmod.wu $vr19, $vr0, $vr5
+# CHECK-INST: vmod.wu $vr19, $vr0, $vr5
+# CHECK-ENCODING: encoding: [0x13,0x14,0xe7,0x70]
+
+vmod.du $vr12, $vr18, $vr31
+# CHECK-INST: vmod.du $vr12, $vr18, $vr31
+# CHECK-ENCODING: encoding: [0x4c,0xfe,0xe7,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/mskgez.s b/llvm/test/MC/LoongArch/lsx/mskgez.s
new file mode 100644
index 00000000000000..0112d06e8e258c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/mskgez.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmskgez.b $vr13, $vr0
+# CHECK-INST: vmskgez.b $vr13, $vr0
+# CHECK-ENCODING: encoding: [0x0d,0x50,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/mskltz.s b/llvm/test/MC/LoongArch/lsx/mskltz.s
new file mode 100644
index 00000000000000..8f68faad1bf5f9
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/mskltz.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmskltz.b $vr17, $vr20
+# CHECK-INST: vmskltz.b $vr17, $vr20
+# CHECK-ENCODING: encoding: [0x91,0x42,0x9c,0x72]
+
+vmskltz.h $vr23, $vr1
+# CHECK-INST: vmskltz.h $vr23, $vr1
+# CHECK-ENCODING: encoding: [0x37,0x44,0x9c,0x72]
+
+vmskltz.w $vr3, $vr16
+# CHECK-INST: vmskltz.w $vr3, $vr16
+# CHECK-ENCODING: encoding: [0x03,0x4a,0x9c,0x72]
+
+vmskltz.d $vr1, $vr26
+# CHECK-INST: vmskltz.d $vr1, $vr26
+# CHECK-ENCODING: encoding: [0x41,0x4f,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/msknz.s b/llvm/test/MC/LoongArch/lsx/msknz.s
new file mode 100644
index 00000000000000..3805e8830d3984
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/msknz.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmsknz.b $vr20, $vr21
+# CHECK-INST: vmsknz.b $vr20, $vr21
+# CHECK-ENCODING: encoding: [0xb4,0x62,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/msub.s b/llvm/test/MC/LoongArch/lsx/msub.s
new file mode 100644
index 00000000000000..f3e7e715334559
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/msub.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmsub.b $vr19, $vr20, $vr12
+# CHECK-INST: vmsub.b $vr19, $vr20, $vr12
+# CHECK-ENCODING: encoding: [0x93,0x32,0xaa,0x70]
+
+vmsub.h $vr1, $vr9, $vr22
+# CHECK-INST: vmsub.h $vr1, $vr9, $vr22
+# CHECK-ENCODING: encoding: [0x21,0xd9,0xaa,0x70]
+
+vmsub.w $vr10, $vr2, $vr13
+# CHECK-INST: vmsub.w $vr10, $vr2, $vr13
+# CHECK-ENCODING: encoding: [0x4a,0x34,0xab,0x70]
+
+vmsub.d $vr28, $vr31, $vr6
+# CHECK-INST: vmsub.d $vr28, $vr31, $vr6
+# CHECK-ENCODING: encoding: [0xfc,0x9b,0xab,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/muh.s b/llvm/test/MC/LoongArch/lsx/muh.s
new file mode 100644
index 00000000000000..b206480408bbe8
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/muh.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmuh.b $vr23, $vr18, $vr21
+# CHECK-INST: vmuh.b $vr23, $vr18, $vr21
+# CHECK-ENCODING: encoding: [0x57,0x56,0x86,0x70]
+
+vmuh.h $vr25, $vr18, $vr5
+# CHECK-INST: vmuh.h $vr25, $vr18, $vr5
+# CHECK-ENCODING: encoding: [0x59,0x96,0x86,0x70]
+
+vmuh.w $vr6, $vr9, $vr14
+# CHECK-INST: vmuh.w $vr6, $vr9, $vr14
+# CHECK-ENCODING: encoding: [0x26,0x39,0x87,0x70]
+
+vmuh.d $vr31, $vr21, $vr8
+# CHECK-INST: vmuh.d $vr31, $vr21, $vr8
+# CHECK-ENCODING: encoding: [0xbf,0xa2,0x87,0x70]
+
+vmuh.bu $vr11, $vr26, $vr7
+# CHECK-INST: vmuh.bu $vr11, $vr26, $vr7
+# CHECK-ENCODING: encoding: [0x4b,0x1f,0x88,0x70]
+
+vmuh.hu $vr27, $vr4, $vr28
+# CHECK-INST: vmuh.hu $vr27, $vr4, $vr28
+# CHECK-ENCODING: encoding: [0x9b,0xf0,0x88,0x70]
+
+vmuh.wu $vr28, $vr21, $vr28
+# CHECK-INST: vmuh.wu $vr28, $vr21, $vr28
+# CHECK-ENCODING: encoding: [0xbc,0x72,0x89,0x70]
+
+vmuh.du $vr25, $vr3, $vr4
+# CHECK-INST: vmuh.du $vr25, $vr3, $vr4
+# CHECK-ENCODING: encoding: [0x79,0x90,0x89,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/mul.s b/llvm/test/MC/LoongArch/lsx/mul.s
new file mode 100644
index 00000000000000..7ddfc64cc7ea28
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/mul.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmul.b $vr25, $vr30, $vr7
+# CHECK-INST: vmul.b $vr25, $vr30, $vr7
+# CHECK-ENCODING: encoding: [0xd9,0x1f,0x84,0x70]
+
+vmul.h $vr16, $vr1, $vr26
+# CHECK-INST: vmul.h $vr16, $vr1, $vr26
+# CHECK-ENCODING: encoding: [0x30,0xe8,0x84,0x70]
+
+vmul.w $vr24, $vr22, $vr29
+# CHECK-INST: vmul.w $vr24, $vr22, $vr29
+# CHECK-ENCODING: encoding: [0xd8,0x76,0x85,0x70]
+
+vmul.d $vr27, $vr16, $vr25
+# CHECK-INST: vmul.d $vr27, $vr16, $vr25
+# CHECK-ENCODING: encoding: [0x1b,0xe6,0x85,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/mulw.s b/llvm/test/MC/LoongArch/lsx/mulw.s
new file mode 100644
index 00000000000000..9228e2e6f3339b
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/mulw.s
@@ -0,0 +1,100 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vmulwev.h.b $vr5, $vr6, $vr0
+# CHECK-INST: vmulwev.h.b $vr5, $vr6, $vr0
+# CHECK-ENCODING: encoding: [0xc5,0x00,0x90,0x70]
+
+vmulwev.w.h $vr4, $vr25, $vr2
+# CHECK-INST: vmulwev.w.h $vr4, $vr25, $vr2
+# CHECK-ENCODING: encoding: [0x24,0x8b,0x90,0x70]
+
+vmulwev.d.w $vr30, $vr28, $vr27
+# CHECK-INST: vmulwev.d.w $vr30, $vr28, $vr27
+# CHECK-ENCODING: encoding: [0x9e,0x6f,0x91,0x70]
+
+vmulwev.q.d $vr2, $vr1, $vr27
+# CHECK-INST: vmulwev.q.d $vr2, $vr1, $vr27
+# CHECK-ENCODING: encoding: [0x22,0xec,0x91,0x70]
+
+vmulwev.h.bu $vr10, $vr9, $vr4
+# CHECK-INST: vmulwev.h.bu $vr10, $vr9, $vr4
+# CHECK-ENCODING: encoding: [0x2a,0x11,0x98,0x70]
+
+vmulwev.w.hu $vr20, $vr31, $vr28
+# CHECK-INST: vmulwev.w.hu $vr20, $vr31, $vr28
+# CHECK-ENCODING: encoding: [0xf4,0xf3,0x98,0x70]
+
+vmulwev.d.wu $vr4, $vr6, $vr21
+# CHECK-INST: vmulwev.d.wu $vr4, $vr6, $vr21
+# CHECK-ENCODING: encoding: [0xc4,0x54,0x99,0x70]
+
+vmulwev.q.du $vr15, $vr21, $vr30
+# CHECK-INST: vmulwev.q.du $vr15, $vr21, $vr30
+# CHECK-ENCODING: encoding: [0xaf,0xfa,0x99,0x70]
+
+vmulwev.h.bu.b $vr29, $vr24, $vr15
+# CHECK-INST: vmulwev.h.bu.b $vr29, $vr24, $vr15
+# CHECK-ENCODING: encoding: [0x1d,0x3f,0xa0,0x70]
+
+vmulwev.w.hu.h $vr2, $vr28, $vr31
+# CHECK-INST: vmulwev.w.hu.h $vr2, $vr28, $vr31
+# CHECK-ENCODING: encoding: [0x82,0xff,0xa0,0x70]
+
+vmulwev.d.wu.w $vr12, $vr23, $vr6
+# CHECK-INST: vmulwev.d.wu.w $vr12, $vr23, $vr6
+# CHECK-ENCODING: encoding: [0xec,0x1a,0xa1,0x70]
+
+vmulwev.q.du.d $vr17, $vr9, $vr13
+# CHECK-INST: vmulwev.q.du.d $vr17, $vr9, $vr13
+# CHECK-ENCODING: encoding: [0x31,0xb5,0xa1,0x70]
+
+vmulwod.h.b $vr17, $vr0, $vr16
+# CHECK-INST: vmulwod.h.b $vr17, $vr0, $vr16
+# CHECK-ENCODING: encoding: [0x11,0x40,0x92,0x70]
+
+vmulwod.w.h $vr29, $vr5, $vr20
+# CHECK-INST: vmulwod.w.h $vr29, $vr5, $vr20
+# CHECK-ENCODING: encoding: [0xbd,0xd0,0x92,0x70]
+
+vmulwod.d.w $vr7, $vr26, $vr6
+# CHECK-INST: vmulwod.d.w $vr7, $vr26, $vr6
+# CHECK-ENCODING: encoding: [0x47,0x1b,0x93,0x70]
+
+vmulwod.q.d $vr13, $vr25, $vr30
+# CHECK-INST: vmulwod.q.d $vr13, $vr25, $vr30
+# CHECK-ENCODING: encoding: [0x2d,0xfb,0x93,0x70]
+
+vmulwod.h.bu $vr29, $vr20, $vr10
+# CHECK-INST: vmulwod.h.bu $vr29, $vr20, $vr10
+# CHECK-ENCODING: encoding: [0x9d,0x2a,0x9a,0x70]
+
+vmulwod.w.hu $vr31, $vr4, $vr25
+# CHECK-INST: vmulwod.w.hu $vr31, $vr4, $vr25
+# CHECK-ENCODING: encoding: [0x9f,0xe4,0x9a,0x70]
+
+vmulwod.d.wu $vr7, $vr26, $vr16
+# CHECK-INST: vmulwod.d.wu $vr7, $vr26, $vr16
+# CHECK-ENCODING: encoding: [0x47,0x43,0x9b,0x70]
+
+vmulwod.q.du $vr25, $vr10, $vr4
+# CHECK-INST: vmulwod.q.du $vr25, $vr10, $vr4
+# CHECK-ENCODING: encoding: [0x59,0x91,0x9b,0x70]
+
+vmulwod.h.bu.b $vr6, $vr25, $vr11
+# CHECK-INST: vmulwod.h.bu.b $vr6, $vr25, $vr11
+# CHECK-ENCODING: encoding: [0x26,0x2f,0xa2,0x70]
+
+vmulwod.w.hu.h $vr18, $vr25, $vr31
+# CHECK-INST: vmulwod.w.hu.h $vr18, $vr25, $vr31
+# CHECK-ENCODING: encoding: [0x32,0xff,0xa2,0x70]
+
+vmulwod.d.wu.w $vr10, $vr28, $vr26
+# CHECK-INST: vmulwod.d.wu.w $vr10, $vr28, $vr26
+# CHECK-ENCODING: encoding: [0x8a,0x6b,0xa3,0x70]
+
+vmulwod.q.du.d $vr30, $vr23, $vr17
+# CHECK-INST: vmulwod.q.du.d $vr30, $vr23, $vr17
+# CHECK-ENCODING: encoding: [0xfe,0xc6,0xa3,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/neg.s b/llvm/test/MC/LoongArch/lsx/neg.s
new file mode 100644
index 00000000000000..34a6d975126318
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/neg.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vneg.b $vr11, $vr29
+# CHECK-INST: vneg.b $vr11, $vr29
+# CHECK-ENCODING: encoding: [0xab,0x33,0x9c,0x72]
+
+vneg.h $vr14, $vr4
+# CHECK-INST: vneg.h $vr14, $vr4
+# CHECK-ENCODING: encoding: [0x8e,0x34,0x9c,0x72]
+
+vneg.w $vr4, $vr0
+# CHECK-INST: vneg.w $vr4, $vr0
+# CHECK-ENCODING: encoding: [0x04,0x38,0x9c,0x72]
+
+vneg.d $vr0, $vr5
+# CHECK-INST: vneg.d $vr0, $vr5
+# CHECK-ENCODING: encoding: [0xa0,0x3c,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/nor.s b/llvm/test/MC/LoongArch/lsx/nor.s
new file mode 100644
index 00000000000000..a74074f09f6c98
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/nor.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vnor.v $vr18, $vr5, $vr29
+# CHECK-INST: vnor.v $vr18, $vr5, $vr29
+# CHECK-ENCODING: encoding: [0xb2,0xf4,0x27,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/nori.s b/llvm/test/MC/LoongArch/lsx/nori.s
new file mode 100644
index 00000000000000..7693568df0e872
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/nori.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vnori.b $vr8, $vr16, 186
+# CHECK-INST: vnori.b $vr8, $vr16, 186
+# CHECK-ENCODING: encoding: [0x08,0xea,0xde,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/or.s b/llvm/test/MC/LoongArch/lsx/or.s
new file mode 100644
index 00000000000000..c349eac2a9ce61
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/or.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vor.v $vr9, $vr18, $vr24
+# CHECK-INST: vor.v $vr9, $vr18, $vr24
+# CHECK-ENCODING: encoding: [0x49,0xe2,0x26,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ori.s b/llvm/test/MC/LoongArch/lsx/ori.s
new file mode 100644
index 00000000000000..def8fbb9c91ed1
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ori.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vori.b $vr23, $vr3, 252
+# CHECK-INST: vori.b $vr23, $vr3, 252
+# CHECK-ENCODING: encoding: [0x77,0xf0,0xd7,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/orn.s b/llvm/test/MC/LoongArch/lsx/orn.s
new file mode 100644
index 00000000000000..60864e9a30bee5
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/orn.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vorn.v $vr11, $vr20, $vr17
+# CHECK-INST: vorn.v $vr11, $vr20, $vr17
+# CHECK-ENCODING: encoding: [0x8b,0xc6,0x28,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/pack.s b/llvm/test/MC/LoongArch/lsx/pack.s
new file mode 100644
index 00000000000000..4d9b8b3f2a0d2e
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/pack.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vpackev.b $vr1, $vr27, $vr16
+# CHECK-INST: vpackev.b $vr1, $vr27, $vr16
+# CHECK-ENCODING: encoding: [0x61,0x43,0x16,0x71]
+
+vpackev.h $vr0, $vr3, $vr25
+# CHECK-INST: vpackev.h $vr0, $vr3, $vr25
+# CHECK-ENCODING: encoding: [0x60,0xe4,0x16,0x71]
+
+vpackev.w $vr10, $vr4, $vr29
+# CHECK-INST: vpackev.w $vr10, $vr4, $vr29
+# CHECK-ENCODING: encoding: [0x8a,0x74,0x17,0x71]
+
+vpackev.d $vr28, $vr6, $vr7
+# CHECK-INST: vpackev.d $vr28, $vr6, $vr7
+# CHECK-ENCODING: encoding: [0xdc,0x9c,0x17,0x71]
+
+vpackod.b $vr14, $vr13, $vr7
+# CHECK-INST: vpackod.b $vr14, $vr13, $vr7
+# CHECK-ENCODING: encoding: [0xae,0x1d,0x18,0x71]
+
+vpackod.h $vr28, $vr5, $vr7
+# CHECK-INST: vpackod.h $vr28, $vr5, $vr7
+# CHECK-ENCODING: encoding: [0xbc,0x9c,0x18,0x71]
+
+vpackod.w $vr15, $vr11, $vr17
+# CHECK-INST: vpackod.w $vr15, $vr11, $vr17
+# CHECK-ENCODING: encoding: [0x6f,0x45,0x19,0x71]
+
+vpackod.d $vr12, $vr15, $vr0
+# CHECK-INST: vpackod.d $vr12, $vr15, $vr0
+# CHECK-ENCODING: encoding: [0xec,0x81,0x19,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/pcnt.s b/llvm/test/MC/LoongArch/lsx/pcnt.s
new file mode 100644
index 00000000000000..ee896aee8067b9
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/pcnt.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vpcnt.b $vr2, $vr7
+# CHECK-INST: vpcnt.b $vr2, $vr7
+# CHECK-ENCODING: encoding: [0xe2,0x20,0x9c,0x72]
+
+vpcnt.h $vr23, $vr25
+# CHECK-INST: vpcnt.h $vr23, $vr25
+# CHECK-ENCODING: encoding: [0x37,0x27,0x9c,0x72]
+
+vpcnt.w $vr17, $vr24
+# CHECK-INST: vpcnt.w $vr17, $vr24
+# CHECK-ENCODING: encoding: [0x11,0x2b,0x9c,0x72]
+
+vpcnt.d $vr4, $vr13
+# CHECK-INST: vpcnt.d $vr4, $vr13
+# CHECK-ENCODING: encoding: [0xa4,0x2d,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/permi.s b/llvm/test/MC/LoongArch/lsx/permi.s
new file mode 100644
index 00000000000000..3b4e1a55449b8a
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/permi.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vpermi.w $vr2, $vr22, 219
+# CHECK-INST: vpermi.w $vr2, $vr22, 219
+# CHECK-ENCODING: encoding: [0xc2,0x6e,0xe7,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/pick.s b/llvm/test/MC/LoongArch/lsx/pick.s
new file mode 100644
index 00000000000000..f54c6226f5a082
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/pick.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vpickev.b $vr8, $vr13, $vr23
+# CHECK-INST: vpickev.b $vr8, $vr13, $vr23
+# CHECK-ENCODING: encoding: [0xa8,0x5d,0x1e,0x71]
+
+vpickev.h $vr11, $vr18, $vr19
+# CHECK-INST: vpickev.h $vr11, $vr18, $vr19
+# CHECK-ENCODING: encoding: [0x4b,0xce,0x1e,0x71]
+
+vpickev.w $vr16, $vr31, $vr30
+# CHECK-INST: vpickev.w $vr16, $vr31, $vr30
+# CHECK-ENCODING: encoding: [0xf0,0x7b,0x1f,0x71]
+
+vpickev.d $vr1, $vr28, $vr8
+# CHECK-INST: vpickev.d $vr1, $vr28, $vr8
+# CHECK-ENCODING: encoding: [0x81,0xa3,0x1f,0x71]
+
+vpickod.b $vr29, $vr28, $vr28
+# CHECK-INST: vpickod.b $vr29, $vr28, $vr28
+# CHECK-ENCODING: encoding: [0x9d,0x73,0x20,0x71]
+
+vpickod.h $vr5, $vr5, $vr1
+# CHECK-INST: vpickod.h $vr5, $vr5, $vr1
+# CHECK-ENCODING: encoding: [0xa5,0x84,0x20,0x71]
+
+vpickod.w $vr18, $vr8, $vr22
+# CHECK-INST: vpickod.w $vr18, $vr8, $vr22
+# CHECK-ENCODING: encoding: [0x12,0x59,0x21,0x71]
+
+vpickod.d $vr5, $vr5, $vr22
+# CHECK-INST: vpickod.d $vr5, $vr5, $vr22
+# CHECK-ENCODING: encoding: [0xa5,0xd8,0x21,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/pickve2gr.s b/llvm/test/MC/LoongArch/lsx/pickve2gr.s
new file mode 100644
index 00000000000000..7a28e8104f028c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/pickve2gr.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vpickve2gr.b $r18, $vr1, 1
+# CHECK-INST: vpickve2gr.b $t6, $vr1, 1
+# CHECK-ENCODING: encoding: [0x32,0x84,0xef,0x72]
+
+vpickve2gr.h $r2, $vr5, 3
+# CHECK-INST: vpickve2gr.h $tp, $vr5, 3
+# CHECK-ENCODING: encoding: [0xa2,0xcc,0xef,0x72]
+
+vpickve2gr.w $r3, $vr11, 2
+# CHECK-INST: vpickve2gr.w $sp, $vr11, 2
+# CHECK-ENCODING: encoding: [0x63,0xe9,0xef,0x72]
+
+vpickve2gr.d $r26, $vr1, 1
+# CHECK-INST: vpickve2gr.d $s3, $vr1, 1
+# CHECK-ENCODING: encoding: [0x3a,0xf4,0xef,0x72]
+
+vpickve2gr.bu $r28, $vr14, 6
+# CHECK-INST: vpickve2gr.bu $s5, $vr14, 6
+# CHECK-ENCODING: encoding: [0xdc,0x99,0xf3,0x72]
+
+vpickve2gr.hu $r7, $vr6, 7
+# CHECK-INST: vpickve2gr.hu $a3, $vr6, 7
+# CHECK-ENCODING: encoding: [0xc7,0xdc,0xf3,0x72]
+
+vpickve2gr.wu $r11, $vr30, 1
+# CHECK-INST: vpickve2gr.wu $a7, $vr30, 1
+# CHECK-ENCODING: encoding: [0xcb,0xe7,0xf3,0x72]
+
+vpickve2gr.du $r13, $vr5, 0
+# CHECK-INST: vpickve2gr.du $t1, $vr5, 0
+# CHECK-ENCODING: encoding: [0xad,0xf0,0xf3,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/replgr2vr.s b/llvm/test/MC/LoongArch/lsx/replgr2vr.s
new file mode 100644
index 00000000000000..5e5c048862fe34
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/replgr2vr.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vreplgr2vr.b $vr30, $r27
+# CHECK-INST: vreplgr2vr.b $vr30, $s4
+# CHECK-ENCODING: encoding: [0x7e,0x03,0x9f,0x72]
+
+vreplgr2vr.h $vr6, $r1
+# CHECK-INST: vreplgr2vr.h $vr6, $ra
+# CHECK-ENCODING: encoding: [0x26,0x04,0x9f,0x72]
+
+vreplgr2vr.w $vr23, $r9
+# CHECK-INST: vreplgr2vr.w $vr23, $a5
+# CHECK-ENCODING: encoding: [0x37,0x09,0x9f,0x72]
+
+vreplgr2vr.d $vr17, $r14
+# CHECK-INST: vreplgr2vr.d $vr17, $t2
+# CHECK-ENCODING: encoding: [0xd1,0x0d,0x9f,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/replve.s b/llvm/test/MC/LoongArch/lsx/replve.s
new file mode 100644
index 00000000000000..b9943acb361ae8
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/replve.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vreplve.b $vr10, $vr31, $r20
+# CHECK-INST: vreplve.b $vr10, $vr31, $t8
+# CHECK-ENCODING: encoding: [0xea,0x53,0x22,0x71]
+
+vreplve.h $vr8, $vr3, $r30
+# CHECK-INST: vreplve.h $vr8, $vr3, $s7
+# CHECK-ENCODING: encoding: [0x68,0xf8,0x22,0x71]
+
+vreplve.w $vr5, $vr1, $r20
+# CHECK-INST: vreplve.w $vr5, $vr1, $t8
+# CHECK-ENCODING: encoding: [0x25,0x50,0x23,0x71]
+
+vreplve.d $vr11, $vr15, $r30
+# CHECK-INST: vreplve.d $vr11, $vr15, $s7
+# CHECK-ENCODING: encoding: [0xeb,0xf9,0x23,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/replvei.s b/llvm/test/MC/LoongArch/lsx/replvei.s
new file mode 100644
index 00000000000000..dd1ce0f96aeb1c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/replvei.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vreplvei.b $vr23, $vr3, 3
+# CHECK-INST: vreplvei.b $vr23, $vr3, 3
+# CHECK-ENCODING: encoding: [0x77,0x8c,0xf7,0x72]
+
+vreplvei.h $vr27, $vr16, 0
+# CHECK-INST: vreplvei.h $vr27, $vr16, 0
+# CHECK-ENCODING: encoding: [0x1b,0xc2,0xf7,0x72]
+
+vreplvei.w $vr18, $vr23, 3
+# CHECK-INST: vreplvei.w $vr18, $vr23, 3
+# CHECK-ENCODING: encoding: [0xf2,0xee,0xf7,0x72]
+
+vreplvei.d $vr15, $vr12, 1
+# CHECK-INST: vreplvei.d $vr15, $vr12, 1
+# CHECK-ENCODING: encoding: [0x8f,0xf5,0xf7,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/rotr.s b/llvm/test/MC/LoongArch/lsx/rotr.s
new file mode 100644
index 00000000000000..101405e5b6b86d
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/rotr.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vrotr.b $vr15, $vr25, $vr30
+# CHECK-INST: vrotr.b $vr15, $vr25, $vr30
+# CHECK-ENCODING: encoding: [0x2f,0x7b,0xee,0x70]
+
+vrotr.h $vr5, $vr23, $vr14
+# CHECK-INST: vrotr.h $vr5, $vr23, $vr14
+# CHECK-ENCODING: encoding: [0xe5,0xba,0xee,0x70]
+
+vrotr.w $vr27, $vr0, $vr7
+# CHECK-INST: vrotr.w $vr27, $vr0, $vr7
+# CHECK-ENCODING: encoding: [0x1b,0x1c,0xef,0x70]
+
+vrotr.d $vr2, $vr3, $vr21
+# CHECK-INST: vrotr.d $vr2, $vr3, $vr21
+# CHECK-ENCODING: encoding: [0x62,0xd4,0xef,0x70]
+
+vrotri.b $vr17, $vr22, 5
+# CHECK-INST: vrotri.b $vr17, $vr22, 5
+# CHECK-ENCODING: encoding: [0xd1,0x36,0xa0,0x72]
+
+vrotri.h $vr27, $vr20, 10
+# CHECK-INST: vrotri.h $vr27, $vr20, 10
+# CHECK-ENCODING: encoding: [0x9b,0x6a,0xa0,0x72]
+
+vrotri.w $vr21, $vr24, 14
+# CHECK-INST: vrotri.w $vr21, $vr24, 14
+# CHECK-ENCODING: encoding: [0x15,0xbb,0xa0,0x72]
+
+vrotri.d $vr25, $vr23, 14
+# CHECK-INST: vrotri.d $vr25, $vr23, 14
+# CHECK-ENCODING: encoding: [0xf9,0x3a,0xa1,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/sadd.s b/llvm/test/MC/LoongArch/lsx/sadd.s
new file mode 100644
index 00000000000000..9709a8a8e75f2c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sadd.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsadd.b $vr29, $vr30, $vr11
+# CHECK-INST: vsadd.b $vr29, $vr30, $vr11
+# CHECK-ENCODING: encoding: [0xdd,0x2f,0x46,0x70]
+
+vsadd.h $vr1, $vr2, $vr29
+# CHECK-INST: vsadd.h $vr1, $vr2, $vr29
+# CHECK-ENCODING: encoding: [0x41,0xf4,0x46,0x70]
+
+vsadd.w $vr19, $vr28, $vr28
+# CHECK-INST: vsadd.w $vr19, $vr28, $vr28
+# CHECK-ENCODING: encoding: [0x93,0x73,0x47,0x70]
+
+vsadd.d $vr19, $vr30, $vr20
+# CHECK-INST: vsadd.d $vr19, $vr30, $vr20
+# CHECK-ENCODING: encoding: [0xd3,0xd3,0x47,0x70]
+
+vsadd.bu $vr22, $vr22, $vr16
+# CHECK-INST: vsadd.bu $vr22, $vr22, $vr16
+# CHECK-ENCODING: encoding: [0xd6,0x42,0x4a,0x70]
+
+vsadd.hu $vr0, $vr16, $vr8
+# CHECK-INST: vsadd.hu $vr0, $vr16, $vr8
+# CHECK-ENCODING: encoding: [0x00,0xa2,0x4a,0x70]
+
+vsadd.wu $vr9, $vr23, $vr24
+# CHECK-INST: vsadd.wu $vr9, $vr23, $vr24
+# CHECK-ENCODING: encoding: [0xe9,0x62,0x4b,0x70]
+
+vsadd.du $vr28, $vr11, $vr30
+# CHECK-INST: vsadd.du $vr28, $vr11, $vr30
+# CHECK-ENCODING: encoding: [0x7c,0xf9,0x4b,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/sat.s b/llvm/test/MC/LoongArch/lsx/sat.s
new file mode 100644
index 00000000000000..677e7fc5ab5347
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sat.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsat.b $vr29, $vr0, 1
+# CHECK-INST: vsat.b $vr29, $vr0, 1
+# CHECK-ENCODING: encoding: [0x1d,0x24,0x24,0x73]
+
+vsat.h $vr4, $vr13, 13
+# CHECK-INST: vsat.h $vr4, $vr13, 13
+# CHECK-ENCODING: encoding: [0xa4,0x75,0x24,0x73]
+
+vsat.w $vr6, $vr29, 19
+# CHECK-INST: vsat.w $vr6, $vr29, 19
+# CHECK-ENCODING: encoding: [0xa6,0xcf,0x24,0x73]
+
+vsat.d $vr22, $vr6, 54
+# CHECK-INST: vsat.d $vr22, $vr6, 54
+# CHECK-ENCODING: encoding: [0xd6,0xd8,0x25,0x73]
+
+vsat.bu $vr17, $vr8, 6
+# CHECK-INST: vsat.bu $vr17, $vr8, 6
+# CHECK-ENCODING: encoding: [0x11,0x39,0x28,0x73]
+
+vsat.hu $vr2, $vr14, 2
+# CHECK-INST: vsat.hu $vr2, $vr14, 2
+# CHECK-ENCODING: encoding: [0xc2,0x49,0x28,0x73]
+
+vsat.wu $vr1, $vr28, 19
+# CHECK-INST: vsat.wu $vr1, $vr28, 19
+# CHECK-ENCODING: encoding: [0x81,0xcf,0x28,0x73]
+
+vsat.du $vr25, $vr6, 59
+# CHECK-INST: vsat.du $vr25, $vr6, 59
+# CHECK-ENCODING: encoding: [0xd9,0xec,0x29,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/seq.s b/llvm/test/MC/LoongArch/lsx/seq.s
new file mode 100644
index 00000000000000..764c94ef6f1a12
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/seq.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vseq.b $vr15, $vr30, $vr24
+# CHECK-INST: vseq.b $vr15, $vr30, $vr24
+# CHECK-ENCODING: encoding: [0xcf,0x63,0x00,0x70]
+
+vseq.h $vr7, $vr4, $vr22
+# CHECK-INST: vseq.h $vr7, $vr4, $vr22
+# CHECK-ENCODING: encoding: [0x87,0xd8,0x00,0x70]
+
+vseq.w $vr4, $vr15, $vr28
+# CHECK-INST: vseq.w $vr4, $vr15, $vr28
+# CHECK-ENCODING: encoding: [0xe4,0x71,0x01,0x70]
+
+vseq.d $vr29, $vr26, $vr22
+# CHECK-INST: vseq.d $vr29, $vr26, $vr22
+# CHECK-ENCODING: encoding: [0x5d,0xdb,0x01,0x70]
+
+vseqi.b $vr19, $vr30, 14
+# CHECK-INST: vseqi.b $vr19, $vr30, 14
+# CHECK-ENCODING: encoding: [0xd3,0x3b,0x80,0x72]
+
+vseqi.h $vr15, $vr2, 15
+# CHECK-INST: vseqi.h $vr15, $vr2, 15
+# CHECK-ENCODING: encoding: [0x4f,0xbc,0x80,0x72]
+
+vseqi.w $vr27, $vr23, -10
+# CHECK-INST: vseqi.w $vr27, $vr23, -10
+# CHECK-ENCODING: encoding: [0xfb,0x5a,0x81,0x72]
+
+vseqi.d $vr6, $vr12, -2
+# CHECK-INST: vseqi.d $vr6, $vr12, -2
+# CHECK-ENCODING: encoding: [0x86,0xf9,0x81,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/set.s b/llvm/test/MC/LoongArch/lsx/set.s
new file mode 100644
index 00000000000000..bd2cfb57a4e8f0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/set.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vseteqz.v $fcc0, $vr13
+# CHECK-INST: vseteqz.v $fcc0, $vr13
+# CHECK-ENCODING: encoding: [0xa0,0x99,0x9c,0x72]
+
+vsetnez.v $fcc7, $vr14
+# CHECK-INST: vsetnez.v $fcc7, $vr14
+# CHECK-ENCODING: encoding: [0xc7,0x9d,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/setallnez.s b/llvm/test/MC/LoongArch/lsx/setallnez.s
new file mode 100644
index 00000000000000..8ca6f14973145f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/setallnez.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsetallnez.b $fcc2, $vr8
+# CHECK-INST: vsetallnez.b $fcc2, $vr8
+# CHECK-ENCODING: encoding: [0x02,0xb1,0x9c,0x72]
+
+vsetallnez.h $fcc0, $vr26
+# CHECK-INST: vsetallnez.h $fcc0, $vr26
+# CHECK-ENCODING: encoding: [0x40,0xb7,0x9c,0x72]
+
+vsetallnez.w $fcc6, $vr17
+# CHECK-INST: vsetallnez.w $fcc6, $vr17
+# CHECK-ENCODING: encoding: [0x26,0xba,0x9c,0x72]
+
+vsetallnez.d $fcc0, $vr27
+# CHECK-INST: vsetallnez.d $fcc0, $vr27
+# CHECK-ENCODING: encoding: [0x60,0xbf,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/setanyeqz.s b/llvm/test/MC/LoongArch/lsx/setanyeqz.s
new file mode 100644
index 00000000000000..6dbd4f17048f5f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/setanyeqz.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsetanyeqz.b $fcc3, $vr4
+# CHECK-INST: vsetanyeqz.b $fcc3, $vr4
+# CHECK-ENCODING: encoding: [0x83,0xa0,0x9c,0x72]
+
+vsetanyeqz.h $fcc2, $vr15
+# CHECK-INST: vsetanyeqz.h $fcc2, $vr15
+# CHECK-ENCODING: encoding: [0xe2,0xa5,0x9c,0x72]
+
+vsetanyeqz.w $fcc4, $vr0
+# CHECK-INST: vsetanyeqz.w $fcc4, $vr0
+# CHECK-ENCODING: encoding: [0x04,0xa8,0x9c,0x72]
+
+vsetanyeqz.d $fcc3, $vr7
+# CHECK-INST: vsetanyeqz.d $fcc3, $vr7
+# CHECK-ENCODING: encoding: [0xe3,0xac,0x9c,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/shuf.s b/llvm/test/MC/LoongArch/lsx/shuf.s
new file mode 100644
index 00000000000000..0e73aba22e98a4
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/shuf.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vshuf.b $vr27, $vr17, $vr31, $vr28
+# CHECK-INST: vshuf.b $vr27, $vr17, $vr31, $vr28
+# CHECK-ENCODING: encoding: [0x3b,0x7e,0x5e,0x0d]
+
+vshuf.h $vr21, $vr10, $vr31
+# CHECK-INST: vshuf.h $vr21, $vr10, $vr31
+# CHECK-ENCODING: encoding: [0x55,0xfd,0x7a,0x71]
+
+vshuf.w $vr18, $vr17, $vr23
+# CHECK-INST: vshuf.w $vr18, $vr17, $vr23
+# CHECK-ENCODING: encoding: [0x32,0x5e,0x7b,0x71]
+
+vshuf.d $vr4, $vr24, $vr11
+# CHECK-INST: vshuf.d $vr4, $vr24, $vr11
+# CHECK-ENCODING: encoding: [0x04,0xaf,0x7b,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/shuf4i.s b/llvm/test/MC/LoongArch/lsx/shuf4i.s
new file mode 100644
index 00000000000000..d22e2956c77b34
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/shuf4i.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vshuf4i.b $vr30, $vr14, 72
+# CHECK-INST: vshuf4i.b $vr30, $vr14, 72
+# CHECK-ENCODING: encoding: [0xde,0x21,0x91,0x73]
+
+vshuf4i.h $vr13, $vr4, 222
+# CHECK-INST: vshuf4i.h $vr13, $vr4, 222
+# CHECK-ENCODING: encoding: [0x8d,0x78,0x97,0x73]
+
+vshuf4i.w $vr17, $vr8, 74
+# CHECK-INST: vshuf4i.w $vr17, $vr8, 74
+# CHECK-ENCODING: encoding: [0x11,0x29,0x99,0x73]
+
+vshuf4i.d $vr11, $vr6, 157
+# CHECK-INST: vshuf4i.d $vr11, $vr6, 157
+# CHECK-ENCODING: encoding: [0xcb,0x74,0x9e,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/signcov.s b/llvm/test/MC/LoongArch/lsx/signcov.s
new file mode 100644
index 00000000000000..343a46f3ef0fe1
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/signcov.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsigncov.b $vr11, $vr3, $vr7
+# CHECK-INST: vsigncov.b $vr11, $vr3, $vr7
+# CHECK-ENCODING: encoding: [0x6b,0x1c,0x2e,0x71]
+
+vsigncov.h $vr8, $vr29, $vr1
+# CHECK-INST: vsigncov.h $vr8, $vr29, $vr1
+# CHECK-ENCODING: encoding: [0xa8,0x87,0x2e,0x71]
+
+vsigncov.w $vr28, $vr13, $vr21
+# CHECK-INST: vsigncov.w $vr28, $vr13, $vr21
+# CHECK-ENCODING: encoding: [0xbc,0x55,0x2f,0x71]
+
+vsigncov.d $vr22, $vr20, $vr0
+# CHECK-INST: vsigncov.d $vr22, $vr20, $vr0
+# CHECK-ENCODING: encoding: [0x96,0x82,0x2f,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/sle.s b/llvm/test/MC/LoongArch/lsx/sle.s
new file mode 100644
index 00000000000000..cf86e632947f7d
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sle.s
@@ -0,0 +1,68 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsle.b $vr4, $vr30, $vr18
+# CHECK-INST: vsle.b $vr4, $vr30, $vr18
+# CHECK-ENCODING: encoding: [0xc4,0x4b,0x02,0x70]
+
+vsle.h $vr3, $vr13, $vr12
+# CHECK-INST: vsle.h $vr3, $vr13, $vr12
+# CHECK-ENCODING: encoding: [0xa3,0xb1,0x02,0x70]
+
+vsle.w $vr21, $vr17, $vr20
+# CHECK-INST: vsle.w $vr21, $vr17, $vr20
+# CHECK-ENCODING: encoding: [0x35,0x52,0x03,0x70]
+
+vsle.d $vr22, $vr0, $vr28
+# CHECK-INST: vsle.d $vr22, $vr0, $vr28
+# CHECK-ENCODING: encoding: [0x16,0xf0,0x03,0x70]
+
+vslei.b $vr8, $vr11, 4
+# CHECK-INST: vslei.b $vr8, $vr11, 4
+# CHECK-ENCODING: encoding: [0x68,0x11,0x82,0x72]
+
+vslei.h $vr15, $vr22, 0
+# CHECK-INST: vslei.h $vr15, $vr22, 0
+# CHECK-ENCODING: encoding: [0xcf,0x82,0x82,0x72]
+
+vslei.w $vr23, $vr17, 12
+# CHECK-INST: vslei.w $vr23, $vr17, 12
+# CHECK-ENCODING: encoding: [0x37,0x32,0x83,0x72]
+
+vslei.d $vr11, $vr18, -12
+# CHECK-INST: vslei.d $vr11, $vr18, -12
+# CHECK-ENCODING: encoding: [0x4b,0xd2,0x83,0x72]
+
+vsle.bu $vr20, $vr11, $vr31
+# CHECK-INST: vsle.bu $vr20, $vr11, $vr31
+# CHECK-ENCODING: encoding: [0x74,0x7d,0x04,0x70]
+
+vsle.hu $vr5, $vr6, $vr7
+# CHECK-INST: vsle.hu $vr5, $vr6, $vr7
+# CHECK-ENCODING: encoding: [0xc5,0x9c,0x04,0x70]
+
+vsle.wu $vr15, $vr14, $vr22
+# CHECK-INST: vsle.wu $vr15, $vr14, $vr22
+# CHECK-ENCODING: encoding: [0xcf,0x59,0x05,0x70]
+
+vsle.du $vr0, $vr29, $vr17
+# CHECK-INST: vsle.du $vr0, $vr29, $vr17
+# CHECK-ENCODING: encoding: [0xa0,0xc7,0x05,0x70]
+
+vslei.bu $vr12, $vr27, 12
+# CHECK-INST: vslei.bu $vr12, $vr27, 12
+# CHECK-ENCODING: encoding: [0x6c,0x33,0x84,0x72]
+
+vslei.hu $vr22, $vr31, 12
+# CHECK-INST: vslei.hu $vr22, $vr31, 12
+# CHECK-ENCODING: encoding: [0xf6,0xb3,0x84,0x72]
+
+vslei.wu $vr19, $vr18, 21
+# CHECK-INST: vslei.wu $vr19, $vr18, 21
+# CHECK-ENCODING: encoding: [0x53,0x56,0x85,0x72]
+
+vslei.du $vr19, $vr14, 26
+# CHECK-INST: vslei.du $vr19, $vr14, 26
+# CHECK-ENCODING: encoding: [0xd3,0xe9,0x85,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/sll.s b/llvm/test/MC/LoongArch/lsx/sll.s
new file mode 100644
index 00000000000000..e443abeef59ffe
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sll.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsll.b $vr31, $vr13, $vr5
+# CHECK-INST: vsll.b $vr31, $vr13, $vr5
+# CHECK-ENCODING: encoding: [0xbf,0x15,0xe8,0x70]
+
+vsll.h $vr31, $vr1, $vr4
+# CHECK-INST: vsll.h $vr31, $vr1, $vr4
+# CHECK-ENCODING: encoding: [0x3f,0x90,0xe8,0x70]
+
+vsll.w $vr8, $vr19, $vr19
+# CHECK-INST: vsll.w $vr8, $vr19, $vr19
+# CHECK-ENCODING: encoding: [0x68,0x4e,0xe9,0x70]
+
+vsll.d $vr6, $vr25, $vr6
+# CHECK-INST: vsll.d $vr6, $vr25, $vr6
+# CHECK-ENCODING: encoding: [0x26,0x9b,0xe9,0x70]
+
+vslli.b $vr6, $vr7, 2
+# CHECK-INST: vslli.b $vr6, $vr7, 2
+# CHECK-ENCODING: encoding: [0xe6,0x28,0x2c,0x73]
+
+vslli.h $vr6, $vr4, 10
+# CHECK-INST: vslli.h $vr6, $vr4, 10
+# CHECK-ENCODING: encoding: [0x86,0x68,0x2c,0x73]
+
+vslli.w $vr3, $vr13, 17
+# CHECK-INST: vslli.w $vr3, $vr13, 17
+# CHECK-ENCODING: encoding: [0xa3,0xc5,0x2c,0x73]
+
+vslli.d $vr24, $vr11, 38
+# CHECK-INST: vslli.d $vr24, $vr11, 38
+# CHECK-ENCODING: encoding: [0x78,0x99,0x2d,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/sllwil.s b/llvm/test/MC/LoongArch/lsx/sllwil.s
new file mode 100644
index 00000000000000..3aec8d63ab2426
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sllwil.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsllwil.h.b $vr7, $vr6, 3
+# CHECK-INST: vsllwil.h.b $vr7, $vr6, 3
+# CHECK-ENCODING: encoding: [0xc7,0x2c,0x08,0x73]
+
+vsllwil.w.h $vr6, $vr5, 8
+# CHECK-INST: vsllwil.w.h $vr6, $vr5, 8
+# CHECK-ENCODING: encoding: [0xa6,0x60,0x08,0x73]
+
+vsllwil.d.w $vr15, $vr1, 22
+# CHECK-INST: vsllwil.d.w $vr15, $vr1, 22
+# CHECK-ENCODING: encoding: [0x2f,0xd8,0x08,0x73]
+
+vsllwil.hu.bu $vr13, $vr4, 4
+# CHECK-INST: vsllwil.hu.bu $vr13, $vr4, 4
+# CHECK-ENCODING: encoding: [0x8d,0x30,0x0c,0x73]
+
+vsllwil.wu.hu $vr1, $vr4, 3
+# CHECK-INST: vsllwil.wu.hu $vr1, $vr4, 3
+# CHECK-ENCODING: encoding: [0x81,0x4c,0x0c,0x73]
+
+vsllwil.du.wu $vr18, $vr29, 25
+# CHECK-INST: vsllwil.du.wu $vr18, $vr29, 25
+# CHECK-ENCODING: encoding: [0xb2,0xe7,0x0c,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/slt.s b/llvm/test/MC/LoongArch/lsx/slt.s
new file mode 100644
index 00000000000000..86034324d3d599
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/slt.s
@@ -0,0 +1,68 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vslt.b $vr24, $vr23, $vr26
+# CHECK-INST: vslt.b $vr24, $vr23, $vr26
+# CHECK-ENCODING: encoding: [0xf8,0x6a,0x06,0x70]
+
+vslt.h $vr23, $vr4, $vr6
+# CHECK-INST: vslt.h $vr23, $vr4, $vr6
+# CHECK-ENCODING: encoding: [0x97,0x98,0x06,0x70]
+
+vslt.w $vr30, $vr25, $vr1
+# CHECK-INST: vslt.w $vr30, $vr25, $vr1
+# CHECK-ENCODING: encoding: [0x3e,0x07,0x07,0x70]
+
+vslt.d $vr25, $vr22, $vr15
+# CHECK-INST: vslt.d $vr25, $vr22, $vr15
+# CHECK-ENCODING: encoding: [0xd9,0xbe,0x07,0x70]
+
+vslti.b $vr11, $vr12, -10
+# CHECK-INST: vslti.b $vr11, $vr12, -10
+# CHECK-ENCODING: encoding: [0x8b,0x59,0x86,0x72]
+
+vslti.h $vr20, $vr12, -8
+# CHECK-INST: vslti.h $vr20, $vr12, -8
+# CHECK-ENCODING: encoding: [0x94,0xe1,0x86,0x72]
+
+vslti.w $vr20, $vr27, 0
+# CHECK-INST: vslti.w $vr20, $vr27, 0
+# CHECK-ENCODING: encoding: [0x74,0x03,0x87,0x72]
+
+vslti.d $vr19, $vr18, 4
+# CHECK-INST: vslti.d $vr19, $vr18, 4
+# CHECK-ENCODING: encoding: [0x53,0x92,0x87,0x72]
+
+vslt.bu $vr5, $vr30, $vr28
+# CHECK-INST: vslt.bu $vr5, $vr30, $vr28
+# CHECK-ENCODING: encoding: [0xc5,0x73,0x08,0x70]
+
+vslt.hu $vr13, $vr28, $vr23
+# CHECK-INST: vslt.hu $vr13, $vr28, $vr23
+# CHECK-ENCODING: encoding: [0x8d,0xdf,0x08,0x70]
+
+vslt.wu $vr20, $vr28, $vr1
+# CHECK-INST: vslt.wu $vr20, $vr28, $vr1
+# CHECK-ENCODING: encoding: [0x94,0x07,0x09,0x70]
+
+vslt.du $vr6, $vr6, $vr5
+# CHECK-INST: vslt.du $vr6, $vr6, $vr5
+# CHECK-ENCODING: encoding: [0xc6,0x94,0x09,0x70]
+
+vslti.bu $vr9, $vr29, 23
+# CHECK-INST: vslti.bu $vr9, $vr29, 23
+# CHECK-ENCODING: encoding: [0xa9,0x5f,0x88,0x72]
+
+vslti.hu $vr28, $vr13, 6
+# CHECK-INST: vslti.hu $vr28, $vr13, 6
+# CHECK-ENCODING: encoding: [0xbc,0x99,0x88,0x72]
+
+vslti.wu $vr11, $vr9, 12
+# CHECK-INST: vslti.wu $vr11, $vr9, 12
+# CHECK-ENCODING: encoding: [0x2b,0x31,0x89,0x72]
+
+vslti.du $vr23, $vr30, 21
+# CHECK-INST: vslti.du $vr23, $vr30, 21
+# CHECK-ENCODING: encoding: [0xd7,0xd7,0x89,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/sra.s b/llvm/test/MC/LoongArch/lsx/sra.s
new file mode 100644
index 00000000000000..3220a4159c53ea
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sra.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsra.b $vr30, $vr9, $vr11
+# CHECK-INST: vsra.b $vr30, $vr9, $vr11
+# CHECK-ENCODING: encoding: [0x3e,0x2d,0xec,0x70]
+
+vsra.h $vr20, $vr17, $vr26
+# CHECK-INST: vsra.h $vr20, $vr17, $vr26
+# CHECK-ENCODING: encoding: [0x34,0xea,0xec,0x70]
+
+vsra.w $vr12, $vr21, $vr15
+# CHECK-INST: vsra.w $vr12, $vr21, $vr15
+# CHECK-ENCODING: encoding: [0xac,0x3e,0xed,0x70]
+
+vsra.d $vr8, $vr8, $vr11
+# CHECK-INST: vsra.d $vr8, $vr8, $vr11
+# CHECK-ENCODING: encoding: [0x08,0xad,0xed,0x70]
+
+vsrai.b $vr9, $vr0, 4
+# CHECK-INST: vsrai.b $vr9, $vr0, 4
+# CHECK-ENCODING: encoding: [0x09,0x30,0x34,0x73]
+
+vsrai.h $vr1, $vr8, 6
+# CHECK-INST: vsrai.h $vr1, $vr8, 6
+# CHECK-ENCODING: encoding: [0x01,0x59,0x34,0x73]
+
+vsrai.w $vr20, $vr30, 14
+# CHECK-INST: vsrai.w $vr20, $vr30, 14
+# CHECK-ENCODING: encoding: [0xd4,0xbb,0x34,0x73]
+
+vsrai.d $vr0, $vr21, 12
+# CHECK-INST: vsrai.d $vr0, $vr21, 12
+# CHECK-ENCODING: encoding: [0xa0,0x32,0x35,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/sran.s b/llvm/test/MC/LoongArch/lsx/sran.s
new file mode 100644
index 00000000000000..595a5be90dacc3
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sran.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsran.b.h $vr25, $vr2, $vr31
+# CHECK-INST: vsran.b.h $vr25, $vr2, $vr31
+# CHECK-ENCODING: encoding: [0x59,0xfc,0xf6,0x70]
+
+vsran.h.w $vr31, $vr10, $vr3
+# CHECK-INST: vsran.h.w $vr31, $vr10, $vr3
+# CHECK-ENCODING: encoding: [0x5f,0x0d,0xf7,0x70]
+
+vsran.w.d $vr8, $vr3, $vr12
+# CHECK-INST: vsran.w.d $vr8, $vr3, $vr12
+# CHECK-ENCODING: encoding: [0x68,0xb0,0xf7,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/srani.s b/llvm/test/MC/LoongArch/lsx/srani.s
new file mode 100644
index 00000000000000..f28d7280735952
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srani.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrani.b.h $vr3, $vr0, 9
+# CHECK-INST: vsrani.b.h $vr3, $vr0, 9
+# CHECK-ENCODING: encoding: [0x03,0x64,0x58,0x73]
+
+vsrani.h.w $vr4, $vr3, 26
+# CHECK-INST: vsrani.h.w $vr4, $vr3, 26
+# CHECK-ENCODING: encoding: [0x64,0xe8,0x58,0x73]
+
+vsrani.w.d $vr8, $vr27, 52
+# CHECK-INST: vsrani.w.d $vr8, $vr27, 52
+# CHECK-ENCODING: encoding: [0x68,0xd3,0x59,0x73]
+
+vsrani.d.q $vr21, $vr24, 28
+# CHECK-INST: vsrani.d.q $vr21, $vr24, 28
+# CHECK-ENCODING: encoding: [0x15,0x73,0x5a,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/srar.s b/llvm/test/MC/LoongArch/lsx/srar.s
new file mode 100644
index 00000000000000..b62bda2030eabf
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srar.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrar.b $vr5, $vr31, $vr9
+# CHECK-INST: vsrar.b $vr5, $vr31, $vr9
+# CHECK-ENCODING: encoding: [0xe5,0x27,0xf2,0x70]
+
+vsrar.h $vr30, $vr23, $vr30
+# CHECK-INST: vsrar.h $vr30, $vr23, $vr30
+# CHECK-ENCODING: encoding: [0xfe,0xfa,0xf2,0x70]
+
+vsrar.w $vr22, $vr8, $vr1
+# CHECK-INST: vsrar.w $vr22, $vr8, $vr1
+# CHECK-ENCODING: encoding: [0x16,0x05,0xf3,0x70]
+
+vsrar.d $vr17, $vr1, $vr5
+# CHECK-INST: vsrar.d $vr17, $vr1, $vr5
+# CHECK-ENCODING: encoding: [0x31,0x94,0xf3,0x70]
+
+vsrari.b $vr11, $vr24, 5
+# CHECK-INST: vsrari.b $vr11, $vr24, 5
+# CHECK-ENCODING: encoding: [0x0b,0x37,0xa8,0x72]
+
+vsrari.h $vr24, $vr0, 7
+# CHECK-INST: vsrari.h $vr24, $vr0, 7
+# CHECK-ENCODING: encoding: [0x18,0x5c,0xa8,0x72]
+
+vsrari.w $vr16, $vr0, 0
+# CHECK-INST: vsrari.w $vr16, $vr0, 0
+# CHECK-ENCODING: encoding: [0x10,0x80,0xa8,0x72]
+
+vsrari.d $vr16, $vr13, 63
+# CHECK-INST: vsrari.d $vr16, $vr13, 63
+# CHECK-ENCODING: encoding: [0xb0,0xfd,0xa9,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/srarn.s b/llvm/test/MC/LoongArch/lsx/srarn.s
new file mode 100644
index 00000000000000..665f722d67937f
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srarn.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrarn.b.h $vr19, $vr23, $vr21
+# CHECK-INST: vsrarn.b.h $vr19, $vr23, $vr21
+# CHECK-ENCODING: encoding: [0xf3,0xd6,0xfa,0x70]
+
+vsrarn.h.w $vr18, $vr6, $vr7
+# CHECK-INST: vsrarn.h.w $vr18, $vr6, $vr7
+# CHECK-ENCODING: encoding: [0xd2,0x1c,0xfb,0x70]
+
+vsrarn.w.d $vr2, $vr11, $vr5
+# CHECK-INST: vsrarn.w.d $vr2, $vr11, $vr5
+# CHECK-ENCODING: encoding: [0x62,0x95,0xfb,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/srarni.s b/llvm/test/MC/LoongArch/lsx/srarni.s
new file mode 100644
index 00000000000000..356d071a6e919c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srarni.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrarni.b.h $vr29, $vr20, 5
+# CHECK-INST: vsrarni.b.h $vr29, $vr20, 5
+# CHECK-ENCODING: encoding: [0x9d,0x56,0x5c,0x73]
+
+vsrarni.h.w $vr3, $vr29, 14
+# CHECK-INST: vsrarni.h.w $vr3, $vr29, 14
+# CHECK-ENCODING: encoding: [0xa3,0xbb,0x5c,0x73]
+
+vsrarni.w.d $vr14, $vr19, 10
+# CHECK-INST: vsrarni.w.d $vr14, $vr19, 10
+# CHECK-ENCODING: encoding: [0x6e,0x2a,0x5d,0x73]
+
+vsrarni.d.q $vr22, $vr27, 38
+# CHECK-INST: vsrarni.d.q $vr22, $vr27, 38
+# CHECK-ENCODING: encoding: [0x76,0x9b,0x5e,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/srl.s b/llvm/test/MC/LoongArch/lsx/srl.s
new file mode 100644
index 00000000000000..d6d806bfb12a4a
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srl.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrl.b $vr20, $vr7, $vr27
+# CHECK-INST: vsrl.b $vr20, $vr7, $vr27
+# CHECK-ENCODING: encoding: [0xf4,0x6c,0xea,0x70]
+
+vsrl.h $vr31, $vr5, $vr31
+# CHECK-INST: vsrl.h $vr31, $vr5, $vr31
+# CHECK-ENCODING: encoding: [0xbf,0xfc,0xea,0x70]
+
+vsrl.w $vr31, $vr0, $vr6
+# CHECK-INST: vsrl.w $vr31, $vr0, $vr6
+# CHECK-ENCODING: encoding: [0x1f,0x18,0xeb,0x70]
+
+vsrl.d $vr6, $vr8, $vr7
+# CHECK-INST: vsrl.d $vr6, $vr8, $vr7
+# CHECK-ENCODING: encoding: [0x06,0x9d,0xeb,0x70]
+
+vsrli.b $vr17, $vr8, 6
+# CHECK-INST: vsrli.b $vr17, $vr8, 6
+# CHECK-ENCODING: encoding: [0x11,0x39,0x30,0x73]
+
+vsrli.h $vr3, $vr31, 2
+# CHECK-INST: vsrli.h $vr3, $vr31, 2
+# CHECK-ENCODING: encoding: [0xe3,0x4b,0x30,0x73]
+
+vsrli.w $vr17, $vr5, 0
+# CHECK-INST: vsrli.w $vr17, $vr5, 0
+# CHECK-ENCODING: encoding: [0xb1,0x80,0x30,0x73]
+
+vsrli.d $vr16, $vr22, 34
+# CHECK-INST: vsrli.d $vr16, $vr22, 34
+# CHECK-ENCODING: encoding: [0xd0,0x8a,0x31,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/srln.s b/llvm/test/MC/LoongArch/lsx/srln.s
new file mode 100644
index 00000000000000..55b1f1b921a181
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srln.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrln.b.h $vr29, $vr28, $vr27
+# CHECK-INST: vsrln.b.h $vr29, $vr28, $vr27
+# CHECK-ENCODING: encoding: [0x9d,0xef,0xf4,0x70]
+
+vsrln.h.w $vr18, $vr17, $vr0
+# CHECK-INST: vsrln.h.w $vr18, $vr17, $vr0
+# CHECK-ENCODING: encoding: [0x32,0x02,0xf5,0x70]
+
+vsrln.w.d $vr16, $vr5, $vr19
+# CHECK-INST: vsrln.w.d $vr16, $vr5, $vr19
+# CHECK-ENCODING: encoding: [0xb0,0xcc,0xf5,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/srlni.s b/llvm/test/MC/LoongArch/lsx/srlni.s
new file mode 100644
index 00000000000000..97c7831e8568e3
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srlni.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrlni.b.h $vr15, $vr25, 9
+# CHECK-INST: vsrlni.b.h $vr15, $vr25, 9
+# CHECK-ENCODING: encoding: [0x2f,0x67,0x40,0x73]
+
+vsrlni.h.w $vr3, $vr0, 8
+# CHECK-INST: vsrlni.h.w $vr3, $vr0, 8
+# CHECK-ENCODING: encoding: [0x03,0xa0,0x40,0x73]
+
+vsrlni.w.d $vr19, $vr26, 51
+# CHECK-INST: vsrlni.w.d $vr19, $vr26, 51
+# CHECK-ENCODING: encoding: [0x53,0xcf,0x41,0x73]
+
+vsrlni.d.q $vr10, $vr18, 60
+# CHECK-INST: vsrlni.d.q $vr10, $vr18, 60
+# CHECK-ENCODING: encoding: [0x4a,0xf2,0x42,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/srlr.s b/llvm/test/MC/LoongArch/lsx/srlr.s
new file mode 100644
index 00000000000000..b78c178b5db8e7
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srlr.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrlr.b $vr27, $vr1, $vr6
+# CHECK-INST: vsrlr.b $vr27, $vr1, $vr6
+# CHECK-ENCODING: encoding: [0x3b,0x18,0xf0,0x70]
+
+vsrlr.h $vr31, $vr18, $vr2
+# CHECK-INST: vsrlr.h $vr31, $vr18, $vr2
+# CHECK-ENCODING: encoding: [0x5f,0x8a,0xf0,0x70]
+
+vsrlr.w $vr21, $vr29, $vr30
+# CHECK-INST: vsrlr.w $vr21, $vr29, $vr30
+# CHECK-ENCODING: encoding: [0xb5,0x7b,0xf1,0x70]
+
+vsrlr.d $vr4, $vr3, $vr30
+# CHECK-INST: vsrlr.d $vr4, $vr3, $vr30
+# CHECK-ENCODING: encoding: [0x64,0xf8,0xf1,0x70]
+
+vsrlri.b $vr20, $vr24, 6
+# CHECK-INST: vsrlri.b $vr20, $vr24, 6
+# CHECK-ENCODING: encoding: [0x14,0x3b,0xa4,0x72]
+
+vsrlri.h $vr23, $vr22, 4
+# CHECK-INST: vsrlri.h $vr23, $vr22, 4
+# CHECK-ENCODING: encoding: [0xd7,0x52,0xa4,0x72]
+
+vsrlri.w $vr19, $vr8, 1
+# CHECK-INST: vsrlri.w $vr19, $vr8, 1
+# CHECK-ENCODING: encoding: [0x13,0x85,0xa4,0x72]
+
+vsrlri.d $vr18, $vr30, 51
+# CHECK-INST: vsrlri.d $vr18, $vr30, 51
+# CHECK-ENCODING: encoding: [0xd2,0xcf,0xa5,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/srlrn.s b/llvm/test/MC/LoongArch/lsx/srlrn.s
new file mode 100644
index 00000000000000..a00cc80df7cfc0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srlrn.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrlrn.b.h $vr10, $vr18, $vr11
+# CHECK-INST: vsrlrn.b.h $vr10, $vr18, $vr11
+# CHECK-ENCODING: encoding: [0x4a,0xae,0xf8,0x70]
+
+vsrlrn.h.w $vr28, $vr15, $vr22
+# CHECK-INST: vsrlrn.h.w $vr28, $vr15, $vr22
+# CHECK-ENCODING: encoding: [0xfc,0x59,0xf9,0x70]
+
+vsrlrn.w.d $vr19, $vr7, $vr26
+# CHECK-INST: vsrlrn.w.d $vr19, $vr7, $vr26
+# CHECK-ENCODING: encoding: [0xf3,0xe8,0xf9,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/srlrni.s b/llvm/test/MC/LoongArch/lsx/srlrni.s
new file mode 100644
index 00000000000000..361914b44574cc
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/srlrni.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsrlrni.b.h $vr15, $vr5, 3
+# CHECK-INST: vsrlrni.b.h $vr15, $vr5, 3
+# CHECK-ENCODING: encoding: [0xaf,0x4c,0x44,0x73]
+
+vsrlrni.h.w $vr28, $vr27, 1
+# CHECK-INST: vsrlrni.h.w $vr28, $vr27, 1
+# CHECK-ENCODING: encoding: [0x7c,0x87,0x44,0x73]
+
+vsrlrni.w.d $vr3, $vr25, 56
+# CHECK-INST: vsrlrni.w.d $vr3, $vr25, 56
+# CHECK-ENCODING: encoding: [0x23,0xe3,0x45,0x73]
+
+vsrlrni.d.q $vr4, $vr16, 13
+# CHECK-INST: vsrlrni.d.q $vr4, $vr16, 13
+# CHECK-ENCODING: encoding: [0x04,0x36,0x46,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssran.s b/llvm/test/MC/LoongArch/lsx/ssran.s
new file mode 100644
index 00000000000000..fefbd29a2b64d9
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssran.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssran.b.h $vr26, $vr26, $vr18
+# CHECK-INST: vssran.b.h $vr26, $vr26, $vr18
+# CHECK-ENCODING: encoding: [0x5a,0xcb,0xfe,0x70]
+
+vssran.h.w $vr21, $vr14, $vr11
+# CHECK-INST: vssran.h.w $vr21, $vr14, $vr11
+# CHECK-ENCODING: encoding: [0xd5,0x2d,0xff,0x70]
+
+vssran.w.d $vr4, $vr21, $vr11
+# CHECK-INST: vssran.w.d $vr4, $vr21, $vr11
+# CHECK-ENCODING: encoding: [0xa4,0xae,0xff,0x70]
+
+vssran.bu.h $vr10, $vr30, $vr19
+# CHECK-INST: vssran.bu.h $vr10, $vr30, $vr19
+# CHECK-ENCODING: encoding: [0xca,0xcf,0x06,0x71]
+
+vssran.hu.w $vr7, $vr8, $vr20
+# CHECK-INST: vssran.hu.w $vr7, $vr8, $vr20
+# CHECK-ENCODING: encoding: [0x07,0x51,0x07,0x71]
+
+vssran.wu.d $vr10, $vr21, $vr0
+# CHECK-INST: vssran.wu.d $vr10, $vr21, $vr0
+# CHECK-ENCODING: encoding: [0xaa,0x82,0x07,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrani.s b/llvm/test/MC/LoongArch/lsx/ssrani.s
new file mode 100644
index 00000000000000..20ac1cbad35c15
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrani.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrani.b.h $vr3, $vr12, 10
+# CHECK-INST: vssrani.b.h $vr3, $vr12, 10
+# CHECK-ENCODING: encoding: [0x83,0x69,0x60,0x73]
+
+vssrani.h.w $vr3, $vr25, 0
+# CHECK-INST: vssrani.h.w $vr3, $vr25, 0
+# CHECK-ENCODING: encoding: [0x23,0x83,0x60,0x73]
+
+vssrani.w.d $vr12, $vr19, 43
+# CHECK-INST: vssrani.w.d $vr12, $vr19, 43
+# CHECK-ENCODING: encoding: [0x6c,0xae,0x61,0x73]
+
+vssrani.d.q $vr25, $vr8, 13
+# CHECK-INST: vssrani.d.q $vr25, $vr8, 13
+# CHECK-ENCODING: encoding: [0x19,0x35,0x62,0x73]
+
+vssrani.bu.h $vr26, $vr16, 12
+# CHECK-INST: vssrani.bu.h $vr26, $vr16, 12
+# CHECK-ENCODING: encoding: [0x1a,0x72,0x64,0x73]
+
+vssrani.hu.w $vr31, $vr6, 28
+# CHECK-INST: vssrani.hu.w $vr31, $vr6, 28
+# CHECK-ENCODING: encoding: [0xdf,0xf0,0x64,0x73]
+
+vssrani.wu.d $vr29, $vr25, 2
+# CHECK-INST: vssrani.wu.d $vr29, $vr25, 2
+# CHECK-ENCODING: encoding: [0x3d,0x0b,0x65,0x73]
+
+vssrani.du.q $vr22, $vr27, 71
+# CHECK-INST: vssrani.du.q $vr22, $vr27, 71
+# CHECK-ENCODING: encoding: [0x76,0x1f,0x67,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrarn.s b/llvm/test/MC/LoongArch/lsx/ssrarn.s
new file mode 100644
index 00000000000000..8157423b255c73
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrarn.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrarn.b.h $vr27, $vr29, $vr23
+# CHECK-INST: vssrarn.b.h $vr27, $vr29, $vr23
+# CHECK-ENCODING: encoding: [0xbb,0xdf,0x02,0x71]
+
+vssrarn.h.w $vr13, $vr17, $vr0
+# CHECK-INST: vssrarn.h.w $vr13, $vr17, $vr0
+# CHECK-ENCODING: encoding: [0x2d,0x02,0x03,0x71]
+
+vssrarn.w.d $vr5, $vr11, $vr16
+# CHECK-INST: vssrarn.w.d $vr5, $vr11, $vr16
+# CHECK-ENCODING: encoding: [0x65,0xc1,0x03,0x71]
+
+vssrarn.bu.h $vr18, $vr10, $vr13
+# CHECK-INST: vssrarn.bu.h $vr18, $vr10, $vr13
+# CHECK-ENCODING: encoding: [0x52,0xb5,0x0a,0x71]
+
+vssrarn.hu.w $vr5, $vr25, $vr16
+# CHECK-INST: vssrarn.hu.w $vr5, $vr25, $vr16
+# CHECK-ENCODING: encoding: [0x25,0x43,0x0b,0x71]
+
+vssrarn.wu.d $vr6, $vr23, $vr30
+# CHECK-INST: vssrarn.wu.d $vr6, $vr23, $vr30
+# CHECK-ENCODING: encoding: [0xe6,0xfa,0x0b,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrarni.s b/llvm/test/MC/LoongArch/lsx/ssrarni.s
new file mode 100644
index 00000000000000..9a33f67110a3a3
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrarni.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrarni.b.h $vr3, $vr9, 2
+# CHECK-INST: vssrarni.b.h $vr3, $vr9, 2
+# CHECK-ENCODING: encoding: [0x23,0x49,0x68,0x73]
+
+vssrarni.h.w $vr21, $vr17, 8
+# CHECK-INST: vssrarni.h.w $vr21, $vr17, 8
+# CHECK-ENCODING: encoding: [0x35,0xa2,0x68,0x73]
+
+vssrarni.w.d $vr7, $vr6, 5
+# CHECK-INST: vssrarni.w.d $vr7, $vr6, 5
+# CHECK-ENCODING: encoding: [0xc7,0x14,0x69,0x73]
+
+vssrarni.d.q $vr4, $vr22, 90
+# CHECK-INST: vssrarni.d.q $vr4, $vr22, 90
+# CHECK-ENCODING: encoding: [0xc4,0x6a,0x6b,0x73]
+
+vssrarni.bu.h $vr25, $vr0, 9
+# CHECK-INST: vssrarni.bu.h $vr25, $vr0, 9
+# CHECK-ENCODING: encoding: [0x19,0x64,0x6c,0x73]
+
+vssrarni.hu.w $vr5, $vr2, 24
+# CHECK-INST: vssrarni.hu.w $vr5, $vr2, 24
+# CHECK-ENCODING: encoding: [0x45,0xe0,0x6c,0x73]
+
+vssrarni.wu.d $vr23, $vr29, 25
+# CHECK-INST: vssrarni.wu.d $vr23, $vr29, 25
+# CHECK-ENCODING: encoding: [0xb7,0x67,0x6d,0x73]
+
+vssrarni.du.q $vr2, $vr12, 106
+# CHECK-INST: vssrarni.du.q $vr2, $vr12, 106
+# CHECK-ENCODING: encoding: [0x82,0xa9,0x6f,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrln.s b/llvm/test/MC/LoongArch/lsx/ssrln.s
new file mode 100644
index 00000000000000..1b00e3b5432243
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrln.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrln.b.h $vr20, $vr5, $vr20
+# CHECK-INST: vssrln.b.h $vr20, $vr5, $vr20
+# CHECK-ENCODING: encoding: [0xb4,0xd0,0xfc,0x70]
+
+vssrln.h.w $vr0, $vr21, $vr2
+# CHECK-INST: vssrln.h.w $vr0, $vr21, $vr2
+# CHECK-ENCODING: encoding: [0xa0,0x0a,0xfd,0x70]
+
+vssrln.w.d $vr16, $vr6, $vr3
+# CHECK-INST: vssrln.w.d $vr16, $vr6, $vr3
+# CHECK-ENCODING: encoding: [0xd0,0x8c,0xfd,0x70]
+
+vssrln.bu.h $vr6, $vr30, $vr9
+# CHECK-INST: vssrln.bu.h $vr6, $vr30, $vr9
+# CHECK-ENCODING: encoding: [0xc6,0xa7,0x04,0x71]
+
+vssrln.hu.w $vr2, $vr8, $vr3
+# CHECK-INST: vssrln.hu.w $vr2, $vr8, $vr3
+# CHECK-ENCODING: encoding: [0x02,0x0d,0x05,0x71]
+
+vssrln.wu.d $vr28, $vr28, $vr5
+# CHECK-INST: vssrln.wu.d $vr28, $vr28, $vr5
+# CHECK-ENCODING: encoding: [0x9c,0x97,0x05,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrlni.s b/llvm/test/MC/LoongArch/lsx/ssrlni.s
new file mode 100644
index 00000000000000..eb630b3d61a07c
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrlni.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrlni.b.h $vr2, $vr23, 5
+# CHECK-INST: vssrlni.b.h $vr2, $vr23, 5
+# CHECK-ENCODING: encoding: [0xe2,0x56,0x48,0x73]
+
+vssrlni.h.w $vr15, $vr20, 12
+# CHECK-INST: vssrlni.h.w $vr15, $vr20, 12
+# CHECK-ENCODING: encoding: [0x8f,0xb2,0x48,0x73]
+
+vssrlni.w.d $vr27, $vr9, 7
+# CHECK-INST: vssrlni.w.d $vr27, $vr9, 7
+# CHECK-ENCODING: encoding: [0x3b,0x1d,0x49,0x73]
+
+vssrlni.d.q $vr10, $vr2, 4
+# CHECK-INST: vssrlni.d.q $vr10, $vr2, 4
+# CHECK-ENCODING: encoding: [0x4a,0x10,0x4a,0x73]
+
+vssrlni.bu.h $vr19, $vr3, 2
+# CHECK-INST: vssrlni.bu.h $vr19, $vr3, 2
+# CHECK-ENCODING: encoding: [0x73,0x48,0x4c,0x73]
+
+vssrlni.hu.w $vr31, $vr19, 1
+# CHECK-INST: vssrlni.hu.w $vr31, $vr19, 1
+# CHECK-ENCODING: encoding: [0x7f,0x86,0x4c,0x73]
+
+vssrlni.wu.d $vr13, $vr27, 6
+# CHECK-INST: vssrlni.wu.d $vr13, $vr27, 6
+# CHECK-ENCODING: encoding: [0x6d,0x1b,0x4d,0x73]
+
+vssrlni.du.q $vr11, $vr30, 32
+# CHECK-INST: vssrlni.du.q $vr11, $vr30, 32
+# CHECK-ENCODING: encoding: [0xcb,0x83,0x4e,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrlrn.s b/llvm/test/MC/LoongArch/lsx/ssrlrn.s
new file mode 100644
index 00000000000000..e0eeb3ac2afc06
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrlrn.s
@@ -0,0 +1,28 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrlrn.b.h $vr28, $vr3, $vr15
+# CHECK-INST: vssrlrn.b.h $vr28, $vr3, $vr15
+# CHECK-ENCODING: encoding: [0x7c,0xbc,0x00,0x71]
+
+vssrlrn.h.w $vr22, $vr0, $vr9
+# CHECK-INST: vssrlrn.h.w $vr22, $vr0, $vr9
+# CHECK-ENCODING: encoding: [0x16,0x24,0x01,0x71]
+
+vssrlrn.w.d $vr6, $vr14, $vr21
+# CHECK-INST: vssrlrn.w.d $vr6, $vr14, $vr21
+# CHECK-ENCODING: encoding: [0xc6,0xd5,0x01,0x71]
+
+vssrlrn.bu.h $vr10, $vr24, $vr12
+# CHECK-INST: vssrlrn.bu.h $vr10, $vr24, $vr12
+# CHECK-ENCODING: encoding: [0x0a,0xb3,0x08,0x71]
+
+vssrlrn.hu.w $vr29, $vr6, $vr1
+# CHECK-INST: vssrlrn.hu.w $vr29, $vr6, $vr1
+# CHECK-ENCODING: encoding: [0xdd,0x04,0x09,0x71]
+
+vssrlrn.wu.d $vr2, $vr23, $vr7
+# CHECK-INST: vssrlrn.wu.d $vr2, $vr23, $vr7
+# CHECK-ENCODING: encoding: [0xe2,0x9e,0x09,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssrlrni.s b/llvm/test/MC/LoongArch/lsx/ssrlrni.s
new file mode 100644
index 00000000000000..3c5c25fdab5405
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssrlrni.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssrlrni.b.h $vr18, $vr21, 6
+# CHECK-INST: vssrlrni.b.h $vr18, $vr21, 6
+# CHECK-ENCODING: encoding: [0xb2,0x5a,0x50,0x73]
+
+vssrlrni.h.w $vr7, $vr12, 9
+# CHECK-INST: vssrlrni.h.w $vr7, $vr12, 9
+# CHECK-ENCODING: encoding: [0x87,0xa5,0x50,0x73]
+
+vssrlrni.w.d $vr10, $vr14, 63
+# CHECK-INST: vssrlrni.w.d $vr10, $vr14, 63
+# CHECK-ENCODING: encoding: [0xca,0xfd,0x51,0x73]
+
+vssrlrni.d.q $vr12, $vr26, 68
+# CHECK-INST: vssrlrni.d.q $vr12, $vr26, 68
+# CHECK-ENCODING: encoding: [0x4c,0x13,0x53,0x73]
+
+vssrlrni.bu.h $vr22, $vr24, 1
+# CHECK-INST: vssrlrni.bu.h $vr22, $vr24, 1
+# CHECK-ENCODING: encoding: [0x16,0x47,0x54,0x73]
+
+vssrlrni.hu.w $vr27, $vr17, 7
+# CHECK-INST: vssrlrni.hu.w $vr27, $vr17, 7
+# CHECK-ENCODING: encoding: [0x3b,0x9e,0x54,0x73]
+
+vssrlrni.wu.d $vr3, $vr15, 56
+# CHECK-INST: vssrlrni.wu.d $vr3, $vr15, 56
+# CHECK-ENCODING: encoding: [0xe3,0xe1,0x55,0x73]
+
+vssrlrni.du.q $vr12, $vr10, 4
+# CHECK-INST: vssrlrni.du.q $vr12, $vr10, 4
+# CHECK-ENCODING: encoding: [0x4c,0x11,0x56,0x73]

diff  --git a/llvm/test/MC/LoongArch/lsx/ssub.s b/llvm/test/MC/LoongArch/lsx/ssub.s
new file mode 100644
index 00000000000000..603d26a05ccf38
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/ssub.s
@@ -0,0 +1,36 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vssub.b $vr10, $vr10, $vr11
+# CHECK-INST: vssub.b $vr10, $vr10, $vr11
+# CHECK-ENCODING: encoding: [0x4a,0x2d,0x48,0x70]
+
+vssub.h $vr2, $vr18, $vr5
+# CHECK-INST: vssub.h $vr2, $vr18, $vr5
+# CHECK-ENCODING: encoding: [0x42,0x96,0x48,0x70]
+
+vssub.w $vr28, $vr10, $vr2
+# CHECK-INST: vssub.w $vr28, $vr10, $vr2
+# CHECK-ENCODING: encoding: [0x5c,0x09,0x49,0x70]
+
+vssub.d $vr25, $vr3, $vr10
+# CHECK-INST: vssub.d $vr25, $vr3, $vr10
+# CHECK-ENCODING: encoding: [0x79,0xa8,0x49,0x70]
+
+vssub.bu $vr31, $vr13, $vr11
+# CHECK-INST: vssub.bu $vr31, $vr13, $vr11
+# CHECK-ENCODING: encoding: [0xbf,0x2d,0x4c,0x70]
+
+vssub.hu $vr15, $vr19, $vr9
+# CHECK-INST: vssub.hu $vr15, $vr19, $vr9
+# CHECK-ENCODING: encoding: [0x6f,0xa6,0x4c,0x70]
+
+vssub.wu $vr15, $vr12, $vr14
+# CHECK-INST: vssub.wu $vr15, $vr12, $vr14
+# CHECK-ENCODING: encoding: [0x8f,0x39,0x4d,0x70]
+
+vssub.du $vr29, $vr4, $vr11
+# CHECK-INST: vssub.du $vr29, $vr4, $vr11
+# CHECK-ENCODING: encoding: [0x9d,0xac,0x4d,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/st.s b/llvm/test/MC/LoongArch/lsx/st.s
new file mode 100644
index 00000000000000..e4e05aa2f3bbec
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/st.s
@@ -0,0 +1,12 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vst $vr9, $r17, 1700
+# CHECK-INST: vst $vr9, $t5, 1700
+# CHECK-ENCODING: encoding: [0x29,0x92,0x5a,0x2c]
+
+vstx $vr23, $r17, $r31
+# CHECK-INST: vstx $vr23, $t5, $s8
+# CHECK-ENCODING: encoding: [0x37,0x7e,0x44,0x38]

diff  --git a/llvm/test/MC/LoongArch/lsx/stelm.s b/llvm/test/MC/LoongArch/lsx/stelm.s
new file mode 100644
index 00000000000000..8935d99336f497
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/stelm.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vstelm.b $vr22, $r31, -90, 12
+# CHECK-INST: vstelm.b $vr22, $s8, -90, 12
+# CHECK-ENCODING: encoding: [0xf6,0x9b,0xb2,0x31]
+
+vstelm.h $vr28, $r2, 48, 7
+# CHECK-INST: vstelm.h $vr28, $tp, 48, 7
+# CHECK-ENCODING: encoding: [0x5c,0x60,0x5c,0x31]
+
+vstelm.w $vr18, $r12, -40, 2
+# CHECK-INST: vstelm.w $vr18, $t0, -40, 2
+# CHECK-ENCODING: encoding: [0x92,0xd9,0x2b,0x31]
+
+vstelm.d $vr4, $r23, -248, 1
+# CHECK-INST: vstelm.d $vr4, $s0, -248, 1
+# CHECK-ENCODING: encoding: [0xe4,0x86,0x17,0x31]

diff  --git a/llvm/test/MC/LoongArch/lsx/sub.s b/llvm/test/MC/LoongArch/lsx/sub.s
new file mode 100644
index 00000000000000..8f3c55a28a5808
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/sub.s
@@ -0,0 +1,24 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsub.b $vr7, $vr21, $vr25
+# CHECK-INST: vsub.b $vr7, $vr21, $vr25
+# CHECK-ENCODING: encoding: [0xa7,0x66,0x0c,0x70]
+
+vsub.h $vr23, $vr7, $vr4
+# CHECK-INST: vsub.h $vr23, $vr7, $vr4
+# CHECK-ENCODING: encoding: [0xf7,0x90,0x0c,0x70]
+
+vsub.w $vr28, $vr27, $vr25
+# CHECK-INST: vsub.w $vr28, $vr27, $vr25
+# CHECK-ENCODING: encoding: [0x7c,0x67,0x0d,0x70]
+
+vsub.d $vr27, $vr11, $vr20
+# CHECK-INST: vsub.d $vr27, $vr11, $vr20
+# CHECK-ENCODING: encoding: [0x7b,0xd1,0x0d,0x70]
+
+vsub.q $vr8, $vr11, $vr15
+# CHECK-INST: vsub.q $vr8, $vr11, $vr15
+# CHECK-ENCODING: encoding: [0x68,0xbd,0x2d,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/subi.s b/llvm/test/MC/LoongArch/lsx/subi.s
new file mode 100644
index 00000000000000..d26f306b713e83
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/subi.s
@@ -0,0 +1,20 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsubi.bu $vr21, $vr1, 16
+# CHECK-INST: vsubi.bu $vr21, $vr1, 16
+# CHECK-ENCODING: encoding: [0x35,0x40,0x8c,0x72]
+
+vsubi.hu $vr10, $vr24, 8
+# CHECK-INST: vsubi.hu $vr10, $vr24, 8
+# CHECK-ENCODING: encoding: [0x0a,0xa3,0x8c,0x72]
+
+vsubi.wu $vr10, $vr13, 8
+# CHECK-INST: vsubi.wu $vr10, $vr13, 8
+# CHECK-ENCODING: encoding: [0xaa,0x21,0x8d,0x72]
+
+vsubi.du $vr27, $vr0, 29
+# CHECK-INST: vsubi.du $vr27, $vr0, 29
+# CHECK-ENCODING: encoding: [0x1b,0xf4,0x8d,0x72]

diff  --git a/llvm/test/MC/LoongArch/lsx/subw.s b/llvm/test/MC/LoongArch/lsx/subw.s
new file mode 100644
index 00000000000000..49fc2a02e1a5fa
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/subw.s
@@ -0,0 +1,68 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vsubwev.h.b $vr21, $vr25, $vr20
+# CHECK-INST: vsubwev.h.b $vr21, $vr25, $vr20
+# CHECK-ENCODING: encoding: [0x35,0x53,0x20,0x70]
+
+vsubwev.w.h $vr11, $vr8, $vr10
+# CHECK-INST: vsubwev.w.h $vr11, $vr8, $vr10
+# CHECK-ENCODING: encoding: [0x0b,0xa9,0x20,0x70]
+
+vsubwev.d.w $vr30, $vr6, $vr24
+# CHECK-INST: vsubwev.d.w $vr30, $vr6, $vr24
+# CHECK-ENCODING: encoding: [0xde,0x60,0x21,0x70]
+
+vsubwev.q.d $vr4, $vr14, $vr23
+# CHECK-INST: vsubwev.q.d $vr4, $vr14, $vr23
+# CHECK-ENCODING: encoding: [0xc4,0xdd,0x21,0x70]
+
+vsubwev.h.bu $vr25, $vr20, $vr2
+# CHECK-INST: vsubwev.h.bu $vr25, $vr20, $vr2
+# CHECK-ENCODING: encoding: [0x99,0x0a,0x30,0x70]
+
+vsubwev.w.hu $vr1, $vr9, $vr28
+# CHECK-INST: vsubwev.w.hu $vr1, $vr9, $vr28
+# CHECK-ENCODING: encoding: [0x21,0xf1,0x30,0x70]
+
+vsubwev.d.wu $vr23, $vr13, $vr2
+# CHECK-INST: vsubwev.d.wu $vr23, $vr13, $vr2
+# CHECK-ENCODING: encoding: [0xb7,0x09,0x31,0x70]
+
+vsubwev.q.du $vr9, $vr28, $vr12
+# CHECK-INST: vsubwev.q.du $vr9, $vr28, $vr12
+# CHECK-ENCODING: encoding: [0x89,0xb3,0x31,0x70]
+
+vsubwod.h.b $vr9, $vr12, $vr26
+# CHECK-INST: vsubwod.h.b $vr9, $vr12, $vr26
+# CHECK-ENCODING: encoding: [0x89,0x69,0x24,0x70]
+
+vsubwod.w.h $vr31, $vr2, $vr10
+# CHECK-INST: vsubwod.w.h $vr31, $vr2, $vr10
+# CHECK-ENCODING: encoding: [0x5f,0xa8,0x24,0x70]
+
+vsubwod.d.w $vr6, $vr16, $vr15
+# CHECK-INST: vsubwod.d.w $vr6, $vr16, $vr15
+# CHECK-ENCODING: encoding: [0x06,0x3e,0x25,0x70]
+
+vsubwod.q.d $vr22, $vr0, $vr18
+# CHECK-INST: vsubwod.q.d $vr22, $vr0, $vr18
+# CHECK-ENCODING: encoding: [0x16,0xc8,0x25,0x70]
+
+vsubwod.h.bu $vr3, $vr17, $vr11
+# CHECK-INST: vsubwod.h.bu $vr3, $vr17, $vr11
+# CHECK-ENCODING: encoding: [0x23,0x2e,0x34,0x70]
+
+vsubwod.w.hu $vr9, $vr16, $vr26
+# CHECK-INST: vsubwod.w.hu $vr9, $vr16, $vr26
+# CHECK-ENCODING: encoding: [0x09,0xea,0x34,0x70]
+
+vsubwod.d.wu $vr23, $vr9, $vr8
+# CHECK-INST: vsubwod.d.wu $vr23, $vr9, $vr8
+# CHECK-ENCODING: encoding: [0x37,0x21,0x35,0x70]
+
+vsubwod.q.du $vr8, $vr15, $vr7
+# CHECK-INST: vsubwod.q.du $vr8, $vr15, $vr7
+# CHECK-ENCODING: encoding: [0xe8,0x9d,0x35,0x70]

diff  --git a/llvm/test/MC/LoongArch/lsx/xor.s b/llvm/test/MC/LoongArch/lsx/xor.s
new file mode 100644
index 00000000000000..4d8c6eedbf68e0
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/xor.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vxor.v $vr28, $vr16, $vr18
+# CHECK-INST: vxor.v $vr28, $vr16, $vr18
+# CHECK-ENCODING: encoding: [0x1c,0x4a,0x27,0x71]

diff  --git a/llvm/test/MC/LoongArch/lsx/xori.s b/llvm/test/MC/LoongArch/lsx/xori.s
new file mode 100644
index 00000000000000..c06fb2179e192d
--- /dev/null
+++ b/llvm/test/MC/LoongArch/lsx/xori.s
@@ -0,0 +1,8 @@
+# RUN: llvm-mc --triple=loongarch64 --show-encoding %s | \
+# RUN:        FileCheck %s --check-prefixes=CHECK-ENCODING,CHECK-INST
+# RUN: llvm-mc --triple=loongarch64 --filetype=obj %s | \
+# RUN:        llvm-objdump -d - | FileCheck %s --check-prefix=CHECK-INST
+
+vxori.b $vr13, $vr4, 74
+# CHECK-INST: vxori.b $vr13, $vr4, 74
+# CHECK-ENCODING: encoding: [0x8d,0x28,0xd9,0x73]


        


More information about the llvm-commits mailing list