From patchwork Fri Oct 22 03:19:19 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nathan Froyd X-Patchwork-Id: 68796 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id C6B6FB6EDF for ; Fri, 22 Oct 2010 14:19:37 +1100 (EST) Received: (qmail 840 invoked by alias); 22 Oct 2010 03:19:35 -0000 Received: (qmail 831 invoked by uid 22791); 22 Oct 2010 03:19:31 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, T_RP_MATCHES_RCVD X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (38.113.113.100) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Fri, 22 Oct 2010 03:19:24 +0000 Received: (qmail 17504 invoked from network); 22 Oct 2010 03:19:21 -0000 Received: from unknown (HELO codesourcery.com) (froydnj@127.0.0.2) by mail.codesourcery.com with ESMTPA; 22 Oct 2010 03:19:21 -0000 Date: Thu, 21 Oct 2010 23:19:19 -0400 From: Nathan Froyd To: gcc-patches@gcc.gnu.org Subject: Re: [PATCH] replace LIBGCC2_WORDS_BIG_ENDIAN with __BYTE_ORDER__ Message-ID: <20101022031917.GR2806@nightcrawler> References: <20101014015219.GV24720@nightcrawler> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20101014015219.GV24720@nightcrawler> User-Agent: Mutt/1.5.20 (2009-06-14) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On Wed, Oct 13, 2010 at 09:52:21PM -0400, Nathan Froyd wrote: > The patch below is a reworking of the patch posted here: > > http://gcc.gnu.org/ml/gcc-patches/2010-10/msg01081.html > > to take into account the need for documentation in cpp.texi and to use a > __BYTE_ORDER__-based scheme. The patch below is another reworking to avoid defining __LITTLE_ENDIAN__ and __BIG_ENDIAN__, as such macros would conflict with targets that use __LITTLE_ENDIAN__ or __BIG_ENDIAN__ for their own purposes. Instead of going with __BYTE_ORDER_LITTLE_ENDIAN__ and such, I chose __ORDER_LITTLE_ENDIAN__ and such, as these values can usefully be reused for making LIBGCC2_FLOAT_WORDS_BIG_ENDIAN go away. codesearch.google.com turns up nothing for such identifiers, so we are probably safe in using them. Tested on x86_64-unknown-linux-gnu. OK to commit? -Nathan 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__ diff --git a/gcc/config/arc/arc.h b/gcc/config/arc/arc.h index ff7e5b7..93f5a7f 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 1aa6e9b..258d0bc 100644 --- a/gcc/config/arm/arm.h +++ b/gcc/config/arm/arm.h @@ -560,14 +560,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 f093785..20688b1 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 ce5b96e..9d53ce7 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 5ff206d..e018b39 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 6e670ba..05b02f7 100644 --- a/gcc/config/iq2000/iq2000.h +++ b/gcc/config/iq2000/iq2000.h @@ -76,7 +76,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 52b492c..a9426cd 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 9522f57..73b610a 100644 --- a/gcc/config/m32r/m32r.h +++ b/gcc/config/m32r/m32r.h @@ -328,12 +328,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 a149eb1..8efe64f 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 07f0c85..1f51aa9 100644 --- a/gcc/config/mep/mep.h +++ b/gcc/config/mep/mep.h @@ -167,12 +167,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 23dba7c..449c893 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -1290,14 +1290,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 25584b2..6d88e32 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 544ed62..0e3fa7b 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 621f56e..a01ffed 100644 --- a/gcc/config/score/score.h +++ b/gcc/config/score/score.h @@ -106,14 +106,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 8f149dc..145f496 100644 --- a/gcc/config/sh/sh.h +++ b/gcc/config/sh/sh.h @@ -518,14 +518,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 ccb7dca..1955e99 100644 --- a/gcc/config/sparc/sparc.h +++ b/gcc/config/sparc/sparc.h @@ -585,14 +585,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 7dc22a2..435c21a 100644 --- a/gcc/config/xtensa/xtensa.h +++ b/gcc/config/xtensa/xtensa.h @@ -94,12 +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 - /* Show we can debug even without a frame pointer. */ #define CAN_DEBUG_WITHOUT_FP diff --git a/gcc/cppbuiltin.c b/gcc/cppbuiltin.c index 89b0f41..7ac4071 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 a580e61..ddcf814 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 a4f33a7..2f5f242 100644 --- a/gcc/doc/tm.texi +++ b/gcc/doc/tm.texi @@ -942,13 +942,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 a9592b1..8398622 100644 --- a/gcc/doc/tm.texi.in +++ b/gcc/doc/tm.texi.in @@ -938,13 +938,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 d2d86ef..8b131a3 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 7e5b048..e82f330 100644 --- a/gcc/system.h +++ b/gcc/system.h @@ -787,7 +787,7 @@ extern void fancy_abort (const char *, int, const char *) ATTRIBUTE_NORETURN; LANG_HOOKS_MISSING_ARGUMENT LANG_HOOKS_HASH_TYPES /* 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/dconfig.h b/libdecnumber/dconfig.h index 91aa334..26b963c 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/config/libbid/bid_gcc_intrinsics.h b/libgcc/config/libbid/bid_gcc_intrinsics.h index f5bd8d0..f536e3b 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