aboutsummaryrefslogtreecommitdiffstats
path: root/src/endian.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/endian.h')
-rw-r--r--src/endian.h43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/endian.h b/src/endian.h
new file mode 100644
index 0000000..a486223
--- /dev/null
+++ b/src/endian.h
@@ -0,0 +1,43 @@
+#ifndef L2SU_ENDIAN_H_INCLUDED
+#define L2SU_ENDIAN_H_INCLUDED
+
+#include <stdint.h>
+#include "config.h"
+
+uint64_t l2__bswap_64_int(uint64_t in);
+uint32_t l2__bswap_32_int(uint32_t in);
+uint16_t l2__bswap_16_int(uint16_t in);
+
+#ifdef __GNUC__
+#define l2__bswap_64 __builtin_bswap64
+#define l2__bswap_32 __builtin_bswap32
+#define l2__bswap_16 __builtin_bswap16
+#else
+#define l2__bswap_64 l2__bswap_64_int
+#define l2__bswap_32 l2__bswap_32_int
+#define l2__bswap_16 l2__bswap_16_int
+#endif
+
+#if defined(L2SU_ENDIAN_LITTLE)
+
+#define l2_htobe64 l2__bswap_64
+#define l2_betoh64 l2__bswap_64
+#define l2_htobe32 l2__bswap_32
+#define l2_betoh32 l2__bswap_32
+#define l2_htobe16 l2__bswap_16
+#define l2_betoh16 l2__bswap_16
+
+#elif defined(L2SU_ENDIAN_BIG)
+
+#define l2_htobe64
+#define l2_betoh64
+#define l2_htobe32
+#define l2_betoh32
+#define l2_htobe16
+#define l2_betoh16
+
+#else
+#error "middle endian unsupported"
+#endif
+
+#endif /* include guard */