diff options
| -rw-r--r-- | compat/bswap.h | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compat/bswap.h b/compat/bswap.h index ed00f6d1d5..28635ebc69 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -32,6 +32,14 @@ static inline uint64_t default_bswap64(uint64_t val) ((val & (uint64_t)0xff00000000000000ULL) >> 56)); } +/* + * __has_builtin is available since Clang 10 and GCC 10. + * Below is a fallback for older compilers. + */ +#ifndef __has_builtin +# define __has_builtin(x) 0 +#endif + #undef bswap32 #undef bswap64 @@ -46,6 +54,11 @@ static inline uint64_t default_bswap64(uint64_t val) #define GIT_BIG_ENDIAN 4321 #define GIT_BYTE_ORDER GIT_LITTLE_ENDIAN +#elif __has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64) + +#define bswap32(x) __builtin_bswap32((x)) +#define bswap64(x) __builtin_bswap64((x)) + #endif #if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN) |
