[v1,3/4] LoongArch:Add vector multiplication arithmetic operation SX instruction.

Message ID 20230907071311.23302-3-chenxiaolong@loongson.cn
State Accepted
Headers
Series None |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

chenxiaolong Sept. 7, 2023, 7:13 a.m. UTC
  gcc/testsuite/ChangeLog:

	* gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmul.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c: New test.
	* gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c: New test.
---
 .../loongarch/vector/lsx/lsx-vmuh-1.c         | 352 ++++++++++++++
 .../loongarch/vector/lsx/lsx-vmuh-2.c         | 371 +++++++++++++++
 .../loongarch/vector/lsx/lsx-vmul.c           | 281 ++++++++++++
 .../loongarch/vector/lsx/lsx-vmulwev-1.c      | 433 ++++++++++++++++++
 .../loongarch/vector/lsx/lsx-vmulwev-2.c      | 343 ++++++++++++++
 .../loongarch/vector/lsx/lsx-vmulwev-3.c      | 244 ++++++++++
 .../loongarch/vector/lsx/lsx-vmulwod-1.c      | 271 +++++++++++
 .../loongarch/vector/lsx/lsx-vmulwod-2.c      | 281 ++++++++++++
 .../loongarch/vector/lsx/lsx-vmulwod-3.c      | 307 +++++++++++++
 9 files changed, 2883 insertions(+)
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c
 create mode 100644 gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c
  

Patch

diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c
new file mode 100644
index 00000000000..21d64bf18c2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-1.c
@@ -0,0 +1,352 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x059a35ef139a8e00;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x8080808080808080;
+  *((unsigned long*)& __m128i_op0[0]) = 0x8080808080808080;
+  *((unsigned long*)& __m128i_op1[1]) = 0x8080808080808080;
+  *((unsigned long*)& __m128i_op1[0]) = 0x8080808080808080;
+  *((unsigned long*)& __m128i_result[1]) = 0x4040404040404040;
+  *((unsigned long*)& __m128i_result[0]) = 0x4040404040404040;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xc0c00000c0c00000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc0c00c01c2cd0009;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000800;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000000000ffff;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc0fffff000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffe00000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffff0000ac26;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00ff000000000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000ffffff81fe;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffff00ffff7e01;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000fffe01fd02;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000ffff0000fe86;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7f7f7f7f7f7f7f7f;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7f7f7f7f7f7f7f7f;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xff8000010f800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xff800000ff800000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xff800000ff800000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000fff80000;
+  __m128i_out = __lsx_vmuh_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xbf3efff536d5169b;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7ebdfffffddf3f40;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff7fff7fff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x3f5ec0a0feefa0b0;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7ffffffe;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7fffffff7ffffffe;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fffffff7ffffffe;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fffffff7ffffffe;
+  *((unsigned long*)& __m128i_result[1]) = 0x3fffffff3ffffffe;
+  *((unsigned long*)& __m128i_result[0]) = 0x3fffffff3ffffffe;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x003f0000ffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x003f0000ffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fff0101ffffe000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fffffffa0204000;
+  *((unsigned long*)& __m128i_result[1]) = 0x001f7fc100000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x001f7fff00000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000ff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000000010000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000cd630000cd63;
+  *((unsigned long*)& __m128i_op1[1]) = 0xcd636363cd636363;
+  *((unsigned long*)& __m128i_op1[0]) = 0xcd636363cd636363;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffcd63ffffcd63;
+  *((unsigned long*)& __m128i_result[0]) = 0xffffd765ffffd765;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x8000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xff7fffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0040000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000015516a768038;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffff9ed2e1c000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x007ffd0001400840;
+  *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x007ffd0001400840;
+  *((unsigned long*)& __m128i_result[1]) = 0x3fffffff80000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00003ffd000a4000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0032000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0032000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000009c400000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0002000200020002;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0202fe02fd020102;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000000000202fe02;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0006000000040000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0002000000000007;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffff0000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x6363636363636363;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000000006362ffff;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffff0000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffff0000ffff0000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffff0000ffff0000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000fffe0002;
+  __m128i_out = __lsx_vmuh_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c
new file mode 100644
index 00000000000..e244293dbcc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmuh-2.c
@@ -0,0 +1,371 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000011;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000011;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000011;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000011;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000c5ac01015b;
+  *((unsigned long*)& __m128i_op0[0]) = 0xaaacac88a3a9a96a;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000001300000013;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000001300000013;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000038003;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000040033;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000080000068;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000014;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x8000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x10f881a20ffd02b0;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000ff800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0ff780a10efc01af;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000fe7f0000;
+  __m128i_out = __lsx_vmuh_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000000efffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001001100110068;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x1d8000001d800000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x1d8000001d800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x1d8000001d800000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1d8000001d800000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0366000003660000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0366000003660000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xbfd10d0d7b6b6b73;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc5c534920000c4ed;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000800;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7ef400ad21fc7081;
+  *((unsigned long*)& __m128i_op0[0]) = 0x28bf0351ec69b5f2;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffb96bffff57c9;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffff6080ffff4417;
+  *((unsigned long*)& __m128i_result[1]) = 0x7ef3ddac21fc5a2c;
+  *((unsigned long*)& __m128i_result[0]) = 0x28bee9edec690869;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  int_out = __lsx_vpickve2gr_h(__m128i_op0,0x0);
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000200000002000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffe000ffdf;
+  *((unsigned long*)& __m128i_result[1]) = 0x00001fff00001fff;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000002;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000800000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000800000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000000000214f;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc31b63d846ebc810;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00ff0000800000ff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffff941d;
+  *((unsigned long*)& __m128i_result[1]) = 0x00000000000010a7;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000046ebaa2c;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000cf4f4f00;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000cf4f4f00;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000000000007c;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000005f0003e000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000897957687;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000408;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000003397dd140;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000004bd7cdd20;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0016ffb00016ffb0;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0016ffb00016ffb0;
+  *((unsigned long*)& __m128i_result[1]) = 0x00000000004a294b;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000006d04bc;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfffcfffcfffcfffc;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffcfffcfffcfffc;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x007ffe7ffe400000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x007ffd0001400840;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffcfffcfffcfffc;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfffcfffcfffcfffc;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffffffffffffffe;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffa800000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000158;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000157;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x001a64b345308091;
+  *((unsigned long*)& __m128i_op0[0]) = 0x001f2f2cab1c732a;
+  *((unsigned long*)& __m128i_op1[1]) = 0x1baf8eabd26bc629;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1c2640b9a8e9fb49;
+  *((unsigned long*)& __m128i_result[1]) = 0x0002dab8746acf8e;
+  *((unsigned long*)& __m128i_result[0]) = 0x00036dd1c5c15856;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x3a8000003a800000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000ef0000000003b;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000ffff0000ffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000ffff0000ffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x00003a7fc58074ff;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000eeff1100e;
+  __m128i_out = __lsx_vmuh_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c
new file mode 100644
index 00000000000..6458963cb7f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmul.c
@@ -0,0 +1,281 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x54feed87bc3f2be1;
+  *((unsigned long*)& __m128i_op0[0]) = 0x8064d8f6a494afcb;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fc000007fc00000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1e801ffc7fc00000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfffffe003c1f0077;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffff0074230438;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000ff0000000438;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  unsigned_int_out = __lsx_vpickve2gr_bu(__m128i_op0,0x2);
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000800800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000800800000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000004000000000;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfff5fff4002ffff5;
+  *((unsigned long*)& __m128i_op1[1]) = 0xaa858644fb8b3d49;
+  *((unsigned long*)& __m128i_op1[0]) = 0x18499e2cee2cc251;
+  *((unsigned long*)& __m128i_result[1]) = 0x8644000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0xaed495f03343a685;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7505443065413aed;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0100d6effefd0498;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7505443065413aed;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0100d6effefd0498;
+  *((unsigned long*)& __m128i_result[1]) = 0xb71289fdfbea3f69;
+  *((unsigned long*)& __m128i_result[0]) = 0x4e17c2ffb4851a40;
+  __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfc01fcfefc02fdf7;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfe00fcfffe01fd01;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfc01fd1300000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfe00fd1400010000;
+  *((unsigned long*)& __m128i_result[1]) = 0xc72ef153fc02fdf7;
+  *((unsigned long*)& __m128i_result[0]) = 0xca31bf15fd010000;
+  __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000100000001;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xff00ff00ff00ff00;
+  *((unsigned long*)& __m128i_op0[0]) = 0xff00ff00ff00ff00;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc000c000c000ff81;
+  *((unsigned long*)& __m128i_op1[1]) = 0x5d5d5d5d5d5d5d5d;
+  *((unsigned long*)& __m128i_op1[0]) = 0x5d5d5d5d5d5d0000;
+  *((unsigned long*)& __m128i_result[1]) = 0xa2a2a2a3a2a2a2a3;
+  *((unsigned long*)& __m128i_result[0]) = 0xc605c000aedd0000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xacc8c794af2caf01;
+  *((unsigned long*)& __m128i_op0[0]) = 0xa91e2048938c40f0;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xeeb1e4f43c3763f3;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffff5a6fe3d7;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000021e79364;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000718ea657431b;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000006ca193ec;
+  *((unsigned long*)& __m128i_result[0]) = 0x00008e72b5b94cad;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffe000ffffe000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x467f6080467d607f;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000040;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000040;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000040;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000040;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000001000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000001000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x007f008000ea007f;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00ff00ff00ff00ff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0042003e0042002f;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001fffc0001fffc;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffe0004fffe0004;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xc1bdceee242070db;
+  *((unsigned long*)& __m128i_op0[0]) = 0xe8c7b756d76aa478;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x3f433212dce09025;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xf359f359f359f359;
+  *((unsigned long*)& __m128i_op0[0]) = 0xf359f359f359f359;
+  *((unsigned long*)& __m128i_op1[1]) = 0xd3259a2984048c23;
+  *((unsigned long*)& __m128i_op1[0]) = 0xf9796558e39953fd;
+  *((unsigned long*)& __m128i_result[1]) = 0x86dd8341b164f12b;
+  *((unsigned long*)& __m128i_result[0]) = 0x9611c3985b3159f5;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x6363636363636363;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffd27db010d20fbf;
+  *((unsigned long*)& __m128i_op1[1]) = 0x6363636363636363;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffd27db010d20fbf;
+  *((unsigned long*)& __m128i_result[1]) = 0x9727b8499727b849;
+  *((unsigned long*)& __m128i_result[0]) = 0x12755900b653f081;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0303030303030303;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0303030303030303;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x02f3030303030303;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x06d9090909090909;
+  __m128i_out = __lsx_vmul_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffff81ffff7f03;
+  *((unsigned long*)& __m128i_op0[0]) = 0x04ffff8101ff81ff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0a0000000a000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0a0000000a000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0a0000001e000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0a000000f6000000;
+  __m128i_out = __lsx_vmul_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x317fce80317fce80;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmul_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c
new file mode 100644
index 00000000000..2043456d8bc
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-1.c
@@ -0,0 +1,433 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000158;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x001f7fc100000404;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000000000002a000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fff0101ffffe000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fffffffa0204000;
+  *((unsigned long*)& __m128i_result[1]) = 0xffe1ffc100000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000400000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000009000900;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000009000900;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x30eb022002101b20;
+  *((unsigned long*)& __m128i_op0[0]) = 0x020310edc003023d;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000000000ff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000000000000ffc3;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x6363636363636363;
+  *((unsigned long*)& __m128i_op1[0]) = 0x6363636363636363;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0xff9dff9dff9dff9d;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000efffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffe50000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000ff0000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffe020;
+  *((unsigned long*)& __m128i_op1[0]) = 0x3fc00000010a000b;
+  *((unsigned long*)& __m128i_result[1]) = 0x00001b0000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000000ff81007c;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffb7005f0070007c;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0001000104000800;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000000000007c;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000005f0003e000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x4040404040404040;
+  *((unsigned long*)& __m128i_op1[0]) = 0x4040404040404040;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0xffffbfc0ffffbfc0;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000ffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000ffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffff0100000001;
+  *((unsigned long*)& __m128i_result[0]) = 0xffffff0100000001;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000208000002080;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000208000002080;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000004;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000004870ba0;
+  *((unsigned long*)& __m128i_op1[1]) = 0x478b478b38031779;
+  *((unsigned long*)& __m128i_op1[0]) = 0x6b769e690fa1e119;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000fe98c2a0;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000004000000040;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00007770ffff9411;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000004000000040;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00007770ffff9411;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000100000001000;
+  *((unsigned long*)& __m128i_result[0]) = 0x37b951002d81a921;
+  __m128i_out = __lsx_vmulwev_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000000e0000000e0;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000e0000000e0;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000000000000c400;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7fffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000ffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffffff80000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffb4ff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffb4ff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000016;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffb4ff;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffffffffff98dea;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0006000000040000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0002000000000007;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000f80007;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000006c80031;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000005;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000101010001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000001010001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000010001;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000202020200;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000100;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0808080808080808;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0004280808080808;
+  *((unsigned long*)& __m128i_result[1]) = 0x0010203030201000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000808080800;
+  __m128i_out = __lsx_vmulwev_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000b5207f80;
+  *((unsigned long*)& __m128i_op1[1]) = 0x2000000020000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000200200000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0x6a57a30ff0000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffffffffffffff7;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffffff700000009;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001000104000800;
+  *((unsigned long*)& __m128i_op1[1]) = 0x8001000180010001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x8001000184000800;
+  *((unsigned long*)& __m128i_result[1]) = 0xffff80007e028401;
+  *((unsigned long*)& __m128i_result[0]) = 0x9a10144000400000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000bd003d;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000fffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0010000000000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000077af9450;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000400000004c;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000047404f4f040d;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000000000214f;
+  *((unsigned long*)& __m128i_result[0]) = 0xc31b63d846ebc810;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000002000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000002000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c
new file mode 100644
index 00000000000..366a4ab2afe
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-2.c
@@ -0,0 +1,343 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xfe01fe01fe01fe01;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000fe01fe01;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000200020;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x8000000080000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x6a5d5b056f2f4978;
+  *((unsigned long*)& __m128i_op0[0]) = 0x17483c07141b5971;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xd4bade5e2e902836;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x345002920f3017d6;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000c0010000a186;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00067fff0002a207;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffff0002;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000ff0000857a;
+  *((unsigned long*)& __m128i_result[0]) = 0x05fafe0101fe000e;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001000100000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc1f03e1042208410;
+  *((unsigned long*)& __m128i_result[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_result[0]) = 0x00f0001000000010;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000000000eefff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xf8e1a03affffe3e2;
+  *((unsigned long*)& __m128i_op1[1]) = 0x3a80613fda5dcb4a;
+  *((unsigned long*)& __m128i_op1[0]) = 0x93f0b81a914c003b;
+  *((unsigned long*)& __m128i_result[1]) = 0x00000000051649b6;
+  *((unsigned long*)& __m128i_result[0]) = 0xd2f005e44bb43416;
+  __m128i_out = __lsx_vmulwev_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000001fc0000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fffffff7fffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7fffffff00000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000200000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0001fffe00000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000001fffffffe;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000001fffffffe;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfffff000f0008d3c;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffff0016fff8d3d;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffff000f0008d3c;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfffff0016fff8d3d;
+  *((unsigned long*)& __m128i_result[1]) = 0xe10000004deb2610;
+  *((unsigned long*)& __m128i_result[0]) = 0xe101e0014dec4089;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x111110ff11111141;
+  *((unsigned long*)& __m128i_op1[0]) = 0x11111131111116a6;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x2028000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001001100110068;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x67eb85afb2ebb000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc8847ef6ed3f2000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xd400c02000002acf;
+  *((unsigned long*)& __m128i_op1[0]) = 0xf4000020c4000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x6453f5e01d6e5000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000fdec000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xbfd10d0d7b6b6b73;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc5c534920000c4ed;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000001700000017;
+  *((unsigned long*)& __m128i_op0[0]) = 0x59f7fd8759f7fd87;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000001700000017;
+  *((unsigned long*)& __m128i_op1[0]) = 0x59f7fd8759f7fd87;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000021100000211;
+  *((unsigned long*)& __m128i_result[0]) = 0xfb141d31fb141d31;
+  __m128i_out = __lsx_vmulwev_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7f800000976801fe;
+  *((unsigned long*)& __m128i_op1[0]) = 0x837c1ae57f8012ed;
+  *((unsigned long*)& __m128i_result[1]) = 0x976801fd6897fe02;
+  *((unsigned long*)& __m128i_result[0]) = 0x7f8012ec807fed13;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000008000000080;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0080000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000100010001fffe;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000800080;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0002ffff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7ff8000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7ff8000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0909090900000909;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0909090909090909;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000100;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x3a80613fda5dcb4a;
+  *((unsigned long*)& __m128i_op0[0]) = 0x93f0b81a914c003b;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000feff23560000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000fd1654860000;
+  *((unsigned long*)& __m128i_result[1]) = 0x1e242e4d68dc0000;
+  *((unsigned long*)& __m128i_result[0]) = 0x2ff8fddb7ae20000;
+  __m128i_out = __lsx_vmulwev_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000060000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000060000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7ff000ff6220c0c1;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffe8081000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000007ff000ff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c
new file mode 100644
index 00000000000..672e46753a6
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwev-3.c
@@ -0,0 +1,244 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000017fda829;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffffffffffffffc;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffc;
+  *((unsigned long*)& __m128i_result[1]) = 0xff01ff01ff01ff01;
+  *((unsigned long*)& __m128i_result[0]) = 0xff01ff01ff01fc10;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0042003e0042002f;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001fffc0001fffc;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0xffbeffc2ffbeffd1;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000003f80;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0001000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000080;
+  *((unsigned long*)& __m128i_op0[0]) = 0x80000000fff80000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000080;
+  *((unsigned long*)& __m128i_op1[0]) = 0x80000000fff80000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000004000;
+  *((unsigned long*)& __m128i_result[0]) = 0xfff8004000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffff8607db959f;
+  *((unsigned long*)& __m128i_op0[0]) = 0xff0cff78ff96ff14;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000008a0000008a;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000008900000009;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000043c5ea7b6;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000008fc4ef7b4;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffff46;
+  *((unsigned long*)& __m128i_result[1]) = 0xfffffffe00000002;
+  *((unsigned long*)& __m128i_result[0]) = 0xffffff46000000ba;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffc;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffc;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xf8f8372f752402ee;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffc0000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000100000001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000100000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x80044def00000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000ff000000ff00;
+  *((unsigned long*)& __m128i_result[1]) = 0x00007f8449a19084;
+  *((unsigned long*)& __m128i_result[0]) = 0x49a210000000ff00;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfffcfd000000fb00;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001fe00f8000700;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000000000ffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0xfdfef9ff0efff900;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000005;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7efefefe82010201;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000002;
+  *((unsigned long*)& __m128i_result[0]) = 0x7afafaf88a050a05;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xcda585aebbb2836a;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xcda585aebbb2836a;
+  *((unsigned long*)& __m128i_result[1]) = 0xd78cfd70b5f65d76;
+  *((unsigned long*)& __m128i_result[0]) = 0x5779108fdedda7e4;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x67eb85afb2ebb000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc8847ef6ed3f2000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x67eb85afb2ebb000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xc8847ef6ed3f2000;
+  *((unsigned long*)& __m128i_result[1]) = 0xd48acbfe13102acf;
+  *((unsigned long*)& __m128i_result[0]) = 0xf4af70d0c4000000;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffe0000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x3a8000003a800000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000ef0000000003b;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000056;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000ffffff86;
+  *((unsigned long*)& __m128i_result[1]) = 0x00000000000eefff;
+  *((unsigned long*)& __m128i_result[0]) = 0xf8e1a03affffe3e2;
+  __m128i_out = __lsx_vmulwev_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c
new file mode 100644
index 00000000000..05a90881226
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-1.c
@@ -0,0 +1,271 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000006;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0100010000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0100010000010000;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000000003ddc5dac;
+  *((unsigned long*)& __m128i_op1[1]) = 0x67157b5100005000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x387c7e0a133f2000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000004870ba0;
+  __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfefe000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffff000000000155;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000100000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fff7fff7fff7fff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xffff8001ffff8001;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7ff0000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7ff0000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7ff0000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7ff0000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x3ff0010000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x3ff0010000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00009c7c00007176;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00009c7c00007176;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x440ef000440ef000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x4400000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x3a8000003a800000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000ef0000000003b;
+  *((unsigned long*)& __m128i_result[1]) = 0x0f8d33000f8d3300;
+  *((unsigned long*)& __m128i_result[0]) = 0x0003b80000000000;
+  __m128i_out = __lsx_vmulwod_w_h(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0018001800180018;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0018001800180018;
+  *((unsigned long*)& __m128i_op1[1]) = 0x85bd6b0e94d89998;
+  *((unsigned long*)& __m128i_op1[0]) = 0xd83c8081ffff808f;
+  *((unsigned long*)& __m128i_result[1]) = 0xfff489b693120950;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffc45a851c40c18;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffe5;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffe5;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000001;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x3e1f321529232736;
+  *((unsigned long*)& __m128i_op1[0]) = 0x161d0c373c200826;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x3f8000003f800000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x3f8000003f800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0001000000010001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0001000000010001;
+  *((unsigned long*)& __m128i_result[1]) = 0x00003f8000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00003f8000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7fff000000007fff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000ffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000ffffffdfffdf;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000ffff0000ffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffe000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000c6fde000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000fef01000f27ca;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000010000010101;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0101000001000100;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000ffef0010000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000ffffffe0;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000005452505;
+  *((unsigned long*)& __m128i_op1[0]) = 0x000000044525043c;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x3fc03fc000000004;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[0]) = 0xffffffffc03fc040;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000000000000a;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000000000000000a;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00fe000100cf005f;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff7fff7f00;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000400028000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000004;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xc110000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xc00d060000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x3ff0000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x40f3fa0000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0xf047ef0000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00007fff7fff8000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffff100000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000000f0000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c
new file mode 100644
index 00000000000..04c83332dde
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-2.c
@@ -0,0 +1,281 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x004e005500060031;
+  *((unsigned long*)& __m128i_op1[0]) = 0xff870068fff5ffb3;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000200010;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xfa31dfa21672e711;
+  *((unsigned long*)& __m128i_op0[0]) = 0x1304db85e468073a;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000150000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffeffff001effff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000ffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000fffff1a0;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000000000000f00f;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000080;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  unsigned_int_out = __lsx_vpickve2gr_hu(__m128i_op0,0x4);
+  *((unsigned long*)& __m128i_op0[1]) = 0xe2560afe9c001a18;
+  *((unsigned long*)& __m128i_op0[0]) = 0xe2560afe9c001a18;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000ff0000857a;
+  *((unsigned long*)& __m128i_op1[0]) = 0x05fafe0101fe000e;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000d82;
+  *((unsigned long*)& __m128i_result[0]) = 0x046a09ec009c0000;
+  __m128i_out = __lsx_vmulwod_h_bu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfe80ffffffffff02;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fff7fff7fff7fff;
+  *((unsigned long*)& __m128i_op1[0]) = 0x7fff7fff00000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x7f3f018000000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xf0fd800080000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000a00028004000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000005a00000228;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffff9ee000004ec;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffffacdb6dbecac;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1f5533a694f902c0;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x1f54e0ab00000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00e4880080000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0080810080808100;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xff011fb11181d8ea;
+  *((unsigned long*)& __m128i_op0[0]) = 0x80ff800000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00fe00fe000200fe;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00fe00fe000200fe;
+  *((unsigned long*)& __m128i_result[1]) = 0x00fd02fe00002302;
+  *((unsigned long*)& __m128i_result[0]) = 0x007ffd0200000000;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0xfffe0001fffe0001;
+  __m128i_out = __lsx_vmulwod_w_hu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x14ccc6320076a4d2;
+  *((unsigned long*)& __m128i_op0[0]) = 0x685670d27e00682a;
+  *((unsigned long*)& __m128i_op1[1]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_op1[0]) = 0xfffffffffffffffe;
+  *((unsigned long*)& __m128i_result[1]) = 0x14ccc631eb3339ce;
+  *((unsigned long*)& __m128i_result[0]) = 0x685670d197a98f2e;
+  __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xf000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x003fffc0ffc0003f;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffc0ffc0003f003f;
+  *((unsigned long*)& __m128i_op1[1]) = 0x000000400000004c;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00007770ffff941d;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000000ffff000;
+  *((unsigned long*)& __m128i_result[0]) = 0x000077529b522400;
+  __m128i_out = __lsx_vmulwod_d_wu(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000001000000010;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x1111113111111141;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1111113111111121;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000111111312;
+  *((unsigned long*)& __m128i_result[0]) = 0x2222272111111410;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000001c88bf0;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000001c88bf0;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xfffffff800000003;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffff0015172b;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffff00000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000800000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x003fffffff800000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0001000100010001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0001000600000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000c6c6c6c6;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000c6c6c6c6;
+  *((unsigned long*)& __m128i_result[1]) = 0x000000000000c6c7;
+  *((unsigned long*)& __m128i_result[0]) = 0x8d8d8d8d8d8cc6c6;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0a0000000a000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0a0000000a000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7f7f00007f7f7500;
+  *((unsigned long*)& __m128i_op1[0]) = 0x3b42017f3a7f7f01;
+  *((unsigned long*)& __m128i_result[1]) = 0x04faf60009f5f092;
+  *((unsigned long*)& __m128i_result[0]) = 0x04fafa9200000000;
+  __m128i_out = __lsx_vmulwod_q_du(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}
diff --git a/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c
new file mode 100644
index 00000000000..58ebf2d2905
--- /dev/null
+++ b/gcc/testsuite/gcc.target/loongarch/vector/lsx/lsx-vmulwod-3.c
@@ -0,0 +1,307 @@ 
+/* { dg-do run } */
+/* { dg-options "-mlsx -w -fno-strict-aliasing" } */
+#include "../simd_correctness_check.h"
+#include <lsxintrin.h>
+
+int main ()
+{
+  __m128i __m128i_op0, __m128i_op1, __m128i_op2, __m128i_out, __m128i_result;
+  __m128 __m128_op0, __m128_op1, __m128_op2, __m128_out, __m128_result;
+  __m128d __m128d_op0, __m128d_op1, __m128d_op2, __m128d_out, __m128d_result;
+
+  int int_op0, int_op1, int_op2, int_out, int_result, i=1, fail;
+  long int long_op0, long_op1, long_op2, lont_out, lont_result;
+  long int long_int_out, long_int_result;
+  unsigned int unsigned_int_out, unsigned_int_result;
+  unsigned long int unsigned_long_int_out, unsigned_long_int_result;
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xbf8000000000ffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xcf00000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000002;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000000000ffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000ff020000fff4;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7fc000007fc00000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1e801ffc7fc00000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00001ee100000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000010;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000010;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x000000007fff7fff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x3f5ec0a0feefa0b0;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x00000000ff02d060;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_h_bu_b(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000001;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x80000000fff8fff8;
+  *((unsigned long*)& __m128i_op0[0]) = 0x80000000fff80000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000001000000010;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000001000000010;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0010001000100010;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0010001000100010;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000001000100;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000001000100;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00000000004a294b;
+  *((unsigned long*)& __m128i_op0[0]) = 0x00000000006d04bc;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x55aa55aa55aa55ab;
+  *((unsigned long*)& __m128i_op0[0]) = 0xaa55555655aaaaa8;
+  *((unsigned long*)& __m128i_op1[1]) = 0x7ef4002d21fc7001;
+  *((unsigned long*)& __m128i_op1[0]) = 0x28bf02d1ec6a35b2;
+  *((unsigned long*)& __m128i_result[1]) = 0x2a7b7c9260f90ee2;
+  *((unsigned long*)& __m128i_result[0]) = 0x1b1c6cdfd57f5736;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x003fffff00000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x003fffff00000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000004040504;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000004040504;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000010100000101;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000010100000101;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x7fff00007fff0000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x7fff00007fff0000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_d_wu_w(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x000000ff000000ff;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000ffff00000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000ffff0000ffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000feff01;
+  *((unsigned long*)& __m128i_result[0]) = 0x00feff0100000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0101010202050120;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0101010102020202;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000000000ff;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xf51cf8dad6040188;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0982e2daf234ed87;
+  *((unsigned long*)& __m128i_op1[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_result[0]) = 0x0ae3072529fbfe78;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x00000000000007f8;
+  *((unsigned long*)& __m128i_op1[0]) = 0x00000000000007f8;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x00ff000000ff0000;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000005;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op0[0]) = 0xffffffffffffffff;
+  *((unsigned long*)& __m128i_op1[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[1]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_result[0]) = 0x0000000000000000;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  *((unsigned long*)& __m128i_op0[1]) = 0x030804010d090107;
+  *((unsigned long*)& __m128i_op0[0]) = 0x0000000000000000;
+  *((unsigned long*)& __m128i_op1[1]) = 0x1313131313131313;
+  *((unsigned long*)& __m128i_op1[0]) = 0x1313131313131313;
+  *((unsigned long*)& __m128i_result[1]) = 0x0039d21e3229d4e8;
+  *((unsigned long*)& __m128i_result[0]) = 0x6d339b4f3b439885;
+  __m128i_out = __lsx_vmulwod_q_du_d(__m128i_op0,__m128i_op1);
+  ASSERTEQ_64(__LINE__, __m128i_result, __m128i_out);
+
+  return 0;
+}