(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
pr70117.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target long_double_ibm128 } */
       3  /* { dg-options "-std=c99 -O2" } */
       4  /* { dg-add-options long_double_ibm128 } */
       5  
       6  #include <float.h>
       7  
       8  #ifndef __LONG_DOUBLE_IBM128__
       9  #error "long double must be IBM 128-bit"
      10  #endif
      11  
      12  union gl_long_double_union
      13  {
      14    struct { double hi; double lo; } dd;
      15    long double ld;
      16  };
      17  
      18  /* This is gnulib's LDBL_MAX which, being 107 bits in precision, is
      19     slightly larger than gcc's 106 bit precision LDBL_MAX.  */
      20  volatile union gl_long_double_union gl_LDBL_MAX =
      21    { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };
      22  
      23  volatile double min_denorm = 0x1p-1074;
      24  volatile double ld_low = 0x1p-969;
      25  volatile double dinf = 1.0/0.0;
      26  volatile double dnan = 0.0/0.0;
      27  
      28  int
      29  main (void)
      30  {
      31    long double ld;
      32  
      33    ld = gl_LDBL_MAX.ld;
      34    if (__builtin_isinf (ld))
      35      __builtin_abort ();
      36    ld = -gl_LDBL_MAX.ld;
      37    if (__builtin_isinf (ld))
      38      __builtin_abort ();
      39  
      40    ld = gl_LDBL_MAX.ld;
      41    if (!__builtin_isfinite (ld))
      42      __builtin_abort ();
      43    ld = -gl_LDBL_MAX.ld;
      44    if (!__builtin_isfinite (ld))
      45      __builtin_abort ();
      46  
      47    ld = ld_low;
      48    if (!__builtin_isnormal (ld))
      49      __builtin_abort ();
      50    ld = -ld_low;
      51    if (!__builtin_isnormal (ld))
      52      __builtin_abort ();
      53  
      54    ld = -min_denorm;
      55    ld += ld_low;
      56    if (__builtin_isnormal (ld))
      57      __builtin_abort ();
      58    ld = min_denorm;
      59    ld -= ld_low;
      60    if (__builtin_isnormal (ld))
      61      __builtin_abort ();
      62  
      63    ld = 0.0;
      64    if (__builtin_isnormal (ld))
      65      __builtin_abort ();
      66    ld = -0.0;
      67    if (__builtin_isnormal (ld))
      68      __builtin_abort ();
      69  
      70    ld = LDBL_MAX;
      71    if (!__builtin_isnormal (ld))
      72      __builtin_abort ();
      73    ld = -LDBL_MAX;
      74    if (!__builtin_isnormal (ld))
      75      __builtin_abort ();
      76  
      77    ld = gl_LDBL_MAX.ld;
      78    if (!__builtin_isnormal (ld))
      79      __builtin_abort ();
      80    ld = -gl_LDBL_MAX.ld;
      81    if (!__builtin_isnormal (ld))
      82      __builtin_abort ();
      83  
      84    ld = dinf;
      85    if (__builtin_isnormal (ld))
      86      __builtin_abort ();
      87    ld = -dinf;
      88    if (__builtin_isnormal (ld))
      89      __builtin_abort ();
      90  
      91    ld = dnan;
      92    if (__builtin_isnormal (ld))
      93      __builtin_abort ();
      94    ld = -dnan;
      95    if (__builtin_isnormal (ld))
      96      __builtin_abort ();
      97    return 0;
      98  }