1
0
forked from pool/erofs-utils
erofs-utils/constant.diff

44 lines
1.5 KiB
Diff

From: Jan Engelhardt <jengelh@inai.de>
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,25 @@
#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_le64(x) __builtin_bswap64(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)]))