1  /* { dg-do run } */
       2  /* { dg-options "-O2 -ffast-math -ftree-vectorize -mavx" } */
       3  /* { dg-require-effective-target avx } */
       4  
       5  #ifndef CHECK_H
       6  #define CHECK_H "avx-check.h"
       7  #endif
       8  
       9  #ifndef TEST
      10  #define TEST avx_test
      11  #endif
      12  
      13  #include CHECK_H
      14  
      15  #define __NO_MATH_INLINES
      16  #include "math_m_pi.h"
      17  
      18  extern double floor (double);
      19  
      20  #define NUM 4
      21  
      22  static void
      23  __attribute__((__target__("fpmath=sse")))
      24  init_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")))
      47  TEST (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  }