diff options
Diffstat (limited to '')
-rw-r--r-- | src/common/bswap.h | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/common/bswap.h b/src/common/bswap.h index 8f82a8f4..f5cb8345 100644 --- a/src/common/bswap.h +++ b/src/common/bswap.h @@ -16,20 +16,29 @@ // NOTE: We assume that config.h is already #included. -// byteswap.h is a GNU extension. It contains inline assembly versions -// for byteswapping. When byteswap.h is not available, we use generic code. +// At least glibc has byteswap.h which contains inline assembly code for +// byteswapping. Some systems have byteswap.h but lack one or more of the +// bswap_xx macros/functions, which is why we check them separately even +// if byteswap.h is available. + #ifdef HAVE_BYTESWAP_H # include <byteswap.h> -#else +#endif + +#ifndef HAVE_BSWAP_16 # define bswap_16(num) \ (((num) << 8) | ((num) >> 8)) +#endif +#ifndef HAVE_BSWAP_32 # define bswap_32(num) \ ( (((num) << 24) ) \ | (((num) << 8) & UINT32_C(0x00FF0000)) \ | (((num) >> 8) & UINT32_C(0x0000FF00)) \ | (((num) >> 24) ) ) +#endif +#ifndef HAVE_BSWAP_64 # define bswap_64(num) \ ( (((num) << 56) ) \ | (((num) << 40) & UINT64_C(0x00FF000000000000)) \ |