From f6e5e45643c1d764440adf5c6d65e0995619c6ce Mon Sep 17 00:00:00 2001 From: froydnj Date: Sat, 23 Oct 2010 03:05:47 +0000 Subject: [PATCH] gcc/ * cppbuiltin.c (define_builtin_macros_for_type_sizes): Define __BYTE_ORDER__, __ORDER_LITTLE_ENDIAN__, __ORDER_BIG_ENDIAN__, and __ORDER_PDP_ENDIAN__. * libgcc2.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (struct DWstruct): Define based on __BYTE_ORDER__. * config/fixed-bit.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (struct INTstruct): Define based on __BYTE_ORDER__. * config/dfp-bit.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. * system.h (LIBGCC2_WORDS_BIG_ENDIAN): Poison identifier. * config/arc/arc.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/arm/arm.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/ia64/ia64.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/iq2000/iq2000.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/lm32/lm32.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/m32r/m32r.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/mcore/mcore.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/mep/mep.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/mips/mips.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/rx/rx.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/score/score.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/sh/sh.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/sparc/sparc.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * config/xtensa/xtensa.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * doc/tm.texi.in (LIBGCC2_WORDS_BIG_ENDIAN): Delete. * doc/tm.texi: Regenerate. * doc/cpp.texi (__BYTE_ORDER__, __ORDER_LITTLE_ENDIAN__): Document. (__ORDER_BIG_ENDIAN__, __ORDER_PDP_ENDIAN__): Likewise. libdecnumber/ * dconfig.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. libgcc/ * config/libbid/bid_gcc_intrinsics.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@165881 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 32 +++++++++++++++++++++++++++++++ gcc/config/arc/arc.h | 8 -------- gcc/config/arm/arm.h | 8 -------- gcc/config/dfp-bit.h | 7 ++----- gcc/config/fixed-bit.h | 10 +--------- gcc/config/ia64/ia64.h | 6 ------ gcc/config/iq2000/iq2000.h | 1 - gcc/config/lm32/lm32.h | 1 - gcc/config/m32r/m32r.h | 6 ------ gcc/config/mcore/mcore.h | 6 ------ gcc/config/mep/mep.h | 6 ------ gcc/config/mips/mips.h | 8 -------- gcc/config/rs6000/sysv4.h | 8 -------- gcc/config/rx/rx.h | 6 ------ gcc/config/score/score.h | 8 -------- gcc/config/sh/sh.h | 8 -------- gcc/config/sparc/sparc.h | 8 -------- gcc/config/xtensa/xtensa.h | 7 ------- gcc/cppbuiltin.c | 18 +++++++++++++++++ gcc/doc/cpp.texi | 24 +++++++++++++++++++++++ gcc/doc/tm.texi | 7 ------- gcc/doc/tm.texi.in | 7 ------- gcc/libgcc2.h | 12 ++---------- gcc/system.h | 2 +- libdecnumber/ChangeLog | 5 +++++ libdecnumber/dconfig.h | 7 ++----- libgcc/ChangeLog | 6 ++++++ libgcc/config/libbid/bid_gcc_intrinsics.h | 7 ++----- 28 files changed, 95 insertions(+), 144 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d42ef04abea..53b43f020a9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,35 @@ +2010-10-23 Nathan Froyd + + * cppbuiltin.c (define_builtin_macros_for_type_sizes): Define + __BYTE_ORDER__, __ORDER_LITTLE_ENDIAN__, __ORDER_BIG_ENDIAN__, and + __ORDER_PDP_ENDIAN__. + * libgcc2.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + (struct DWstruct): Define based on __BYTE_ORDER__. + * config/fixed-bit.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + (struct INTstruct): Define based on __BYTE_ORDER__. + * config/dfp-bit.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. + * system.h (LIBGCC2_WORDS_BIG_ENDIAN): Poison identifier. + * config/arc/arc.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/arm/arm.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/ia64/ia64.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/iq2000/iq2000.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/lm32/lm32.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/m32r/m32r.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/mcore/mcore.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/mep/mep.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/mips/mips.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/rs6000/sysv4.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/rx/rx.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/score/score.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/sh/sh.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/sparc/sparc.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * config/xtensa/xtensa.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * doc/tm.texi.in (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + * doc/tm.texi: Regenerate. + * doc/cpp.texi (__BYTE_ORDER__, __ORDER_LITTLE_ENDIAN__): Document. + (__ORDER_BIG_ENDIAN__, __ORDER_PDP_ENDIAN__): Likewise. + 2010-10-23 Jie Zhang PR rtl-optimization/37360 diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index ff7e5b73226..93f5a7feccf 100644 --- a/gcc/config/arc/arc.h +++ b/gcc/config/arc/arc.h @@ -99,14 +99,6 @@ extern int arc_cpu_type; numbered. */ #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#ifdef __big_endian__ -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - /* Width of a word, in units (bytes). */ #define UNITS_PER_WORD 4 diff --git a/gcc/config/arm/arm.h b/gcc/config/arm/arm.h index 4b6717f2c3b..c3dc3b91121 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -556,14 +556,6 @@ extern int arm_arch_hwdiv; This is always false, even when in big-endian mode. */ #define WORDS_BIG_ENDIAN (BYTES_BIG_ENDIAN && ! TARGET_LITTLE_WORDS) -/* LIBGCC2_WORDS_BIG_ENDIAN has to be a constant, so we define this based - on processor pre-defineds when compiling libgcc2.c. */ -#if defined(__ARMEB__) && !defined(__ARMWEL__) -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - /* Define this if most significant word of doubles is the lowest numbered. The rules are different based on whether or not we use FPA-format, VFP-format or some other floating point co-processor's format doubles. */ diff --git a/gcc/config/dfp-bit.h b/gcc/config/dfp-bit.h index f093785bf54..20688b19a1e 100644 --- a/gcc/config/dfp-bit.h +++ b/gcc/config/dfp-bit.h @@ -33,12 +33,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "coretypes.h" #include "tm.h" -#ifndef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN -#endif - #ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN -#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN LIBGCC2_WORDS_BIG_ENDIAN +#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \ + (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) #endif #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE diff --git a/gcc/config/fixed-bit.h b/gcc/config/fixed-bit.h index ce5b96e7850..9d53ce783b2 100644 --- a/gcc/config/fixed-bit.h +++ b/gcc/config/fixed-bit.h @@ -41,14 +41,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see Ex: If we define FROM_QQ and TO_SI, the conversion from QQ to SI is generated. */ -/* Permit the tm.h file to select the endianness to use just for this - file. This is used when the endianness is determined when the - compiler is run. */ - -#ifndef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN -#endif - #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE #endif @@ -428,7 +420,7 @@ typedef int word_type __attribute__ ((mode (__word__))); /* The following defines are based on the previous defines. */ #if defined (HINT_C_TYPE) -#if LIBGCC2_WORDS_BIG_ENDIAN +#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ struct INTstruct {HINT_C_TYPE high, low;}; #else struct INTstruct {HINT_C_TYPE low, high;}; diff --git a/gcc/config/ia64/ia64.h b/gcc/config/ia64/ia64.h index b4c3758f996..6fdcb97bcd6 100644 --- a/gcc/config/ia64/ia64.h +++ b/gcc/config/ia64/ia64.h @@ -148,12 +148,6 @@ extern enum processor_type ia64_tune; #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) -#if defined(__BIG_ENDIAN__) -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - #define UNITS_PER_WORD 8 #define POINTER_SIZE (TARGET_ILP32 ? 32 : 64) diff --git a/gcc/config/iq2000/iq2000.h b/gcc/config/iq2000/iq2000.h index d07bf31a755..91c5173416d 100644 --- a/gcc/config/iq2000/iq2000.h +++ b/gcc/config/iq2000/iq2000.h @@ -74,7 +74,6 @@ #define BITS_BIG_ENDIAN 0 #define BYTES_BIG_ENDIAN 1 #define WORDS_BIG_ENDIAN 1 -#define LIBGCC2_WORDS_BIG_ENDIAN 1 #define BITS_PER_WORD 32 #define MAX_BITS_PER_WORD 64 #define UNITS_PER_WORD 4 diff --git a/gcc/config/lm32/lm32.h b/gcc/config/lm32/lm32.h index 6800e0f0200..cec835106a9 100644 --- a/gcc/config/lm32/lm32.h +++ b/gcc/config/lm32/lm32.h @@ -84,7 +84,6 @@ #define BITS_BIG_ENDIAN 0 #define BYTES_BIG_ENDIAN 1 #define WORDS_BIG_ENDIAN 1 -#define LIBGCC2_WORDS_BIG_ENDIAN 1 #define BITS_PER_UNIT 8 #define BITS_PER_WORD 32 diff --git a/gcc/config/m32r/m32r.h b/gcc/config/m32r/m32r.h index 3c0c85d7302..a645518cbc1 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -319,12 +319,6 @@ extern enum m32r_sdata m32r_sdata; numbered. */ #define WORDS_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0) -/* Define this macro if WORDS_BIG_ENDIAN is not constant. This must - be a constant value with the same meaning as WORDS_BIG_ENDIAN, - which will be used only when compiling libgcc2.c. Typically the - value will be set based on preprocessor defines. */ -/*#define LIBGCC2_WORDS_BIG_ENDIAN 1*/ - /* Width of a word, in units (bytes). */ #define UNITS_PER_WORD 4 diff --git a/gcc/config/mcore/mcore.h b/gcc/config/mcore/mcore.h index a149eb13e1d..8efe64f2bf0 100644 --- a/gcc/config/mcore/mcore.h +++ b/gcc/config/mcore/mcore.h @@ -106,12 +106,6 @@ extern char * mcore_current_function_name; numbered. */ #define WORDS_BIG_ENDIAN (! TARGET_LITTLE_END) -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#ifdef __MCORELE__ -#undef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - #define MAX_BITS_PER_WORD 32 /* Width of a word, in units (bytes). */ diff --git a/gcc/config/mep/mep.h b/gcc/config/mep/mep.h index b6a64995827..fa00098d7c4 100644 --- a/gcc/config/mep/mep.h +++ b/gcc/config/mep/mep.h @@ -165,12 +165,6 @@ crtbegin.o%s" #define BYTES_BIG_ENDIAN (TARGET_LITTLE_ENDIAN ? 0 : 1) #define WORDS_BIG_ENDIAN (TARGET_LITTLE_ENDIAN ? 0 : 1) -#ifdef __LITTLE_ENDIAN__ -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#endif - #define UNITS_PER_WORD 4 #define PROMOTE_MODE(MODE, UNSIGNEDP, TYPE) \ diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index 1b4747f7b59..d6d909b7756 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -1287,14 +1287,6 @@ enum mips_code_readable_setting { #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN != 0) -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#if !defined(MIPSEL) && !defined(__MIPSEL__) -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - #define MAX_BITS_PER_WORD 64 /* Width of a word, in units (bytes). */ diff --git a/gcc/config/rs6000/sysv4.h b/gcc/config/rs6000/sysv4.h index 25584b2f502..6d88e324e88 100644 --- a/gcc/config/rs6000/sysv4.h +++ b/gcc/config/rs6000/sysv4.h @@ -258,14 +258,6 @@ do { \ #define BYTES_BIG_ENDIAN (TARGET_BIG_ENDIAN) #define WORDS_BIG_ENDIAN (TARGET_BIG_ENDIAN) -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#if !defined(__LITTLE_ENDIAN__) && !defined(__sun__) -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - /* Define cutoff for using external functions to save floating point. When optimizing for size, use external functions when profitable. */ #define FP_SAVE_INLINE(FIRST_REG) (optimize_size \ diff --git a/gcc/config/rx/rx.h b/gcc/config/rx/rx.h index b39c1e5abca..f320beb260a 100644 --- a/gcc/config/rx/rx.h +++ b/gcc/config/rx/rx.h @@ -96,12 +96,6 @@ extern enum rx_cpu_types rx_cpu_type; #define BYTES_BIG_ENDIAN TARGET_BIG_ENDIAN_DATA #define WORDS_BIG_ENDIAN TARGET_BIG_ENDIAN_DATA -#ifdef __RX_BIG_ENDIAN__ -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - #define UNITS_PER_WORD 4 #define INT_TYPE_SIZE 32 diff --git a/gcc/config/score/score.h b/gcc/config/score/score.h index 0db4c6c10c6..98f6d7dbe03 100644 --- a/gcc/config/score/score.h +++ b/gcc/config/score/score.h @@ -103,14 +103,6 @@ #define BYTES_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0) #define WORDS_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0) -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#if defined(__scorele__) -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#endif - /* Width of a word, in units (bytes). */ #define UNITS_PER_WORD 4 diff --git a/gcc/config/sh/sh.h b/gcc/config/sh/sh.h index 969636822da..0dfdd3a7b50 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -516,14 +516,6 @@ extern enum sh_divide_strategy_e sh_div_strategy; numbered. */ #define WORDS_BIG_ENDIAN (TARGET_LITTLE_ENDIAN == 0) -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#if defined(__LITTLE_ENDIAN__) -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#endif - #define MAX_BITS_PER_WORD 64 /* Width in bits of an `int'. We want just 32-bits, even if words are diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h index 8919542e315..3df147218a1 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -582,14 +582,6 @@ extern struct sparc_cpu_select sparc_select[]; numbered. */ #define WORDS_BIG_ENDIAN 1 -/* Define this to set the endianness to use in libgcc2.c, which can - not depend on target_flags. */ -#if defined (__LITTLE_ENDIAN__) || defined(__LITTLE_ENDIAN_DATA__) -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#endif - #define MAX_BITS_PER_WORD 64 /* Width of a word, in units (bytes). */ diff --git a/gcc/config/xtensa/xtensa.h b/gcc/config/xtensa/xtensa.h index 96173eebda3..ee528efbac3 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -94,13 +94,6 @@ extern unsigned xtensa_current_frame_size; #define EXTRA_SPECS \ { "subtarget_cpp_spec", SUBTARGET_CPP_SPEC }, -#ifdef __XTENSA_EB__ -#define LIBGCC2_WORDS_BIG_ENDIAN 1 -#else -#define LIBGCC2_WORDS_BIG_ENDIAN 0 -#endif - - /* Target machine storage layout */ /* Define this if most significant bit is lowest numbered diff --git a/gcc/cppbuiltin.c b/gcc/cppbuiltin.c index 89b0f418be6..7ac4071c322 100644 --- a/gcc/cppbuiltin.c +++ b/gcc/cppbuiltin.c @@ -138,6 +138,24 @@ define_builtin_macros_for_type_sizes (cpp_reader *pfile) cpp_define_formatted (pfile, "__BIGGEST_ALIGNMENT__=%d", BIGGEST_ALIGNMENT / BITS_PER_UNIT); + /* Define constants useful for implementing endian.h. */ + cpp_define (pfile, "__ORDER_LITTLE_ENDIAN__=1234"); + cpp_define (pfile, "__ORDER_BIG_ENDIAN__=4321"); + cpp_define (pfile, "__ORDER_PDP_ENDIAN__=3412"); + + if (WORDS_BIG_ENDIAN == BYTES_BIG_ENDIAN) + cpp_define_formatted (pfile, "__BYTE_ORDER__=%s", + (WORDS_BIG_ENDIAN + ? "__ORDER_BIG_ENDIAN__" + : "__ORDER_LITTLE_ENDIAN__")); + else + { + /* Assert that we're only dealing with the PDP11 case. */ + gcc_assert (!BYTES_BIG_ENDIAN && WORDS_BIG_ENDIAN); + + cpp_define (pfile, "__BYTE_ORDER__=__ORDER_PDP_ENDIAN__"); + } + /* ptr_type_node can't be used here since ptr_mode is only set when toplev calls backend_init which is not done with -E switch. */ cpp_define_formatted (pfile, "__SIZEOF_POINTER__=%d", diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi index a580e6108c8..ddcf81467f6 100644 --- a/gcc/doc/cpp.texi +++ b/gcc/doc/cpp.texi @@ -2265,6 +2265,30 @@ Defined to the number of bytes of the C standard data types: @code{int}, @code{double}, @code{long double}, @code{size_t}, @code{wchar_t}, @code{wint_t} and @code{ptrdiff_t}. +@item __BYTE_ORDER__ +@itemx __ORDER_LITTLE_ENDIAN__ +@itemx __ORDER_BIG_ENDIAN__ +@itemx __ORDER_PDP_ENDIAN__ +@code{__BYTE_ORDER__} is defined to one of the values +@code{__ORDER_LITTLE_ENDIAN__}, @code{__ORDER_BIG_ENDIAN__}, or +@code{__ORDER_PDP_ENDIAN__} to reflect the layout of multi-byte and +multi-word quantities in memory. If @code{__BYTE_ORDER__} is equal to +@code{__ORDER_LITTLE_ENDIAN__} or @code{__ORDER_BIG_ENDIAN__}, then +multi-byte and multi-word quantities are laid out identically: the +byte (word) at the lowest address is the least significant or most +significant byte (word) of the quantity, respectively. If +@code{__BYTE_ORDER__} is equal to @code{__ORDER_PDP_ENDIAN__}, then +bytes in 16-bit words are laid out in a little-endian fashion, whereas +the 16-bit subwords of a 32-bit quantity are laid out in big-endian +fashion. + +You should use these macros for testing like this: + +@smallexample +/* @r{Test for a little-endian machine} */ +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ +@end smallexample + @item __DEPRECATED This macro is defined, with value 1, when compiling a C++ source file with warnings about deprecated constructs enabled. These warnings are diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi index dd319e14069..66a092fbc1a 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -918,13 +918,6 @@ order of words in memory is the same as the order in registers. This macro need not be a constant. @end defmac -@defmac LIBGCC2_WORDS_BIG_ENDIAN -Define this macro if @code{WORDS_BIG_ENDIAN} is not constant. This must be a -constant value with the same meaning as @code{WORDS_BIG_ENDIAN}, which will be -used only when compiling @file{libgcc2.c}. Typically the value will be set -based on preprocessor defines. -@end defmac - @defmac FLOAT_WORDS_BIG_ENDIAN Define this macro to have the value 1 if @code{DFmode}, @code{XFmode} or @code{TFmode} floating point numbers are stored in memory with the word diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in index a0855c0c6e1..a5fb0007920 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -912,13 +912,6 @@ order of words in memory is the same as the order in registers. This macro need not be a constant. @end defmac -@defmac LIBGCC2_WORDS_BIG_ENDIAN -Define this macro if @code{WORDS_BIG_ENDIAN} is not constant. This must be a -constant value with the same meaning as @code{WORDS_BIG_ENDIAN}, which will be -used only when compiling @file{libgcc2.c}. Typically the value will be set -based on preprocessor defines. -@end defmac - @defmac FLOAT_WORDS_BIG_ENDIAN Define this macro to have the value 1 if @code{DFmode}, @code{XFmode} or @code{TFmode} floating point numbers are stored in memory with the word diff --git a/gcc/libgcc2.h b/gcc/libgcc2.h index d2d86ef8a2d..8b131a35e54 100644 --- a/gcc/libgcc2.h +++ b/gcc/libgcc2.h @@ -35,14 +35,6 @@ extern void __clear_cache (char *, char *); extern void __eprintf (const char *, const char *, unsigned int, const char *) __attribute__ ((__noreturn__)); -/* Permit the tm.h file to select the endianness to use just for this - file. This is used when the endianness is determined when the - compiler is run. */ - -#ifndef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN -#endif - #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE #define LIBGCC2_LONG_DOUBLE_TYPE_SIZE LONG_DOUBLE_TYPE_SIZE #endif @@ -407,9 +399,9 @@ extern TCtype __multc3 (TFtype, TFtype, TFtype, TFtype); #define int bogus_type /* DWstructs are pairs of Wtype values in the order determined by - LIBGCC2_WORDS_BIG_ENDIAN. */ + __BYTE_ORDER__. */ -#if LIBGCC2_WORDS_BIG_ENDIAN +#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__ struct DWstruct {Wtype high, low;}; #else struct DWstruct {Wtype low, high;}; diff --git a/gcc/system.h b/gcc/system.h index 7ca0c88bc5d..ef0c4628b43 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -790,7 +790,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; TARGET_HANDLE_OFAST TARGET_OPTION_OPTIMIZATION /* Hooks into libgcc2. */ - #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE + #pragma GCC poison LIBGCC2_DOUBLE_TYPE_SIZE LIBGCC2_WORDS_BIG_ENDIAN /* Miscellaneous macros that are no longer used. */ #pragma GCC poison USE_MAPPED_LOCATION diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog index 0d7765ea189..d2d6d5947ec 100644 --- a/libdecnumber/ChangeLog +++ b/libdecnumber/ChangeLog @@ -1,3 +1,8 @@ +2010-10-23 Nathan Froyd + + * dconfig.h (LIBGCC2_WORDS_BIG_ENDIAN): Delete. + (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. + 2010-09-10 Kai Tietz * configure: Regenerated. diff --git a/libdecnumber/dconfig.h b/libdecnumber/dconfig.h index 91aa3341c6c..26b963c9480 100644 --- a/libdecnumber/dconfig.h +++ b/libdecnumber/dconfig.h @@ -28,12 +28,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "coretypes.h" #include "tm.h" -#ifndef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN -#endif - #ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN -#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN LIBGCC2_WORDS_BIG_ENDIAN +#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \ + (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) #endif #if LIBGCC2_FLOAT_WORDS_BIG_ENDIAN diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 1564feb2cd1..ea864d33dcb 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,9 @@ +2010-10-23 Nathan Froyd + + * config/libbid/bid_gcc_intrinsics.h (LIBGCC2_WORDS_BIG_ENDIAN): + Delete. + (LIBGCC2_FLOAT_WORDS_BIG_ENDIAN): Test __BYTE_ORDER__. + 2010-10-14 Nathan Froyd * config/arm/bpabi.h: New file. diff --git a/libgcc/config/libbid/bid_gcc_intrinsics.h b/libgcc/config/libbid/bid_gcc_intrinsics.h index f5bd8d04a96..f536e3b1bd4 100644 --- a/libgcc/config/libbid/bid_gcc_intrinsics.h +++ b/libgcc/config/libbid/bid_gcc_intrinsics.h @@ -30,12 +30,9 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include "coretypes.h" #include "tm.h" -#ifndef LIBGCC2_WORDS_BIG_ENDIAN -#define LIBGCC2_WORDS_BIG_ENDIAN WORDS_BIG_ENDIAN -#endif - #ifndef LIBGCC2_FLOAT_WORDS_BIG_ENDIAN -#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN LIBGCC2_WORDS_BIG_ENDIAN +#define LIBGCC2_FLOAT_WORDS_BIG_ENDIAN \ + (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__) #endif #ifndef LIBGCC2_LONG_DOUBLE_TYPE_SIZE -- 2.11.0