text: /* ===-- endianness.h - configuration header for libgcc replacement --------===
   *
   *		       The LLVM Compiler Infrastructure
   *
   * This file is dual licensed under the MIT and the University of Illinois Open
   * Source Licenses. See LICENSE.TXT for details.
   *
   * ===----------------------------------------------------------------------===
   *
   * This file is a configuration header for libgcc replacement.
   * This file is not part of the interface of this library.
   *
   * ===----------------------------------------------------------------------===
   */
  
  #ifndef ENDIANNESS_H
  #define ENDIANNESS_H
  
  /*
   * Known limitations:
   *   Middle endian systems are not handled currently.
   */
  
  #if defined(__SVR4) && defined(__sun)
  #include <sys/byteorder.h>
  
  #if _BYTE_ORDER == _BIG_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif _BYTE_ORDER == _LITTLE_ENDIAN 
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* _BYTE_ORDER */
  
  #endif /* Solaris and AuroraUX. */
  
  /* .. */
  
  #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonflyBSD__) || defined(__minix)
  #include <sys/endian.h>
  
  #if _BYTE_ORDER == _BIG_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif _BYTE_ORDER == _LITTLE_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* _BYTE_ORDER */
  
  #endif /* *BSD */
  
  /* .. */
  
  /* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the compiler (at least with GCC) */
  #if defined(__APPLE__) && defined(__MACH__) || defined(__ellcc__ )
  
  #ifdef __BIG_ENDIAN__
  #if __BIG_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #endif
  #endif /* __BIG_ENDIAN__ */
  
  #ifdef __LITTLE_ENDIAN__
  #if __LITTLE_ENDIAN__
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif
  #endif /* __LITTLE_ENDIAN__ */
  
  #endif /* Mac OSX */
  
  /* .. */
  
  #if defined(__linux__)
  #include <endian.h>
  
  #if __BYTE_ORDER == __BIG_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 0
  #define _YUGA_BIG_ENDIAN    1
  #elif __BYTE_ORDER == __LITTLE_ENDIAN
  #define _YUGA_LITTLE_ENDIAN 1
  #define _YUGA_BIG_ENDIAN    0
  #endif /* __BYTE_ORDER */
  
  #endif /* GNU/Linux */
  
  /* . */
  
  #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
  #error Unable to determine endian
  #endif /* Check we found an endianness correctly. */
  
  #endif /* ENDIANNESS_H */
  