PR c++/67273
[official-gcc.git] / gcc / testsuite / gcc.target / arm / fmaxmin.x
blobccf832d95675ca3f15608991eb4cfb3a7fecc9f8
1 extern void abort (void);
2 double fmax (double, double);
3 float fmaxf (float, float);
4 double fmin (double, double);
5 float fminf (float, float);
7 #define isnan __builtin_isnan
8 #define isinf __builtin_isinf
10 #define NAN __builtin_nan ("")
11 #define INFINITY __builtin_inf ()
13 #define DEF_MAXMIN(TYPE,FUN)\
14 void test_##FUN (TYPE *__restrict__ r, TYPE *__restrict__ a,\
15                  TYPE *__restrict__ b)\
17   int i;\
18   for (i = 0; i < 4; i++)\
19     r[i] = FUN (a[i], b[i]);\
22 DEF_MAXMIN (float, fmaxf)
23 DEF_MAXMIN (double, fmax)
25 DEF_MAXMIN (float, fminf)
26 DEF_MAXMIN (double, fmin)
28 int main ()
30   float a_f[4] = { 4, NAN, -3, INFINITY };
31   float b_f[4] = { 1,   7,NAN, 0 };
32   float r_f[4];
33   double a_d[4] = { 4, NAN,  -3,  INFINITY };
34   double b_d[4] = { 1,   7, NAN,  0 };
35   double r_d[4];
37   test_fmaxf (r_f, a_f, b_f);
38   if (r_f[0] != 4 || isnan (r_f[1]) || isnan (r_f[2]) || !isinf (r_f[3]))
39     abort ();
41   test_fminf (r_f, a_f, b_f);
42   if (r_f[0] != 1 || isnan (r_f[1]) || isnan (r_f[2]) || isinf (r_f[3]))
43     abort ();
45   test_fmax (r_d, a_d, b_d);
46   if (r_d[0] != 4 || isnan (r_d[1]) || isnan (r_d[2]) || !isinf (r_d[3]))
47     abort ();
49   test_fmin (r_d, a_d, b_d);
50   if (r_d[0] != 1 || isnan (r_d[1]) || isnan (r_d[2]) || isinf (r_d[3]))
51     abort ();
53   return 0;