modernc.org/ccgo/v3@v3.16.14/lib/testdata/gcc-9.1.0/gcc/testsuite/gcc.c-torture/execute/ieee/20000320-1.c (about)

     1  #if __INT_MAX__ != 2147483647 || (__LONG_LONG_MAX__ != 9223372036854775807ll && __LONG_MAX__ != 9223372036854775807ll)
     2  int main(void) { exit (0); }
     3  #else
     4  #if __LONG_MAX__ != 9223372036854775807ll
     5  typedef unsigned long long ull;
     6  #else
     7  typedef unsigned long ull;
     8  #endif
     9  typedef unsigned ul;
    10  
    11  union fl {
    12    float	f;
    13    ul l;
    14  } uf;
    15  union dl {
    16    double d;
    17    ull ll;
    18  } ud;
    19  
    20  int failed = 0;
    21  
    22  void c(ull d, ul f)
    23  {
    24    ud.ll = d;
    25    uf.f = (float) ud.d;
    26    if (uf.l != f)
    27      {
    28        failed++;
    29      }
    30  }
    31  
    32  int main()
    33  {
    34    if (sizeof (float) != sizeof (ul)
    35        || sizeof (double) != sizeof (ull))
    36      exit (0);
    37    
    38  #if (defined __arm__ || defined __thumb__) && ! (defined __ARMEB__ || defined __VFP_FP__)
    39    /* The ARM always stores FP numbers in big-wordian format,
    40       even when running in little-byteian mode.  */
    41    c(0x0000000036900000ULL, 0x00000000U);
    42    c(0x0000000136900000ULL, 0x00000001U);
    43    c(0xffffffff369fffffULL, 0x00000001U);
    44    c(0x0000000036A00000ULL, 0x00000001U);
    45    c(0xffffffff36A7ffffULL, 0x00000001U);
    46    c(0x0000000036A80000ULL, 0x00000002U);
    47    c(0xffffffff36AfffffULL, 0x00000002U);
    48    c(0x0000000036b00000ULL, 0x00000002U);
    49    c(0x0000000136b00000ULL, 0x00000002U);
    50    
    51    c(0xdfffffff380fffffULL, 0x007fffffU);
    52    c(0xe0000000380fffffULL, 0x00800000U);
    53    c(0xe0000001380fffffULL, 0x00800000U);
    54    c(0xffffffff380fffffULL, 0x00800000U);
    55    c(0x0000000038100000ULL, 0x00800000U);
    56    c(0x0000000138100000ULL, 0x00800000U);
    57    c(0x1000000038100000ULL, 0x00800000U);
    58    c(0x1000000138100000ULL, 0x00800001U);
    59    c(0x2fffffff38100000ULL, 0x00800001U);
    60    c(0x3000000038100000ULL, 0x00800002U);
    61    c(0x5000000038100000ULL, 0x00800002U);
    62    c(0x5000000138100000ULL, 0x00800003U);
    63  #else
    64    c(0x3690000000000000ULL, 0x00000000U);
    65    c(0x3690000000000001ULL, 0x00000001U);
    66    c(0x369fffffffffffffULL, 0x00000001U);
    67    c(0x36A0000000000000ULL, 0x00000001U);
    68    c(0x36A7ffffffffffffULL, 0x00000001U);
    69    c(0x36A8000000000000ULL, 0x00000002U);
    70    c(0x36AfffffffffffffULL, 0x00000002U);
    71    c(0x36b0000000000000ULL, 0x00000002U);
    72    c(0x36b0000000000001ULL, 0x00000002U);
    73    
    74    c(0x380fffffdfffffffULL, 0x007fffffU);
    75    c(0x380fffffe0000000ULL, 0x00800000U);
    76    c(0x380fffffe0000001ULL, 0x00800000U);
    77    c(0x380fffffffffffffULL, 0x00800000U);
    78    c(0x3810000000000000ULL, 0x00800000U);
    79    c(0x3810000000000001ULL, 0x00800000U);
    80    c(0x3810000010000000ULL, 0x00800000U);
    81    c(0x3810000010000001ULL, 0x00800001U);
    82    c(0x381000002fffffffULL, 0x00800001U);
    83    c(0x3810000030000000ULL, 0x00800002U);
    84    c(0x3810000050000000ULL, 0x00800002U);
    85    c(0x3810000050000001ULL, 0x00800003U);
    86  #endif
    87  
    88    if (failed)
    89      abort ();
    90    else
    91      exit (0);
    92  }
    93  #endif