123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- //===-- int_endianness.h - configuration header for compiler-rt -----------===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file is a configuration header for compiler-rt.
- // This file is not part of the interface of this library.
- //
- //===----------------------------------------------------------------------===//
- #ifndef INT_ENDIANNESS_H
- #define INT_ENDIANNESS_H
- #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
- defined(__ORDER_LITTLE_ENDIAN__)
- // Clang and GCC provide built-in endianness definitions.
- #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
- #define _YUGA_LITTLE_ENDIAN 0
- #define _YUGA_BIG_ENDIAN 1
- #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
- #define _YUGA_LITTLE_ENDIAN 1
- #define _YUGA_BIG_ENDIAN 0
- #endif // __BYTE_ORDER__
- #else // Compilers other than Clang or GCC.
- #if defined(__SVR4) && defined(__sun)
- #include <sys/byteorder.h>
- #if defined(_BIG_ENDIAN)
- #define _YUGA_LITTLE_ENDIAN 0
- #define _YUGA_BIG_ENDIAN 1
- #elif defined(_LITTLE_ENDIAN)
- #define _YUGA_LITTLE_ENDIAN 1
- #define _YUGA_BIG_ENDIAN 0
- #else // !_LITTLE_ENDIAN
- #error "unknown endianness"
- #endif // !_LITTLE_ENDIAN
- #endif // Solaris
- // ..
- #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || \
- 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
- #if defined(__OpenBSD__)
- #include <machine/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 // OpenBSD
- // ..
- // Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the
- // compiler (at least with GCC)
- #if defined(__APPLE__) || 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(_WIN32)
- #define _YUGA_LITTLE_ENDIAN 1
- #define _YUGA_BIG_ENDIAN 0
- #endif // Windows
- #endif // Clang or GCC.
- // .
- #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
- #error Unable to determine endian
- #endif // Check we found an endianness correctly.
- #endif // INT_ENDIANNESS_H
|