]> icculus.org git repositories - icculus/xz.git/blob - src/liblzma/check/check_byteswap.h
Imported to git.
[icculus/xz.git] / src / liblzma / check / check_byteswap.h
1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 /// \file       check_byteswap.h
4 /// \brief      Byteswapping needed by the checks
5 //
6 //  This code has been put into the public domain.
7 //
8 //  This library is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11 //
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #ifndef LZMA_CHECK_BYTESWAP_H
15 #define LZMA_CHECK_BYTESWAP_H
16
17 #ifdef HAVE_CONFIG_H
18 #       include <config.h>
19 #endif
20
21 // byteswap.h is a GNU extension. It contains inline assembly versions
22 // for byteswapping. When byteswap.h is not available, we use generic code.
23 #ifdef HAVE_BYTESWAP_H
24 #       include <byteswap.h>
25 #else
26 #       define bswap_32(num) \
27                 ( (((num) << 24)                       ) \
28                 | (((num) <<  8) & UINT32_C(0x00FF0000)) \
29                 | (((num) >>  8) & UINT32_C(0x0000FF00)) \
30                 | (((num) >> 24)                       ) )
31
32 #       define bswap_64(num) \
33                 ( (((num) << 56)                               ) \
34                 | (((num) << 40) & UINT64_C(0x00FF000000000000)) \
35                 | (((num) << 24) & UINT64_C(0x0000FF0000000000)) \
36                 | (((num) <<  8) & UINT64_C(0x000000FF00000000)) \
37                 | (((num) >>  8) & UINT64_C(0x00000000FF000000)) \
38                 | (((num) >> 24) & UINT64_C(0x0000000000FF0000)) \
39                 | (((num) >> 40) & UINT64_C(0x000000000000FF00)) \
40                 | (((num) >> 56)                               ) )
41 #endif
42
43 #endif