+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
#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
}
--- /dev/null
+/* 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
#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. */
02110-1301, USA. */
#include <fenv.h>
-#include "config.h"
+#include "dconfig.h"
#include "decContext.h"
#include "decExcept.h"
02110-1301, USA. */
#include <fenv.h>
-#include "config.h"
+#include "dconfig.h"
#include "decContext.h"
#define DFP_EXCEPTIONS_ENABLED 1
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"
#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. */
#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 */
Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA. */
-#include "config.h"
+#include "dconfig.h"
#include "decContext.h"
#include "decRound.h"
#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. */
/* 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
#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. */
#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. */