1/* ===-- endianness.h - configuration header for libgcc replacement --------=== 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is dual licensed under the MIT and the University of Illinois Open 6 * Source Licenses. See LICENSE.TXT for details. 7 * 8 * ===----------------------------------------------------------------------=== 9 * 10 * This file is a configuration header for libgcc replacement. 11 * This file is not part of the interface of this library. 12 * 13 * ===----------------------------------------------------------------------=== 14 */ 15 16#ifndef ENDIANNESS_H 17#define ENDIANNESS_H 18 19/* 20 * Known limitations: 21 * Middle endian systems are not handled currently. 22 */ 23 24#if defined(__SVR4) && defined(__sun) 25#include <sys/byteorder.h> 26 27#if _BYTE_ORDER == _BIG_ENDIAN 28#define _YUGA_LITTLE_ENDIAN 0 29#define _YUGA_BIG_ENDIAN 1 30#elif _BYTE_ORDER == _LITTLE_ENDIAN 31#define _YUGA_LITTLE_ENDIAN 1 32#define _YUGA_BIG_ENDIAN 0 33#endif /* _BYTE_ORDER */ 34 35#endif /* Solaris and AuroraUX. */ 36 37/* .. */ 38 39#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonflyBSD__) || defined(__minix) 40#include <sys/endian.h> 41 42#if _BYTE_ORDER == _BIG_ENDIAN 43#define _YUGA_LITTLE_ENDIAN 0 44#define _YUGA_BIG_ENDIAN 1 45#elif _BYTE_ORDER == _LITTLE_ENDIAN 46#define _YUGA_LITTLE_ENDIAN 1 47#define _YUGA_BIG_ENDIAN 0 48#endif /* _BYTE_ORDER */ 49 50#endif /* *BSD */ 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 0 60#define _YUGA_BIG_ENDIAN 1 61#endif 62#endif /* __BIG_ENDIAN__ */ 63 64#ifdef __LITTLE_ENDIAN__ 65#if __LITTLE_ENDIAN__ 66#define _YUGA_LITTLE_ENDIAN 1 67#define _YUGA_BIG_ENDIAN 0 68#endif 69#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_ENDIAN 79#define _YUGA_LITTLE_ENDIAN 0 80#define _YUGA_BIG_ENDIAN 1 81#elif __BYTE_ORDER == __LITTLE_ENDIAN 82#define _YUGA_LITTLE_ENDIAN 1 83#define _YUGA_BIG_ENDIAN 0 84#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 endian 92#endif /* Check we found an endianness correctly. */ 93 94#endif /* ENDIANNESS_H */ 95