From: Pan Li <pan2...@intel.com>

Add asm dump check and run test for vec_duplicate + vrsub.vv combine to 
vrsub.vx.

The below test suites are passed for this patch.
* The rv64gcv fully regression test.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c: Add vrsub asm check.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c: Ditto.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h: Add test helper
        macros for vx binary reversed.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h: Add test
        data for vrsub.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c: New test.
        * gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c: New test.

Signed-off-by: Pan Li <pan2...@intel.com>
---
 .../riscv/rvv/autovec/vx_vf/vx-1-i16.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-i32.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-i64.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-i8.c         |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-u16.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-u32.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-u64.c        |   2 +
 .../riscv/rvv/autovec/vx_vf/vx-1-u8.c         |   2 +
 .../riscv/rvv/autovec/vx_vf/vx_binary.h       |  63 +++
 .../riscv/rvv/autovec/vx_vf/vx_binary_data.h  | 392 ++++++++++++++++++
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c     |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c    |  15 +
 .../rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c     |  15 +
 18 files changed, 591 insertions(+)
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c
 create mode 100644 
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c

diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
index c6b25f1b857..015b0866668 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(int16_t, +, add)
 DEF_VX_BINARY_CASE_0(int16_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(int16_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
index cb4ccfa1790..f0a88e8da87 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(int32_t, +, add)
 DEF_VX_BINARY_CASE_0(int32_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(int32_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
index bf249846452..fbf9f6a930f 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(int64_t, +, add)
 DEF_VX_BINARY_CASE_0(int64_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(int64_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
index e830c753ae8..55309308573 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(int8_t, +, add)
 DEF_VX_BINARY_CASE_0(int8_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(int8_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
index f08305e8256..15edd71a438 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(uint16_t, +, add)
 DEF_VX_BINARY_CASE_0(uint16_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(uint16_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
index 1a7ae1f1c78..992083e7235 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(uint32_t, +, add)
 DEF_VX_BINARY_CASE_0(uint32_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(uint32_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
index d478cafa0fe..bb445f6e0ff 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(uint64_t, +, add)
 DEF_VX_BINARY_CASE_0(uint64_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(uint64_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
index aa3f5b79d31..73e144b06ee 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
@@ -5,6 +5,8 @@
 
 DEF_VX_BINARY_CASE_0(uint8_t, +, add)
 DEF_VX_BINARY_CASE_0(uint8_t, -, sub)
+DEF_VX_BINARY_REVERSE_CASE_0(uint8_t, -, rsub);
 
 /* { dg-final { scan-assembler-times {vadd.vx} 1 } } */
 /* { dg-final { scan-assembler-times {vsub.vx} 1 } } */
+/* { dg-final { scan-assembler-times {vrsub.vx} 1 } } */
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
index f46210924ea..66e238c903a 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
@@ -18,6 +18,22 @@ test_vx_binary_##NAME##_##T##_case_0 (T * restrict out, T * 
restrict in, \
 #define RUN_VX_BINARY_CASE_0_WRAP(T, NAME, out, in, x, n) \
   RUN_VX_BINARY_CASE_0(T, NAME, out, in, x, n)
 
+#define DEF_VX_BINARY_REVERSE_CASE_0(T, OP, NAME)                   \
+void                                                                \
+test_vx_binary_reverse_##NAME##_##T##_case_0 (T * restrict out,     \
+                                              T * restrict in, T x, \
+                                              unsigned n)           \
+{                                                                   \
+  for (unsigned i = 0; i < n; i++)                                  \
+    out[i] = x OP in[i];                                            \
+}
+#define DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, OP, NAME) \
+  DEF_VX_BINARY_REVERSE_CASE_0(T, OP, NAME)
+#define RUN_VX_BINARY_REVERSE_CASE_0(T, NAME, out, in, x, n) \
+  test_vx_binary_reverse_##NAME##_##T##_case_0(out, in, x, n)
+#define RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, NAME, out, in, x, n) \
+  RUN_VX_BINARY_REVERSE_CASE_0(T, NAME, out, in, x, n)
+
 #define VX_BINARY_BODY(op)       \
   out[k + 0] = in[k + 0] op tmp; \
   out[k + 1] = in[k + 1] op tmp; \
@@ -64,4 +80,51 @@ test_vx_binary_##NAME##_##T##_case_1 (T * restrict out, T * 
restrict in, \
 #define DEF_VX_BINARY_CASE_1_WRAP(T, OP, NAME, BODY) \
   DEF_VX_BINARY_CASE_1(T, OP, NAME, BODY)
 
+#define VX_BINARY_REVERSE_BODY(op) \
+  out[k + 0] = tmp op in[k + 0];   \
+  out[k + 1] = tmp op in[k + 1];   \
+  k += 2;
+
+#define VX_BINARY_REVERSE_BODY_X4(op) \
+  VX_BINARY_REVERSE_BODY(op)          \
+  VX_BINARY_REVERSE_BODY(op)
+
+#define VX_BINARY_REVERSE_BODY_X8(op) \
+  VX_BINARY_REVERSE_BODY_X4(op)       \
+  VX_BINARY_REVERSE_BODY_X4(op)
+
+#define VX_BINARY_REVERSE_BODY_X16(op) \
+  VX_BINARY_REVERSE_BODY_X8(op)        \
+  VX_BINARY_REVERSE_BODY_X8(op)
+
+#define VX_BINARY_REVERSE_BODY_X32(op) \
+  VX_BINARY_REVERSE_BODY_X16(op)       \
+  VX_BINARY_REVERSE_BODY_X16(op)
+
+#define VX_BINARY_REVERSE_BODY_X64(op) \
+  VX_BINARY_REVERSE_BODY_X32(op)       \
+  VX_BINARY_REVERSE_BODY_X32(op)
+
+#define VX_BINARY_REVERSE_BODY_X128(op) \
+  VX_BINARY_REVERSE_BODY_X64(op)        \
+  VX_BINARY_REVERSE_BODY_X64(op)
+
+#define DEF_VX_BINARY_REVERSE_CASE_1(T, OP, NAME, BODY)         \
+void                                                            \
+test_vx_binary_reverse_##NAME##_##T##_case_1 (T * restrict out, \
+                                             T * restrict in,  \
+                                             T x, unsigned n)  \
+{                                                               \
+  unsigned k = 0;                                               \
+  T tmp = x + 3;                                                \
+                                                                \
+  while (k < n)                                                 \
+    {                                                           \
+      tmp = tmp ^ 0x3f;                                         \
+      BODY(OP)                                                  \
+    }                                                           \
+}
+#define DEF_VX_BINARY_REVERSE_CASE_1_WRAP(T, OP, NAME, BODY) \
+  DEF_VX_BINARY_REVERSE_CASE_1(T, OP, NAME, BODY)
+
 #endif
diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
index 7e68db92ef8..08d53b28ec5 100644
--- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
@@ -790,4 +790,396 @@ uint64_t TEST_BINARY_DATA(uint64_t, sub)[][3][N] =
   },
 };
 
+int8_t TEST_BINARY_DATA(int8_t, rsub)[][3][N] =
+{
+  {
+    { 1 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+    },
+    {
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 127 },
+    {
+       127,  127,  127,  127,
+       126,  126,  126,  126,
+         1,    1,    1,    1,
+       125,  125,  125,  125,
+    },
+    {
+         0,    0,    0,    0,
+         1,    1,    1,    1,
+       126,  126,  126,  126,
+         2,    2,    2,    2,
+    },
+  },
+  {
+    { -128 },
+    {
+      -128, -128, -128, -128,
+      -127, -127, -127, -127,
+        -1,   -1,   -1,   -1,
+      -126, -126, -126, -126,
+    },
+    {
+         0,    0,    0,    0,
+        -1,   -1,   -1,   -1,
+      -127, -127, -127, -127,
+        -2,   -2,   -2,   -2,
+    },
+  },
+};
+
+int16_t TEST_BINARY_DATA(int16_t, rsub)[][3][N] =
+{
+  {
+    { 1 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+    },
+    {
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 32767 },
+    {
+       32767,  32767,  32767,  32767,
+       32766,  32766,  32766,  32766,
+           1,      1,      1,      1,
+       32765,  32765,  32765,  32765,
+    },
+    {
+           0,      0,      0,      0,
+           1,      1,      1,      1,
+       32766,  32766,  32766,  32766,
+           2,      2,      2,      2,
+    },
+  },
+  {
+    { -32768 },
+    {
+      -32768, -32768, -32768, -32768,
+      -32767, -32767, -32767, -32767,
+          -1,     -1,     -1,     -1,
+      -32766, -32766, -32766, -32766,
+    },
+    {
+           0,      0,      0,      0,
+          -1,     -1,     -1,     -1,
+      -32767, -32767, -32767, -32767,
+          -2,     -2,     -2,     -2,
+    },
+  },
+};
+
+int32_t TEST_BINARY_DATA(int32_t, rsub)[][3][N] =
+{
+  {
+    { 1 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+    },
+    {
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 2147483647 },
+    {
+       2147483647,  2147483647,  2147483647,  2147483647,
+       2147483646,  2147483646,  2147483646,  2147483646,
+                1,           1,           1,           1,
+       2147483645,  2147483645,  2147483645,  2147483645,
+    },
+    {
+                0,           0,           0,           0,
+                1,           1,           1,           1,
+       2147483646,  2147483646,  2147483646,  2147483646,
+                2,           2,           2,           2,
+    },
+  },
+  {
+    { -2147483648 },
+    {
+      -2147483648, -2147483648, -2147483648, -2147483648,
+      -2147483647, -2147483647, -2147483647, -2147483647,
+               -1,          -1,          -1,          -1,
+      -2147483646, -2147483646, -2147483646, -2147483646,
+    },
+    {
+                0,           0,           0,           0,
+               -1,          -1,          -1,          -1,
+      -2147483647, -2147483647, -2147483647, -2147483647,
+               -2,          -2,          -2,          -2,
+    },
+  },
+};
+
+int64_t TEST_BINARY_DATA(int64_t, rsub)[][3][N] =
+{
+  {
+    { 1 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+    },
+    {
+       0,  0,  0,  0,
+      -1, -1, -1, -1,
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    {  9223372036854775807ll },
+    {
+       9223372036854775807ll,  9223372036854775807ll,  9223372036854775807ll,  
9223372036854775807ll,
+       9223372036854775806ll,  9223372036854775806ll,  9223372036854775806ll,  
9223372036854775806ll,
+                           1,                      1,                      1,  
                    1,
+       9223372036854775805ll,  9223372036854775805ll,  9223372036854775805ll,  
9223372036854775805ll,
+    },
+    {
+                            0,                       0,                       
0,                       0,
+                            1,                       1,                       
1,                       1,
+       9223372036854775806ull,  9223372036854775806ull,  
9223372036854775806ull,  9223372036854775806ull,
+                            2,                       2,                       
2,                       2,
+    },
+  },
+  {
+    { -9223372036854775808ull },
+    {
+      -9223372036854775808ull, -9223372036854775808ull, 
-9223372036854775808ull, -9223372036854775808ull,
+       -9223372036854775807ll,  -9223372036854775807ll,  
-9223372036854775807ll,  -9223372036854775807ll,
+                           -1,                      -1,                      
-1,                      -1,
+       -9223372036854775806ll,  -9223372036854775806ll,  
-9223372036854775806ll,  -9223372036854775806ll,
+    },
+    {
+                           0,                      0,                      0,  
                    0,
+                          -1,                     -1,                     -1,  
                   -1,
+      -9223372036854775807ll, -9223372036854775807ll, -9223372036854775807ll, 
-9223372036854775807ll,
+                          -2,                     -2,                     -2,  
                   -2,
+    },
+  },
+};
+
+uint8_t TEST_BINARY_DATA(uint8_t, rsub)[][3][N] =
+{
+  {
+    { 12 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+      12, 12, 12, 12,
+      10, 10, 10, 10,
+    },
+    {
+      11,  11,  11,  11,
+      10,  10,  10,  10,
+       0,   0,   0,   0,
+       2,   2,   2,   2,
+    },
+  },
+  {
+    { 127 },
+    {
+      127, 127, 127, 127,
+       28,  28,  28,  28,
+        4,   4,   4,   4,
+        5,   5,   5,   5,
+    },
+    {
+        0,   0,   0,   0,
+       99,  99,  99,  99,
+      123, 123, 123, 123,
+      122, 122, 122, 122,
+    },
+  },
+  {
+    { 255 },
+    {
+       253, 253, 253, 253,
+       254, 254, 254, 254,
+       255, 255, 255, 255,
+       252, 252, 252, 252,
+    },
+    {
+         2,   2,   2,   2,
+         1,   1,   1,   1,
+         0,   0,   0,   0,
+         3,   3,   3,   3,
+    },
+  },
+};
+
+uint16_t TEST_BINARY_DATA(uint16_t, rsub)[][3][N] =
+{
+  {
+    { 12 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+      12, 12, 12, 12,
+      10, 10, 10, 10,
+    },
+    {
+      11, 11, 11, 11,
+      10, 10, 10, 10,
+       0,  0,  0,  0,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 32768 },
+    {
+      32767, 32767, 32767, 32767,
+      32768, 32768, 32768, 32768,
+          4,     4,     4,     4,
+          5,     5,     5,     5,
+    },
+    {
+          1,     1,     1,     1,
+          0,     0,     0,     0,
+      32764, 32764, 32764, 32764,
+      32763, 32763, 32763, 32763,
+    },
+  },
+  {
+    { 65535 },
+    {
+       65533, 65533, 65533, 65533,
+       65534, 65534, 65534, 65534,
+       65535, 65535, 65535, 65535,
+       65532, 65532, 65532, 65532,
+    },
+    {
+           2,     2,     2,     2,
+           1,     1,     1,     1,
+           0,     0,     0,     0,
+           3,     3,     3,     3,
+    },
+  },
+};
+
+uint32_t TEST_BINARY_DATA(uint32_t, rsub)[][3][N] =
+{
+  {
+    { 12 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+      12, 12, 12, 12,
+      10, 10, 10, 10,
+    },
+    {
+      11, 11, 11, 11,
+      10, 10, 10, 10,
+       0,  0,  0,  0,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 2147483648 },
+    {
+      2147483647, 2147483647, 2147483647, 2147483647,
+      2147483648, 2147483648, 2147483648, 2147483648,
+               4,          4,          4,          4,
+               5,          5,          5,          5,
+    },
+    {
+               1,          1,          1,          1,
+               0,          0,          0,          0,
+      2147483644, 2147483644, 2147483644, 2147483644,
+      2147483643, 2147483643, 2147483643, 2147483643,
+    },
+  },
+  {
+    { 4294967295 },
+    {
+       4294967293, 4294967293, 4294967293, 4294967293,
+       4294967294, 4294967294, 4294967294, 4294967294,
+       4294967295, 4294967295, 4294967295, 4294967295,
+       4294967292, 4294967292, 4294967292, 4294967292,
+    },
+    {
+                2,          2,          2,          2,
+                1,          1,          1,          1,
+                0,          0,          0,          0,
+                3,          3,          3,          3,
+    },
+  },
+};
+
+uint64_t TEST_BINARY_DATA(uint64_t, rsub)[][3][N] =
+{
+  {
+    { 12 },
+    {
+       1,  1,  1,  1,
+       2,  2,  2,  2,
+      12, 12, 12, 12,
+      10, 10, 10, 10,
+    },
+    {
+      11, 11, 11, 11,
+      10, 10, 10, 10,
+       0,  0,  0,  0,
+       2,  2,  2,  2,
+    },
+  },
+  {
+    { 9223372036854775808ull },
+    {
+      9223372036854775807ull, 9223372036854775807ull, 9223372036854775807ull, 
9223372036854775807ull,
+      9223372036854775808ull, 9223372036854775808ull, 9223372036854775808ull, 
9223372036854775808ull,
+                        4ull,                   4ull,                   4ull,  
                 4ull,
+                        5ull,                   5ull,                   5ull,  
                 5ull,
+    },
+    {
+                           1,                      1,                      1,  
                    1,
+                           0,                      0,                      0,  
                    0,
+      9223372036854775804ull, 9223372036854775804ull, 9223372036854775804ull, 
9223372036854775804ull,
+      9223372036854775803ull, 9223372036854775803ull, 9223372036854775803ull, 
9223372036854775803ull,
+    },
+  },
+  {
+    { 18446744073709551615ull },
+    {
+       18446744073709551613ull, 18446744073709551613ull, 
18446744073709551613ull, 18446744073709551613ull,
+       18446744073709551614ull, 18446744073709551614ull, 
18446744073709551614ull, 18446744073709551614ull,
+       18446744073709551615ull, 18446744073709551615ull, 
18446744073709551615ull, 18446744073709551615ull,
+       18446744073709551612ull, 18446744073709551612ull, 
18446744073709551612ull, 18446744073709551612ull,
+    },
+    {
+                             2,                       2,                       
2,                       2,
+                             1,                       1,                       
1,                       1,
+                             0,                       0,                       
0,                       0,
+                             3,                       3,                       
3,                       3,
+    },
+  },
+};
+
 #endif
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c
new file mode 100644
index 00000000000..65ce6a1a6c7
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    int16_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c
new file mode 100644
index 00000000000..170779c3c2a
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    int32_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c
new file mode 100644
index 00000000000..796cfdfb391
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    int64_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c
new file mode 100644
index 00000000000..0419e59c92d
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    int8_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c
new file mode 100644
index 00000000000..bf9f6ceb7b3
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    uint16_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c
new file mode 100644
index 00000000000..afe037dde54
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    uint32_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c
new file mode 100644
index 00000000000..5d4c01e92b0
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    uint64_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
diff --git 
a/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c
new file mode 100644
index 00000000000..43d785f3bd1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c
@@ -0,0 +1,15 @@
+/* { dg-do run { target { riscv_v } } } */
+/* { dg-additional-options "-std=c99 --param=gpr2vr-cost=0" } */
+
+#include "vx_binary.h"
+#include "vx_binary_data.h"
+
+#define T    uint8_t
+#define NAME rsub
+
+DEF_VX_BINARY_REVERSE_CASE_0_WRAP(T, -, NAME)
+
+#define TEST_DATA                        TEST_BINARY_DATA_WRAP(T, NAME)
+#define TEST_RUN(T, NAME, out, in, x, n) RUN_VX_BINARY_REVERSE_CASE_0_WRAP(T, 
NAME, out, in, x, n)
+
+#include "vx_binary_run.h"
-- 
2.43.0

Reply via email to