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

     1  /* PR target/50310 */
     2  
     3  extern void abort (void);
     4  double s1[4], s2[4], s3[64];
     5  
     6  void
     7  foo (void)
     8  {
     9    int i;
    10    for (i = 0; i < 4; i++)
    11      s3[0 * 4 + i] = __builtin_isgreater (s1[i], s2[i]) ? -1.0 : 0.0;
    12    for (i = 0; i < 4; i++)
    13      s3[1 * 4 + i] = (!__builtin_isgreater (s1[i], s2[i])) ? -1.0 : 0.0;
    14    for (i = 0; i < 4; i++)
    15      s3[2 * 4 + i] = __builtin_isgreaterequal (s1[i], s2[i]) ? -1.0 : 0.0;
    16    for (i = 0; i < 4; i++)
    17      s3[3 * 4 + i] = (!__builtin_isgreaterequal (s1[i], s2[i])) ? -1.0 : 0.0;
    18    for (i = 0; i < 4; i++)
    19      s3[4 * 4 + i] = __builtin_isless (s1[i], s2[i]) ? -1.0 : 0.0;
    20    for (i = 0; i < 4; i++)
    21      s3[5 * 4 + i] = (!__builtin_isless (s1[i], s2[i])) ? -1.0 : 0.0;
    22    for (i = 0; i < 4; i++)
    23      s3[6 * 4 + i] = __builtin_islessequal (s1[i], s2[i]) ? -1.0 : 0.0;
    24    for (i = 0; i < 4; i++)
    25      s3[7 * 4 + i] = (!__builtin_islessequal (s1[i], s2[i])) ? -1.0 : 0.0;
    26    for (i = 0; i < 4; i++)
    27      s3[8 * 4 + i] = __builtin_islessgreater (s1[i], s2[i]) ? -1.0 : 0.0;
    28    for (i = 0; i < 4; i++)
    29      s3[9 * 4 + i] = (!__builtin_islessgreater (s1[i], s2[i])) ? -1.0 : 0.0;
    30    for (i = 0; i < 4; i++)
    31      s3[10 * 4 + i] = __builtin_isunordered (s1[i], s2[i]) ? -1.0 : 0.0;
    32    for (i = 0; i < 4; i++)
    33      s3[11 * 4 + i] = (!__builtin_isunordered (s1[i], s2[i])) ? -1.0 : 0.0;
    34    for (i = 0; i < 4; i++)
    35      s3[12 * 4 + i] = s1[i] > s2[i] ? -1.0 : 0.0;
    36    for (i = 0; i < 4; i++)
    37      s3[13 * 4 + i] = s1[i] <= s2[i] ? -1.0 : 0.0;
    38    for (i = 0; i < 4; i++)
    39      s3[14 * 4 + i] = s1[i] < s2[i] ? -1.0 : 0.0;
    40    for (i = 0; i < 4; i++)
    41      s3[15 * 4 + i] = s1[i] >= s2[i] ? -1.0 : 0.0;
    42  }
    43  
    44  int
    45  main ()
    46  {
    47    int i;
    48    s1[0] = 5.0;
    49    s1[1] = 6.0;
    50    s1[2] = 5.0;
    51    s1[3] = __builtin_nan ("");
    52    s2[0] = 6.0;
    53    s2[1] = 5.0;
    54    s2[2] = 5.0;
    55    s2[3] = 5.0;
    56    asm volatile ("" : : : "memory");
    57    foo ();
    58    asm volatile ("" : : : "memory");
    59    for (i = 0; i < 16 * 4; i++)
    60      if (i >= 12 * 4 && (i & 3) == 3)
    61        {
    62  	if (s3[i] != 0.0) abort ();
    63        }
    64      else
    65        {
    66          static int masks[] = { 2, 2|4, 1, 1|4, 1|2, 8, 2, 1 };
    67          if (s3[i]
    68  	    != (((1 << (i & 3)) & ((i & 4) ? ~masks[i / 8] : masks[i / 8]))
    69  		? -1.0 : 0.0))
    70  	  abort ();
    71        }
    72    return 0;
    73  }