Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/predef/other/endian.h @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
1 /* | |
2 Copyright Redshift Software, Inc. 2013 | |
3 Distributed under the Boost Software License, Version 1.0. | |
4 (See accompanying file LICENSE_1_0.txt or copy at | |
5 http://www.boost.org/LICENSE_1_0.txt) | |
6 */ | |
7 | |
8 #ifndef BOOST_PREDEF_ENDIAN_H | |
9 #define BOOST_PREDEF_ENDIAN_H | |
10 | |
11 #include <boost/predef/version_number.h> | |
12 #include <boost/predef/make.h> | |
13 #include <boost/predef/library/c/gnu.h> | |
14 #include <boost/predef/os/macos.h> | |
15 #include <boost/predef/os/bsd.h> | |
16 | |
17 /*` | |
18 [heading `BOOST_ENDIAN_*`] | |
19 | |
20 Detection of endian memory ordering. There are four defined macros | |
21 in this header that define the various generally possible endian | |
22 memory orderings: | |
23 | |
24 * `BOOST_ENDIAN_BIG_BYTE`, byte-swapped big-endian. | |
25 * `BOOST_ENDIAN_BIG_WORD`, word-swapped big-endian. | |
26 * `BOOST_ENDIAN_LITTLE_BYTE`, byte-swapped little-endian. | |
27 * `BOOST_ENDIAN_LITTLE_WORD`, word-swapped little-endian. | |
28 | |
29 The detection is conservative in that it only identifies endianness | |
30 that it knows for certain. In particular bi-endianness is not | |
31 indicated as is it not practically possible to determine the | |
32 endianness from anything but an operating system provided | |
33 header. And the currently known headers do not define that | |
34 programatic bi-endianness is available. | |
35 | |
36 This implementation is a compilation of various publicly available | |
37 information and acquired knowledge: | |
38 | |
39 # The indispensable documentation of "Pre-defined Compiler Macros" | |
40 [@http://sourceforge.net/p/predef/wiki/Endianness Endianness]. | |
41 # The various endian specifications available in the | |
42 [@http://wikipedia.org/ Wikipedia] computer architecture pages. | |
43 # Generally available searches for headers that define endianness. | |
44 */ | |
45 | |
46 #define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE | |
47 #define BOOST_ENDIAN_BIG_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE | |
48 #define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_NOT_AVAILABLE | |
49 #define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_NOT_AVAILABLE | |
50 | |
51 /* GNU libc provides a header defining __BYTE_ORDER, or _BYTE_ORDER. | |
52 * And some OSs provide some for of endian header also. | |
53 */ | |
54 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ | |
55 !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD | |
56 # if BOOST_LIB_C_GNU | |
57 # include <endian.h> | |
58 # else | |
59 # if BOOST_OS_MACOS | |
60 # include <machine/endian.h> | |
61 # else | |
62 # if BOOST_OS_BSD | |
63 # if BOOST_OS_BSD_OPEN | |
64 # include <machine/endian.h> | |
65 # else | |
66 # include <sys/endian.h> | |
67 # endif | |
68 # endif | |
69 # endif | |
70 # endif | |
71 # if defined(__BYTE_ORDER) | |
72 # if (__BYTE_ORDER == __BIG_ENDIAN) | |
73 # undef BOOST_ENDIAN_BIG_BYTE | |
74 # define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
75 # endif | |
76 # if (__BYTE_ORDER == __LITTLE_ENDIAN) | |
77 # undef BOOST_ENDIAN_LITTLE_BYTE | |
78 # define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
79 # endif | |
80 # if (__BYTE_ORDER == __PDP_ENDIAN) | |
81 # undef BOOST_ENDIAN_LITTLE_WORD | |
82 # define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE | |
83 # endif | |
84 # endif | |
85 # if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER) | |
86 # if (_BYTE_ORDER == _BIG_ENDIAN) | |
87 # undef BOOST_ENDIAN_BIG_BYTE | |
88 # define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
89 # endif | |
90 # if (_BYTE_ORDER == _LITTLE_ENDIAN) | |
91 # undef BOOST_ENDIAN_LITTLE_BYTE | |
92 # define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
93 # endif | |
94 # if (_BYTE_ORDER == _PDP_ENDIAN) | |
95 # undef BOOST_ENDIAN_LITTLE_WORD | |
96 # define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE | |
97 # endif | |
98 # endif | |
99 #endif | |
100 | |
101 /* Built-in byte-swpped big-endian macros. | |
102 */ | |
103 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ | |
104 !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD | |
105 # if !BOOST_ENDIAN_BIG_BYTE | |
106 # if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \ | |
107 defined(__ARMEB__) || \ | |
108 defined(__THUMBEB__) || \ | |
109 defined(__AARCH64EB__) || \ | |
110 defined(_MIPSEB) || \ | |
111 defined(__MIPSEB) || \ | |
112 defined(__MIPSEB__) | |
113 # undef BOOST_ENDIAN_BIG_BYTE | |
114 # define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
115 # endif | |
116 # endif | |
117 #endif | |
118 | |
119 /* Built-in byte-swpped little-endian macros. | |
120 */ | |
121 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ | |
122 !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD | |
123 # if !BOOST_ENDIAN_LITTLE_BYTE | |
124 # if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \ | |
125 defined(__ARMEL__) || \ | |
126 defined(__THUMBEL__) || \ | |
127 defined(__AARCH64EL__) || \ | |
128 defined(_MIPSEL) || \ | |
129 defined(__MIPSEL) || \ | |
130 defined(__MIPSEL__) | |
131 # undef BOOST_ENDIAN_LITTLE_BYTE | |
132 # define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
133 # endif | |
134 # endif | |
135 #endif | |
136 | |
137 /* Some architectures are strictly one endianess (as opposed | |
138 * the current common bi-endianess). | |
139 */ | |
140 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ | |
141 !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD | |
142 # include <boost/predef/architecture.h> | |
143 # if BOOST_ARCH_M68K || \ | |
144 BOOST_ARCH_PARISK || \ | |
145 BOOST_ARCH_SYS370 || \ | |
146 BOOST_ARCH_SYS390 || \ | |
147 BOOST_ARCH_Z | |
148 # undef BOOST_ENDIAN_BIG_BYTE | |
149 # define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
150 # endif | |
151 # if BOOST_ARCH_AMD64 || \ | |
152 BOOST_ARCH_IA64 || \ | |
153 BOOST_ARCH_X86 || \ | |
154 BOOST_ARCH_BLACKFIN | |
155 # undef BOOST_ENDIAN_LITTLE_BYTE | |
156 # define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
157 # endif | |
158 #endif | |
159 | |
160 /* Windows on ARM, if not otherwise detected/specified, is always | |
161 * byte-swaped little-endian. | |
162 */ | |
163 #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ | |
164 !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD | |
165 # if BOOST_ARCH_ARM | |
166 # include <boost/predef/os/windows.h> | |
167 # if BOOST_OS_WINDOWS | |
168 # undef BOOST_ENDIAN_LITTLE_BYTE | |
169 # define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE | |
170 # endif | |
171 # endif | |
172 #endif | |
173 | |
174 #if BOOST_ENDIAN_BIG_BYTE | |
175 # define BOOST_ENDIAN_BIG_BYTE_AVAILABLE | |
176 #endif | |
177 #if BOOST_ENDIAN_BIG_WORD | |
178 # define BOOST_ENDIAN_BIG_WORD_BYTE_AVAILABLE | |
179 #endif | |
180 #if BOOST_ENDIAN_LITTLE_BYTE | |
181 # define BOOST_ENDIAN_LITTLE_BYTE_AVAILABLE | |
182 #endif | |
183 #if BOOST_ENDIAN_LITTLE_WORD | |
184 # define BOOST_ENDIAN_LITTLE_WORD_BYTE_AVAILABLE | |
185 #endif | |
186 | |
187 #define BOOST_ENDIAN_BIG_BYTE_NAME "Byte-Swapped Big-Endian" | |
188 #define BOOST_ENDIAN_BIG_WORD_NAME "Word-Swapped Big-Endian" | |
189 #define BOOST_ENDIAN_LITTLE_BYTE_NAME "Byte-Swapped Little-Endian" | |
190 #define BOOST_ENDIAN_LITTLE_WORD_NAME "Word-Swapped Little-Endian" | |
191 | |
192 #include <boost/predef/detail/test.h> | |
193 BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_BYTE,BOOST_ENDIAN_BIG_BYTE_NAME) | |
194 | |
195 #include <boost/predef/detail/test.h> | |
196 BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_BIG_WORD,BOOST_ENDIAN_BIG_WORD_NAME) | |
197 | |
198 #include <boost/predef/detail/test.h> | |
199 BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_BYTE,BOOST_ENDIAN_LITTLE_BYTE_NAME) | |
200 | |
201 #include <boost/predef/detail/test.h> | |
202 BOOST_PREDEF_DECLARE_TEST(BOOST_ENDIAN_LITTLE_WORD,BOOST_ENDIAN_LITTLE_WORD_NAME) | |
203 | |
204 | |
205 #endif |