summaryrefslogtreecommitdiffstats
path: root/src/include/endian.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/endian.h')
-rw-r--r--src/include/endian.h38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/include/endian.h b/src/include/endian.h
index 27248d892..5b6cb06d2 100644
--- a/src/include/endian.h
+++ b/src/include/endian.h
@@ -28,4 +28,42 @@
#define __BYTE_ORDER __BIG_ENDIAN
+#define __swap16(x) \
+ ((((x) & 0xFF00) >> 8) | \
+ (((x) & 0x00FF) << 8))
+
+#if __BYTE_ORDER == __BIG_ENDIAN
+// Big Endian system
+#define htobe16(x) (x)
+#define htole16(x) __swap16(x)
+#define be16toh(x) (x)
+#define le16toh(x) __swap16(x)
+
+#define htobe32(x) (x)
+#define htole32(x) __builtin_bswap32(x)
+#define be32toh(x) (x)
+#define le32toh(x) __builtin_bswap32(x)
+
+#define htobe64(x) (x)
+#define htole64(x) __builtin_bswap64(x)
+#define be64toh(x) (x)
+#define le64toh(x) __builtin_bswap64(x)
+#else
+// Little Endian system
+#define htobe16(x) __swap16(x)
+#define htole16(x) (x)
+#define be16toh(x) __swap16(x)
+#define le16toh(x) (x)
+
+#define htobe32(x) __builtin_bswap32(x)
+#define htole32(x) (x)
+#define be32toh(x) __builtin_bswap32(x)
+#define le32toh(x) (x)
+
+#define htobe64(x) __builtin_bswap64(x)
+#define htole64(x) (x)
+#define be64toh(x) __builtin_bswap64(x)
+#define le64toh(x) (x)
+#endif
+
#endif
OpenPOWER on IntegriCloud