summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/arm/fmaxmin.x
diff options
context:
space:
mode:
authorDavid Sherwood <david.sherwood@arm.com>2015-12-23 10:28:18 +0000
committerDavid Sherwood <davids@gcc.gnu.org>2015-12-23 10:28:18 +0000
commit0a18c19f75973520e87a08191554ec3cb8f850a6 (patch)
treee386227e0654e558873ba944bb5f30612c47435d /gcc/testsuite/gcc.target/arm/fmaxmin.x
parentfa87d16dcf766d1754837e71d5a1abc97a9e0c8b (diff)
downloadgcc-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.x54
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;
+}