OK if Pan say OK

On Wed, Jul 9, 2025 at 4:36 PM Ciyan Pan <panci...@eswincomputing.com> wrote:
>
> From: panciyan <panci...@eswincomputing.com>
>
> This patch adjust test data for unsigned vector SAT_SUB to vec_sat_data.h
>
> Passed the rv64gcv regression test.
>
> Signed-off-by: Ciyan Pan <panci...@eswincomputing.com>
> gcc/testsuite/ChangeLog:
>
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h: Add 
> vec_sat_u_sub_fmt wrap define.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h: Add vec_sat_u_sub 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c: Remove 
> test data.
>         * gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c: Remove 
> test data.
>
> ---
>  .../riscv/rvv/autovec/sat/vec_sat_arith.h     |  40 +++
>  .../riscv/rvv/autovec/sat/vec_sat_data.h      | 252 ++++++++++++++++++
>  .../rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c  |  71 +----
>  .../autovec/sat/vec_sat_u_sub-run-10-u16.c    |  70 +----
>  .../autovec/sat/vec_sat_u_sub-run-10-u32.c    |  70 +----
>  .../autovec/sat/vec_sat_u_sub-run-10-u64.c    |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c  |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c |  70 +----
>  .../rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c  |  70 +----
>  42 files changed, 493 insertions(+), 2600 deletions(-)
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
> index f78bdc047ca..9e4b4f4ac5b 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_arith.h
> @@ -385,6 +385,8 @@ vec_sat_u_sub_##T##_fmt_1 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = (x - y) & (-(T)(x >= y));                             \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_1(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_2(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -398,6 +400,8 @@ vec_sat_u_sub_##T##_fmt_2 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = (x - y) & (-(T)(x > y));                              \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_2(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_3(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -411,6 +415,8 @@ vec_sat_u_sub_##T##_fmt_3 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = x > y ? x - y : 0;                                    \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_3(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_4(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -424,6 +430,8 @@ vec_sat_u_sub_##T##_fmt_4 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = x >= y ? x - y : 0;                                   \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_4(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_5(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -437,6 +445,8 @@ vec_sat_u_sub_##T##_fmt_5 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = x < y ? 0 : x - y;                                    \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_5(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_6(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -450,6 +460,8 @@ vec_sat_u_sub_##T##_fmt_6 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = x <= y ? 0 : x - y;                                   \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_6(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_7(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -465,6 +477,8 @@ vec_sat_u_sub_##T##_fmt_7 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = ret & (T)(overflow - 1);                              \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_7(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_8(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -480,6 +494,8 @@ vec_sat_u_sub_##T##_fmt_8 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = ret & (T)-(!overflow);                                \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_8(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_9(T)                                   \
>  void __attribute__((noinline))                                       \
> @@ -495,6 +511,8 @@ vec_sat_u_sub_##T##_fmt_9 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = overflow ? 0 : ret;                                   \
>      }                                                                \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_9(T)
>
>  #define DEF_VEC_SAT_U_SUB_FMT_10(T)                                   \
>  void __attribute__((noinline))                                        \
> @@ -510,6 +528,8 @@ vec_sat_u_sub_##T##_fmt_10 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>        out[i] = !overflow ? ret : 0;                                   \
>      }                                                                 \
>  }
> +#define DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T) \
> +  DEF_VEC_SAT_U_SUB_FMT_10(T)
>
>  #define DEF_VEC_SAT_U_SUB_ZIP(T1, T2)                             \
>  void __attribute__((noinline))                                    \
> @@ -669,33 +689,53 @@ vec_sat_s_sub_##T##_fmt_4 (T *out, T *op_1, T *op_2, 
> unsigned limit) \
>
>  #define RUN_VEC_SAT_U_SUB_FMT_1(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_1(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_1(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_2(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_2(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_2(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_3(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_3(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_3(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_4(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_4(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_4(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_5(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_5(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_5(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_6(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_6(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_6(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_7(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_7(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_7(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_8(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_8(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_8(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_9(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_9(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_9(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_10(T, out, op_1, op_2, N) \
>    vec_sat_u_sub_##T##_fmt_10(out, op_1, op_2, N)
> +#define RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_10(T, out, op_1, op_2, N)
>
>  #define RUN_VEC_SAT_U_SUB_FMT_ZIP(T1, T2, x, b, N) \
>    vec_sat_u_sub_##T1##_##T2##_fmt_zip(x, b, N)
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
> index 9f05c0c9291..4469f0e184b 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_data.h
> @@ -744,6 +744,258 @@ uint64_t TEST_UNARY_DATA(uint64_t, 
> sat_u_sub_imm)[][2][N] =
>    },
>  };
>
> +uint8_t TEST_UNARY_DATA(uint8_t, usub)[][3][N] = {
> +  {
> +    {
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +    }, /* arg_0 */
> +    {
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +    }, /* arg_1 */
> +    {
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +    }, /* expect */
> +  },
> +  {
> +    {
> +       0, 255, 255, 255,
> +       0, 255, 255, 255,
> +       0, 255, 255, 255,
> +       0, 255, 255, 255,
> +    },
> +    {
> +       1, 255, 254, 251,
> +       1, 255, 254, 251,
> +       1, 255, 254, 251,
> +       1, 255, 254, 251,
> +    },
> +    {
> +       0,   0,   1,   4,
> +       0,   0,   1,   4,
> +       0,   0,   1,   4,
> +       0,   0,   1,   4,
> +    },
> +  },
> +  {
> +    {
> +       0,   0,   1,   0,
> +       1,   2,   3,   0,
> +       1,   2,   3, 255,
> +       5, 254, 255,   9,
> +    },
> +    {
> +       0,   1,   0, 254,
> +      254, 254, 254, 255,
> +      255, 255,   0, 252,
> +      255, 255, 255,   1,
> +    },
> +    {
> +       0,   0,   1,   0,
> +       0,   0,   0,   0,
> +       0,   0,   3,   3,
> +       0,   0,   0,   8,
> +    },
> +  },
> +};
> +
> +uint16_t TEST_UNARY_DATA(uint16_t, usub)[][3][N] = {
> +  {
> +    {
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +    }, /* arg_0 */
> +    {
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +    }, /* arg_1 */
> +    {
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +      0, 0, 0, 0,
> +    }, /* expect */
> +  },
> +  {
> +    {
> +      65535, 65535, 65535, 65535,
> +      65535, 65535, 65535, 65535,
> +      65535, 65535, 65535, 65535,
> +      65535, 65535, 65535, 65535,
> +    },
> +    {
> +      55535, 45535, 35535, 25535,
> +      55535, 45535, 35535, 25535,
> +      55535, 45535, 35535, 25535,
> +      55535, 45535, 35535, 25535,
> +    },
> +    {
> +      10000, 20000, 30000, 40000,
> +      10000, 20000, 30000, 40000,
> +      10000, 20000, 30000, 40000,
> +      10000, 20000, 30000, 40000,
> +    },
> +  },
> +  {
> +    {
> +         0,     0,     1,     0,
> +         1,     2,     3,     0,
> +         1, 65535,     3, 65535,
> +         5, 65534, 65535,     9,
> +    },
> +    {
> +         0,     1,     1, 65534,
> +      65534, 65534,     1, 65535,
> +         0, 65535, 65535,     0,
> +      65535, 65535,     1,     2,
> +    },
> +    {
> +         0,     0,     0,     0,
> +         0,     0,     2,     0,
> +         1,     0,     0, 65535,
> +         0,     0, 65534,     7,
> +    },
> +  },
> +};
> +
> +uint32_t TEST_UNARY_DATA(uint32_t, usub)[][3][N] = {
> +  {
> +    {
> +      0, 0, 4, 0,
> +      0, 0, 4, 0,
> +      0, 0, 4, 0,
> +      0, 0, 4, 0,
> +    }, /* arg_0 */
> +    {
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +      0, 1, 2, 3,
> +    }, /* arg_1 */
> +    {
> +      0, 0, 2, 0,
> +      0, 0, 2, 0,
> +      0, 0, 2, 0,
> +      0, 0, 2, 0,
> +    }, /* expect */
> +  },
> +  {
> +    {
> +      4294967295, 4294967295, 4294967295, 4294967295,
> +      4294967295, 4294967295, 4294967295, 4294967295,
> +      4294967295, 4294967295, 4294967295, 4294967295,
> +      4294967295, 4294967295, 4294967295, 4294967295,
> +    },
> +    {
> +      1294967295, 2294967295, 3294967295, 4294967295,
> +      1294967295, 2294967295, 3294967295, 4294967295,
> +      1294967295, 2294967295, 3294967295, 4294967295,
> +      1294967295, 2294967295, 3294967295, 4294967295,
> +    },
> +    {
> +      3000000000, 2000000000, 1000000000,          0,
> +      3000000000, 2000000000, 1000000000,          0,
> +      3000000000, 2000000000, 1000000000,          0,
> +      3000000000, 2000000000, 1000000000,          0,
> +    },
> +  },
> +  {
> +    {
> +              0,          0,          9,          0,
> +              1, 4294967295,          3,          0,
> +              1,          2,          3,          4,
> +              5, 4294967294, 4294967295, 4294967295,
> +    },
> +    {
> +              0,          1,          1, 4294967294,
> +              1,          2, 4294967294, 4294967295,
> +              1, 4294967295, 4294967295,          1,
> +              1, 4294967295, 4294967290,          9,
> +    },
> +    {
> +              0,          0,          8,          0,
> +              0, 4294967293,          0,          0,
> +              0,          0,          0,          3,
> +              4,          0,          5, 4294967286,
> +    },
> +  },
> +};
> +
> +uint64_t TEST_UNARY_DATA(uint64_t, usub)[][3][N] = {
> +  {
> +    {
> +      0, 9, 0, 0,
> +      0, 9, 0, 0,
> +      0, 9, 0, 0,
> +      0, 9, 0, 0,
> +    }, /* arg_0 */
> +    {
> +      0, 2, 3, 1,
> +      0, 2, 3, 1,
> +      0, 2, 3, 1,
> +      0, 2, 3, 1,
> +    }, /* arg_1 */
> +    {
> +      0, 7, 0, 0,
> +      0, 7, 0, 0,
> +      0, 7, 0, 0,
> +      0, 7, 0, 0,
> +    }, /* expect */
> +  },
> +  {
> +    {
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> +    },
> +    {
> +      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> +      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> +      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> +      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> +    },
> +    {
> +       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> +       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> +       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> +       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> +    },
> +  },
> +  {
> +    {
> +                         0, 18446744073709551615u,                     1,    
>                  0,
> +                         1, 18446744073709551615u,                     3,    
>                  0,
> +                         1, 18446744073709551614u,                     3,    
>                  4,
> +                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> +    },
> +    {
> +                         0,                     1,                     1, 
> 18446744073709551614u,
> +      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> +      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> +    },
> +    {
> +                         0, 18446744073709551614u,                     0,    
>                  0,
> +                         0,                     1,                     0,    
>                  0,
> +                         0,                     0,                     0,    
>                  0,
> +                         0,                     0,                     0,    
>                  8,
> +    },
> +  },
> +};
> +
>  int8_t TEST_UNARY_DATA(int8_t, sat_s_add_imm)[][2][N] =
>  {
>    { /* For add imm -128 */
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
> index 97e50406e60..5fc747bc990 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_1
>
> -DEF_VEC_SAT_U_SUB_FMT_1(T)
> +DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
> index a5428c43010..c9976d0d1de 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_1
>
> -DEF_VEC_SAT_U_SUB_FMT_1(T)
> +DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
> index bdb65d91c1f..10a0b0c29cf 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_1
>
> -DEF_VEC_SAT_U_SUB_FMT_1(T)
> +DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
> index 3fe5fe33bef..7b22863b4fb 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-1-u8.c
> @@ -2,74 +2,15 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_1
>
> -DEF_VEC_SAT_U_SUB_FMT_1(T)
> +DEF_VEC_SAT_U_SUB_FMT_1_WRAP(T)
> +
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_1_WRAP(T, out, op_1, op_2, N)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
> index 0f4129ca665..a6b2dc43deb 100644
> --- 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
> +++ 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_10
>
> -DEF_VEC_SAT_U_SUB_FMT_10(T)
> +DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
> index 8b995eb3a16..91e749e6890 100644
> --- 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
> +++ 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_10
>
> -DEF_VEC_SAT_U_SUB_FMT_10(T)
> +DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
> index d12d9815e83..b7a631484d2 100644
> --- 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
> +++ 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_10
>
> -DEF_VEC_SAT_U_SUB_FMT_10(T)
> +DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
> index 384ef3e9809..1d5579878b1 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-10-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_10
>
> -DEF_VEC_SAT_U_SUB_FMT_10(T)
> +DEF_VEC_SAT_U_SUB_FMT_10_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_10_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
> index 5cf08ac3ed6..dcd6d1768d1 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_2
>
> -DEF_VEC_SAT_U_SUB_FMT_2(T)
> +DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
> index 85c84542e64..98a1fffad38 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_2
>
> -DEF_VEC_SAT_U_SUB_FMT_2(T)
> +DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
> index 67d5ac5d899..5445b01422a 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_2
>
> -DEF_VEC_SAT_U_SUB_FMT_2(T)
> +DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
> index 809f07fc6fc..3aaec4d748d 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-2-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_2
>
> -DEF_VEC_SAT_U_SUB_FMT_2(T)
> +DEF_VEC_SAT_U_SUB_FMT_2_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_2_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
> index 57839a9cd98..99e58cd2927 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_3
>
> -DEF_VEC_SAT_U_SUB_FMT_3(T)
> +DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
> index ffb0dcc4d18..bd7bcd00439 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_3
>
> -DEF_VEC_SAT_U_SUB_FMT_3(T)
> +DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
> index 396667790b5..96ee0c89634 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_3
>
> -DEF_VEC_SAT_U_SUB_FMT_3(T)
> +DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
> index e795f62bfe2..b9fa957de33 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-3-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_3
>
> -DEF_VEC_SAT_U_SUB_FMT_3(T)
> +DEF_VEC_SAT_U_SUB_FMT_3_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_3_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
> index 0eecf829686..6d4f3775e86 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_4
>
> -DEF_VEC_SAT_U_SUB_FMT_4(T)
> +DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
> index 1d0d16b7408..14250178b46 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_4
>
> -DEF_VEC_SAT_U_SUB_FMT_4(T)
> +DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
> index 98fdfa24b31..149d48171e3 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_4
>
> -DEF_VEC_SAT_U_SUB_FMT_4(T)
> +DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
> index 18a887dd345..12195cd50bd 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-4-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_4
>
> -DEF_VEC_SAT_U_SUB_FMT_4(T)
> +DEF_VEC_SAT_U_SUB_FMT_4_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_4_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
> index ce44c049c57..9cd25773f6b 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_5
>
> -DEF_VEC_SAT_U_SUB_FMT_5(T)
> +DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
> index 36ae7b322c7..638e054d4e1 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_5
>
> -DEF_VEC_SAT_U_SUB_FMT_5(T)
> +DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
> index 7b40ffdbed3..db86baf2823 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_5
>
> -DEF_VEC_SAT_U_SUB_FMT_5(T)
> +DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
> index 3b0807febea..b277e1c73e6 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-5-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_5
>
> -DEF_VEC_SAT_U_SUB_FMT_5(T)
> +DEF_VEC_SAT_U_SUB_FMT_5_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_5_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
> index e972078eca5..e79e2fc9de8 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_6
>
> -DEF_VEC_SAT_U_SUB_FMT_6(T)
> +DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
> index 54e28487cac..cd9cbfc3455 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_6
>
> -DEF_VEC_SAT_U_SUB_FMT_6(T)
> +DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
> index 33f3be04deb..7c0f753e96b 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_6
>
> -DEF_VEC_SAT_U_SUB_FMT_6(T)
> +DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
> index 13760387814..d97a834344f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-6-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_6
>
> -DEF_VEC_SAT_U_SUB_FMT_6(T)
> +DEF_VEC_SAT_U_SUB_FMT_6_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_6_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
> index 83241ef6f99..3b8c87012d0 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_7
>
> -DEF_VEC_SAT_U_SUB_FMT_7(T)
> +DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
> index f20bb21e3b1..065d898c037 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_7
>
> -DEF_VEC_SAT_U_SUB_FMT_7(T)
> +DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
> index 4ad0afd3a6f..f6783a8c8e2 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_7
>
> -DEF_VEC_SAT_U_SUB_FMT_7(T)
> +DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
> index 3b33b136d41..6b9ae2d56a9 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-7-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_7
>
> -DEF_VEC_SAT_U_SUB_FMT_7(T)
> +DEF_VEC_SAT_U_SUB_FMT_7_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_7_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
> index b212550fed3..27c4563abb5 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_8
>
> -DEF_VEC_SAT_U_SUB_FMT_8(T)
> +DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
> index 1fb707c3e80..2dba8752cbd 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_8
>
> -DEF_VEC_SAT_U_SUB_FMT_8(T)
> +DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
> index da8c09c1eaa..149a5227338 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_8
>
> -DEF_VEC_SAT_U_SUB_FMT_8(T)
> +DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
> index 647607f29cf..739850ed163 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-8-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_8
>
> -DEF_VEC_SAT_U_SUB_FMT_8(T)
> +DEF_VEC_SAT_U_SUB_FMT_8_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_8_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
> index 9bb0664aa87..3eb91efe93f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u16.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint16_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_9
>
> -DEF_VEC_SAT_U_SUB_FMT_9(T)
> +DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -      65535, 65535, 65535, 65535,
> -    },
> -    {
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -      55535, 45535, 35535, 25535,
> -    },
> -    {
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -      10000, 20000, 30000, 40000,
> -    },
> -  },
> -  {
> -    {
> -         0,     0,     1,     0,
> -         1,     2,     3,     0,
> -         1, 65535,     3, 65535,
> -         5, 65534, 65535,     9,
> -    },
> -    {
> -         0,     1,     1, 65534,
> -      65534, 65534,     1, 65535,
> -         0, 65535, 65535,     0,
> -      65535, 65535,     1,     2,
> -    },
> -    {
> -         0,     0,     0,     0,
> -         0,     0,     2,     0,
> -         1,     0,     0, 65535,
> -         0,     0, 65534,     7,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
> index f142b8b37fb..3e8d6fb2a42 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u32.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint32_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_9
>
> -DEF_VEC_SAT_U_SUB_FMT_9(T)
> +DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -      0, 0, 4, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -      0, 0, 2, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -      4294967295, 4294967295, 4294967295, 4294967295,
> -    },
> -    {
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -      1294967295, 2294967295, 3294967295, 4294967295,
> -    },
> -    {
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -      3000000000, 2000000000, 1000000000,          0,
> -    },
> -  },
> -  {
> -    {
> -              0,          0,          9,          0,
> -              1, 4294967295,          3,          0,
> -              1,          2,          3,          4,
> -              5, 4294967294, 4294967295, 4294967295,
> -    },
> -    {
> -              0,          1,          1, 4294967294,
> -              1,          2, 4294967294, 4294967295,
> -              1, 4294967295, 4294967295,          1,
> -              1, 4294967295, 4294967290,          9,
> -    },
> -    {
> -              0,          0,          8,          0,
> -              0, 4294967293,          0,          0,
> -              0,          0,          0,          3,
> -              4,          0,          5, 4294967286,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
> index 574b91a12f8..bb09035504f 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u64.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint64_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_9
>
> -DEF_VEC_SAT_U_SUB_FMT_9(T)
> +DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -      0, 9, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -      0, 2, 3, 1,
> -    }, /* arg_1 */
> -    {
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -      0, 7, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -      10446744073709551615u, 11446744073709551615u, 12446744073709551615u, 
> 18446744073709551615u,
> -    },
> -    {
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -       8000000000000000000u,  7000000000000000000u,  6000000000000000000u,   
>                  0u,
> -    },
> -  },
> -  {
> -    {
> -                         0, 18446744073709551615u,                     1,    
>                  0,
> -                         1, 18446744073709551615u,                     3,    
>                  0,
> -                         1, 18446744073709551614u,                     3,    
>                  4,
> -                         5, 18446744073709551614u, 18446744073709551615u,    
>                  9,
> -    },
> -    {
> -                         0,                     1,                     1, 
> 18446744073709551614u,
> -      18446744073709551614u, 18446744073709551614u, 18446744073709551614u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u, 
> 18446744073709551615u,
> -      18446744073709551615u, 18446744073709551615u, 18446744073709551615u,   
>                   1,
> -    },
> -    {
> -                         0, 18446744073709551614u,                     0,    
>                  0,
> -                         0,                     1,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  0,
> -                         0,                     0,                     0,    
>                  8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> diff --git 
> a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c 
> b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
> index 2c8ee4232d7..1dc31914b07 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/autovec/sat/vec_sat_u_sub-run-9-u8.c
> @@ -2,74 +2,14 @@
>  /* { dg-additional-options "-std=c99" } */
>
>  #include "vec_sat_arith.h"
> +#include "vec_sat_data.h"
>
>  #define T                  uint8_t
> -#define N                  16
> -#define RUN_VEC_SAT_BINARY RUN_VEC_SAT_U_SUB_FMT_9
>
> -DEF_VEC_SAT_U_SUB_FMT_9(T)
> +DEF_VEC_SAT_U_SUB_FMT_9_WRAP(T)
>
> -T test_data[][3][N] = {
> -  {
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* arg_0 */
> -    {
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -      0, 1, 2, 3,
> -    }, /* arg_1 */
> -    {
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -      0, 0, 0, 0,
> -    }, /* expect */
> -  },
> -  {
> -    {
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -       0, 255, 255, 255,
> -    },
> -    {
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -       1, 255, 254, 251,
> -    },
> -    {
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -       0,   0,   1,   4,
> -    },
> -  },
> -  {
> -    {
> -       0,   0,   1,   0,
> -       1,   2,   3,   0,
> -       1,   2,   3, 255,
> -       5, 254, 255,   9,
> -    },
> -    {
> -       0,   1,   0, 254,
> -      254, 254, 254, 255,
> -      255, 255,   0, 252,
> -      255, 255, 255,   1,
> -    },
> -    {
> -       0,   0,   1,   0,
> -       0,   0,   0,   0,
> -       0,   0,   3,   3,
> -       0,   0,   0,   8,
> -    },
> -  },
> -};
> +#define test_data          TEST_UNARY_DATA_WRAP(T, usub)
> +#define RUN_VEC_SAT_BINARY(T, out, op_1, op_2, N) \
> +  RUN_VEC_SAT_U_SUB_FMT_9_WRAP(T, out, op_1, op_2, N)
>
>  #include "vec_sat_binary_vvv_run.h"
> --
> 2.17.1
>

Reply via email to