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 18extern double floor (double); 19 20#define NUM 64 21 22static void 23__attribute__((__target__("fpmath=sse"))) 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 45static void 46__attribute__((__target__("fpmath=387"))) 47TEST (void) 48{ 49 double a[NUM]; 50 int r[NUM]; 51 int i; 52 53 init_src (a); 54 55 for (i = 0; i < NUM; i++) 56 r[i] = (int) floor (a[i]); 57 58 /* check results: */ 59 for (i = 0; i < NUM; i++) 60 if (r[i] != (int) floor (a[i])) 61 abort(); 62} 63