diff options
Diffstat (limited to 'libdecnumber')
-rw-r--r-- | libdecnumber/ChangeLog | 13 | ||||
-rw-r--r-- | libdecnumber/bid/host-ieee128.c | 15 | ||||
-rw-r--r-- | libdecnumber/dconfig.h | 52 | ||||
-rw-r--r-- | libdecnumber/decContext.c | 2 | ||||
-rw-r--r-- | libdecnumber/decExcept.c | 2 | ||||
-rw-r--r-- | libdecnumber/decExcept.h | 2 | ||||
-rw-r--r-- | libdecnumber/decLibrary.c | 2 | ||||
-rw-r--r-- | libdecnumber/decNumber.c | 2 | ||||
-rw-r--r-- | libdecnumber/decNumberLocal.h | 2 | ||||
-rw-r--r-- | libdecnumber/decRound.c | 2 | ||||
-rw-r--r-- | libdecnumber/dpd/decimal128.c | 2 | ||||
-rw-r--r-- | libdecnumber/dpd/decimal128Local.h | 6 | ||||
-rw-r--r-- | libdecnumber/dpd/decimal32.c | 2 | ||||
-rw-r--r-- | libdecnumber/dpd/decimal64.c | 2 |
14 files changed, 93 insertions, 13 deletions
diff --git a/libdecnumber/ChangeLog b/libdecnumber/ChangeLog index 91c4f08..153b677 100644 --- a/libdecnumber/ChangeLog +++ b/libdecnumber/ChangeLog @@ -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 diff --git a/libdecnumber/bid/host-ieee128.c b/libdecnumber/bid/host-ieee128.c index 6d493e5..12632c8 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 <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 index 0000000..ffbad25 --- /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 0774193..d2e3bed 100644 --- a/libdecnumber/decContext.c +++ b/libdecnumber/decContext.c @@ -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. */ diff --git a/libdecnumber/decExcept.c b/libdecnumber/decExcept.c index 6821702..a111aee 100644 --- a/libdecnumber/decExcept.c +++ b/libdecnumber/decExcept.c @@ -28,7 +28,7 @@ 02110-1301, USA. */ #include <fenv.h> -#include "config.h" +#include "dconfig.h" #include "decContext.h" #include "decExcept.h" diff --git a/libdecnumber/decExcept.h b/libdecnumber/decExcept.h index 12ba87d..5dc1ebb 100644 --- a/libdecnumber/decExcept.h +++ b/libdecnumber/decExcept.h @@ -28,7 +28,7 @@ 02110-1301, USA. */ #include <fenv.h> -#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 7e5e928..86daedd 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 c5e223c..f9a624a 100644 --- a/libdecnumber/decNumber.c +++ b/libdecnumber/decNumber.c @@ -170,7 +170,7 @@ #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. */ diff --git a/libdecnumber/decNumberLocal.h b/libdecnumber/decNumberLocal.h index c07e8cd..809eaa4 100644 --- a/libdecnumber/decNumberLocal.h +++ b/libdecnumber/decNumberLocal.h @@ -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 */ diff --git a/libdecnumber/decRound.c b/libdecnumber/decRound.c index 6e51eb6..26740bf 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 0e32ceb..54191aa 100644 --- a/libdecnumber/dpd/decimal128.c +++ b/libdecnumber/dpd/decimal128.c @@ -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. */ diff --git a/libdecnumber/dpd/decimal128Local.h b/libdecnumber/dpd/decimal128Local.h index b4130b5..9765427 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 42bddf1..d8e3f59 100644 --- a/libdecnumber/dpd/decimal32.c +++ b/libdecnumber/dpd/decimal32.c @@ -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. */ diff --git a/libdecnumber/dpd/decimal64.c b/libdecnumber/dpd/decimal64.c index c3617c4..474eb7c 100644 --- a/libdecnumber/dpd/decimal64.c +++ b/libdecnumber/dpd/decimal64.c @@ -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. */ |