OSDN Git Service

PR target/59839
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / sse4_1-ceilf-vec.c
1 /* { dg-do run } */
2 /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */
3 /* { dg-require-effective-target sse4 } */
4 /* { dg-skip-if "no M_PI" { vxworks_kernel } } */
5
6 #ifndef CHECK_H
7 #define CHECK_H "sse4_1-check.h"
8 #endif
9
10 #ifndef TEST
11 #define TEST sse4_1_test
12 #endif
13
14 #include CHECK_H
15
16 #include <math.h>
17
18 extern float ceilf (float);
19
20 #define NUM 64
21
22 static void
23 __attribute__((__target__("fpmath=sse")))
24 init_src (float *src)
25 {
26   int i, sign = 1;
27   float f = rand ();
28
29   for (i = 0; i < NUM; i++)
30     {
31       src[i] = (i + 1) * f * M_PI * sign;
32       if (i < (NUM / 2))
33         {
34           if ((i % 6) == 0)
35             f = f * src[i];
36         }
37       else if (i == (NUM / 2))
38         f = rand ();
39       else if ((i % 6) == 0)
40         f = 1 / (f * (i + 1) * src[i] * M_PI * sign);
41       sign = -sign;
42     }
43 }
44
45 static void
46 __attribute__((__target__("fpmath=387")))
47 TEST (void)
48 {
49   float a[NUM];
50   float r[NUM];
51   int i;
52
53   init_src (a);
54
55   for (i = 0; i < NUM; i++)
56     r[i] = ceilf (a[i]);
57
58   /* check results:  */
59   for (i = 0; i < NUM; i++)
60     if (r[i] != ceilf (a[i]))
61       abort();
62 }