Skip to content

Commit 8758254

Browse files
dennisamelingdscho
authored andcommitted
bswap.h: add support for built-in bswap functions
Newer compiler versions, like GCC 10 and Clang 12, have built-in functions for bswap32 and bswap64. This comes in handy, for example, when targeting CLANGARM64 on Windows, which would not be supported without this logic. Signed-off-by: Dennis Ameling <[email protected]>
1 parent 787bfe4 commit 8758254

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

compat/bswap.h

+13-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,19 @@ static inline uint64_t default_bswap64(uint64_t val)
3535
#undef bswap32
3636
#undef bswap64
3737

38-
#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
38+
/**
39+
* __has_builtin is available since Clang 10 and GCC 10.
40+
* Below is a fallback for older compilers.
41+
*/
42+
#ifndef __has_builtin
43+
#define __has_builtin(x) 0
44+
#endif
45+
46+
#if __has_builtin(__builtin_bswap32) && __has_builtin(__builtin_bswap64)
47+
#define bswap32(x) __builtin_bswap32((x))
48+
#define bswap64(x) __builtin_bswap64((x))
49+
50+
#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
3951

4052
#define bswap32 git_bswap32
4153
static inline uint32_t git_bswap32(uint32_t x)

0 commit comments

Comments
 (0)