OSDN Git Service

2006-10-31 Eric Christopher <echristo@apple.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / builtin-bswap-4.c
1 /* { dg-do run } */
2 /* { dg-options "-Wall" } */
3
4 #include <stdint.h>
5
6 #define MAKE_FUN(suffix, type)                                          \
7   type my_bswap##suffix(type x) {                                       \
8     type result = 0;                                                    \
9     int shift;                                                          \
10     for (shift = 0; shift < 8 * sizeof (type); shift += 8)      \
11       {                                                                 \
12         result <<= 8;                                                   \
13         result |= (x >> shift) & 0xff;                                  \
14       }                                                                 \
15     return result;                                                      \
16   }                                                                     \
17
18 MAKE_FUN(32, uint32_t);
19 MAKE_FUN(64, uint64_t);
20
21 extern void abort (void);
22
23 #define NUMS32                                  \
24   {                                             \
25     0x00000000UL,                               \
26     0x11223344UL,                               \
27     0xffffffffUL,                               \
28   }
29
30 #define NUMS64                                  \
31   {                                             \
32     0x0000000000000000ULL,                      \
33     0x1122334455667788ULL,                      \
34     0xffffffffffffffffULL,                      \
35   }
36
37 uint32_t uint32_ts[] =
38   NUMS32;
39
40 uint64_t uint64_ts[] =
41   NUMS64;
42
43 #define N(table) (sizeof (table) / sizeof (table[0]))
44
45 int
46 main (void)
47 {
48   int i;
49
50   for (i = 0; i < N(uint32_ts); i++)
51     if (__builtin_bswap32 (uint32_ts[i]) != my_bswap32 (uint32_ts[i]))
52       abort ();
53
54   for (i = 0; i < N(uint64_ts); i++)
55     if (__builtin_bswap64 (uint64_ts[i]) != my_bswap64 (uint64_ts[i]))
56       abort ();
57
58   return 0;
59 }