Endian: Get rid of LLVM_IS_HOST_BIG_ENDIAN.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117124 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Michael J. Spencer 2010-10-22 18:45:12 +00:00
parent ef4fc2cd6d
commit fd7c230c85
3 changed files with 38 additions and 58 deletions

View File

@ -258,8 +258,6 @@ if( LLVM_ENABLE_THREADS )
endif() endif()
endif() endif()
test_big_endian(LLVM_IS_HOST_BIG_ENDIAN)
if( ENABLE_THREADS ) if( ENABLE_THREADS )
message(STATUS "Threads enabled.") message(STATUS "Threads enabled.")
else( ENABLE_THREADS ) else( ENABLE_THREADS )

View File

@ -506,9 +506,6 @@
/* Define if this is Win32ish platform */ /* Define if this is Win32ish platform */
#cmakedefine LLVM_ON_WIN32 ${LLVM_ON_WIN32} #cmakedefine LLVM_ON_WIN32 ${LLVM_ON_WIN32}
/* Define if this is targeting a big endian system */
#cmakedefine LLVM_IS_HOST_BIG_ENDIAN ${LLVM_IS_HOST_BIG_ENDIAN}
/* Added by Kevin -- Maximum path length */ /* Added by Kevin -- Maximum path length */
#cmakedefine MAXPATHLEN ${MAXPATHLEN} #cmakedefine MAXPATHLEN ${MAXPATHLEN}

View File

@ -15,6 +15,7 @@
#define LLVM_SUPPORT_ENDIAN_H #define LLVM_SUPPORT_ENDIAN_H
#include "llvm/Config/config.h" #include "llvm/Config/config.h"
#include "llvm/System/Host.h"
#include "llvm/System/SwapByteOrder.h" #include "llvm/System/SwapByteOrder.h"
#include "llvm/Support/type_traits.h" #include "llvm/Support/type_traits.h"
@ -24,19 +25,6 @@ namespace support {
enum endianness {big, little}; enum endianness {big, little};
enum alignment {unaligned, aligned}; enum alignment {unaligned, aligned};
template<typename value_type, int host, int target>
static typename enable_if_c<host == target, value_type>::type
SwapByteOrderIfDifferent(value_type value) {
// Target endianess is the same as the host. Just pass the value through.
return value;
}
template<typename value_type, int host, int target>
static typename enable_if_c<host != target, value_type>::type
SwapByteOrderIfDifferent(value_type value) {
return sys::SwapByteOrder<value_type>(value);
}
namespace detail { namespace detail {
template<typename value_type, alignment align> template<typename value_type, alignment align>
@ -60,52 +48,49 @@ struct alignment_access_helper<value_type, unaligned>
} // end namespace detail } // end namespace detail
#if defined(LLVM_IS_HOST_BIG_ENDIAN) \ namespace endian {
|| defined(_BIG_ENDIAN) || defined(__BIG_ENDIAN__) template<typename value_type, alignment align>
static const endianness host_endianness = big; static value_type read_le(const void *memory) {
#else value_type t =
static const endianness host_endianness = little; reinterpret_cast<const detail::alignment_access_helper
#endif <value_type, align> *>(memory)->val;
if (sys::isBigEndianHost())
struct endian { return sys::SwapByteOrder(t);
template<typename value_type, alignment align> return t;
static value_type read_le(const void *memory) { }
return SwapByteOrderIfDifferent<value_type, host_endianness, little>(
reinterpret_cast<const detail::alignment_access_helper template<typename value_type, alignment align>
<value_type, align> *>(memory)->val); static void write_le(void *memory, value_type value) {
} if (sys::isBigEndianHost())
value = sys::SwapByteOrder(value);
template<typename value_type, alignment align> reinterpret_cast<detail::alignment_access_helper<value_type, align> *>
static void write_le(void *memory, value_type value) { (memory)->val = value;
reinterpret_cast<detail::alignment_access_helper<value_type, align> *> }
(memory)->val =
SwapByteOrderIfDifferent< value_type template<typename value_type, alignment align>
, host_endianness static value_type read_be(const void *memory) {
, little>(value); value_type t =
} reinterpret_cast<const detail::alignment_access_helper
<value_type, align> *>(memory)->val;
template<typename value_type, alignment align> if (sys::isLittleEndianHost())
static value_type read_be(const void *memory) { return sys::SwapByteOrder(t);
return SwapByteOrderIfDifferent<value_type, host_endianness, big>( return t;
reinterpret_cast<const detail::alignment_access_helper }
<value_type, align> *>(memory)->val);
} template<typename value_type, alignment align>
static void write_be(void *memory, value_type value) {
template<typename value_type, alignment align> if (sys::isLittleEndianHost())
static void write_be(void *memory, value_type value) { value = sys::SwapByteOrder(value);
reinterpret_cast<detail::alignment_access_helper reinterpret_cast<detail::alignment_access_helper<value_type, align> *>
<value_type, align> *>(memory)->val = (memory)->val = value;
SwapByteOrderIfDifferent< value_type
, host_endianness
, big>(value);
} }
}; };
namespace detail { namespace detail {
template<typename value_type, template<typename value_type,
endianness target_endianness, endianness endian,
alignment target_alignment> alignment align>
class packed_endian_specific_integral; class packed_endian_specific_integral;
template<typename value_type> template<typename value_type>