From: Jan Engelhardt Date: 2018-11-19 22:07:39.047450605 +0100 --- erofs_types.h | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) Index: erofs-utils-0.0.1~4/erofs_types.h =================================================================== --- erofs-utils-0.0.1~4.orig/erofs_types.h +++ erofs-utils-0.0.1~4/erofs_types.h @@ -26,13 +26,24 @@ #define s32 int32_t #define s64 int64_t -#define cpu_to_le16(X) htole16(X) -#define cpu_to_le32(X) htole32(X) -#define cpu_to_le64(X) htole64(X) - -#define le16_to_cpu(X) le16toh(X) -#define le32_to_cpu(X) le32toh(X) -#define le64_to_cpu(X) le64toh(X) +#if (defined(__BYTE_ORDER) && __BYTE_ORDER == __BIG_ENDIAN) || \ + (defined(_BYTE_ORDER) && _BYTE_ORDER == _BIG_ENDIAN) + /* We need to use constexpr functions, and htole16 unfortunately is not. */ +# define cpu_to_le16(x) __builtin_bswap16(x) +# define cpu_to_le32(x) __builtin_bswap32(x) +# define cpu_to_be64(x) (x) +# define le16_to_cpu(x) __builtin_bswap16(x) +# define le32_to_cpu(x) __builtin_bswap32(x) +# define be64_to_cpu(x) (x) +#else +# define cpu_to_le16(x) (x) +# define cpu_to_le32(x) (x) +# define cpu_to_le64(x) (x) +# define cpu_to_be64(x) __builtin_bswap64(x) +# define le16_to_cpu(x) (x) +# define le32_to_cpu(x) (x) +# define be64_to_cpu(x) __builtin_bswap64(x) +#endif #ifndef __OPTIMIZE__ #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))