xref: /rk3399_ARM-atf/lib/compiler-rt/builtins/int_endianness.h (revision 0e14a7fbeb3014e719302c9b7f6a24c4030dfaf0)
1*0e14a7fbSdp-arm /* ===-- int_endianness.h - configuration header for compiler-rt ------------===
2*0e14a7fbSdp-arm  *
3*0e14a7fbSdp-arm  *		       The LLVM Compiler Infrastructure
4*0e14a7fbSdp-arm  *
5*0e14a7fbSdp-arm  * This file is dual licensed under the MIT and the University of Illinois Open
6*0e14a7fbSdp-arm  * Source Licenses. See LICENSE.TXT for details.
7*0e14a7fbSdp-arm  *
8*0e14a7fbSdp-arm  * ===----------------------------------------------------------------------===
9*0e14a7fbSdp-arm  *
10*0e14a7fbSdp-arm  * This file is a configuration header for compiler-rt.
11*0e14a7fbSdp-arm  * This file is not part of the interface of this library.
12*0e14a7fbSdp-arm  *
13*0e14a7fbSdp-arm  * ===----------------------------------------------------------------------===
14*0e14a7fbSdp-arm  */
15*0e14a7fbSdp-arm 
16*0e14a7fbSdp-arm #ifndef INT_ENDIANNESS_H
17*0e14a7fbSdp-arm #define INT_ENDIANNESS_H
18*0e14a7fbSdp-arm 
19*0e14a7fbSdp-arm #if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \
20*0e14a7fbSdp-arm     defined(__ORDER_LITTLE_ENDIAN__)
21*0e14a7fbSdp-arm 
22*0e14a7fbSdp-arm /* Clang and GCC provide built-in endianness definitions. */
23*0e14a7fbSdp-arm #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
24*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 0
25*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    1
26*0e14a7fbSdp-arm #elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
27*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
28*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
29*0e14a7fbSdp-arm #endif /* __BYTE_ORDER__ */
30*0e14a7fbSdp-arm 
31*0e14a7fbSdp-arm #else /* Compilers other than Clang or GCC. */
32*0e14a7fbSdp-arm 
33*0e14a7fbSdp-arm #if defined(__SVR4) && defined(__sun)
34*0e14a7fbSdp-arm #include <sys/byteorder.h>
35*0e14a7fbSdp-arm 
36*0e14a7fbSdp-arm #if defined(_BIG_ENDIAN)
37*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 0
38*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    1
39*0e14a7fbSdp-arm #elif defined(_LITTLE_ENDIAN)
40*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
41*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
42*0e14a7fbSdp-arm #else /* !_LITTLE_ENDIAN */
43*0e14a7fbSdp-arm #error "unknown endianness"
44*0e14a7fbSdp-arm #endif /* !_LITTLE_ENDIAN */
45*0e14a7fbSdp-arm 
46*0e14a7fbSdp-arm #endif /* Solaris and AuroraUX. */
47*0e14a7fbSdp-arm 
48*0e14a7fbSdp-arm /* .. */
49*0e14a7fbSdp-arm 
50*0e14a7fbSdp-arm #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) ||   \
51*0e14a7fbSdp-arm     defined(__minix)
52*0e14a7fbSdp-arm #include <sys/endian.h>
53*0e14a7fbSdp-arm 
54*0e14a7fbSdp-arm #if _BYTE_ORDER == _BIG_ENDIAN
55*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 0
56*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    1
57*0e14a7fbSdp-arm #elif _BYTE_ORDER == _LITTLE_ENDIAN
58*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
59*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
60*0e14a7fbSdp-arm #endif /* _BYTE_ORDER */
61*0e14a7fbSdp-arm 
62*0e14a7fbSdp-arm #endif /* *BSD */
63*0e14a7fbSdp-arm 
64*0e14a7fbSdp-arm #if defined(__OpenBSD__) || defined(__Bitrig__)
65*0e14a7fbSdp-arm #include <machine/endian.h>
66*0e14a7fbSdp-arm 
67*0e14a7fbSdp-arm #if _BYTE_ORDER == _BIG_ENDIAN
68*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 0
69*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    1
70*0e14a7fbSdp-arm #elif _BYTE_ORDER == _LITTLE_ENDIAN
71*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
72*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
73*0e14a7fbSdp-arm #endif /* _BYTE_ORDER */
74*0e14a7fbSdp-arm 
75*0e14a7fbSdp-arm #endif /* OpenBSD and Bitrig. */
76*0e14a7fbSdp-arm 
77*0e14a7fbSdp-arm /* .. */
78*0e14a7fbSdp-arm 
79*0e14a7fbSdp-arm /* Mac OSX has __BIG_ENDIAN__ or __LITTLE_ENDIAN__ automatically set by the
80*0e14a7fbSdp-arm  * compiler (at least with GCC) */
81*0e14a7fbSdp-arm #if defined(__APPLE__) || defined(__ellcc__ )
82*0e14a7fbSdp-arm 
83*0e14a7fbSdp-arm #ifdef __BIG_ENDIAN__
84*0e14a7fbSdp-arm #if __BIG_ENDIAN__
85*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 0
86*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    1
87*0e14a7fbSdp-arm #endif
88*0e14a7fbSdp-arm #endif /* __BIG_ENDIAN__ */
89*0e14a7fbSdp-arm 
90*0e14a7fbSdp-arm #ifdef __LITTLE_ENDIAN__
91*0e14a7fbSdp-arm #if __LITTLE_ENDIAN__
92*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
93*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
94*0e14a7fbSdp-arm #endif
95*0e14a7fbSdp-arm #endif /* __LITTLE_ENDIAN__ */
96*0e14a7fbSdp-arm 
97*0e14a7fbSdp-arm #endif /* Mac OSX */
98*0e14a7fbSdp-arm 
99*0e14a7fbSdp-arm /* .. */
100*0e14a7fbSdp-arm 
101*0e14a7fbSdp-arm #if defined(_WIN32)
102*0e14a7fbSdp-arm 
103*0e14a7fbSdp-arm #define _YUGA_LITTLE_ENDIAN 1
104*0e14a7fbSdp-arm #define _YUGA_BIG_ENDIAN    0
105*0e14a7fbSdp-arm 
106*0e14a7fbSdp-arm #endif /* Windows */
107*0e14a7fbSdp-arm 
108*0e14a7fbSdp-arm #endif /* Clang or GCC. */
109*0e14a7fbSdp-arm 
110*0e14a7fbSdp-arm /* . */
111*0e14a7fbSdp-arm 
112*0e14a7fbSdp-arm #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN)
113*0e14a7fbSdp-arm #error Unable to determine endian
114*0e14a7fbSdp-arm #endif /* Check we found an endianness correctly. */
115*0e14a7fbSdp-arm 
116*0e14a7fbSdp-arm #endif /* INT_ENDIANNESS_H */
117