(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
float128-hw11.c
       1  /* { dg-do run { target lp64 } } */
       2  /* { dg-require-effective-target p9vector_hw } */
       3  /* { dg-require-effective-target float128 } */
       4  /* { dg-options "-mpower9-vector -O2" } */
       5  
       6  #define __STDC_WANT_IEC_60559_TYPES_EXT__ 1
       7  #define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1
       8  
       9  #include <math.h>
      10  #include <stdlib.h>
      11  #include <stddef.h>
      12  
      13  extern _Float128 roundf128 (_Float128);
      14  extern _Float128 floorf128 (_Float128);
      15  extern _Float128 ceilf128  (_Float128);
      16  extern _Float128 truncf128 (_Float128);
      17  
      18  static const struct {
      19    _Float128 value;
      20    _Float128 exp_round;
      21    _Float128 exp_floor;
      22    _Float128 exp_ceil;
      23    _Float128 exp_trunc;
      24  } a[] = {
      25    { -2.0Q, -2.0Q, -2.0Q, -2.0Q, -2.0Q },
      26    { -1.7Q, -2.0Q, -2.0Q, -1.0Q, -1.0Q },
      27    { -1.5Q, -2.0Q, -2.0Q, -1.0Q, -1.0Q },
      28    { -1.3Q, -1.0Q, -2.0Q, -1.0Q, -1.0Q },
      29    { +0.0Q, +0.0Q, +0.0Q, +0.0Q, +0.0Q },
      30    { +1.3Q, +1.0Q, +1.0Q, +2.0Q, +1.0Q },
      31    { +1.5Q, +2.0Q, +1.0Q, +2.0Q, +1.0Q },
      32    { +1.7Q, +2.0Q, +1.0Q, +2.0Q, +1.0Q },
      33    { +2.0Q, +2.0Q, +2.0Q, +2.0Q, +2.0Q }
      34  };
      35  
      36  int
      37  main (void)
      38  {
      39    size_t i;
      40    _Float128 v;
      41  
      42    for (i = 0; i < sizeof (a) / sizeof (a[0]); i++)
      43      {
      44        v = a[i].value;
      45        if (roundf128 (v) != a[i].exp_round)
      46  	abort ();
      47  
      48        if (floorf128 (v) != a[i].exp_floor)
      49  	abort ();
      50  
      51        if (ceilf128 (v) != a[i].exp_ceil)
      52  	abort ();
      53  
      54        if (truncf128 (v) != a[i].exp_trunc)
      55  	abort ();
      56      }
      57  
      58    return 0;
      59  }