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