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

Move the scalar SAT_ADD includes both the signed and unsigned
integer to the folder gcc.target/riscv/sat.  According to the
implementation the below options will be appended for each
test cases.

* -O2
* -O3
* -Ofast
* -Os
* -Oz

Then we can see the test log similar as below:

Executing on host: .../sat_s_add-1-i8.c ...  -O2 -march=rv64gc -S -o 
sat_s_add-1-i8.s
Executing on host: .../sat_s_add-1-i8.c ...  -O3 -march=rv64gc -S -o 
sat_s_add-1-i8.s
Executing on host: .../sat_s_add-1-i8.c ...  -Ofast -march=rv64gc -S -o 
sat_s_add-1-i8.s
Executing on host: .../sat_s_add-1-i8.c ...  -Oz -march=rv64gc -S -o 
sat_s_add-1-i8.s
Executing on host: .../sat_s_add-1-i8.c ...  -Os -march=rv64gc -S -o 
sat_s_add-1-i8.s

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

Committed as pre-approved by kito.

gcc/testsuite/ChangeLog:

        * gcc.target/riscv/riscv.exp: Add new folder sat under riscv
        and add 5 options for each sat test.
        * gcc.target/riscv/sat_s_add-1-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-1-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-1-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-1-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-1-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-1-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-1-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-1-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-2-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-2-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-2-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-2-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-2-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-2-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-2-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-2-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-3-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-3-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-3-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-3-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-3-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-3-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-3-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-3-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-4-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-4-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-4-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-4-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-4-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-4-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-4-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-4-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-run-1-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-1-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-run-1-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-1-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-run-1-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-1-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-run-1-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-1-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-run-2-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-2-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-run-2-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-2-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-run-2-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-2-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-run-2-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-2-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-run-3-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-3-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-run-3-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-3-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-run-3-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-3-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-run-3-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-3-i8.c: ...here.
        * gcc.target/riscv/sat_s_add-run-4-i16.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-4-i16.c: ...here.
        * gcc.target/riscv/sat_s_add-run-4-i32.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-4-i32.c: ...here.
        * gcc.target/riscv/sat_s_add-run-4-i64.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-4-i64.c: ...here.
        * gcc.target/riscv/sat_s_add-run-4-i8.c: Move to...
        * gcc.target/riscv/sat/sat_s_add-run-4-i8.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-1-1.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-1-1.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-1.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-1.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-2-1.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-2-1.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-2.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-2.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-3-1.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-3-1.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-3.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-3.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-4.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-4.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-run-1.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-run-1.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-run-2.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-run-2.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-run-3.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-run-3.c: ...here.
        * gcc.target/riscv/sat_s_add_imm-run-4.c: Move to...
        * gcc.target/riscv/sat/sat_s_add_imm-run-4.c: ...here.
        * gcc.target/riscv/sat_u_add-1-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-1-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-1-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-1-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-1-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-1-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-1-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-1-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-2-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-2-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-2-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-2-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-2-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-2-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-2-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-2-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-3-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-3-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-3-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-3-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-3-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-3-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-3-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-3-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-4-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-4-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-4-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-4-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-4-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-4-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-4-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-4-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-5-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-5-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-5-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-5-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-5-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-5-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-5-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-5-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-6-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-6-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-6-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-6-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-6-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-6-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-6-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-6-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-1-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-1-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-1-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-1-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-1-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-1-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-1-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-1-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-2-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-2-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-2-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-2-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-2-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-2-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-2-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-2-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-3-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-3-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-3-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-3-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-3-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-3-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-3-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-3-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-4-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-4-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-4-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-4-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-4-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-4-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-4-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-4-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-5-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-5-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-5-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-5-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-5-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-5-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-5-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-5-u8.c: ...here.
        * gcc.target/riscv/sat_u_add-run-6-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-6-u16.c: ...here.
        * gcc.target/riscv/sat_u_add-run-6-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-6-u32.c: ...here.
        * gcc.target/riscv/sat_u_add-run-6-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-6-u64.c: ...here.
        * gcc.target/riscv/sat_u_add-run-6-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add-run-6-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-1-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-1-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-1-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-1-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-1-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-1-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-1-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-1-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-2-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-2-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-2-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-2-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-2-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-2-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-2-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-2-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-3-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-3-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-3-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-3-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-3-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-3-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-3-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-3-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-4-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-4-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-4-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-4-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-4-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-4-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-4-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-4-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-1-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-1-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-1-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-1-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-1-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-1-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-1-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-1-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-2-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-2-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-2-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-2-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-2-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-2-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-2-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-2-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-3-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-3-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-3-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-3-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-3-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-3-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-3-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-3-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-4-u16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-4-u16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-4-u32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-4-u32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-4-u64.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-4-u64.c: ...here.
        * gcc.target/riscv/sat_u_add_imm-run-4-u8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm-run-4-u8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-1.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-1.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-10.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-10.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-11.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-11.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-12.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-12.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-13.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-13.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-14.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-14.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-15.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-15.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-16.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-16.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-17.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-17.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-18.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-18.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-19.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-19.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-2.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-2.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-20.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-20.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-21.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-21.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-22.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-22.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-23.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-23.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-24.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-24.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-25.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-25.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-26.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-26.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-27.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-27.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-28.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-28.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-29.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-29.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-3.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-3.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-30.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-30.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-31.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-31.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-32.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-32.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-33.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-33.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-34.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-34.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-35.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-35.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-36.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-36.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-37.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-37.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-38.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-38.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-39.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-39.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-4.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-4.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-40.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-40.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-41.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-41.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-42.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-42.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-43.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-43.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-44.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-44.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-45.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-45.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-46.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-46.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-47.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-47.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-48.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-48.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-49.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-49.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-5.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-5.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-50.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-50.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-51.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-51.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-52.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-52.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-53.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-53.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-54.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-54.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-55.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-55.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-56.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-56.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-57.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-57.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-58.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-58.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-59.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-59.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-6.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-6.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-60.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-60.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-7.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-7.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-8.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-8.c: ...here.
        * gcc.target/riscv/sat_u_add_imm_type_check-9.c: Move to...
        * gcc.target/riscv/sat/sat_u_add_imm_type_check-9.c: ...here.
        * gcc.target/riscv/sat/sat_arith.h: New test.
        * gcc.target/riscv/sat/sat_arith_data.h: New test.
        * gcc.target/riscv/sat/scalar_sat_binary.h: New test.
        * gcc.target/riscv/sat/scalar_sat_binary_run_xxx.h: New test.

Signed-off-by: Pan Li <pan2...@intel.com>
---
 gcc/testsuite/gcc.target/riscv/riscv.exp      |  12 +
 .../gcc.target/riscv/sat/sat_arith.h          | 605 ++++++++++++++++++
 .../gcc.target/riscv/sat/sat_arith_data.h     | 375 +++++++++++
 .../riscv/{ => sat}/sat_s_add-1-i16.c         |   0
 .../riscv/{ => sat}/sat_s_add-1-i32.c         |   0
 .../riscv/{ => sat}/sat_s_add-1-i64.c         |   0
 .../riscv/{ => sat}/sat_s_add-1-i8.c          |   0
 .../riscv/{ => sat}/sat_s_add-2-i16.c         |   0
 .../riscv/{ => sat}/sat_s_add-2-i32.c         |   0
 .../riscv/{ => sat}/sat_s_add-2-i64.c         |   0
 .../riscv/{ => sat}/sat_s_add-2-i8.c          |   0
 .../riscv/{ => sat}/sat_s_add-3-i16.c         |   0
 .../riscv/{ => sat}/sat_s_add-3-i32.c         |   0
 .../riscv/{ => sat}/sat_s_add-3-i64.c         |   0
 .../riscv/{ => sat}/sat_s_add-3-i8.c          |   0
 .../riscv/{ => sat}/sat_s_add-4-i16.c         |   0
 .../riscv/{ => sat}/sat_s_add-4-i32.c         |   0
 .../riscv/{ => sat}/sat_s_add-4-i64.c         |   0
 .../riscv/{ => sat}/sat_s_add-4-i8.c          |   0
 .../riscv/{ => sat}/sat_s_add-run-1-i16.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-1-i32.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-1-i64.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-1-i8.c      |   0
 .../riscv/{ => sat}/sat_s_add-run-2-i16.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-2-i32.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-2-i64.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-2-i8.c      |   0
 .../riscv/{ => sat}/sat_s_add-run-3-i16.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-3-i32.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-3-i64.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-3-i8.c      |   0
 .../riscv/{ => sat}/sat_s_add-run-4-i16.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-4-i32.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-4-i64.c     |   0
 .../riscv/{ => sat}/sat_s_add-run-4-i8.c      |   0
 .../riscv/{ => sat}/sat_s_add_imm-1-1.c       |   0
 .../riscv/{ => sat}/sat_s_add_imm-1.c         |   0
 .../riscv/{ => sat}/sat_s_add_imm-2-1.c       |   0
 .../riscv/{ => sat}/sat_s_add_imm-2.c         |   0
 .../riscv/{ => sat}/sat_s_add_imm-3-1.c       |   0
 .../riscv/{ => sat}/sat_s_add_imm-3.c         |   0
 .../riscv/{ => sat}/sat_s_add_imm-4.c         |   0
 .../riscv/{ => sat}/sat_s_add_imm-run-1.c     |   0
 .../riscv/{ => sat}/sat_s_add_imm-run-2.c     |   0
 .../riscv/{ => sat}/sat_s_add_imm-run-3.c     |   0
 .../riscv/{ => sat}/sat_s_add_imm-run-4.c     |   0
 .../riscv/{ => sat}/sat_u_add-1-u16.c         |   2 +-
 .../riscv/{ => sat}/sat_u_add-1-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-1-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-1-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-2-u16.c         |   0
 .../riscv/{ => sat}/sat_u_add-2-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-2-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-2-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-3-u16.c         |   0
 .../riscv/{ => sat}/sat_u_add-3-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-3-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-3-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-4-u16.c         |   0
 .../riscv/{ => sat}/sat_u_add-4-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-4-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-4-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-5-u16.c         |   0
 .../riscv/{ => sat}/sat_u_add-5-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-5-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-5-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-6-u16.c         |   0
 .../riscv/{ => sat}/sat_u_add-6-u32.c         |   0
 .../riscv/{ => sat}/sat_u_add-6-u64.c         |   0
 .../riscv/{ => sat}/sat_u_add-6-u8.c          |   0
 .../riscv/{ => sat}/sat_u_add-run-1-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-1-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-1-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-1-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add-run-2-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-2-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-2-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-2-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add-run-3-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-3-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-3-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-3-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add-run-4-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-4-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-4-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-4-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add-run-5-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-5-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-5-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-5-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add-run-6-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-6-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-6-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add-run-6-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add_imm-1-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-1-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-1-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-1-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add_imm-2-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-2-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-2-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-2-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add_imm-3-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-3-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-3-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-3-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add_imm-4-u16.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-4-u32.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-4-u64.c     |   0
 .../riscv/{ => sat}/sat_u_add_imm-4-u8.c      |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-1-u16.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-1-u32.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-1-u64.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-1-u8.c  |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-2-u16.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-2-u32.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-2-u64.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-2-u8.c  |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-3-u16.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-3-u32.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-3-u64.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-3-u8.c  |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-4-u16.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-4-u32.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-4-u64.c |   0
 .../riscv/{ => sat}/sat_u_add_imm-run-4-u8.c  |   0
 .../{ => sat}/sat_u_add_imm_type_check-1.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-10.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-11.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-12.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-13.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-14.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-15.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-16.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-17.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-18.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-19.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-2.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-20.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-21.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-22.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-23.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-24.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-25.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-26.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-27.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-28.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-29.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-3.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-30.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-31.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-32.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-33.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-34.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-35.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-36.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-37.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-38.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-39.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-4.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-40.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-41.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-42.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-43.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-44.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-45.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-46.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-47.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-48.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-49.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-5.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-50.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-51.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-52.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-53.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-54.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-55.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-56.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-57.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-58.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-59.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-6.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-60.c   |   0
 .../{ => sat}/sat_u_add_imm_type_check-7.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-8.c    |   0
 .../{ => sat}/sat_u_add_imm_type_check-9.c    |   0
 .../gcc.target/riscv/sat/scalar_sat_binary.h  |  27 +
 .../riscv/sat/scalar_sat_binary_run_xxx.h     |  21 +
 188 files changed, 1041 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-1-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-1-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-1-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-1-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-2-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-2-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-2-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-2-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-3-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-3-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-3-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-3-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-4-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-4-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-4-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-4-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-1-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-1-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-1-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-1-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-2-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-2-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-2-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-2-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-3-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-3-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-3-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-3-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-4-i16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-4-i32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-4-i64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add-run-4-i8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-1-1.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-1.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-2-1.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-2.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-3-1.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-3.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-4.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-run-1.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-run-2.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-run-3.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_s_add_imm-run-4.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-1-u16.c (91%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-1-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-1-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-1-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-2-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-2-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-2-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-2-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-3-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-3-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-3-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-3-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-4-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-4-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-4-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-4-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-5-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-5-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-5-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-5-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-6-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-6-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-6-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-6-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-1-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-1-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-1-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-1-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-2-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-2-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-2-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-2-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-3-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-3-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-3-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-3-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-4-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-4-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-4-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-4-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-5-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-5-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-5-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-5-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-6-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-6-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-6-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add-run-6-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-1-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-1-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-1-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-1-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-2-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-2-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-2-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-2-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-3-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-3-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-3-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-3-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-4-u16.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-4-u32.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-4-u64.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-4-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-1-u16.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-1-u32.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-1-u64.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-1-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-2-u16.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-2-u32.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-2-u64.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-2-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-3-u16.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-3-u32.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-3-u64.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-3-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-4-u16.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-4-u32.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-4-u64.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm-run-4-u8.c (100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-1.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-10.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-11.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-12.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-13.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-14.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-15.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-16.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-17.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-18.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-19.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-2.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-20.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-21.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-22.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-23.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-24.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-25.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-26.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-27.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-28.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-29.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-3.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-30.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-31.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-32.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-33.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-34.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-35.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-36.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-37.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-38.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-39.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-4.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-40.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-41.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-42.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-43.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-44.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-45.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-46.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-47.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-48.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-49.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-5.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-50.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-51.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-52.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-53.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-54.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-55.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-56.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-57.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-58.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-59.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-6.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-60.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-7.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-8.c 
(100%)
 rename gcc/testsuite/gcc.target/riscv/{ => sat}/sat_u_add_imm_type_check-9.c 
(100%)
 create mode 100644 gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary.h
 create mode 100644 
gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary_run_xxx.h

diff --git a/gcc/testsuite/gcc.target/riscv/riscv.exp 
b/gcc/testsuite/gcc.target/riscv/riscv.exp
index 187eb664047..3620ece4758 100644
--- a/gcc/testsuite/gcc.target/riscv/riscv.exp
+++ b/gcc/testsuite/gcc.target/riscv/riscv.exp
@@ -39,5 +39,17 @@ dg-init
 gcc-dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.\[cS\]]] \
        "" $DEFAULT_CFLAGS
 
+# Saturation alu
+foreach opt {
+  {-O2}
+  {-O3}
+  {-Ofast}
+  {-Os}
+  {-Oz}
+} {
+  dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/sat/*.\[cS\]]] \
+    "$opt" ""
+}
+
 # All done.
 dg-finish
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h 
b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
new file mode 100644
index 00000000000..c8a135a5f0f
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_arith.h
@@ -0,0 +1,605 @@
+#ifndef HAVE_SAT_ARITH
+#define HAVE_SAT_ARITH
+
+#include <stdint-gcc.h>
+#include <stdbool.h>
+
+/******************************************************************************/
+/* Saturation Add (unsigned and signed)                                       
*/
+/******************************************************************************/
+#define DEF_SAT_U_ADD_FMT_1(T)             \
+T __attribute__((noinline))                \
+sat_u_add_##T##_fmt_1 (T x, T y)           \
+{                                          \
+  return (x + y) | (-(T)((T)(x + y) < x)); \
+}
+
+#define DEF_SAT_U_ADD_FMT_2(T)           \
+T __attribute__((noinline))              \
+sat_u_add_##T##_fmt_2 (T x, T y)         \
+{                                        \
+  return (T)(x + y) >= x ? (x + y) : -1; \
+}
+
+#define DEF_SAT_U_ADD_FMT_3(T)                      \
+T __attribute__((noinline))                         \
+sat_u_add_##T##_fmt_3 (T x, T y)                    \
+{                                                   \
+  T ret;                                            \
+  T overflow = __builtin_add_overflow (x, y, &ret); \
+  return (T)(-overflow) | ret;                      \
+}
+
+#define DEF_SAT_U_ADD_FMT_4(T)                           \
+T __attribute__((noinline))                              \
+sat_u_add_##T##_fmt_4 (T x, T y)                         \
+{                                                        \
+  T ret;                                                 \
+  return __builtin_add_overflow (x, y, &ret) ? -1 : ret; \
+}
+
+#define DEF_SAT_U_ADD_FMT_5(T)                                \
+T __attribute__((noinline))                                   \
+sat_u_add_##T##_fmt_5 (T x, T y)                              \
+{                                                             \
+  T ret;                                                      \
+  return __builtin_add_overflow (x, y, &ret) == 0 ? ret : -1; \
+}
+
+#define DEF_SAT_U_ADD_FMT_6(T)          \
+T __attribute__((noinline))             \
+sat_u_add_##T##_fmt_6 (T x, T y)        \
+{                                       \
+  return (T)(x + y) < x ? -1 : (x + y); \
+}
+
+#define RUN_SAT_U_ADD_FMT_1(T, x, y) sat_u_add_##T##_fmt_1(x, y)
+#define RUN_SAT_U_ADD_FMT_2(T, x, y) sat_u_add_##T##_fmt_2(x, y)
+#define RUN_SAT_U_ADD_FMT_3(T, x, y) sat_u_add_##T##_fmt_3(x, y)
+#define RUN_SAT_U_ADD_FMT_4(T, x, y) sat_u_add_##T##_fmt_4(x, y)
+#define RUN_SAT_U_ADD_FMT_5(T, x, y) sat_u_add_##T##_fmt_5(x, y)
+#define RUN_SAT_U_ADD_FMT_6(T, x, y) sat_u_add_##T##_fmt_6(x, y)
+
+#define DEF_SAT_U_ADD_IMM_FMT_1(T, IMM)      \
+T __attribute__((noinline))                  \
+sat_u_add_imm##IMM##_##T##_fmt_1 (T x)       \
+{                                            \
+  return (T)(x + IMM) >= x ? (x + IMM) : -1; \
+}
+
+#define DEF_SAT_U_ADD_IMM_FMT_2(T, IMM)     \
+T __attribute__((noinline))                 \
+sat_u_add_imm##IMM##_##T##_fmt_2 (T x)      \
+{                                           \
+  return (T)(x + IMM) < x ? -1 : (x + IMM); \
+}
+
+#define DEF_SAT_U_ADD_IMM_FMT_3(T, IMM)                    \
+T __attribute__((noinline))                                \
+sat_u_add_imm##IMM##_##T##_fmt_3 (T x)                     \
+{                                                          \
+  T ret;                                                   \
+  return __builtin_add_overflow (x, IMM, &ret) ? -1 : ret; \
+}
+
+#define DEF_SAT_U_ADD_IMM_FMT_4(T, IMM)                         \
+T __attribute__((noinline))                                     \
+sat_u_add_imm##IMM##_##T##_fmt_4 (T x)                          \
+{                                                               \
+  T ret;                                                        \
+  return __builtin_add_overflow (x, IMM, &ret) == 0 ? ret : -1; \
+}
+
+#define DEF_SAT_U_ADD_IMM_TYPE_CHECK_FMT_1(T, IMM)         \
+T __attribute__((noinline))                                \
+sat_u_add_imm_type_check##_##T##_fmt_1 (T x)               \
+{                                                          \
+  T ret;                                                   \
+  return __builtin_add_overflow (x, IMM, &ret) ? -1 : ret; \
+}
+
+#define DEF_SAT_U_ADD_IMM_TYPE_CHECK_FMT_2(T, IMM)              \
+T __attribute__((noinline))                                     \
+sat_u_add_imm_type_check##_##T##_fmt_2 (T x)                    \
+{                                                               \
+  T ret;                                                        \
+  return __builtin_add_overflow (x, IMM, &ret) == 0 ? ret : -1; \
+}
+
+#define RUN_SAT_U_ADD_IMM_FMT_1(T, x, IMM, expect) \
+  if (sat_u_add_imm##IMM##_##T##_fmt_1(x) != expect) __builtin_abort ()
+
+#define RUN_SAT_U_ADD_IMM_FMT_2(T, x, IMM, expect) \
+  if (sat_u_add_imm##IMM##_##T##_fmt_2(x) != expect) __builtin_abort ()
+
+#define RUN_SAT_U_ADD_IMM_FMT_3(T, x, IMM, expect) \
+  if (sat_u_add_imm##IMM##_##T##_fmt_3(x) != expect) __builtin_abort ()
+
+#define RUN_SAT_U_ADD_IMM_FMT_4(T, x, IMM, expect) \
+  if (sat_u_add_imm##IMM##_##T##_fmt_4(x) != expect) __builtin_abort ()
+
+#define DEF_SAT_S_ADD_FMT_1(T, UT, MIN, MAX) \
+T __attribute__((noinline))                  \
+sat_s_add_##T##_fmt_1 (T x, T y)             \
+{                                            \
+  T sum = (UT)x + (UT)y;                     \
+  return (x ^ y) < 0                         \
+    ? sum                                    \
+    : (sum ^ x) >= 0                         \
+      ? sum                                  \
+      : x < 0 ? MIN : MAX;                   \
+}
+#define DEF_SAT_S_ADD_FMT_1_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_ADD_FMT_1(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_ADD_FMT_2(T, UT, MIN, MAX) \
+T __attribute__((noinline))                  \
+sat_s_add_##T##_fmt_2 (T x, T y)             \
+{                                            \
+  T sum = (UT)x + (UT)y;                     \
+  if ((x ^ y) < 0 || (sum ^ x) >= 0)         \
+    return sum;                              \
+  return x < 0 ? MIN : MAX;                  \
+}
+#define DEF_SAT_S_ADD_FMT_2_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_ADD_FMT_2(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_ADD_FMT_3(T, UT, MIN, MAX)           \
+T __attribute__((noinline))                            \
+sat_s_add_##T##_fmt_3 (T x, T y)                       \
+{                                                      \
+  T sum;                                               \
+  bool overflow = __builtin_add_overflow (x, y, &sum); \
+  return overflow ? x < 0 ? MIN : MAX : sum;           \
+}
+#define DEF_SAT_S_ADD_FMT_3_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_ADD_FMT_3(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_ADD_FMT_4(T, UT, MIN, MAX)           \
+T __attribute__((noinline))                            \
+sat_s_add_##T##_fmt_4 (T x, T y)                       \
+{                                                      \
+  T sum;                                               \
+  bool overflow = __builtin_add_overflow (x, y, &sum); \
+  return !overflow ? sum : x < 0 ? MIN : MAX;          \
+}
+#define DEF_SAT_S_ADD_FMT_4_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_ADD_FMT_4(T, UT, MIN, MAX)
+
+#define RUN_SAT_S_ADD_FMT_1(T, x, y) sat_s_add_##T##_fmt_1(x, y)
+#define RUN_SAT_S_ADD_FMT_1_WRAP(T, x, y) RUN_SAT_S_ADD_FMT_1(T, x, y)
+
+#define RUN_SAT_S_ADD_FMT_2(T, x, y) sat_s_add_##T##_fmt_2(x, y)
+#define RUN_SAT_S_ADD_FMT_2_WRAP(T, x, y) RUN_SAT_S_ADD_FMT_2(T, x, y)
+
+#define RUN_SAT_S_ADD_FMT_3(T, x, y) sat_s_add_##T##_fmt_3(x, y)
+#define RUN_SAT_S_ADD_FMT_3_WRAP(T, x, y) RUN_SAT_S_ADD_FMT_3(T, x, y)
+
+#define RUN_SAT_S_ADD_FMT_4(T, x, y) sat_s_add_##T##_fmt_4(x, y)
+#define RUN_SAT_S_ADD_FMT_4_WRAP(T, x, y) RUN_SAT_S_ADD_FMT_4(T, x, y)
+
+#define DEF_SAT_S_ADD_IMM_FMT_1(INDEX, T, UT, IMM, MIN, MAX) \
+T __attribute__((noinline))                  \
+sat_s_add_imm_##T##_fmt_1##_##INDEX (T x)             \
+{                                            \
+  T sum = (UT)x + (UT)IMM;                     \
+  return (x ^ IMM) < 0                         \
+    ? sum                                    \
+    : (sum ^ x) >= 0                         \
+      ? sum                                  \
+      : x < 0 ? MIN : MAX;                   \
+}
+
+#define RUN_SAT_S_ADD_IMM_FMT_1(INDEX, T, x, expect) \
+  if (sat_s_add_imm##_##T##_fmt_1##_##INDEX(x) != expect) __builtin_abort ()
+
+/******************************************************************************/
+/* Saturation Sub (Unsigned and Signed)                                       
*/
+/******************************************************************************/
+#define DEF_SAT_U_SUB_FMT_1(T)     \
+T __attribute__((noinline))        \
+sat_u_sub_##T##_fmt_1 (T x, T y)   \
+{                                  \
+  return (x - y) & (-(T)(x >= y)); \
+}
+
+#define DEF_SAT_U_SUB_FMT_2(T)    \
+T __attribute__((noinline))       \
+sat_u_sub_##T##_fmt_2 (T x, T y)  \
+{                                 \
+  return (x - y) & (-(T)(x > y)); \
+}
+
+#define DEF_SAT_U_SUB_FMT_3(T)   \
+T __attribute__((noinline))      \
+sat_u_sub_##T##_fmt_3 (T x, T y) \
+{                                \
+  return x > y ? x - y : 0;      \
+}
+
+#define DEF_SAT_U_SUB_FMT_4(T)   \
+T __attribute__((noinline))      \
+sat_u_sub_##T##_fmt_4 (T x, T y) \
+{                                \
+  return x >= y ? x - y : 0;     \
+}
+
+#define DEF_SAT_U_SUB_FMT_5(T)   \
+T __attribute__((noinline))      \
+sat_u_sub_##T##_fmt_5 (T x, T y) \
+{                                \
+  return x < y ? 0 : x - y;      \
+}
+
+#define DEF_SAT_U_SUB_FMT_6(T)   \
+T __attribute__((noinline))      \
+sat_u_sub_##T##_fmt_6 (T x, T y) \
+{                                \
+  return x <= y ? 0 : x - y;     \
+}
+
+#define DEF_SAT_U_SUB_FMT_7(T)                      \
+T __attribute__((noinline))                         \
+sat_u_sub_##T##_fmt_7 (T x, T y)                    \
+{                                                   \
+  T ret;                                            \
+  T overflow = __builtin_sub_overflow (x, y, &ret); \
+  return ret & (T)(overflow - 1);                   \
+}
+
+#define DEF_SAT_U_SUB_FMT_8(T)                      \
+T __attribute__((noinline))                         \
+sat_u_sub_##T##_fmt_8 (T x, T y)                    \
+{                                                   \
+  T ret;                                            \
+  T overflow = __builtin_sub_overflow (x, y, &ret); \
+  return ret & (T)-(!overflow);                     \
+}
+
+#define DEF_SAT_U_SUB_FMT_9(T)                      \
+T __attribute__((noinline))                         \
+sat_u_sub_##T##_fmt_9 (T x, T y)                    \
+{                                                   \
+  T ret;                                            \
+  T overflow = __builtin_sub_overflow (x, y, &ret); \
+  return overflow ? 0 : ret;                        \
+}
+
+#define DEF_SAT_U_SUB_FMT_10(T)                     \
+T __attribute__((noinline))                         \
+sat_u_sub_##T##_fmt_10 (T x, T y)                   \
+{                                                   \
+  T ret;                                            \
+  T overflow = __builtin_sub_overflow (x, y, &ret); \
+  return !overflow ? ret : 0;                       \
+}
+
+#define DEF_SAT_U_SUB_FMT_11(T)                        \
+T __attribute__((noinline))                            \
+sat_u_sub_##T##_fmt_11 (T x, T y)                      \
+{                                                      \
+  T ret;                                               \
+  bool overflow = __builtin_sub_overflow (x, y, &ret); \
+  return overflow ? 0 : ret;                           \
+}
+
+#define DEF_SAT_U_SUB_FMT_12(T)                        \
+T __attribute__((noinline))                            \
+sat_u_sub_##T##_fmt_12 (T x, T y)                      \
+{                                                      \
+  T ret;                                               \
+  bool overflow = __builtin_sub_overflow (x, y, &ret); \
+  return !overflow ? ret : 0;                          \
+}
+
+#define DEF_SAT_U_SUB_IMM_FMT_1(T, IMM) \
+T __attribute__((noinline))             \
+sat_u_sub_imm##IMM##_##T##_fmt_1 (T y)  \
+{                                       \
+  return (T)IMM >= y ? (T)IMM - y : 0;  \
+}
+
+#define DEF_SAT_U_SUB_IMM_FMT_2(T, IMM) \
+T __attribute__((noinline))             \
+sat_u_sub_imm##IMM##_##T##_fmt_2 (T x)  \
+{                                       \
+  return x >= (T)IMM ? x - (T)IMM : 0;  \
+}
+
+#define DEF_SAT_U_SUB_IMM_FMT_3(T, IMM) \
+T __attribute__((noinline))             \
+sat_u_sub_imm##IMM##_##T##_fmt_3 (T y)  \
+{                                       \
+  return (T)IMM > y ? (T)IMM - y : 0;   \
+}
+
+#define DEF_SAT_U_SUB_IMM_FMT_4(T, IMM) \
+T __attribute__((noinline))             \
+sat_u_sub_imm##IMM##_##T##_fmt_4 (T x)  \
+{                                       \
+  return x > (T)IMM ? x - (T)IMM : 0;   \
+}
+
+#define RUN_SAT_U_SUB_FMT_1(T, x, y) sat_u_sub_##T##_fmt_1(x, y)
+#define RUN_SAT_U_SUB_FMT_2(T, x, y) sat_u_sub_##T##_fmt_2(x, y)
+#define RUN_SAT_U_SUB_FMT_3(T, x, y) sat_u_sub_##T##_fmt_3(x, y)
+#define RUN_SAT_U_SUB_FMT_4(T, x, y) sat_u_sub_##T##_fmt_4(x, y)
+#define RUN_SAT_U_SUB_FMT_5(T, x, y) sat_u_sub_##T##_fmt_5(x, y)
+#define RUN_SAT_U_SUB_FMT_6(T, x, y) sat_u_sub_##T##_fmt_6(x, y)
+#define RUN_SAT_U_SUB_FMT_7(T, x, y) sat_u_sub_##T##_fmt_7(x, y)
+#define RUN_SAT_U_SUB_FMT_8(T, x, y) sat_u_sub_##T##_fmt_8(x, y)
+#define RUN_SAT_U_SUB_FMT_9(T, x, y) sat_u_sub_##T##_fmt_9(x, y)
+#define RUN_SAT_U_SUB_FMT_10(T, x, y) sat_u_sub_##T##_fmt_10(x, y)
+#define RUN_SAT_U_SUB_FMT_11(T, x, y) sat_u_sub_##T##_fmt_11(x, y)
+#define RUN_SAT_U_SUB_FMT_12(T, x, y) sat_u_sub_##T##_fmt_12(x, y)
+
+#define RUN_SAT_U_SUB_IMM_FMT_1(T, IMM, y, expect) \
+  if (sat_u_sub_imm##IMM##_##T##_fmt_1(y) != expect) __builtin_abort ()
+#define RUN_SAT_U_SUB_IMM_FMT_2(T, x, IMM, expect) \
+  if (sat_u_sub_imm##IMM##_##T##_fmt_2(x) != expect) __builtin_abort ()
+#define RUN_SAT_U_SUB_IMM_FMT_3(T, IMM, y, expect) \
+  if (sat_u_sub_imm##IMM##_##T##_fmt_3(y) != expect) __builtin_abort ()
+#define RUN_SAT_U_SUB_IMM_FMT_4(T, x, IMM, expect) \
+  if (sat_u_sub_imm##IMM##_##T##_fmt_4(x) != expect) __builtin_abort ()
+
+#define DEF_SAT_U_SUB_IMM_TYPE_CHECK_FMT_1(INDEX, T, IMM) \
+T __attribute__((noinline))                               \
+sat_u_sub_imm_type_check##_##INDEX##_##T##_fmt_1 (T y)    \
+{                                                         \
+  return IMM >= y ? IMM - y : 0;                          \
+}
+
+#define DEF_SAT_U_SUB_IMM_TYPE_CHECK_FMT_2(INDEX, T, IMM) \
+T __attribute__((noinline))                               \
+sat_u_sub_imm_type_check##_##INDEX##_##T##_fmt_2 (T y)    \
+{                                                         \
+  return IMM > y ? IMM - y : 0;                           \
+}
+
+#define DEF_SAT_U_SUB_IMM_TYPE_CHECK_FMT_3(INDEX, T, IMM) \
+T __attribute__((noinline))                               \
+sat_u_sub_imm_type_check##_##INDEX##_##T##_fmt_3 (T x)    \
+{                                                         \
+  return x >= IMM ? x - IMM : 0;                          \
+}
+
+#define DEF_SAT_U_SUB_IMM_TYPE_CHECK_FMT_4(INDEX, T, IMM) \
+T __attribute__((noinline))                               \
+sat_u_sub_imm_type_check##_##INDEX##_##T##_fmt_4 (T x)    \
+{                                                         \
+  return x > IMM ? x - IMM : 0;                           \
+}
+
+#define DEF_SAT_S_SUB_FMT_1(T, UT, MIN, MAX) \
+T __attribute__((noinline))                  \
+sat_s_sub_##T##_fmt_1 (T x, T y)             \
+{                                            \
+  T minus = (UT)x - (UT)y;                   \
+  return (x ^ y) >= 0                        \
+    ? minus                                  \
+    : (minus ^ x) >= 0                       \
+      ? minus                                \
+      : x < 0 ? MIN : MAX;                   \
+}
+#define DEF_SAT_S_SUB_FMT_1_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_SUB_FMT_1(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_SUB_FMT_2(T, UT, MIN, MAX) \
+T __attribute__((noinline))                  \
+sat_s_sub_##T##_fmt_2 (T x, T y)             \
+{                                            \
+  T minus = (UT)x - (UT)y;                   \
+  if ((x ^ y) >= 0 || (minus ^ x) >= 0)      \
+    return minus;                            \
+  return x < 0 ? MIN : MAX;                  \
+}
+#define DEF_SAT_S_SUB_FMT_2_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_SUB_FMT_2(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_SUB_FMT_3(T, UT, MIN, MAX)             \
+T __attribute__((noinline))                              \
+sat_s_sub_##T##_fmt_3 (T x, T y)                         \
+{                                                        \
+  T minus;                                               \
+  bool overflow = __builtin_sub_overflow (x, y, &minus); \
+  return overflow ? x < 0 ? MIN : MAX : minus;           \
+}
+#define DEF_SAT_S_SUB_FMT_3_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_SUB_FMT_3(T, UT, MIN, MAX)
+
+#define DEF_SAT_S_SUB_FMT_4(T, UT, MIN, MAX)           \
+T __attribute__((noinline))                            \
+sat_s_sub_##T##_fmt_4 (T x, T y)                       \
+{                                                      \
+  T minus;                                               \
+  bool overflow = __builtin_sub_overflow (x, y, &minus); \
+  return !overflow ? minus : x < 0 ? MIN : MAX;          \
+}
+#define DEF_SAT_S_SUB_FMT_4_WRAP(T, UT, MIN, MAX) \
+  DEF_SAT_S_SUB_FMT_4(T, UT, MIN, MAX)
+
+#define RUN_SAT_S_SUB_FMT_1(T, x, y) sat_s_sub_##T##_fmt_1(x, y)
+#define RUN_SAT_S_SUB_FMT_1_WRAP(T, x, y) RUN_SAT_S_SUB_FMT_1(T, x, y)
+
+#define RUN_SAT_S_SUB_FMT_2(T, x, y) sat_s_sub_##T##_fmt_2(x, y)
+#define RUN_SAT_S_SUB_FMT_2_WRAP(T, x, y) RUN_SAT_S_SUB_FMT_2(T, x, y)
+
+#define RUN_SAT_S_SUB_FMT_3(T, x, y) sat_s_sub_##T##_fmt_3(x, y)
+#define RUN_SAT_S_SUB_FMT_3_WRAP(T, x, y) RUN_SAT_S_SUB_FMT_3(T, x, y)
+
+#define RUN_SAT_S_SUB_FMT_4(T, x, y) sat_s_sub_##T##_fmt_4(x, y)
+#define RUN_SAT_S_SUB_FMT_4_WRAP(T, x, y) RUN_SAT_S_SUB_FMT_4(T, x, y)
+
+/******************************************************************************/
+/* Saturation Truncate (unsigned and signed)                                  
*/
+/******************************************************************************/
+
+#define DEF_SAT_U_TRUNC_FMT_1(NT, WT)    \
+NT __attribute__((noinline))             \
+sat_u_trunc_##WT##_to_##NT##_fmt_1 (WT x) \
+{                                        \
+  bool overflow = x > (WT)(NT)(-1);      \
+  return ((NT)x) | (NT)-overflow;        \
+}
+#define DEF_SAT_U_TRUNC_FMT_1_WRAP(NT, WT) DEF_SAT_U_TRUNC_FMT_1(NT, WT)
+
+#define DEF_SAT_U_TRUNC_FMT_2(NT, WT)    \
+NT __attribute__((noinline))             \
+sat_u_trunc_##WT##_to_##NT##_fmt_2 (WT x) \
+{                                        \
+  WT max = (WT)(NT)-1;                   \
+  return x > max ? (NT) max : (NT)x;     \
+}
+#define DEF_SAT_U_TRUNC_FMT_2_WRAP(NT, WT) DEF_SAT_U_TRUNC_FMT_2(NT, WT)
+
+#define DEF_SAT_U_TRUNC_FMT_3(NT, WT)    \
+NT __attribute__((noinline))             \
+sat_u_trunc_##WT##_to_##NT##_fmt_3 (WT x) \
+{                                        \
+  WT max = (WT)(NT)-1;                   \
+  return x <= max ? (NT)x : (NT) max;    \
+}
+#define DEF_SAT_U_TRUNC_FMT_3_WRAP(NT, WT) DEF_SAT_U_TRUNC_FMT_3(NT, WT)
+
+#define DEF_SAT_U_TRUNC_FMT_4(NT, WT)          \
+NT __attribute__((noinline))                   \
+sat_u_trunc_##WT##_to_##NT##_fmt_4 (WT x)      \
+{                                              \
+  bool not_overflow = x <= (WT)(NT)(-1);       \
+  return ((NT)x) | (NT)((NT)not_overflow - 1); \
+}
+#define DEF_SAT_U_TRUNC_FMT_4_WRAP(NT, WT) DEF_SAT_U_TRUNC_FMT_4(NT, WT)
+
+#define RUN_SAT_U_TRUNC_FMT_1(NT, WT, x) sat_u_trunc_##WT##_to_##NT##_fmt_1 (x)
+#define RUN_SAT_U_TRUNC_FMT_1_WRAP(NT, WT, x) RUN_SAT_U_TRUNC_FMT_1(NT, WT, x)
+
+#define RUN_SAT_U_TRUNC_FMT_2(NT, WT, x) sat_u_trunc_##WT##_to_##NT##_fmt_2 (x)
+#define RUN_SAT_U_TRUNC_FMT_2_WRAP(NT, WT, x) RUN_SAT_U_TRUNC_FMT_2(NT, WT, x)
+
+#define RUN_SAT_U_TRUNC_FMT_3(NT, WT, x) sat_u_trunc_##WT##_to_##NT##_fmt_3 (x)
+#define RUN_SAT_U_TRUNC_FMT_3_WRAP(NT, WT, x) RUN_SAT_U_TRUNC_FMT_3(NT, WT, x)
+
+#define RUN_SAT_U_TRUNC_FMT_4(NT, WT, x) sat_u_trunc_##WT##_to_##NT##_fmt_4 (x)
+#define RUN_SAT_U_TRUNC_FMT_4_WRAP(NT, WT, x) RUN_SAT_U_TRUNC_FMT_4(NT, WT, x)
+
+#define DEF_SAT_S_TRUNC_FMT_1(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_1 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN <= x && x <= (WT)NT_MAX           \
+    ? trunc                                           \
+    : x < 0 ? NT_MIN : NT_MAX;                        \
+}
+#define DEF_SAT_S_TRUNC_FMT_1_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_1(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_2(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_2 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN < x && x < (WT)NT_MAX             \
+    ? trunc                                           \
+    : x < 0 ? NT_MIN : NT_MAX;                        \
+}
+#define DEF_SAT_S_TRUNC_FMT_2_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_2(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_3(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_3 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN < x && x <= (WT)NT_MAX            \
+    ? trunc                                           \
+    : x < 0 ? NT_MIN : NT_MAX;                        \
+}
+#define DEF_SAT_S_TRUNC_FMT_3_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_3(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_4(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_4 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN <= x && x < (WT)NT_MAX            \
+    ? trunc                                           \
+    : x < 0 ? NT_MIN : NT_MAX;                        \
+}
+#define DEF_SAT_S_TRUNC_FMT_4_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_4(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_5(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_5 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN > x || x > (WT)NT_MAX             \
+    ? x < 0 ? NT_MIN : NT_MAX                         \
+    : trunc;                                          \
+}
+#define DEF_SAT_S_TRUNC_FMT_5_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_5(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_6(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_6 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN >= x || x > (WT)NT_MAX            \
+    ? x < 0 ? NT_MIN : NT_MAX                         \
+    : trunc;                                          \
+}
+#define DEF_SAT_S_TRUNC_FMT_6_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_6(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_7(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_7 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN >= x || x >= (WT)NT_MAX           \
+    ? x < 0 ? NT_MIN : NT_MAX                         \
+    : trunc;                                          \
+}
+#define DEF_SAT_S_TRUNC_FMT_7_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_7(NT, WT, NT_MIN, NT_MAX)
+
+#define DEF_SAT_S_TRUNC_FMT_8(NT, WT, NT_MIN, NT_MAX) \
+NT __attribute__((noinline))                          \
+sat_s_trunc_##WT##_to_##NT##_fmt_8 (WT x)             \
+{                                                     \
+  NT trunc = (NT)x;                                   \
+  return (WT)NT_MIN > x || x >= (WT)NT_MAX            \
+    ? x < 0 ? NT_MIN : NT_MAX                         \
+    : trunc;                                          \
+}
+#define DEF_SAT_S_TRUNC_FMT_8_WRAP(NT, WT, NT_MIN, NT_MAX) \
+  DEF_SAT_S_TRUNC_FMT_8(NT, WT, NT_MIN, NT_MAX)
+
+#define RUN_SAT_S_TRUNC_FMT_1(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_1 (x)
+#define RUN_SAT_S_TRUNC_FMT_1_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_1(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_2(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_2 (x)
+#define RUN_SAT_S_TRUNC_FMT_2_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_2(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_3(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_3 (x)
+#define RUN_SAT_S_TRUNC_FMT_3_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_3(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_4(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_4 (x)
+#define RUN_SAT_S_TRUNC_FMT_4_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_4(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_5(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_5 (x)
+#define RUN_SAT_S_TRUNC_FMT_5_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_5(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_6(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_6 (x)
+#define RUN_SAT_S_TRUNC_FMT_6_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_6(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_7(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_7 (x)
+#define RUN_SAT_S_TRUNC_FMT_7_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_7(NT, WT, x)
+
+#define RUN_SAT_S_TRUNC_FMT_8(NT, WT, x) sat_s_trunc_##WT##_to_##NT##_fmt_8 (x)
+#define RUN_SAT_S_TRUNC_FMT_8_WRAP(NT, WT, x) RUN_SAT_S_TRUNC_FMT_8(NT, WT, x)
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h 
b/gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
new file mode 100644
index 00000000000..9f9f7d0bcd1
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_arith_data.h
@@ -0,0 +1,375 @@
+#ifndef HAVE_DEFINED_SAT_ARITH_DATA_H
+#define HAVE_DEFINED_SAT_ARITH_DATA_H
+
+#define TEST_UNARY_STRUCT_NAME(T1, T2) test_##T1##_##T2##_s
+#define TEST_UNARY_STRUCT_DECL(T1, T2) struct TEST_UNARY_STRUCT_NAME(T1, T2)
+#define TEST_UNARY_STRUCT(T1, T2)       \
+  struct TEST_UNARY_STRUCT_NAME(T1, T2) \
+    {                                   \
+      T1 to;                            \
+      T2 from;                          \
+    };
+
+#define TEST_BINARY_STRUCT_NAME(T, NAME) test_##T##_##NAME##_s
+#define TEST_BINARY_STRUCT_DECL(T, NAME) struct TEST_BINARY_STRUCT_NAME(T, 
NAME)
+#define TEST_BINARY_STRUCT(T, NAME)       \
+  struct TEST_BINARY_STRUCT_NAME(T, NAME) \
+    {                                     \
+      T a, b;                             \
+      T expect;                           \
+    };
+
+#define TEST_UNARY_DATA(T1, T2)      t_##T1##_##T2##_s
+#define TEST_UNARY_DATA_WRAP(T1, T2) TEST_UNARY_DATA(T1, T2)
+
+#define TEST_BINARY_DATA(T, NAME)      t_##T##_##NAME##_s
+#define TEST_BINARY_DATA_WRAP(T, NAME) TEST_BINARY_DATA(T, NAME)
+
+TEST_UNARY_STRUCT (uint8_t, uint16_t)
+TEST_UNARY_STRUCT (uint8_t, uint32_t)
+TEST_UNARY_STRUCT (uint8_t, uint64_t)
+TEST_UNARY_STRUCT (uint16_t, uint32_t)
+TEST_UNARY_STRUCT (uint16_t, uint64_t)
+TEST_UNARY_STRUCT (uint32_t, uint64_t)
+
+TEST_BINARY_STRUCT (int8_t,  ssadd)
+TEST_BINARY_STRUCT (int16_t, ssadd)
+TEST_BINARY_STRUCT (int32_t, ssadd)
+TEST_BINARY_STRUCT (int64_t, ssadd)
+
+TEST_BINARY_STRUCT (int8_t,  sssub)
+TEST_BINARY_STRUCT (int16_t, sssub)
+TEST_BINARY_STRUCT (int32_t, sssub)
+TEST_BINARY_STRUCT (int64_t, sssub)
+
+TEST_UNARY_STRUCT (int8_t, int16_t)
+TEST_UNARY_STRUCT (int8_t, int32_t)
+TEST_UNARY_STRUCT (int8_t, int64_t)
+TEST_UNARY_STRUCT (int16_t, int32_t)
+TEST_UNARY_STRUCT (int16_t, int64_t)
+TEST_UNARY_STRUCT (int32_t, int64_t)
+
+TEST_UNARY_STRUCT_DECL(uint8_t, uint16_t) \
+  TEST_UNARY_DATA(uint8_t, uint16_t)[] =
+{
+  {  0,     0},
+  {  2,     2},
+  {254,   254},
+  {255,   255},
+  {255,   256},
+  {255, 65534},
+  {255, 65535},
+};
+
+TEST_UNARY_STRUCT_DECL(uint8_t, uint32_t) \
+  TEST_UNARY_DATA(uint8_t, uint32_t)[] =
+{
+  {  0,          0},
+  {  2,          2},
+  {254,        254},
+  {255,        255},
+  {255,        256},
+  {255,      65534},
+  {255,      65535},
+  {255,      65536},
+  {255, 4294967294},
+  {255, 4294967295},
+};
+
+TEST_UNARY_STRUCT_DECL(uint8_t, uint64_t) \
+  TEST_UNARY_DATA(uint8_t, uint64_t)[] =
+{
+  {  0,                     0},
+  {  2,                     2},
+  {254,                   254},
+  {255,                   255},
+  {255,                   256},
+  {255,                 65534},
+  {255,                 65535},
+  {255,                 65536},
+  {255,            4294967294},
+  {255,            4294967295},
+  {255,            4294967296},
+  {255, 18446744073709551614u},
+  {255, 18446744073709551615u},
+};
+
+TEST_UNARY_STRUCT_DECL(uint16_t, uint32_t) \
+  TEST_UNARY_DATA(uint16_t, uint32_t)[] =
+{
+  {    0,          0},
+  {    5,          5},
+  {65534,      65534},
+  {65535,      65535},
+  {65535,      65536},
+  {65535, 4294967294},
+  {65535, 4294967295},
+};
+
+TEST_UNARY_STRUCT_DECL(uint16_t, uint64_t) \
+  TEST_UNARY_DATA(uint16_t, uint64_t)[] =
+{
+  {    0,                     0},
+  {    5,                     5},
+  {65534,                 65534},
+  {65535,                 65535},
+  {65535,                 65536},
+  {65535,            4294967294},
+  {65535,            4294967295},
+  {65535,            4294967296},
+  {65535, 18446744073709551614u},
+  {65535, 18446744073709551615u},
+};
+
+TEST_UNARY_STRUCT_DECL(uint32_t, uint64_t) \
+  TEST_UNARY_DATA(uint32_t, uint64_t)[] =
+{
+  {    0,                          0},
+  {    9,                          9},
+  {4294967294,            4294967294},
+  {4294967295,            4294967295},
+  {4294967295,            4294967296},
+  {4294967295, 18446744073709551614u},
+  {4294967295, 18446744073709551615u},
+};
+
+TEST_UNARY_STRUCT_DECL(int8_t, int16_t) \
+  TEST_UNARY_DATA(int8_t, int16_t)[] =
+{
+  {   0,      0},
+  {  -2,     -2},
+  { 127,    128},
+  { 127,    258},
+  {-128,   -128},
+  {-128,   -129},
+  {-128,   -257},
+  { 127,  32767},
+  {-128, -32768},
+};
+
+TEST_UNARY_STRUCT_DECL(int8_t, int32_t) \
+  TEST_UNARY_DATA(int8_t, int32_t)[] =
+{
+  {   0,           0},
+  {  -2,          -2},
+  { 127,         128},
+  { 127,         258},
+  {-128,        -128},
+  {-128,        -129},
+  {-128,        -257},
+  { 127,       32767},
+  {-128,      -32768},
+  { 127,       65536},
+  {-128,      -65537},
+  { 127,  2147483647},
+  {-128, -2147483648},
+};
+
+TEST_UNARY_STRUCT_DECL(int8_t, int64_t) \
+  TEST_UNARY_DATA(int8_t, int64_t)[] =
+{
+  {   0,                       0},
+  {  -2,                      -2},
+  { 127,                     128},
+  { 127,                     258},
+  {-128,                    -128},
+  {-128,                    -129},
+  {-128,                    -257},
+  { 127,                   32767},
+  {-128,                  -32768},
+  { 127,                   65536},
+  {-128,                  -65537},
+  { 127,              2147483647},
+  {-128,             -2147483648},
+  { 127,            2147483648ll},
+  {-128,           -2147483649ll},
+  { 127,   9223372036854775807ll},
+  {-128, -9223372036854775808ull},
+};
+
+TEST_UNARY_STRUCT_DECL(int16_t, int32_t) \
+  TEST_UNARY_DATA(int16_t, int32_t)[] =
+{
+  {     0,           0},
+  {    -2,          -2},
+  { 32767,       32768},
+  { 32767,       65538},
+  {-32768,      -32768},
+  {-32768,      -32769},
+  {-32768,      -65539},
+  { 32767,       32767},
+  {-32768,      -32768},
+  { 32767,       65536},
+  {-32768,      -65537},
+  { 32767,  2147483647},
+  {-32768, -2147483648},
+};
+
+TEST_UNARY_STRUCT_DECL(int16_t, int64_t) \
+  TEST_UNARY_DATA(int16_t, int64_t)[] =
+{
+  {     0,           0},
+  {    -2,          -2},
+  { 32767,       32768},
+  { 32767,       65538},
+  {-32768,      -32768},
+  {-32768,      -32769},
+  {-32768,      -65539},
+  { 32767,       32767},
+  {-32768,      -32768},
+  { 32767,       65536},
+  {-32768,      -65537},
+  { 32767,  2147483647},
+  {-32768, -2147483648},
+};
+
+TEST_UNARY_STRUCT_DECL(int32_t, int64_t) \
+  TEST_UNARY_DATA(int32_t, int64_t)[] =
+{
+  {          0,                       0},
+  {         -2,                      -2},
+  { 2147483647,            2147483648ll},
+  {-2147483648,             -2147483648},
+  { 2147483647,              2147483648},
+  {-2147483648,           -2147483649ll},
+  { 2147483647,   9223372036854775807ll},
+  {-2147483648, -9223372036854775808ull},
+};
+
+TEST_BINARY_STRUCT_DECL(int8_t, ssadd) TEST_BINARY_DATA(int8_t, ssadd)[] =
+{
+  {   0,    0,    0},
+  {   2,    2,    4},
+  { 126,    1,  127},
+  { 127,    1,  127},
+  { 127,  127,  127},
+  {  -7,   -4,  -11},
+  {-128,   -1, -128},
+  {-127,   -1, -128},
+  {-128, -128, -128},
+  {-128,  127,   -1},
+  {-127,  127,    0},
+  {-122,  105,  -17},
+  {-122,  125,    3},
+};
+
+TEST_BINARY_STRUCT_DECL(int16_t, ssadd) TEST_BINARY_DATA(int16_t, ssadd)[] =
+{
+  {     0,      0,      0},
+  {     2,      2,      4},
+  { 32766,      1,  32767},
+  { 32767,      1,  32767},
+  { 32767,  32767,  32767},
+  {    -7,     -4,    -11},
+  {-32768,     -1, -32768},
+  {-32767,     -1, -32768},
+  {-32768, -32768, -32768},
+  {-32768,  32767,     -1},
+  {-32767,  32767,      0},
+  {-32732,  32712,    -20},
+  {-32732,  32734,      2},
+};
+
+TEST_BINARY_STRUCT_DECL(int32_t, ssadd) TEST_BINARY_DATA(int32_t, ssadd)[] =
+{
+  {          0,           0,           0},
+  {          2,           2,           4},
+  { 2147483646,           1,  2147483647},
+  { 2147483647,           1,  2147483647},
+  { 2147483647,  2147483647,  2147483647},
+  {         -7,          -4,         -11},
+  {-2147483648,          -1, -2147483648},
+  {-2147483647,          -1, -2147483648},
+  {-2147483648, -2147483648, -2147483648},
+  {-2147483648,  2147483647,          -1},
+  {-2147483647,  2147483647,           0},
+  {-2147483613,  2147483601,         -12},
+  {-2147483613,  2147483637,          24},
+};
+
+TEST_BINARY_STRUCT_DECL(int64_t, ssadd) TEST_BINARY_DATA(int64_t, ssadd)[] =
+{
+  {                      0,                       0,                       0},
+  {                      2,                       2,                       4},
+  {  9223372036854775806ll,                       1,   9223372036854775807ll},
+  {  9223372036854775807ll,                       1,   9223372036854775807ll},
+  {  9223372036854775807ll,   9223372036854775807ll,   9223372036854775807ll},
+  {                     -7,                      -4,                     -11},
+  {-9223372036854775808ull,                      -1, -9223372036854775808ull},
+  { -9223372036854775807ll,                      -1, -9223372036854775808ull},
+  {-9223372036854775808ull, -9223372036854775808ull, -9223372036854775808ull},
+  {-9223372036854775808ull,   9223372036854775807ll,                      -1},
+  { -9223372036854775807ll,   9223372036854775807ll,                       0},
+  { -9223372036854775803ll,   9223372036854775800ll,                      -3},
+  { -9223372036854775803ll,   9223372036854775805ll,                       2},
+};
+
+TEST_BINARY_STRUCT_DECL(int8_t, sssub) TEST_BINARY_DATA(int8_t, sssub)[] =
+{
+  {   0,    0,    0},
+  {   2,    4,   -2},
+  { 126,   -1,  127},
+  { 127,   -1,  127},
+  { 127, -127,  127},
+  {  -7,   -4,   -3},
+  {-127,    1, -128},
+  {-128,    1, -128},
+  {-128,  127, -128},
+  {-128, -127,   -1},
+  {-124, -127,    3},
+  {-125, -120,   -5},
+  { 126,  120,    6},
+};
+
+TEST_BINARY_STRUCT_DECL(int16_t, sssub) TEST_BINARY_DATA(int16_t, sssub)[] =
+{
+  {     0,      0,      0},
+  {     2,      4,     -2},
+  { 32766,     -1,  32767},
+  { 32767,     -1,  32767},
+  { 32767, -32767,  32767},
+  {    -7,     -4,     -3},
+  {-32767,      1, -32768},
+  {-32768,      1, -32768},
+  {-32768,  32767, -32768},
+  {-32768, -32767,     -1},
+  {-32764, -32767,      3},
+  {-32765, -32760,     -5},
+  { 32766,  32760,      6},
+};
+
+TEST_BINARY_STRUCT_DECL(int32_t, sssub) TEST_BINARY_DATA(int32_t, sssub)[] =
+{
+  {          0,           0,           0},
+  {          2,           4,          -2},
+  { 2147483646,          -1,  2147483647},
+  { 2147483647,          -1,  2147483647},
+  { 2147483647, -2147483647,  2147483647},
+  {         -7,          -4,          -3},
+  {-2147483647,           1, -2147483648},
+  {-2147483648,           1, -2147483648},
+  {-2147483648,  2147483647, -2147483648},
+  {-2147483648, -2147483647,          -1},
+  {-2147483644, -2147483647,           3},
+  {-2147483645, -2147483640,          -5},
+  { 2147483646,  2147483640,           6},
+};
+
+TEST_BINARY_STRUCT_DECL(int64_t, sssub) TEST_BINARY_DATA(int64_t, sssub)[] =
+{
+  {                      0,                       0,                       0},
+  {                      2,                       4,                      -2},
+  {  9223372036854775806ll,                      -1,   9223372036854775807ll},
+  {  9223372036854775807ll,                      -1,   9223372036854775807ll},
+  {  9223372036854775807ll,  -9223372036854775807ll,   9223372036854775807ll},
+  {                     -7,                      -4,                      -3},
+  { -9223372036854775807ll,                       1, -9223372036854775808ull},
+  {-9223372036854775808ull,                       1, -9223372036854775808ull},
+  {-9223372036854775808ull,   9223372036854775807ll, -9223372036854775808ull},
+  {-9223372036854775808ull,  -9223372036854775807ll,                      -1},
+  { -9223372036854775804ll,  -9223372036854775807ll,                       3},
+  { -9223372036854775805ll,  -9223372036854775800ll,                      -5},
+  {  9223372036854775806ll,   9223372036854775800ll,                       6},
+};
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-1-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-1-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-1-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-1-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-1-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-1-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-1-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-1-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-1-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-2-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-2-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-2-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-2-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-2-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-2-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-2-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-2-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-2-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-3-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-3-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-3-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-3-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-3-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-3-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-3-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-3-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-3-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-4-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-4-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-4-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-4-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-4-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-4-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-4-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-4-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-4-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-1-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-1-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-2-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-2-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-3-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-3-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add-run-4-i8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add-run-4-i8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-1-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-1-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-2-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-2-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-2.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-2.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-2.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-3-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-3-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-3.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-3.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-3.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-4.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-4.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-4.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-2.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-2.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-2.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-3.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-3.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-3.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-4.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_s_add_imm-run-4.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_s_add_imm-run-4.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
similarity index 91%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-1-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
index c138df85332..0a4f6fc4791 100644
--- a/gcc/testsuite/gcc.target/riscv/sat_u_add-1-u16.c
+++ b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u16.c
@@ -1,6 +1,6 @@
 /* { dg-do compile } */
 /* { dg-skip-if  "" { *-*-* } { "-flto" } } */
-/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-rtl-expand-details 
-fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-options "-march=rv64gc -O3 -mabi=lp64d -fdump-rtl-expand-details 
-fno-schedule-insns -fno-schedule-insns2" } */
 /* { dg-final { check-function-bodies "**" "" } } */
 
 #include "sat_arith.h"
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-1-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-1-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-1-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-1-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-2-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-2-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-2-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-2-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-2-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-2-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-2-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-2-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-2-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-3-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-3-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-3-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-3-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-3-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-3-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-3-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-3-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-3-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-4-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-4-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-4-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-4-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-4-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-4-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-4-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-4-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-4-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-5-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-5-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-5-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-5-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-5-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-5-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-5-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-5-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-5-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-6-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-6-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-6-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-6-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-6-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-6-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-6-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-6-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-6-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-1-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-1-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-2-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-2-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-3-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-3-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-4-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-4-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-5-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-5-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add-run-6-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add-run-6-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-1-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-1-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-2-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-2-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-3-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-3-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-4-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-4-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-1-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-1-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-2-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-2-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-3-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-3-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u64.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u64.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u64.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u64.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm-run-4-u8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm-run-4-u8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-1.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-1.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-1.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-1.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-10.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-10.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-10.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-10.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-11.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-11.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-11.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-11.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-12.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-12.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-12.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-12.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-13.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-13.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-13.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-13.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-14.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-14.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-14.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-14.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-15.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-15.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-15.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-15.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-16.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-16.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-16.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-16.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-17.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-17.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-17.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-17.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-18.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-18.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-18.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-18.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-19.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-19.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-19.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-19.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-2.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-2.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-2.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-2.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-20.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-20.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-20.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-20.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-21.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-21.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-21.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-21.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-22.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-22.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-22.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-22.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-23.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-23.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-23.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-23.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-24.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-24.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-24.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-24.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-25.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-25.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-25.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-25.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-26.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-26.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-26.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-26.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-27.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-27.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-27.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-27.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-28.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-28.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-28.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-28.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-29.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-29.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-29.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-29.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-3.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-3.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-3.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-3.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-30.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-30.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-30.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-30.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-31.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-31.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-31.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-31.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-32.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-32.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-32.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-32.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-33.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-33.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-33.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-33.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-34.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-34.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-34.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-34.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-35.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-35.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-35.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-35.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-36.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-36.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-36.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-36.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-37.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-37.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-37.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-37.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-38.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-38.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-38.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-38.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-39.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-39.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-39.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-39.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-4.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-4.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-4.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-4.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-40.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-40.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-40.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-40.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-41.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-41.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-41.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-41.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-42.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-42.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-42.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-42.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-43.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-43.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-43.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-43.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-44.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-44.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-44.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-44.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-45.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-45.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-45.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-45.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-46.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-46.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-46.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-46.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-47.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-47.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-47.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-47.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-48.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-48.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-48.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-48.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-49.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-49.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-49.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-49.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-5.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-5.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-5.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-5.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-50.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-50.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-50.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-50.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-51.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-51.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-51.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-51.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-52.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-52.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-52.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-52.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-53.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-53.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-53.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-53.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-54.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-54.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-54.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-54.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-55.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-55.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-55.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-55.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-56.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-56.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-56.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-56.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-57.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-57.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-57.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-57.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-58.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-58.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-58.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-58.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-59.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-59.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-59.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-59.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-6.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-6.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-6.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-6.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-60.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-60.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-60.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-60.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-7.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-7.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-7.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-7.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-8.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-8.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-8.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-8.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-9.c 
b/gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-9.c
similarity index 100%
rename from gcc/testsuite/gcc.target/riscv/sat_u_add_imm_type_check-9.c
rename to gcc/testsuite/gcc.target/riscv/sat/sat_u_add_imm_type_check-9.c
diff --git a/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary.h 
b/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary.h
new file mode 100644
index 00000000000..cbb2d750107
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary.h
@@ -0,0 +1,27 @@
+#ifndef HAVE_DEFINED_SCALAR_SAT_BINARY
+#define HAVE_DEFINED_SCALAR_SAT_BINARY
+
+/* To leverage this header files for run test, you need to:
+   1. define T as the type, for example uint8_t,
+   2. define RUN_SAT_BINARY as run function.
+   3. prepare the test_data for test cases.
+ */
+
+int
+main ()
+{
+  unsigned i;
+  T *d;
+
+  for (i = 0; i < sizeof (test_data) / sizeof (test_data[0]); i++)
+    {
+      d = test_data[i];
+
+      if (RUN_SAT_BINARY (T, d[0], d[1]) != d[2])
+       __builtin_abort ();
+    }
+
+  return 0;
+}
+
+#endif
diff --git a/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary_run_xxx.h 
b/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary_run_xxx.h
new file mode 100644
index 00000000000..a7e0d988626
--- /dev/null
+++ b/gcc/testsuite/gcc.target/riscv/sat/scalar_sat_binary_run_xxx.h
@@ -0,0 +1,21 @@
+#ifndef HAVE_DEFINED_SCALAR_SAT_BINARY_RUN_XXX
+#define HAVE_DEFINED_SCALAR_SAT_BINARY_RUN_XXX
+
+int
+main ()
+{
+  unsigned i;
+  T d;
+
+  for (i = 0; i < sizeof (DATA) / sizeof (DATA[0]); i++)
+    {
+      d = DATA[i];
+
+      if (RUN_BINARY (d.a, d.b) != d.expect)
+       __builtin_abort ();
+    }
+
+  return 0;
+}
+
+#endif
-- 
2.43.0


Reply via email to