/////////////////////////////////////////////////////////////////////////////// // /// \file bswap.h /// \brief Byte swapping // // Author: Lasse Collin // // This file has been put into the public domain. // You can do whatever you want with this file. // /////////////////////////////////////////////////////////////////////////////// #ifndef LZMA_BSWAP_H #define LZMA_BSWAP_H // NOTE: We assume that config.h is already #included. // 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 #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)) \ | (((num) << 24) & UINT64_C(0x0000FF0000000000)) \ | (((num) << 8) & UINT64_C(0x000000FF00000000)) \ | (((num) >> 8) & UINT64_C(0x00000000FF000000)) \ | (((num) >> 24) & UINT64_C(0x0000000000FF0000)) \ | (((num) >> 40) & UINT64_C(0x000000000000FF00)) \ | (((num) >> 56) ) ) #endif #endif