1*4684ddb6SLionel Sambuc /* ===-- endianness.h - configuration header for libgcc replacement --------=== 2*4684ddb6SLionel Sambuc * 3*4684ddb6SLionel Sambuc * The LLVM Compiler Infrastructure 4*4684ddb6SLionel Sambuc * 5*4684ddb6SLionel Sambuc * This file is dual licensed under the MIT and the University of Illinois Open 6*4684ddb6SLionel Sambuc * Source Licenses. See LICENSE.TXT for details. 7*4684ddb6SLionel Sambuc * 8*4684ddb6SLionel Sambuc * ===----------------------------------------------------------------------=== 9*4684ddb6SLionel Sambuc * 10*4684ddb6SLionel Sambuc * This file is a configuration header for libgcc replacement. 11*4684ddb6SLionel Sambuc * This file is not part of the interface of this library. 12*4684ddb6SLionel Sambuc * 13*4684ddb6SLionel Sambuc * ===----------------------------------------------------------------------=== 14*4684ddb6SLionel Sambuc */ 15*4684ddb6SLionel Sambuc 16*4684ddb6SLionel Sambuc #ifndef ENDIANNESS_H 17*4684ddb6SLionel Sambuc #define ENDIANNESS_H 18*4684ddb6SLionel Sambuc 19*4684ddb6SLionel Sambuc /* 20*4684ddb6SLionel Sambuc * Known limitations: 21*4684ddb6SLionel Sambuc * Middle endian systems are not handled currently. 22*4684ddb6SLionel Sambuc */ 23*4684ddb6SLionel Sambuc 24*4684ddb6SLionel Sambuc #if defined(__SVR4) && defined(__sun) 25*4684ddb6SLionel Sambuc #include <sys/byteorder.h> 26*4684ddb6SLionel Sambuc 27*4684ddb6SLionel Sambuc #if _BYTE_ORDER == _BIG_ENDIAN 28*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 0 29*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 1 30*4684ddb6SLionel Sambuc #elif _BYTE_ORDER == _LITTLE_ENDIAN 31*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 1 32*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 0 33*4684ddb6SLionel Sambuc #endif /* _BYTE_ORDER */ 34*4684ddb6SLionel Sambuc 35*4684ddb6SLionel Sambuc #endif /* Solaris and AuroraUX. */ 36*4684ddb6SLionel Sambuc 37*4684ddb6SLionel Sambuc /* .. */ 38*4684ddb6SLionel Sambuc 39*4684ddb6SLionel Sambuc #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonflyBSD__) || defined(__minix) 40*4684ddb6SLionel Sambuc #include <sys/endian.h> 41*4684ddb6SLionel Sambuc 42*4684ddb6SLionel Sambuc #if _BYTE_ORDER == _BIG_ENDIAN 43*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 0 44*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 1 45*4684ddb6SLionel Sambuc #elif _BYTE_ORDER == _LITTLE_ENDIAN 46*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 1 47*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 0 48*4684ddb6SLionel Sambuc #endif /* _BYTE_ORDER */ 49*4684ddb6SLionel Sambuc 50*4684ddb6SLionel Sambuc #endif /* *BSD */ 51*4684ddb6SLionel Sambuc 52*4684ddb6SLionel Sambuc /* .. */ 53*4684ddb6SLionel Sambuc 54*4684ddb6SLionel Sambuc #if defined(__OpenBSD__) || defined(__Bitrig__) 55*4684ddb6SLionel Sambuc #include <machine/endian.h> 56*4684ddb6SLionel Sambuc 57*4684ddb6SLionel Sambuc #if _BYTE_ORDER == _BIG_ENDIAN 58*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 0 59*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 1 60*4684ddb6SLionel Sambuc #elif _BYTE_ORDER == _LITTLE_ENDIAN 61*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 1 62*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 0 63*4684ddb6SLionel Sambuc #endif /* _BYTE_ORDER */ 64*4684ddb6SLionel Sambuc 65*4684ddb6SLionel Sambuc #endif /* OpenBSD and Bitrig. */ 66*4684ddb6SLionel Sambuc 67*4684ddb6SLionel Sambuc /* .. */ 68*4684ddb6SLionel Sambuc 69*4684ddb6SLionel Sambuc /* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the compiler (at least with GCC) */ 70*4684ddb6SLionel Sambuc #if defined(__APPLE__) && defined(__MACH__) || defined(__ellcc__ ) 71*4684ddb6SLionel Sambuc 72*4684ddb6SLionel Sambuc #ifdef __BIG_ENDIAN__ 73*4684ddb6SLionel Sambuc #if __BIG_ENDIAN__ 74*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 0 75*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 1 76*4684ddb6SLionel Sambuc #endif 77*4684ddb6SLionel Sambuc #endif /* __BIG_ENDIAN__ */ 78*4684ddb6SLionel Sambuc 79*4684ddb6SLionel Sambuc #ifdef __LITTLE_ENDIAN__ 80*4684ddb6SLionel Sambuc #if __LITTLE_ENDIAN__ 81*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 1 82*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 0 83*4684ddb6SLionel Sambuc #endif 84*4684ddb6SLionel Sambuc #endif /* __LITTLE_ENDIAN__ */ 85*4684ddb6SLionel Sambuc 86*4684ddb6SLionel Sambuc #endif /* Mac OSX */ 87*4684ddb6SLionel Sambuc 88*4684ddb6SLionel Sambuc /* .. */ 89*4684ddb6SLionel Sambuc 90*4684ddb6SLionel Sambuc #if defined(__linux__) 91*4684ddb6SLionel Sambuc #include <endian.h> 92*4684ddb6SLionel Sambuc 93*4684ddb6SLionel Sambuc #if __BYTE_ORDER == __BIG_ENDIAN 94*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 0 95*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 1 96*4684ddb6SLionel Sambuc #elif __BYTE_ORDER == __LITTLE_ENDIAN 97*4684ddb6SLionel Sambuc #define _YUGA_LITTLE_ENDIAN 1 98*4684ddb6SLionel Sambuc #define _YUGA_BIG_ENDIAN 0 99*4684ddb6SLionel Sambuc #endif /* __BYTE_ORDER */ 100*4684ddb6SLionel Sambuc 101*4684ddb6SLionel Sambuc #endif /* GNU/Linux */ 102*4684ddb6SLionel Sambuc 103*4684ddb6SLionel Sambuc /* . */ 104*4684ddb6SLionel Sambuc 105*4684ddb6SLionel Sambuc #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN) 106*4684ddb6SLionel Sambuc #error Unable to determine endian 107*4684ddb6SLionel Sambuc #endif /* Check we found an endianness correctly. */ 108*4684ddb6SLionel Sambuc 109*4684ddb6SLionel Sambuc #endif /* ENDIANNESS_H */ 110