177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* ===-- endianness.h - configuration header for compiler-rt ---------------=== 277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * The LLVM Compiler Infrastructure 477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is distributed under the University of Illinois Open Source 677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * License. See LICENSE.TXT for details. 777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * ===----------------------------------------------------------------------=== 977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 1077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is a configuration header for compiler-rt. 1177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * This file is not part of the interface of this library. 1277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * 1377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * ===----------------------------------------------------------------------=== 1477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao */ 1577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifndef ENDIANNESS_H 1777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define ENDIANNESS_H 1877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 1977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* 2077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Known limitations: 2177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao * Middle endian systems are not handled currently. 2277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao */ 2377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if defined(__SVR4) && defined(__sun) 2577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <sys/byteorder.h> 2677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 2777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _BYTE_ORDER == _BIG_ENDIAN 2877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 0 2977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 1 3077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#elif _BYTE_ORDER == _LITTLE_ENDIAN 3177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 1 3277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 0 3377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _BYTE_ORDER */ 3477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* Solaris and AuroraUX. */ 3677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* .. */ 3877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 3977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) 4077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <sys/endian.h> 4177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 4277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if _BYTE_ORDER == _BIG_ENDIAN 4377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 0 4477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 1 4577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#elif _BYTE_ORDER == _LITTLE_ENDIAN 4677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 1 4777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 0 4877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* _BYTE_ORDER */ 4977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* *BSD */ 5177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* .. */ 5377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the compiler (at least with GCC) */ 5577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if defined(__APPLE__) && defined(__MACH__) || defined(__ellcc__ ) 5677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 5777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __BIG_ENDIAN__ 5877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __BIG_ENDIAN__ 5977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 0 6077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 1 6177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 6277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* __BIG_ENDIAN__ */ 6377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 6477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#ifdef __LITTLE_ENDIAN__ 6577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __LITTLE_ENDIAN__ 6677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 1 6777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 0 6877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif 6977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* __LITTLE_ENDIAN__ */ 7077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* Mac OSX */ 7277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* .. */ 7477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if defined(__linux__) 7677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#include <endian.h> 7777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 7877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if __BYTE_ORDER == __BIG_ENDIAN 7977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 0 8077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 1 8177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#elif __BYTE_ORDER == __LITTLE_ENDIAN 8277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_LITTLE_ENDIAN 1 8377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#define _YUGA_BIG_ENDIAN 0 8477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* __BYTE_ORDER */ 8577ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 8677ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* GNU/Linux */ 8777ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 8877ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao/* . */ 8977ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 9077ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN) 9177ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#error Unable to determine endian 9277ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* Check we found an endianness correctly. */ 9377ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao 9477ed6142daed1e068fbda64405d0de9845e40e1Shih-wei Liao#endif /* ENDIANNESS_H */ 95