(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
torture/
fp-uint64-convert-double-1.c
       1  /* PR84407 */
       2  /* { dg-do run { xfail { arm-*-* } } } */
       3  /* { dg-require-effective-target fenv } */
       4  /* { dg-require-effective-target hard_float } */
       5  /* { dg-additional-options "-frounding-math -fexcess-precision=standard" } */
       6  
       7  #include <fenv.h>
       8  #include <stdlib.h>
       9  
      10  void __attribute__((noipa))
      11  fooa ()
      12  {
      13  #if __DBL_MANT_DIG__ == 53
      14  #ifdef FE_TONEAREST
      15    fesetround(FE_TONEAREST);
      16    __UINT64_TYPE__ x = 0x7fffffffffffffff;
      17    double f = x;
      18    if (f != 0x1p+63)
      19      abort ();
      20  #endif
      21  #endif
      22  }
      23  
      24  void __attribute__((noipa))
      25  foob ()
      26  {
      27  #if __DBL_MANT_DIG__ == 53
      28  #ifdef FE_DOWNWARD
      29    fesetround(FE_DOWNWARD);
      30    __UINT64_TYPE__ x = 0x7fffffffffffffff;
      31    double f = x;
      32    if (f != 0x1.fffffffffffffp+62)
      33      abort ();
      34  #endif
      35  #endif
      36  }
      37  
      38  void __attribute__((noipa))
      39  fooc ()
      40  {
      41  #if __DBL_MANT_DIG__ == 53
      42  #ifdef FE_UPWARD
      43    fesetround(FE_UPWARD);
      44    __UINT64_TYPE__ x = 0x7fffffffffffffff;
      45    double f = x;
      46    if (f != 0x1p+63)
      47      abort ();
      48  #endif
      49  #endif
      50  }
      51  
      52  void __attribute__((noipa))
      53  food ()
      54  {
      55  #if __DBL_MANT_DIG__ == 53
      56  #ifdef FE_TOWARDZERO
      57    fesetround(FE_TOWARDZERO);
      58    __UINT64_TYPE__ x = 0x7fffffffffffffff;
      59    double f = x;
      60    if (f != 0x1.fffffffffffffp+62)
      61      abort ();
      62  #endif
      63  #endif
      64  }
      65  
      66  
      67  int
      68  main ()
      69  {
      70    fooa ();
      71    foob ();
      72    fooc ();
      73    food ();
      74    return 0;
      75  }