RISC-V: Add testcases for form 2 of signed scalar SAT_ADD
This patch would like to add testcases of the signed scalar SAT_ADD for form 2. Aka: Form 2: #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; \ } DEF_SAT_S_ADD_FMT_2 (int64_t, uint64_t, INT64_MIN, INT64_MAX) The below test are passed for this patch. * The rv64gcv fully regression test. gcc/testsuite/ChangeLog: * gcc.target/riscv/sat_arith.h: Add test helper macros. * gcc.target/riscv/sat_s_add-5.c: New test. * gcc.target/riscv/sat_s_add-6.c: New test. * gcc.target/riscv/sat_s_add-7.c: New test. * gcc.target/riscv/sat_s_add-8.c: New test. * gcc.target/riscv/sat_s_add-run-5.c: New test. * gcc.target/riscv/sat_s_add-run-6.c: New test. * gcc.target/riscv/sat_s_add-run-7.c: New test. * gcc.target/riscv/sat_s_add-run-8.c: New test. Signed-off-by: Pan Li <pan2.li@intel.com>
This commit is contained in:
parent
5b5a36b122
commit
cee868ae0d
9 changed files with 199 additions and 0 deletions
|
@ -132,9 +132,22 @@ sat_s_add_##T##_fmt_1 (T x, T y) \
|
|||
#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 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)
|
||||
|
||||
/******************************************************************************/
|
||||
/* Saturation Sub (Unsigned and Signed) */
|
||||
/******************************************************************************/
|
||||
|
|
30
gcc/testsuite/gcc.target/riscv/sat_s_add-5.c
Normal file
30
gcc/testsuite/gcc.target/riscv/sat_s_add-5.c
Normal file
|
@ -0,0 +1,30 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-rtl-expand-details -fno-schedule-insns -fno-schedule-insns2" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
|
||||
/*
|
||||
** sat_s_add_int8_t_fmt_2:
|
||||
** add\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*7
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*127
|
||||
** neg\s+[atx][0-9]+,\s*[atx][0-9]+
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** slliw\s+a0,\s*a0,\s*24
|
||||
** sraiw\s+a0,\s*a0,\s*24
|
||||
** ret
|
||||
*/
|
||||
DEF_SAT_S_ADD_FMT_2(int8_t, uint8_t, INT8_MIN, INT8_MAX)
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times ".SAT_ADD " 2 "expand" } } */
|
32
gcc/testsuite/gcc.target/riscv/sat_s_add-6.c
Normal file
32
gcc/testsuite/gcc.target/riscv/sat_s_add-6.c
Normal file
|
@ -0,0 +1,32 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-rtl-expand-details -fno-schedule-insns -fno-schedule-insns2" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
|
||||
/*
|
||||
** sat_s_add_int16_t_fmt_2:
|
||||
** add\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*15
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** li\s+[atx][0-9]+,\s*32768
|
||||
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** neg\s+[atx][0-9]+,\s*[atx][0-9]+
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** slliw\s+a0,\s*a0,\s*16
|
||||
** sraiw\s+a0,\s*a0,\s*16
|
||||
** ret
|
||||
*/
|
||||
DEF_SAT_S_ADD_FMT_2(int16_t, uint16_t, INT16_MIN, INT16_MAX)
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times ".SAT_ADD " 2 "expand" } } */
|
31
gcc/testsuite/gcc.target/riscv/sat_s_add-7.c
Normal file
31
gcc/testsuite/gcc.target/riscv/sat_s_add-7.c
Normal file
|
@ -0,0 +1,31 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-rtl-expand-details -fno-schedule-insns -fno-schedule-insns2" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
|
||||
/*
|
||||
** sat_s_add_int32_t_fmt_2:
|
||||
** add\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*31
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** andi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** li\s+[atx][0-9]+,\s*-2147483648
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** neg\s+[atx][0-9]+,\s*[atx][0-9]+
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** sext\.w\s+a0,\s*a0
|
||||
** ret
|
||||
*/
|
||||
DEF_SAT_S_ADD_FMT_2(int32_t, uint32_t, INT32_MIN, INT32_MAX)
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times ".SAT_ADD " 2 "expand" } } */
|
29
gcc/testsuite/gcc.target/riscv/sat_s_add-8.c
Normal file
29
gcc/testsuite/gcc.target/riscv/sat_s_add-8.c
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-march=rv64gc -mabi=lp64d -O3 -fdump-rtl-expand-details -fno-schedule-insns -fno-schedule-insns2" } */
|
||||
/* { dg-final { check-function-bodies "**" "" } } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
|
||||
/*
|
||||
** sat_s_add_int64_t_fmt_2:
|
||||
** add\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*a1
|
||||
** xor\s+[atx][0-9]+,\s*a0,\s*[atx][0-9]+
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** xori\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** srai\s+[atx][0-9]+,\s*[atx][0-9]+,\s*63
|
||||
** li\s+[atx][0-9]+,\s*-1
|
||||
** srli\s+[atx][0-9]+,\s*[atx][0-9]+,\s*1
|
||||
** xor\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** neg\s+[atx][0-9]+,\s*[atx][0-9]+
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** addi\s+[atx][0-9]+,\s*[atx][0-9]+,\s*-1
|
||||
** and\s+[atx][0-9]+,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** or\s+a0,\s*[atx][0-9]+,\s*[atx][0-9]+
|
||||
** ret
|
||||
*/
|
||||
DEF_SAT_S_ADD_FMT_2(int64_t, uint64_t, INT64_MIN, INT64_MAX)
|
||||
|
||||
/* { dg-final { scan-rtl-dump-times ".SAT_ADD " 2 "expand" } } */
|
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-5.c
Normal file
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-5.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run { target { riscv_v } } } */
|
||||
/* { dg-additional-options "-std=c99" } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
#include "sat_arith_data.h"
|
||||
|
||||
#define T1 int8_t
|
||||
#define T2 uint8_t
|
||||
|
||||
DEF_SAT_S_ADD_FMT_1_WRAP(T1, T2, INT8_MIN, INT8_MAX)
|
||||
|
||||
#define DATA TEST_BINARY_DATA_WRAP(T1, ssadd)
|
||||
#define T TEST_BINARY_STRUCT_DECL(T1, ssadd)
|
||||
#define RUN_BINARY(x, y) RUN_SAT_S_ADD_FMT_1_WRAP(T1, x, y)
|
||||
|
||||
#include "scalar_sat_binary_run_xxx.h"
|
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-6.c
Normal file
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-6.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run { target { riscv_v } } } */
|
||||
/* { dg-additional-options "-std=c99" } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
#include "sat_arith_data.h"
|
||||
|
||||
#define T1 int16_t
|
||||
#define T2 uint16_t
|
||||
|
||||
DEF_SAT_S_ADD_FMT_1_WRAP(T1, T2, INT16_MIN, INT16_MAX)
|
||||
|
||||
#define DATA TEST_BINARY_DATA_WRAP(T1, ssadd)
|
||||
#define T TEST_BINARY_STRUCT_DECL(T1, ssadd)
|
||||
#define RUN_BINARY(x, y) RUN_SAT_S_ADD_FMT_1_WRAP(T1, x, y)
|
||||
|
||||
#include "scalar_sat_binary_run_xxx.h"
|
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-7.c
Normal file
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-7.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run { target { riscv_v } } } */
|
||||
/* { dg-additional-options "-std=c99" } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
#include "sat_arith_data.h"
|
||||
|
||||
#define T1 int32_t
|
||||
#define T2 uint32_t
|
||||
|
||||
DEF_SAT_S_ADD_FMT_1_WRAP(T1, T2, INT32_MIN, INT32_MAX)
|
||||
|
||||
#define DATA TEST_BINARY_DATA_WRAP(T1, ssadd)
|
||||
#define T TEST_BINARY_STRUCT_DECL(T1, ssadd)
|
||||
#define RUN_BINARY(x, y) RUN_SAT_S_ADD_FMT_1_WRAP(T1, x, y)
|
||||
|
||||
#include "scalar_sat_binary_run_xxx.h"
|
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-8.c
Normal file
16
gcc/testsuite/gcc.target/riscv/sat_s_add-run-8.c
Normal file
|
@ -0,0 +1,16 @@
|
|||
/* { dg-do run { target { riscv_v } } } */
|
||||
/* { dg-additional-options "-std=c99" } */
|
||||
|
||||
#include "sat_arith.h"
|
||||
#include "sat_arith_data.h"
|
||||
|
||||
#define T1 int64_t
|
||||
#define T2 uint64_t
|
||||
|
||||
DEF_SAT_S_ADD_FMT_1_WRAP(T1, T2, INT64_MIN, INT64_MAX)
|
||||
|
||||
#define DATA TEST_BINARY_DATA_WRAP(T1, ssadd)
|
||||
#define T TEST_BINARY_STRUCT_DECL(T1, ssadd)
|
||||
#define RUN_BINARY(x, y) RUN_SAT_S_ADD_FMT_1_WRAP(T1, x, y)
|
||||
|
||||
#include "scalar_sat_binary_run_xxx.h"
|
Loading…
Add table
Reference in a new issue