diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.target/aarch64/vect-abs.c')
-rw-r--r-- | gcc-4.9/gcc/testsuite/gcc.target/aarch64/vect-abs.c | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vect-abs.c b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vect-abs.c new file mode 100644 index 000000000..9e0ed99ca --- /dev/null +++ b/gcc-4.9/gcc/testsuite/gcc.target/aarch64/vect-abs.c @@ -0,0 +1,134 @@ + +/* { dg-do run } */ +/* { dg-options "-O3 -std=c99" } */ + +#include "limits.h" + +extern void abort (void); + +#define N 16 + +#include "vect-abs.x" + +#define SET_VEC(size, type) void set_vector_##size (pRINT##size a) \ + { \ + int i; \ + for (i=0; i<N; i++) \ + a[i] = (type##_MIN) + (i + 1); \ + } + +#define SET_RVEC(size, type) void set_rvector_##size (pRINT##size a) \ + { \ + int i; \ + for (i=0; i<N; i++) \ + a[i] = type##_MAX - i; \ + } + +#define CHECK_VEC(size) void check_vector_##size (pRINT##size a, \ + pRINT##size b) \ + { \ + int i; \ + for (i=0; i<N; i++) \ + if (a[i] != b[i]) \ + abort (); \ + } + + +SET_RVEC (8, SCHAR) +SET_RVEC (16, SHRT) +SET_RVEC (32, INT) +SET_RVEC (64, LLONG) + +void +set_rvector_long (pRLONG a) +{ + int i; + for (i=0; i<N; i++) + a[i] = (LONG_MAX) - i; +} + +SET_VEC (8, SCHAR) +SET_VEC (16, SHRT) +SET_VEC (32, INT) +SET_VEC (64, LLONG) + +void +set_vector_long (long *__restrict__ a) +{ + long i; + for (i=0; i<N; i++) + a[i] = (LONG_MIN) + i + 1; +} + +CHECK_VEC (8) +CHECK_VEC (16) +CHECK_VEC (32) +CHECK_VEC (64) + +void +check_vector_long (long *__restrict__ a, long *__restrict__ b) +{ + long i; + for (i=0; i<N; i++) + if (a[i] != b[i]) + abort (); +} + +int main (void) +{ + + signed char a8[N]; + short a16[N]; + int a32[N]; + long long a64[N]; + /* abs () from stdlib. */ + int alib32[N]; + long alibl[N]; + + + signed char b8[N]; + short b16[N]; + int b32[N]; + long long b64[N]; + /* abs () from stdlib. */ + long blibl[N]; + + signed char abs_vector_8[N]; + short abs_vector_16[N]; + int abs_vector_32[N]; + long long abs_vector_64[N]; + long abs_vector_long[N]; + + /* Set up result vectors. */ + set_rvector_8 (abs_vector_8); + set_rvector_16 (abs_vector_16); + set_rvector_32 (abs_vector_32); + set_rvector_long (abs_vector_long); + set_rvector_64 (abs_vector_64); + + /* Set up inputs. */ + set_vector_8 (b8); + set_vector_16 (b16); + set_vector_32 (b32); + set_vector_64 (b64); + set_vector_long (blibl); + + /* Calculate their absolute values. */ + absolute_s8 (a8, b8); + absolute_s16 (a16, b16); + absolute_s32 (a32, b32); + absolute_s64 (a64, b64); + /* abs () from stdlib. */ + absolute_s32_lib (alib32, b32); + absolute_l32_lib (alibl, blibl); + + /* Check. */ + check_vector_8 (a8, abs_vector_8); + check_vector_16 (a16, abs_vector_16); + check_vector_32 (a32, abs_vector_32); + check_vector_64 (a64, abs_vector_64); + check_vector_32 (alib32, abs_vector_32); + check_vector_long (alibl, abs_vector_long); + + return 0; +} |