From 7d45cf5a1dbe9d34f9fb18e2f485efda83019493 Mon Sep 17 00:00:00 2001 From: Mark Adler Date: Sat, 11 Feb 2012 00:26:38 -0800 Subject: Use optimized byte swap operations for Microsoft and GNU [Snyder]. --- zutil.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'zutil.h') diff --git a/zutil.h b/zutil.h index dff1112..2f4d14d 100644 --- a/zutil.h +++ b/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 +# pragma intrinsic(_byteswap_ulong) +# define ZSWAP32(q) _byteswap_ulong(q) +#elif defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# include +# 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 */ -- cgit v1.2.3-55-g6feb