mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-07-05 13:29:22 +00:00
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:
parent
ef4fc2cd6d
commit
fd7c230c85
@ -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 )
|
||||||
|
@ -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}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
|
Loading…
Reference in New Issue
Block a user