diff options
author | Ed Schouten <ed@80386.nl> | 2015-02-23 09:27:49 +0000 |
---|---|---|
committer | Ed Schouten <ed@80386.nl> | 2015-02-23 09:27:49 +0000 |
commit | f6d492e6835b23495ae24c0f0473b81d5eca8104 (patch) | |
tree | 6630ae89a11c98aa764fd6ad588247f2a17c1ce9 /compiler-rt/lib/builtins | |
parent | 4992099b42e9bb6faceb61ed093155bf2ebe7157 (diff) | |
download | bcm5719-llvm-f6d492e6835b23495ae24c0f0473b81d5eca8104.tar.gz bcm5719-llvm-f6d492e6835b23495ae24c0f0473b81d5eca8104.zip |
Use compiler provided endianness definitions if available.
This makes int_endianness.h work on operating systems for which we
haven't written explicit constructs, as long as GCC or Clang are being
used.
llvm-svn: 230208
Diffstat (limited to 'compiler-rt/lib/builtins')
-rw-r--r-- | compiler-rt/lib/builtins/int_endianness.h | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/compiler-rt/lib/builtins/int_endianness.h b/compiler-rt/lib/builtins/int_endianness.h index 4b35bde079e..7995ddbb953 100644 --- a/compiler-rt/lib/builtins/int_endianness.h +++ b/compiler-rt/lib/builtins/int_endianness.h @@ -16,6 +16,20 @@ #ifndef INT_ENDIANNESS_H #define INT_ENDIANNESS_H +#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && \ + defined(__ORDER_LITTLE_ENDIAN__) + +/* Clang and GCC provide built-in endianness definitions. */ +#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#define _YUGA_LITTLE_ENDIAN 0 +#define _YUGA_BIG_ENDIAN 1 +#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +#define _YUGA_LITTLE_ENDIAN 1 +#define _YUGA_BIG_ENDIAN 0 +#endif /* __BYTE_ORDER__ */ + +#else /* Compilers other than Clang or GCC. */ + #if defined(__SVR4) && defined(__sun) #include <sys/byteorder.h> @@ -84,18 +98,6 @@ /* .. */ -#if defined(__linux__) - -#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ -#define _YUGA_LITTLE_ENDIAN 0 -#define _YUGA_BIG_ENDIAN 1 -#elif __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ -#define _YUGA_LITTLE_ENDIAN 1 -#define _YUGA_BIG_ENDIAN 0 -#endif /* __BYTE_ORDER__ */ - -#endif /* GNU/Linux */ - #if defined(_WIN32) #define _YUGA_LITTLE_ENDIAN 1 @@ -103,6 +105,8 @@ #endif /* Windows */ +#endif /* Clang or GCC. */ + /* . */ #if !defined(_YUGA_LITTLE_ENDIAN) || !defined(_YUGA_BIG_ENDIAN) |