1 /* { dg-do run } */ 2 /* { dg-options "-O2 -ffast-math -ftree-vectorize -msse4.1" } */ 3 /* { dg-require-effective-target sse4 } */ 4 5 #ifndef CHECK_H 6 #define CHECK_H "sse4_1-check.h" 7 #endif 8 9 #ifndef TEST 10 #define TEST sse4_1_test 11 #endif 12 13 #include CHECK_H 14 15 #define __NO_MATH_INLINES 16 #include "math_m_pi.h" 17 18 extern double round (double); 19 20 #define NUM 64 21 22 static void 23 __attribute__((__target__("fpmath=sse"))) init_src(double * src)24init_src (double *src) 25 { 26 int i, sign = 1; 27 double 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"))) TEST(void)47TEST (void) 48 { 49 double a[NUM]; 50 double r[NUM]; 51 int i; 52 53 init_src (a); 54 55 for (i = 0; i < NUM; i++) 56 r[i] = round (a[i]); 57 58 /* check results: */ 59 for (i = 0; i < NUM; i++) 60 if (r[i] != round (a[i])) 61 abort(); 62 } 63