brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · e02ca87 Raw
95 lines · c
1#ifndef ENDIANNESS_H2#define ENDIANNESS_H3 4/*5 * Known limitations:6 *   Middle endian systems are not handled currently.7 */8 9#if defined(__SVR4) && defined(__sun)10#include <sys/byteorder.h>11 12#if _BYTE_ORDER == _BIG_ENDIAN13#define _YUGA_LITTLE_ENDIAN 014#define _YUGA_BIG_ENDIAN    115#elif _BYTE_ORDER == _LITTLE_ENDIAN 16#define _YUGA_LITTLE_ENDIAN 117#define _YUGA_BIG_ENDIAN    018#endif /* _BYTE_ORDER */19 20#endif /* Solaris */21 22/* .. */23 24#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonflyBSD__) || defined(__minix)25#include <sys/endian.h>26 27#if _BYTE_ORDER == _BIG_ENDIAN28#define _YUGA_LITTLE_ENDIAN 029#define _YUGA_BIG_ENDIAN    130#elif _BYTE_ORDER == _LITTLE_ENDIAN31#define _YUGA_LITTLE_ENDIAN 132#define _YUGA_BIG_ENDIAN    033#endif /* _BYTE_ORDER */34 35#endif /* *BSD */36 37/* .. */38 39#if defined(__OpenBSD__)40#include <machine/endian.h>41 42#if _BYTE_ORDER == _BIG_ENDIAN43#define _YUGA_LITTLE_ENDIAN 044#define _YUGA_BIG_ENDIAN    145#elif _BYTE_ORDER == _LITTLE_ENDIAN46#define _YUGA_LITTLE_ENDIAN 147#define _YUGA_BIG_ENDIAN    048#endif /* _BYTE_ORDER */49 50#endif /* OpenBSD */51 52/* .. */53 54/* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the compiler (at least with GCC) */55#if defined(__APPLE__) && defined(__MACH__) || defined(__ellcc__ )56 57#ifdef __BIG_ENDIAN__58#if __BIG_ENDIAN__59#define _YUGA_LITTLE_ENDIAN 060#define _YUGA_BIG_ENDIAN    161#endif62#endif /* __BIG_ENDIAN__ */63 64#ifdef __LITTLE_ENDIAN__65#if __LITTLE_ENDIAN__66#define _YUGA_LITTLE_ENDIAN 167#define _YUGA_BIG_ENDIAN    068#endif69#endif /* __LITTLE_ENDIAN__ */70 71#endif /* Mac OSX */72 73/* .. */74 75#if defined(__linux__)76#include <endian.h>77 78#if __BYTE_ORDER == __BIG_ENDIAN79#define _YUGA_LITTLE_ENDIAN 080#define _YUGA_BIG_ENDIAN    181#elif __BYTE_ORDER == __LITTLE_ENDIAN82#define _YUGA_LITTLE_ENDIAN 183#define _YUGA_BIG_ENDIAN    084#endif /* __BYTE_ORDER */85 86#endif /* GNU/Linux */87 88/* . */89 90#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)91#error Unable to determine endian92#endif /* Check we found an endianness correctly. */93 94#endif /* ENDIANNESS_H */95