diff options
author | David Sherwood <david.sherwood@arm.com> | 2015-12-23 10:28:18 +0000 |
---|---|---|
committer | David Sherwood <davids@gcc.gnu.org> | 2015-12-23 10:28:18 +0000 |
commit | 0a18c19f75973520e87a08191554ec3cb8f850a6 (patch) | |
tree | e386227e0654e558873ba944bb5f30612c47435d /gcc/testsuite/gcc.target/arm/fmaxmin.x | |
parent | fa87d16dcf766d1754837e71d5a1abc97a9e0c8b (diff) | |
download | gcc-0a18c19f75973520e87a08191554ec3cb8f850a6.tar.gz |
iterators.md (VMAXMINFNM): New int iterator.
2015-12-23 David Sherwood <david.sherwood@arm.com>
gcc/
* config/arm/iterators.md (VMAXMINFNM): New int iterator.
(fmaxmin): New int attribute.
(fmaxmin_op): Likewise.
* config/arm/unspecs.md (UNSPEC_VMAXNM): New unspec.
(UNSPEC_VMINNM): Likewise.
* config/arm/neon.md (fmaxmin): New pattern.
* config/arm/vfp.md (fmaxmin): Likewise.
gcc/testsuite
* gcc.target/arm/fmaxmin.x: New file used by tests below.
* gcc.target/arm/fmaxmin.c: New test.
* gcc.target/arm/vect-fmaxmin.c: Likewise.
From-SVN: r231924
Diffstat (limited to 'gcc/testsuite/gcc.target/arm/fmaxmin.x')
-rw-r--r-- | gcc/testsuite/gcc.target/arm/fmaxmin.x | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/arm/fmaxmin.x b/gcc/testsuite/gcc.target/arm/fmaxmin.x new file mode 100644 index 00000000000..ccf832d9567 --- /dev/null +++ b/gcc/testsuite/gcc.target/arm/fmaxmin.x @@ -0,0 +1,54 @@ +extern void abort (void); +double fmax (double, double); +float fmaxf (float, float); +double fmin (double, double); +float fminf (float, float); + +#define isnan __builtin_isnan +#define isinf __builtin_isinf + +#define NAN __builtin_nan ("") +#define INFINITY __builtin_inf () + +#define DEF_MAXMIN(TYPE,FUN)\ +void test_##FUN (TYPE *__restrict__ r, TYPE *__restrict__ a,\ + TYPE *__restrict__ b)\ +{\ + int i;\ + for (i = 0; i < 4; i++)\ + r[i] = FUN (a[i], b[i]);\ +}\ + +DEF_MAXMIN (float, fmaxf) +DEF_MAXMIN (double, fmax) + +DEF_MAXMIN (float, fminf) +DEF_MAXMIN (double, fmin) + +int main () +{ + float a_f[4] = { 4, NAN, -3, INFINITY }; + float b_f[4] = { 1, 7,NAN, 0 }; + float r_f[4]; + double a_d[4] = { 4, NAN, -3, INFINITY }; + double b_d[4] = { 1, 7, NAN, 0 }; + double r_d[4]; + + test_fmaxf (r_f, a_f, b_f); + if (r_f[0] != 4 || isnan (r_f[1]) || isnan (r_f[2]) || !isinf (r_f[3])) + abort (); + + test_fminf (r_f, a_f, b_f); + if (r_f[0] != 1 || isnan (r_f[1]) || isnan (r_f[2]) || isinf (r_f[3])) + abort (); + + test_fmax (r_d, a_d, b_d); + if (r_d[0] != 4 || isnan (r_d[1]) || isnan (r_d[2]) || !isinf (r_d[3])) + abort (); + + test_fmin (r_d, a_d, b_d); + if (r_d[0] != 1 || isnan (r_d[1]) || isnan (r_d[2]) || isinf (r_d[3])) + abort (); + + return 0; +} |