From ea9f2e01ff00fe285a9d06b06b8f3c1d05d11608 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Wed, 20 Mar 2013 17:49:47 -0500 Subject: [PATCH] Add BSD specific includes. Add case for Windows on ARM CPUs. Add compatibility header. --- doc/html/index.html | 2 +- include/boost/predef/detail/endian_compat.h | 22 +++++++++++ include/boost/predef/endian.h | 41 ++++++++++++++++++++- 3 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 include/boost/predef/detail/endian_compat.h diff --git a/doc/html/index.html b/doc/html/index.html index 62f6554..399902e 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -57,7 +57,7 @@ - +

Last revised: March 19, 2013 at 03:53:01 GMT

Last revised: March 20, 2013 at 04:42:44 GMT


diff --git a/include/boost/predef/detail/endian_compat.h b/include/boost/predef/detail/endian_compat.h new file mode 100644 index 0000000..b5df55e --- /dev/null +++ b/include/boost/predef/detail/endian_compat.h @@ -0,0 +1,22 @@ +/* +Copyright Redshift Software, Inc. 2013 +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +http://www.boost.org/LICENSE_1_0.txt) +*/ + +#ifndef BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H +#define BOOST_PREDEF_DETAIL_ENDIAN_COMPAT_H + +#include + +#if BOOST_PREDEF_ENDIAN_BIG_BYTE +# define BOOST_BIG_ENDIAN +# define BOOST_BYTE_ORDER 4321 +#endif +#if BOOST_PREDEF_ENDIAN_LITTLE_BYTE +# define BOOST_LITTLE_ENDIAN +# define BOOST_BYTE_ORDER 1234 +#endif + +#endif diff --git a/include/boost/predef/endian.h b/include/boost/predef/endian.h index f01f674..eb3fa5f 100644 --- a/include/boost/predef/endian.h +++ b/include/boost/predef/endian.h @@ -11,6 +11,7 @@ http://www.boost.org/LICENSE_1_0.txt) #include #include #include +#include /*` [heading `BOOST_ENDIAN_*`] @@ -52,6 +53,14 @@ information and acquired knowledge: !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD # if BOOST_LIB_C_GNU # include +# else +# if BOOST_OS_BSD +# if BOOST_OS_BSD_OPEN +# include +# else +# include +# endif +# endif # endif # if defined(__BYTE_ORDER) # if (__BYTE_ORDER == __BIG_ENDIAN) @@ -67,6 +76,20 @@ information and acquired knowledge: # define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE # endif # endif +# if !defined(__BYTE_ORDER) && defined(_BYTE_ORDER) +# if (_BYTE_ORDER == _BIG_ENDIAN) +# undef BOOST_ENDIAN_BIG_BYTE +# define BOOST_ENDIAN_BIG_BYTE BOOST_VERSION_NUMBER_AVAILABLE +# endif +# if (_BYTE_ORDER == _LITTLE_ENDIAN) +# undef BOOST_ENDIAN_LITTLE_BYTE +# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE +# endif +# if (_BYTE_ORDER == _PDP_ENDIAN) +# undef BOOST_ENDIAN_LITTLE_WORD +# define BOOST_ENDIAN_LITTLE_WORD BOOST_VERSION_NUMBER_AVAILABLE +# endif +# endif #endif /* Built-in byte-swpped big-endian macros. @@ -74,7 +97,7 @@ information and acquired knowledge: #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD # if !BOOST_ENDIAN_BIG_BYTE -# if defined(__BIG_ENDIAN__) || \ +# if (defined(__BIG_ENDIAN__) && !defined(__LITTLE_ENDIAN__)) || \ defined(__ARMEB__) || \ defined(__THUMBEB__) || \ defined(__AARCH64EB__) || \ @@ -92,7 +115,7 @@ information and acquired knowledge: #if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD # if !BOOST_ENDIAN_LITTLE_BYTE -# if defined(__LITTLE_ENDIAN__) || \ +# if (defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)) || \ defined(__ARMEL__) || \ defined(__THUMBEL__) || \ defined(__AARCH64EL__) || \ @@ -127,6 +150,20 @@ information and acquired knowledge: # endif #endif +/* Windows on ARM, if not otherwise detected/specified, is always + * byte-swaped little-endian. + */ +#if !BOOST_ENDIAN_BIG_BYTE && !BOOST_ENDIAN_BIG_WORD && \ + !BOOST_ENDIAN_LITTLE_BYTE && !BOOST_ENDIAN_LITTLE_WORD +# if BOOST_ARCH_ARM +# include +# if BOOST_OS_WINDOWS +# undef BOOST_ENDIAN_LITTLE_BYTE +# define BOOST_ENDIAN_LITTLE_BYTE BOOST_VERSION_NUMBER_AVAILABLE +# endif +# endif +#endif + #if BOOST_ENDIAN_BIG_BYTE # define BOOST_ENDIAN_BIG_BYTE_AVAILABLE #endif