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 18#define NUM 64 19 20static void 21__attribute__((__target__("fpmath=sse"))) 22init_src (float *src) 23{ 24 int i, sign = 1; 25 float 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 43static void 44__attribute__((__target__("fpmath=387"))) 45TEST (void) 46{ 47 float 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] = __builtin_floorf (a[i]); 55 56 /* check results: */ 57 for (i = 0; i < NUM; i++) 58 if (r[i] != __builtin_floorf (a[i])) 59 abort(); 60} 61