diff --git a/headers/compatibility/bsd/endian.h b/headers/compatibility/bsd/endian.h index 0dcf5ee10a..7bba14b714 100644 --- a/headers/compatibility/bsd/endian.h +++ b/headers/compatibility/bsd/endian.h @@ -8,13 +8,17 @@ #include_next #include +#include #ifdef _DEFAULT_SOURCE #include + +#if __GNUC__ < 4 #include #include +#endif #ifdef __cplusplus extern "C" { @@ -23,9 +27,15 @@ extern "C" { /* * General byte order swapping functions. */ -#define bswap16(x) __swap_int16(x) -#define bswap32(x) __swap_int32(x) -#define bswap64(x) __swap_int64(x) +#if __GNUC__ >= 4 +#define bswap16(x) __builtin_bswap16(x) +#define bswap32(x) __builtin_bswap32(x) +#define bswap64(x) __builtin_bswap64(x) +#else +#define bswap16(x) __swap_int16(x) +#define bswap32(x) __swap_int32(x) +#define bswap64(x) __swap_int64(x) +#endif /* * Host to big endian, host to little endian, big endian to host, and little