1 ///////////////////////////////////////////////////////////////////////////////
4 /// \brief Byte swapping
6 // Author: Lasse Collin
8 // This file has been put into the public domain.
9 // You can do whatever you want with this file.
11 ///////////////////////////////////////////////////////////////////////////////
16 // NOTE: We assume that config.h is already #included.
18 // At least glibc has byteswap.h which contains inline assembly code for
19 // byteswapping. Some systems have byteswap.h but lack one or more of the
20 // bswap_xx macros/functions, which is why we check them separately even
21 // if byteswap.h is available.
23 #ifdef HAVE_BYTESWAP_H
24 # include <byteswap.h>
28 # define bswap_16(num) \
29 (((num) << 8) | ((num) >> 8))
33 # define bswap_32(num) \
35 | (((num) << 8) & UINT32_C(0x00FF0000)) \
36 | (((num) >> 8) & UINT32_C(0x0000FF00)) \
41 # define bswap_64(num) \
43 | (((num) << 40) & UINT64_C(0x00FF000000000000)) \
44 | (((num) << 24) & UINT64_C(0x0000FF0000000000)) \
45 | (((num) << 8) & UINT64_C(0x000000FF00000000)) \
46 | (((num) >> 8) & UINT64_C(0x00000000FF000000)) \
47 | (((num) >> 24) & UINT64_C(0x0000000000FF0000)) \
48 | (((num) >> 40) & UINT64_C(0x000000000000FF00)) \