diff options
Diffstat (limited to 'Build/source/utils/xz-4.999.9beta/src/common/bswap.h')
-rw-r--r-- | Build/source/utils/xz-4.999.9beta/src/common/bswap.h | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/Build/source/utils/xz-4.999.9beta/src/common/bswap.h b/Build/source/utils/xz-4.999.9beta/src/common/bswap.h new file mode 100644 index 00000000000..c8cf125aeb8 --- /dev/null +++ b/Build/source/utils/xz-4.999.9beta/src/common/bswap.h @@ -0,0 +1,52 @@ +/////////////////////////////////////////////////////////////////////////////// +// +/// \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 <byteswap.h> +#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 |