mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-26 12:20:42 +00:00
Make the host endianness check an integer constant expression.
I will remove the isBigEndianHost function once I update clang. The ifdef logic is designed to * not use configure/cmake to avoid breaking -arch i686 -arch ppc. * default to little endian * be as small as possible It looks like sys/endian.h is the preferred header on most modern BSD systems, but it is better to change this in a followup patch as machine/endian.h is available on FreeBSD, OpenBSD, NetBSD and OS X. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@179527 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -151,7 +151,7 @@ namespace detail {
|
||||
inline uint64_t fetch64(const char *p) {
|
||||
uint64_t result;
|
||||
memcpy(&result, p, sizeof(result));
|
||||
if (sys::isBigEndianHost())
|
||||
if (sys::IsBigEndianHost)
|
||||
return sys::SwapByteOrder(result);
|
||||
return result;
|
||||
}
|
||||
@@ -159,7 +159,7 @@ inline uint64_t fetch64(const char *p) {
|
||||
inline uint32_t fetch32(const char *p) {
|
||||
uint32_t result;
|
||||
memcpy(&result, p, sizeof(result));
|
||||
if (sys::isBigEndianHost())
|
||||
if (sys::IsBigEndianHost)
|
||||
return sys::SwapByteOrder(result);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -37,7 +37,7 @@ namespace detail {
|
||||
namespace endian {
|
||||
template<typename value_type, endianness endian>
|
||||
inline value_type byte_swap(value_type value) {
|
||||
if (endian != native && sys::isBigEndianHost() != (endian == big))
|
||||
if (endian != native && sys::IsBigEndianHost != (endian == big))
|
||||
return sys::SwapByteOrder(value);
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -15,22 +15,30 @@
|
||||
#define LLVM_SUPPORT_HOST_H
|
||||
|
||||
#include "llvm/ADT/StringMap.h"
|
||||
|
||||
#if defined(__linux__)
|
||||
#include <endian.h>
|
||||
#else
|
||||
#ifndef _MSC_VER
|
||||
#include <machine/endian.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace llvm {
|
||||
namespace sys {
|
||||
|
||||
inline bool isLittleEndianHost() {
|
||||
union {
|
||||
int i;
|
||||
char c;
|
||||
};
|
||||
i = 1;
|
||||
return c;
|
||||
}
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
static const bool IsBigEndianHost = true;
|
||||
#else
|
||||
static const bool IsBigEndianHost = false;
|
||||
#endif
|
||||
|
||||
static const bool IsLittleEndianHost = !IsBigEndianHost;
|
||||
|
||||
inline bool isBigEndianHost() {
|
||||
return !isLittleEndianHost();
|
||||
return IsBigEndianHost;
|
||||
}
|
||||
|
||||
/// getDefaultTargetTriple() - Return the default target triple the compiler
|
||||
|
||||
Reference in New Issue
Block a user