wrap math.h for M_PI et al in target/i386 tests
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / sse4_1-truncf-vec.c
blob691ea7b8e787f67caadc9815a78f44dae1961c8e
1 /* { dg-do run } */
2 /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */
3 /* { dg-require-effective-target sse4 } */
5 #ifndef CHECK_H
6 #define CHECK_H "sse4_1-check.h"
7 #endif
9 #ifndef TEST
10 #define TEST sse4_1_test
11 #endif
13 #include CHECK_H
15 #define __NO_MATH_INLINES
16 #include "math_m_pi.h"
18 extern float truncf (float);
20 #define NUM 64
22 static void
23 __attribute__((__target__("fpmath=sse")))
24 init_src (float *src)
26 int i, sign = 1;
27 float f = rand ();
29 for (i = 0; i < NUM; i++)
31 src[i] = (i + 1) * f * M_PI * sign;
32 if (i < (NUM / 2))
34 if ((i % 6) == 0)
35 f = f * src[i];
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;
45 static void
46 __attribute__((__target__("fpmath=387")))
47 TEST (void)
49 float a[NUM];
50 float r[NUM];
51 int i;
53 init_src (a);
55 for (i = 0; i < NUM; i++)
56 r[i] = truncf (a[i]);
58 /* check results: */
59 for (i = 0; i < NUM; i++)
60 if (r[i] != truncf (a[i]))
61 abort();