mirror of
https://git.tukaani.org/xz.git
synced 2024-04-04 12:36:23 +02:00
44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
/// \file check_byteswap.h
|
||
|
/// \brief Byteswapping needed by the checks
|
||
|
//
|
||
|
// This code has been put into the public domain.
|
||
|
//
|
||
|
// This library is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||
|
//
|
||
|
///////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef LZMA_CHECK_BYTESWAP_H
|
||
|
#define LZMA_CHECK_BYTESWAP_H
|
||
|
|
||
|
#ifdef HAVE_CONFIG_H
|
||
|
# include <config.h>
|
||
|
#endif
|
||
|
|
||
|
// byteswap.h is a GNU extension. It contains inline assembly versions
|
||
|
// for byteswapping. When byteswap.h is not available, we use generic code.
|
||
|
#ifdef HAVE_BYTESWAP_H
|
||
|
# include <byteswap.h>
|
||
|
#else
|
||
|
# define bswap_32(num) \
|
||
|
( (((num) << 24) ) \
|
||
|
| (((num) << 8) & UINT32_C(0x00FF0000)) \
|
||
|
| (((num) >> 8) & UINT32_C(0x0000FF00)) \
|
||
|
| (((num) >> 24) ) )
|
||
|
|
||
|
# 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
|