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