libFLAC: Support 64bit brword/bwword
[flac.git] / include / share / endswap.h
index 4fde4c1..b189f3e 100644 (file)
@@ -43,11 +43,13 @@ static inline unsigned short __builtin_bswap16(unsigned short a)
 
 #define        ENDSWAP_16(x)           (__builtin_bswap16 (x))
 #define        ENDSWAP_32(x)           (__builtin_bswap32 (x))
+#define        ENDSWAP_64(x)           (__builtin_bswap64 (x))
 
 #elif defined _MSC_VER         /* Windows. Apparently in <stdlib.h>. */
 
 #define        ENDSWAP_16(x)           (_byteswap_ushort (x))
 #define        ENDSWAP_32(x)           (_byteswap_ulong (x))
+#define        ENDSWAP_64(x)           (_byteswap_uint64 (x))
 
 #elif defined HAVE_BYTESWAP_H          /* Linux */
 
@@ -55,16 +57,18 @@ static inline unsigned short __builtin_bswap16(unsigned short a)
 
 #define        ENDSWAP_16(x)           (bswap_16 (x))
 #define        ENDSWAP_32(x)           (bswap_32 (x))
+#define        ENDSWAP_64(x)           (bswap_64 (x))
 
 #else
 
 #define        ENDSWAP_16(x)           ((((x) >> 8) & 0xFF) | (((x) & 0xFF) << 8))
 #define        ENDSWAP_32(x)           ((((x) >> 24) & 0xFF) | (((x) >> 8) & 0xFF00) | (((x) & 0xFF00) << 8) | (((x) & 0xFF) << 24))
+#define        ENDSWAP_64(x)           ((ENDSWAP_32(((x) >> 32) & 0xFFFFFFFF)) | (ENDSWAP_32((x) & 0xFFFFFFFF) << 32))
 
 #endif
 
 
-/* Host to little-endian byte swapping. */
+/* Host to little-endian byte swapping (for MD5 calculation) */
 #if CPU_IS_BIG_ENDIAN
 
 #define H2LE_16(x)             ENDSWAP_16 (x)