(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
builtin-bswap-4.c
       1  /* { dg-do run } */
       2  /* { dg-require-effective-target stdint_types } */
       3  /* { dg-options "-Wall" } */
       4  
       5  #include <stdint.h>
       6  
       7  #define MAKE_FUN(suffix, type)						\
       8    type my_bswap##suffix(type x) {					\
       9      type result = 0;							\
      10      int shift;								\
      11      for (shift = 0; shift < 8 * sizeof (type); shift += 8)	\
      12        {									\
      13  	result <<= 8;							\
      14  	result |= (x >> shift) & 0xff;					\
      15        }									\
      16      return result;							\
      17    }									\
      18  
      19  MAKE_FUN(16, uint16_t);
      20  MAKE_FUN(32, uint32_t);
      21  MAKE_FUN(64, uint64_t);
      22  
      23  extern void abort (void);
      24  
      25  #define NUMS16					\
      26    {						\
      27      0x0000,					\
      28      0x1122,					\
      29      0xffff,					\
      30    }
      31  
      32  #define NUMS32					\
      33    {						\
      34      0x00000000UL,				\
      35      0x11223344UL,				\
      36      0xffffffffUL,				\
      37    }
      38  
      39  #define NUMS64					\
      40    {						\
      41      0x0000000000000000ULL,			\
      42      0x1122334455667788ULL,			\
      43      0xffffffffffffffffULL,			\
      44    }
      45  
      46  uint16_t uint16_ts[] =
      47    NUMS16;
      48  
      49  uint32_t uint32_ts[] =
      50    NUMS32;
      51  
      52  uint64_t uint64_ts[] =
      53    NUMS64;
      54  
      55  #define N(table) (sizeof (table) / sizeof (table[0]))
      56  
      57  int
      58  main (void)
      59  {
      60    int i;
      61  
      62    for (i = 0; i < N(uint16_ts); i++)
      63      if (__builtin_bswap16 (uint16_ts[i]) != my_bswap16 (uint16_ts[i]))
      64        abort ();
      65  
      66    for (i = 0; i < N(uint32_ts); i++)
      67      if (__builtin_bswap32 (uint32_ts[i]) != my_bswap32 (uint32_ts[i]))
      68        abort ();
      69  
      70    for (i = 0; i < N(uint64_ts); i++)
      71      if (__builtin_bswap64 (uint64_ts[i]) != my_bswap64 (uint64_ts[i]))
      72        abort ();
      73  
      74    return 0;
      75  }