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