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

     1  /* Test __builtin_bswap64 . */
     2  
     3  unsigned long long g(unsigned long long a) __attribute__((noinline));
     4  unsigned long long g(unsigned long long a)
     5  {
     6    return __builtin_bswap64(a);
     7  }
     8  
     9  
    10  unsigned long long f(unsigned long long c)
    11  {
    12    union {
    13      unsigned long long a;
    14      unsigned char b[8];
    15    } a, b;
    16    a.a = c;
    17    b.b[0] = a.b[7];
    18    b.b[1] = a.b[6];
    19    b.b[2] = a.b[5];
    20    b.b[3] = a.b[4];
    21    b.b[4] = a.b[3];
    22    b.b[5] = a.b[2];
    23    b.b[6] = a.b[1];
    24    b.b[7] = a.b[0];
    25    return b.a;
    26  }
    27  
    28  int main(void)
    29  {
    30    unsigned long long i;
    31    /* The rest of the testcase assumes 8 byte long long. */
    32    if (sizeof(i) != sizeof(char)*8)
    33      return 0;
    34    if (f(0x12) != g(0x12))
    35      __builtin_abort();
    36    if (f(0x1234) != g(0x1234))
    37      __builtin_abort();
    38    if (f(0x123456) != g(0x123456))
    39      __builtin_abort();
    40    if (f(0x12345678ull) != g(0x12345678ull))
    41      __builtin_abort();
    42    if (f(0x1234567890ull) != g(0x1234567890ull))
    43      __builtin_abort();
    44    if (f(0x123456789012ull) != g(0x123456789012ull))
    45      __builtin_abort();
    46    if (f(0x12345678901234ull) != g(0x12345678901234ull))
    47      __builtin_abort();
    48    if (f(0x1234567890123456ull) != g(0x1234567890123456ull))
    49      __builtin_abort();
    50    return 0;
    51  }