]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
RISC-V: Add test for vec_duplicate + vrsub.vv combine case 0 with GR2VR cost 0
authorPan Li <pan2.li@intel.com>
Sun, 18 May 2025 08:49:29 +0000 (16:49 +0800)
committerPan Li <pan2.li@intel.com>
Tue, 20 May 2025 01:27:41 +0000 (09:27 +0800)
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.li@intel.com>
18 files changed:
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i64.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-i8.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u16.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u32.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u64.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx-1-u8.c
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_binary_data.h
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-i8.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u16.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u32.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u64.c [new file with mode: 0644]
gcc/testsuite/gcc.target/riscv/rvv/autovec/vx_vf/vx_vrsub-run-1-u8.c [new file with mode: 0644]

index c6b25f1b85754d4c1438a6e644ca2aeb8fe5a417..015b086666834017d5bc30c3ca19a259a3bc4928 100644 (file)
@@ -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 } } */
index cb4ccfa17903974f6f95aed05387f87e7fccab4b..f0a88e8da87a83025748e37864d821be906936c0 100644 (file)
@@ -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 } } */
index bf249846452bcb674987778212951cb14c971d81..fbf9f6a930fb8dccec4513eb7d07a07921447aae 100644 (file)
@@ -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 } } */
index e830c753ae810e4734224f5ea657b4ce9e96a7dc..55309308573ea299e453f450efcc8798c093a1de 100644 (file)
@@ -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 } } */
index f08305e825664e5e7591f4fb69cbb85ca8be73e0..15edd71a438e5aa10654235eb05669d238418ff2 100644 (file)
@@ -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 } } */
index 1a7ae1f1c78dfdfc2982e16fb13a7867da6dc3d1..992083e723538382c86b248d296520b399f36e94 100644 (file)
@@ -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 } } */
index d478cafa0fe6a25f3f8f3456b3df084cb3b214ff..bb445f6e0ffd7cfcede156d1ce16b385ef12858e 100644 (file)
@@ -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 } } */
index aa3f5b79d314a622f1b32f726294bc25c043abad..73e144b06eee36103ccd3cdd9bdb120a56fed42e 100644 (file)
@@ -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 } } */
index f46210924ead02bfa36d31536629ab0bdfa97a91..66e238c903a37f141fd06644befb1b4a0ea0f06d 100644 (file)
@@ -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
index 7e68db92ef8671837b8aecf8a1cf98f61e11c867..08d53b28ec571e61d1187700f1b8397313523c68 100644 (file)
@@ -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 (file)
index 0000000..65ce6a1
--- /dev/null
@@ -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 (file)
index 0000000..170779c
--- /dev/null
@@ -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 (file)
index 0000000..796cfdf
--- /dev/null
@@ -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 (file)
index 0000000..0419e59
--- /dev/null
@@ -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 (file)
index 0000000..bf9f6ce
--- /dev/null
@@ -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 (file)
index 0000000..afe037d
--- /dev/null
@@ -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 (file)
index 0000000..5d4c01e
--- /dev/null
@@ -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 (file)
index 0000000..43d785f
--- /dev/null
@@ -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"