From 311e67dc2479debe725dfb9a3f974bdce04644ea Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Mon, 16 Jun 2025 21:26:56 +0200 Subject: [PATCH] Reapply "bswap.h: add support for built-in bswap functions" The `bswap.h` header was introduced to fix the Windows/ARM64 build. Unfortunately, this broke big Endian machines. Instead of fixing it properly, upstream Git simply reverted the commit in 1c62df0abe3d (Revert "bswap.h: add support for built-in bswap functions", 2025-06-12), re-breaking the Windows/ARM64 build. Let's re-un-break the Windows/ARM64 build by reverting 1c62df0abe3d (Revert "bswap.h: add support for built-in bswap functions", 2025-06-12). Signed-off-by: Johannes Schindelin --- compat/bswap.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/compat/bswap.h b/compat/bswap.h index b34054f2bd..9e0f98e00b 100644 --- a/compat/bswap.h +++ b/compat/bswap.h @@ -35,7 +35,19 @@ static inline uint64_t default_bswap64(uint64_t val) #undef bswap32 #undef bswap64 -#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) +/** + * __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 + +#if __has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64) +#define bswap32(x) __builtin_bswap32((x)) +#define bswap64(x) __builtin_bswap64((x)) + +#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #define bswap32 git_bswap32 static inline uint32_t git_bswap32(uint32_t x)