merge from gcc
authorDJ Delorie <dj@redhat.com>
Wed, 11 Jun 2008 01:17:34 +0000 (01:17 +0000)
committerDJ Delorie <dj@redhat.com>
Wed, 11 Jun 2008 01:17:34 +0000 (01:17 +0000)
14 files changed:
libdecnumber/ChangeLog
libdecnumber/bid/host-ieee128.c
libdecnumber/dconfig.h [new file with mode: 0644]
libdecnumber/decContext.c
libdecnumber/decExcept.c
libdecnumber/decExcept.h
libdecnumber/decLibrary.c
libdecnumber/decNumber.c
libdecnumber/decNumberLocal.h
libdecnumber/decRound.c
libdecnumber/dpd/decimal128.c
libdecnumber/dpd/decimal128Local.h
libdecnumber/dpd/decimal32.c
libdecnumber/dpd/decimal64.c

index 91c4f08dcaac0447d69bfd8839e501f7cb7b6217..153b6772f110b24057e816e486e05a42a84676eb 100644 (file)
@@ -1,3 +1,16 @@
+2008-06-10  Joseph Myers  <joseph@codesourcery.com>
+
+       * 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  <bonzini@gnu.org>
 
        PR bootstrap/35457
index 6d493e5c9d8a49bd5c13b9542f3cf930c8f42fc2..12632c8aab2420ce2aec4664d3a4f51e5e43ce11 100644 (file)
@@ -29,20 +29,35 @@ Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 
 #include <string.h>
 
+#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 (file)
index 0000000..ffbad25
--- /dev/null
@@ -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
index 077419318194df44cc1d53f0a82580c90276816e..d2e3bed439750c1c845efab12b87004a4866c1da 100644 (file)
@@ -37,7 +37,7 @@
 
 #include <string.h>          /* for strcmp */
 #include <stdio.h>           /* 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. */
 
index 6821702420655dde51b6aff8e2a96acb1592f8d7..a111aeeb41622e71c494de0543747e2a600bb2d1 100644 (file)
@@ -28,7 +28,7 @@
    02110-1301, USA.  */
 
 #include <fenv.h>
-#include "config.h"
+#include "dconfig.h"
 #include "decContext.h"
 #include "decExcept.h"
 
index 12ba87d01fbff88a9ffd297b64fba033c45c4db6..5dc1ebb1d167f94e9bae61caab7094d2cb335602 100644 (file)
@@ -28,7 +28,7 @@
    02110-1301, USA.  */
 
 #include <fenv.h>
-#include "config.h"
+#include "dconfig.h"
 #include "decContext.h"
 
 #define DFP_EXCEPTIONS_ENABLED 1
index 7e5e928edc27977db4969403b271f89a1417db9d..86daedd89e69707b39cf8709c800cccddb144d0b 100644 (file)
@@ -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"
index c5e223c812fea3e755700734025db06168cb7aa1..f9a624a1afa9498702f22213203c95fde906a8ee 100644 (file)
 #include <stdio.h>                /* for printf [if needed] */
 #include <string.h>               /* for strcpy */
 #include <ctype.h>                /* 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. */
 
index c07e8cd6ef42a7e51944d9bd8969bfe3d29dabad..809eaa466a22bc4050dcd6eb7b668199dee248fe 100644 (file)
@@ -44,7 +44,7 @@
 
   #include <stdlib.h>        /* for abs                              */
   #include <string.h>        /* 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                                   */
index 6e51eb6b5bac4a52c8a9e06c4dd5a6fbd4d423aa..26740bf69c2ad0130c14787c186bcb4e5d694db7 100644 (file)
@@ -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"
 
index 0e32ceb181c68b654eee6ba47fdfcb16bd0d168a..54191aab5c02d60aaba4d68dd74862cfcf540081 100644 (file)
@@ -42,7 +42,7 @@
 #include <string.h>          /* [for memset/memcpy] */
 #include <stdio.h>           /* [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. */
index b4130b53425a722ab0431fa7f347a73752255ceb..9765427719336148cb346cbfc5e3c40dd4b5f8f6 100644 (file)
 
 /* 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
index 42bddf172afc2309da464f235bd7d47bcf066dd6..d8e3f5978111d15e87a8e146a38fa8556db273fc 100644 (file)
@@ -42,7 +42,7 @@
 #include <string.h>          /* [for memset/memcpy] */
 #include <stdio.h>           /* [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. */
index c3617c46c088a3cf14bfb41801e0695c6bb6b3ae..474eb7cf8a0634bbb16b52acfda239e5d732b9d9 100644 (file)
@@ -42,7 +42,7 @@
 #include <string.h>          /* [for memset/memcpy] */
 #include <stdio.h>           /* [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. */