Path: blob/master/libs/compiler-rt/lib/builtins/int_endianness.h
4395 views
/* ===-- int_endianness.h - configuration header for compiler-rt ------------===1*2* The LLVM Compiler Infrastructure3*4* This file is dual licensed under the MIT and the University of Illinois Open5* Source Licenses. See LICENSE.TXT for details.6*7* ===----------------------------------------------------------------------===8*9* This file is a configuration header for compiler-rt.10* This file is not part of the interface of this library.11*12* ===----------------------------------------------------------------------===13*/1415#ifndef INT_ENDIANNESS_H16#define INT_ENDIANNESS_H1718#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \19defined(__ORDER_LITTLE_ENDIAN__)2021/* Clang and GCC provide built-in endianness definitions. */22#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__23#define _YUGA_LITTLE_ENDIAN 024#define _YUGA_BIG_ENDIAN 125#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__26#define _YUGA_LITTLE_ENDIAN 127#define _YUGA_BIG_ENDIAN 028#endif /* __BYTE_ORDER__ */2930#else /* Compilers other than Clang or GCC. */3132#if defined(__SVR4) && defined(__sun)33#include <sys/byteorder.h>3435#if defined(_BIG_ENDIAN)36#define _YUGA_LITTLE_ENDIAN 037#define _YUGA_BIG_ENDIAN 138#elif defined(_LITTLE_ENDIAN)39#define _YUGA_LITTLE_ENDIAN 140#define _YUGA_BIG_ENDIAN 041#else /* !_LITTLE_ENDIAN */42#error "unknown endianness"43#endif /* !_LITTLE_ENDIAN */4445#endif /* Solaris and AuroraUX. */4647/* .. */4849#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \50defined(__minix)51#include <sys/endian.h>5253#if _BYTE_ORDER == _BIG_ENDIAN54#define _YUGA_LITTLE_ENDIAN 055#define _YUGA_BIG_ENDIAN 156#elif _BYTE_ORDER == _LITTLE_ENDIAN57#define _YUGA_LITTLE_ENDIAN 158#define _YUGA_BIG_ENDIAN 059#endif /* _BYTE_ORDER */6061#endif /* *BSD */6263#if defined(__OpenBSD__)64#include <machine/endian.h>6566#if _BYTE_ORDER == _BIG_ENDIAN67#define _YUGA_LITTLE_ENDIAN 068#define _YUGA_BIG_ENDIAN 169#elif _BYTE_ORDER == _LITTLE_ENDIAN70#define _YUGA_LITTLE_ENDIAN 171#define _YUGA_BIG_ENDIAN 072#endif /* _BYTE_ORDER */7374#endif /* OpenBSD */7576/* .. */7778/* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the79* compiler (at least with GCC) */80#if defined(__APPLE__) || defined(__ellcc__ )8182#ifdef __BIG_ENDIAN__83#if __BIG_ENDIAN__84#define _YUGA_LITTLE_ENDIAN 085#define _YUGA_BIG_ENDIAN 186#endif87#endif /* __BIG_ENDIAN__ */8889#ifdef __LITTLE_ENDIAN__90#if __LITTLE_ENDIAN__91#define _YUGA_LITTLE_ENDIAN 192#define _YUGA_BIG_ENDIAN 093#endif94#endif /* __LITTLE_ENDIAN__ */9596#endif /* Mac OSX */9798/* .. */99100#if defined(_WIN32)101102#define _YUGA_LITTLE_ENDIAN 1103#define _YUGA_BIG_ENDIAN 0104105#endif /* Windows */106107#endif /* Clang or GCC. */108109/* . */110111#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)112#error Unable to determine endian113#endif /* Check we found an endianness correctly. */114115#endif /* INT_ENDIANNESS_H */116117118