From 6ba08d90c505995d5f9fa5e695e77eae4c9f81fc Mon Sep 17 00:00:00 2001 From: DJ Delorie Date: Wed, 11 Jun 2008 01:17:34 +0000 Subject: merge from gcc --- libdecnumber/ChangeLog | 13 ++++++++++ libdecnumber/bid/host-ieee128.c | 15 +++++++++++ libdecnumber/dconfig.h | 52 ++++++++++++++++++++++++++++++++++++++ libdecnumber/decContext.c | 2 +- libdecnumber/decExcept.c | 2 +- libdecnumber/decExcept.h | 2 +- libdecnumber/decLibrary.c | 2 +- libdecnumber/decNumber.c | 2 +- libdecnumber/decNumberLocal.h | 2 +- libdecnumber/decRound.c | 2 +- libdecnumber/dpd/decimal128.c | 2 +- libdecnumber/dpd/decimal128Local.h | 6 ++--- libdecnumber/dpd/decimal32.c | 2 +- libdecnumber/dpd/decimal64.c | 2 +- 14 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 libdecnumber/dconfig.h (limited to 'libdecnumber') diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog index 91c4f08dcaa..153b6772f11 100644 --- a/libdecnumber/ChangeLog +++ b/libdecnumber/ChangeLog @@ -1,3 +1,16 @@ +2008-06-10 Joseph Myers + + * dconfig.h: New. + * decContext.c, decExcept.c, decExcept.h, decLibrary.c, + decNumber.c, decNumberLocal.h, decRound.c, dpd/decimal128.c, + dpd/decimal32.c, dpd/decimal64.c: Include dconfig.h not config.h. + * dpd/decimal128Local.h (decimal128SetSign, decimal128ClearSign, + decimal128FlipSign): Use WORDS_BIGENDIAN not + FLOAT_WORDS_BIG_ENDIAN. + * bid/host-ieee128.c: Include dconfig.h. + (__host_to_ieee_128, __ieee_to_host_128): Swap 64-bit halves of + value if WORDS_BIGENDIAN. + 2008-04-18 Paolo Bonzini PR bootstrap/35457 diff --git a/libdecnumber/bid/host-ieee128.c b/libdecnumber/bid/host-ieee128.c index 6d493e5c9d8..12632c8aab2 100644 --- a/libdecnumber/bid/host-ieee128.c +++ b/libdecnumber/bid/host-ieee128.c @@ -29,20 +29,35 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA #include +#include "dconfig.h" #include "bid-dpd.h" #include "decimal128.h" void __host_to_ieee_128 (_Decimal128 in, decimal128 *out); void __ieee_to_host_128 (decimal128 in, _Decimal128 *out); +/* The code for converting 128-bit values between DPD and BID presumes + that the 64-bit halves of the 128-bit value are in little-endian + order, so they need swapping on big-endian hosts. */ + void __host_to_ieee_128 (_Decimal128 in, decimal128 *out) { +#if WORDS_BIGENDIAN + memcpy ((char *) out, (char *) &in + 8, 8); + memcpy ((char *) out + 8, (char *) &in, 8); +#else memcpy ((char *) out, (char *) &in, 16); +#endif } void __ieee_to_host_128 (decimal128 in, _Decimal128 *out) { +#if WORDS_BIGENDIAN + memcpy ((char *) out, (char *) &in + 8, 8); + memcpy ((char *) out + 8, (char *) &in, 8); +#else memcpy ((char *) out, (char *) &in, 16); +#endif } diff --git a/libdecnumber/dconfig.h b/libdecnumber/dconfig.h new file mode 100644 index 00000000000..ffbad255ce5 --- /dev/null +++ b/libdecnumber/dconfig.h @@ -0,0 +1,52 @@ +/* Configure decNumber for either host or target. + Copyright (C) 2008 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + In addition to the permissions in the GNU General Public License, + the Free Software Foundation gives you unlimited permission to link + the compiled version of this file into combinations with other + programs, and to distribute those combinations without any + restriction coming from the use of this file. (The General Public + License restrictions do apply in other respects; for example, they + cover modification of the file, and distribution when not linked + into a combine executable.) + + GCC is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#ifdef IN_LIBGCC2 + +#include "tconfig.h" +#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 +#endif + +#if LIBGCC2_FLOAT_WORDS_BIG_ENDIAN +#define WORDS_BIGENDIAN 1 +#endif + +#else + +#include "config.h" + +#endif diff --git a/libdecnumber/decContext.c b/libdecnumber/decContext.c index 07741931819..d2e3bed4397 100644 --- a/libdecnumber/decContext.c +++ b/libdecnumber/decContext.c @@ -37,7 +37,7 @@ #include /* for strcmp */ #include /* for printf if DECCHECK */ -#include "config.h" /* for GCC definitions */ +#include "dconfig.h" /* for GCC definitions */ #include "decContext.h" /* context and base types */ #include "decNumberLocal.h" /* decNumber local types, etc. */ diff --git a/libdecnumber/decExcept.c b/libdecnumber/decExcept.c index 68217024206..a111aeeb416 100644 --- a/libdecnumber/decExcept.c +++ b/libdecnumber/decExcept.c @@ -28,7 +28,7 @@ 02110-1301, USA. */ #include -#include "config.h" +#include "dconfig.h" #include "decContext.h" #include "decExcept.h" diff --git a/libdecnumber/decExcept.h b/libdecnumber/decExcept.h index 12ba87d01fb..5dc1ebb1d16 100644 --- a/libdecnumber/decExcept.h +++ b/libdecnumber/decExcept.h @@ -28,7 +28,7 @@ 02110-1301, USA. */ #include -#include "config.h" +#include "dconfig.h" #include "decContext.h" #define DFP_EXCEPTIONS_ENABLED 1 diff --git a/libdecnumber/decLibrary.c b/libdecnumber/decLibrary.c index 7e5e928edc2..86daedd89e6 100644 --- a/libdecnumber/decLibrary.c +++ b/libdecnumber/decLibrary.c @@ -27,7 +27,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "config.h" +#include "dconfig.h" #include "decContext.h" #include "decimal128.h" #include "decimal64.h" diff --git a/libdecnumber/decNumber.c b/libdecnumber/decNumber.c index c5e223c812f..f9a624a1afa 100644 --- a/libdecnumber/decNumber.c +++ b/libdecnumber/decNumber.c @@ -170,7 +170,7 @@ #include /* for printf [if needed] */ #include /* for strcpy */ #include /* for lower */ -#include "config.h" /* for GCC definitions */ +#include "dconfig.h" /* for GCC definitions */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ diff --git a/libdecnumber/decNumberLocal.h b/libdecnumber/decNumberLocal.h index c07e8cd6ef4..809eaa466a2 100644 --- a/libdecnumber/decNumberLocal.h +++ b/libdecnumber/decNumberLocal.h @@ -44,7 +44,7 @@ #include /* for abs */ #include /* for memset, strcpy */ - #include "config.h" /* for WORDS_BIGENDIAN */ + #include "dconfig.h" /* for WORDS_BIGENDIAN */ /* Conditional code flag -- set this to match hardware platform */ /* 1=little-endian, 0=big-endian */ diff --git a/libdecnumber/decRound.c b/libdecnumber/decRound.c index 6e51eb6b5ba..26740bf69c2 100644 --- a/libdecnumber/decRound.c +++ b/libdecnumber/decRound.c @@ -28,7 +28,7 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -#include "config.h" +#include "dconfig.h" #include "decContext.h" #include "decRound.h" diff --git a/libdecnumber/dpd/decimal128.c b/libdecnumber/dpd/decimal128.c index 0e32ceb181c..54191aab5c0 100644 --- a/libdecnumber/dpd/decimal128.c +++ b/libdecnumber/dpd/decimal128.c @@ -42,7 +42,7 @@ #include /* [for memset/memcpy] */ #include /* [for printf] */ -#include "config.h" /* GCC definitions */ +#include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 34 /* make decNumbers with space for 34 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ diff --git a/libdecnumber/dpd/decimal128Local.h b/libdecnumber/dpd/decimal128Local.h index b4130b53425..97654277193 100644 --- a/libdecnumber/dpd/decimal128Local.h +++ b/libdecnumber/dpd/decimal128Local.h @@ -34,14 +34,14 @@ /* Set sign; this assumes the sign was previously zero. */ #define decimal128SetSign(d,b) \ - { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] |= ((unsigned) (b) << 7); } + { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] |= ((unsigned) (b) << 7); } /* Clear sign. */ #define decimal128ClearSign(d) \ - { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] &= ~0x80; } + { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] &= ~0x80; } /* Flip sign. */ #define decimal128FlipSign(d) \ - { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] ^= 0x80; } + { (d)->bytes[WORDS_BIGENDIAN ? 0 : 15] ^= 0x80; } #endif diff --git a/libdecnumber/dpd/decimal32.c b/libdecnumber/dpd/decimal32.c index 42bddf172af..d8e3f597811 100644 --- a/libdecnumber/dpd/decimal32.c +++ b/libdecnumber/dpd/decimal32.c @@ -42,7 +42,7 @@ #include /* [for memset/memcpy] */ #include /* [for printf] */ -#include "config.h" /* GCC definitions */ +#include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 7 /* make decNumbers with space for 7 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ diff --git a/libdecnumber/dpd/decimal64.c b/libdecnumber/dpd/decimal64.c index c3617c46c08..474eb7cf8a0 100644 --- a/libdecnumber/dpd/decimal64.c +++ b/libdecnumber/dpd/decimal64.c @@ -42,7 +42,7 @@ #include /* [for memset/memcpy] */ #include /* [for printf] */ -#include "config.h" /* GCC definitions */ +#include "dconfig.h" /* GCC definitions */ #define DECNUMDIGITS 16 /* make decNumbers with space for 16 */ #include "decNumber.h" /* base number library */ #include "decNumberLocal.h" /* decNumber local types, etc. */ -- cgit v1.2.1