Use optimized byte swap operations for Microsoft and GNU [Snyder].
This commit is contained in:
parent
1a4ba8cd91
commit
7d45cf5a1d
3 changed files with 19 additions and 13 deletions
13
zutil.h
13
zutil.h
|
@ -245,4 +245,17 @@ extern const char * const z_errmsg[10]; /* indexed by 2-zlib_error */
|
|||
#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
|
||||
#define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
|
||||
|
||||
/* Reverse the bytes in a 64-bit or 32-bit or 16-bit value */
|
||||
#if defined(_WIN32) && (_MSC_VER >= 1300) && (defined(_M_IX86) || defined(_M_X64))
|
||||
# include <stdlib.h>
|
||||
# pragma intrinsic(_byteswap_ulong)
|
||||
# define ZSWAP32(q) _byteswap_ulong(q)
|
||||
#elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
|
||||
# include <byteswap.h>
|
||||
# define ZSWAP32(q) __builtin_bswap32(q)
|
||||
#else
|
||||
# define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
|
||||
(((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
|
||||
#endif
|
||||
|
||||
#endif /* ZUTIL_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue