This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] upgrade decNumber 2/2


This is a companion patch to upgrading decNumber sources in GCC to
decNumber 3.53.  From GCC's perspective the biggest change in the new
version is to use the host endianness, so checks for endianness and
byte swapping are no longer necessary.

The proposed changes to the decNumber sources including using separate
header files to rename global symbols, rather than adding prefixes
within the decNumber header files directly; that results in several
new files called <file>Symbols.h.

Tested with bootstrap of c,c++.gfortran,objc,obj-c++on powerpc64-linux
(I get an ICE for java bootstrap) and simple builds (I get an ICE for
C bootstrap) on i686-unknown-linux-gnu with values of bid, dpd, and
no for --enable-decimal-float=.  Full testing in progress on ppc64,
limited testing on i686.

OK for trunk?

2007-09-09  Janis Johnson  <janis187@us.ibm.com>
	    Ben Ellison  <bje@au1.ibm.com>

gcc/
	* dfp.c: Include decimal128Local.h; 
	(dfp_byte_swap): Remove.
	(encode_decimal32, decode_decimal32): Don't handle endianness.
	(encode_decimal64, decode_decimal64): Ditto.
	(encode_decimal128, decode_decimal128): Ditto.
	* config/dfp-bit.c (host_to_ieee32, ieee_to_host_32): Ditto.
	(__swap64): Remove.
	(host_to_ieee_64, ieee_to_host_64): Don't handle endianness.
         (__swap128): Remove
	(host_to_ieee_128, ieee_to_host_128): Don't handle endianness.
	* Makefile.in (DECNUM_H): Add decimal128Local.h.

libgcc/
	* Makefile.in (dfp-filenames): Remove decUtility, add
	decDouble, decPacked, decQuad, decSingle.

libdecnumber/
	* Makefile.in (libdecnumber_a_OBJS): Remove decUtility.o
	(dependencies): Add Symbols headers.
	* decLibrary.c (__dec_byte_swap): Remove.
	* decContextSymbols.h: New file.
	* decDoubleSymbols.h: New file.
	* decNumberSymbols.h: New file.
	* decPackedSymbols.h: New file.
	* decQuadSymbols.h: New file.
	* decSingleSymbols.h: New file.
	* decUtility.c: Delete file.
	* decUtility.h: Delete file.
	* bid/decimal128Symbols.h: New file.
	* bid/decimal128Local.h: New file.
	* bid/decimal32Symbols.h: New file.
	* bid/decimal64Symbols.h: New file.
	* bid/host-ieee128.c (__swap128): Remove.
	(__host_to_ieee_128, __ieee_to_host_128): Dont' handle endianness.
	* bid/host-ieee32.c (__dec_type_swap): Remove.
	(__host_to_ieee_32, __ieee_to_host_32): Dont' handle endianness.
	* bid/host-ieee64.c (__swap64): Remove.
	(__host_to_ieee_64, __ieee_to_host_64): Dont' handle endianness.
	* dpd/decimal32Symbols.h: New file.
	* dpd/decimal64Symbols.h: New file.
	* dpd/decimal128Symbols.h: New file.
	* dpd/decimal128Local.h: New file.

Index: gcc/dfp.c
===================================================================
--- gcc/dfp.c	(revision 128254)
+++ gcc/dfp.c	(working copy)
@@ -31,29 +31,11 @@
    decNumber structure is large enough to hold decimal128 digits.  */
 
 #include "decimal128.h"
+#include "decimal128Local.h"
 #include "decimal64.h"
 #include "decimal32.h"
 #include "decNumber.h"
 
-static uint32_t
-dfp_byte_swap (uint32_t in)
-{
-  uint32_t out = 0;
-  unsigned char *p = (unsigned char *) &out;
-  union {
-    uint32_t i;
-    unsigned char b[4];
-  } u;
-
-  u.i = in;
-  p[0] = u.b[3];
-  p[1] = u.b[2];
-  p[2] = u.b[1];
-  p[3] = u.b[0];
-
-  return out;
-}
-
 /* Initialize R (a real with the decimal flag set) from DN.  Can
    utilize status passed in via CONTEXT, if a previous operation had
    interesting status.  */
@@ -155,10 +137,7 @@
   decimal_to_decnumber (r, &dn); 
   decimal32FromNumber (&d32, &dn, &set);
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    buf[0] = *(uint32_t *) d32.bytes;
-  else
-    buf[0] = dfp_byte_swap (*(uint32_t *) d32.bytes);
+  buf[0] = *(uint32_t *) d32.bytes;
 }
 
 /* Decode an IEEE 754R decimal32 type into a real.  */
@@ -174,10 +153,7 @@
   decContextDefault (&set, DEC_INIT_DECIMAL128);
   set.traps = 0;
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    *((uint32_t *) d32.bytes) = (uint32_t) buf[0];
-  else
-    *((uint32_t *) d32.bytes) = dfp_byte_swap ((uint32_t) buf[0]);
+  *((uint32_t *) d32.bytes) = (uint32_t) buf[0];
 
   decimal32ToNumber (&d32, &dn);
   decimal_from_decnumber (r, &dn, &set); 
@@ -199,16 +175,8 @@
   decimal_to_decnumber (r, &dn);
   decimal64FromNumber (&d64, &dn, &set);
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    {
-      buf[0] = *(uint32_t *) &d64.bytes[0];
-      buf[1] = *(uint32_t *) &d64.bytes[4];
-    }
-  else
-    {
-      buf[1] = dfp_byte_swap (*(uint32_t *) &d64.bytes[0]);
-      buf[0] = dfp_byte_swap (*(uint32_t *) &d64.bytes[4]);
-    }
+  buf[0] = *(uint32_t *) &d64.bytes[0];
+  buf[1] = *(uint32_t *) &d64.bytes[4];
 }
 
 /* Decode an IEEE 754R decimal64 type into a real.  */
@@ -224,16 +192,8 @@
   decContextDefault (&set, DEC_INIT_DECIMAL128);
   set.traps = 0;
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    {
-      *((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[0];
-      *((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[1];
-    }
-  else
-    {
-      *((uint32_t *) &d64.bytes[0]) = dfp_byte_swap ((uint32_t) buf[1]);
-      *((uint32_t *) &d64.bytes[4]) = dfp_byte_swap ((uint32_t) buf[0]); 
-    }
+  *((uint32_t *) &d64.bytes[0]) = (uint32_t) buf[0];
+  *((uint32_t *) &d64.bytes[4]) = (uint32_t) buf[1];
 
   decimal64ToNumber (&d64, &dn);
   decimal_from_decnumber (r, &dn, &set); 
@@ -255,20 +215,10 @@
   decimal_to_decnumber (r, &dn);
   decimal128FromNumber (&d128, &dn, &set);
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    {
-      buf[0] = *(uint32_t *) &d128.bytes[0];
-      buf[1] = *(uint32_t *) &d128.bytes[4];
-      buf[2] = *(uint32_t *) &d128.bytes[8];
-      buf[3] = *(uint32_t *) &d128.bytes[12];
-    }
-  else
-    {
-      buf[0] = dfp_byte_swap (*(uint32_t *) &d128.bytes[12]);
-      buf[1] = dfp_byte_swap (*(uint32_t *) &d128.bytes[8]);
-      buf[2] = dfp_byte_swap (*(uint32_t *) &d128.bytes[4]);
-      buf[3] = dfp_byte_swap (*(uint32_t *) &d128.bytes[0]);
-    }
+  buf[0] = *(uint32_t *) &d128.bytes[0];
+  buf[1] = *(uint32_t *) &d128.bytes[4];
+  buf[2] = *(uint32_t *) &d128.bytes[8];
+  buf[3] = *(uint32_t *) &d128.bytes[12];
 }
 
 /* Decode an IEEE 754R decimal128 type into a real.  */
@@ -284,20 +234,10 @@
   decContextDefault (&set, DEC_INIT_DECIMAL128);
   set.traps = 0;
 
-  if (FLOAT_WORDS_BIG_ENDIAN)
-    {
-      *((uint32_t *) &d128.bytes[0])  = (uint32_t) buf[0];
-      *((uint32_t *) &d128.bytes[4])  = (uint32_t) buf[1];
-      *((uint32_t *) &d128.bytes[8])  = (uint32_t) buf[2];
-      *((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[3];
-    }
-  else
-    {
-      *((uint32_t *) &d128.bytes[0])  = dfp_byte_swap ((uint32_t) buf[3]);
-      *((uint32_t *) &d128.bytes[4])  = dfp_byte_swap ((uint32_t) buf[2]);
-      *((uint32_t *) &d128.bytes[8])  = dfp_byte_swap ((uint32_t) buf[1]);
-      *((uint32_t *) &d128.bytes[12]) = dfp_byte_swap ((uint32_t) buf[0]);
-    }
+  *((uint32_t *) &d128.bytes[0])  = (uint32_t) buf[0];
+  *((uint32_t *) &d128.bytes[4])  = (uint32_t) buf[1];
+  *((uint32_t *) &d128.bytes[8])  = (uint32_t) buf[2];
+  *((uint32_t *) &d128.bytes[12]) = (uint32_t) buf[3];
 
   decimal128ToNumber (&d128, &dn);
   decimal_from_decnumber (r, &dn, &set); 
Index: gcc/config/dfp-bit.c
===================================================================
--- gcc/config/dfp-bit.c	(revision 128254)
+++ gcc/config/dfp-bit.c	(working copy)
@@ -70,8 +70,6 @@
 /* A pointer to a binary decNumber operation.  */
 typedef decNumber* (*dfp_binary_func)
      (decNumber *, const decNumber *, const decNumber *, decContext *);
-
-extern uint32_t __dec_byte_swap (uint32_t);
 
 /* Unary operations.  */
 
@@ -190,101 +188,41 @@
 void
 __host_to_ieee_32 (_Decimal32 in, decimal32 *out)
 {
-  uint32_t t;
-
-  if (!LIBGCC2_FLOAT_WORDS_BIG_ENDIAN)
-    {
-      memcpy (&t, &in, 4);
-      t = __dec_byte_swap (t);
-      memcpy (out, &t, 4);
-    }
-  else
-    memcpy (out, &in, 4);
+  memcpy (out, &in, 4);
 }
 
 void
 __ieee_to_host_32 (decimal32 in, _Decimal32 *out)
 {
-  uint32_t t;
-
-  if (!LIBGCC2_FLOAT_WORDS_BIG_ENDIAN)
-    {
-      memcpy (&t, &in, 4);
-      t = __dec_byte_swap (t);
-      memcpy (out, &t, 4);
-    }
-  else
-    memcpy (out, &in, 4);
+  memcpy (out, &in, 4);
 }
 #endif /* L_conv_sd */
 
 #if defined(L_conv_dd)
-static void
-__swap64 (char *src, char *dst)
-{
-  uint32_t t1, t2;
-
-  if (!LIBGCC2_FLOAT_WORDS_BIG_ENDIAN) 
-    {
-      memcpy (&t1, src, 4);
-      memcpy (&t2, src + 4, 4);
-      t1 = __dec_byte_swap (t1);
-      t2 = __dec_byte_swap (t2);
-      memcpy (dst, &t2, 4);
-      memcpy (dst + 4, &t1, 4);
-    }
-  else
-    memcpy (dst, src, 8);
-}
-
 void
 __host_to_ieee_64 (_Decimal64 in, decimal64 *out)
 {
-  __swap64 ((char *) &in, (char *) out);
+  memcpy (out, &in, 8);
 }
 
 void
 __ieee_to_host_64 (decimal64 in, _Decimal64 *out)
 {
-  __swap64 ((char *) &in, (char *) out);
+  memcpy (out, &in, 8);
 }
 #endif /* L_conv_dd */
 
 #if defined(L_conv_td)
-static void
-__swap128 (char *src, char *dst)
-{
-  uint32_t t1, t2, t3, t4;
-
-  if (!LIBGCC2_FLOAT_WORDS_BIG_ENDIAN)
-    {
-      memcpy (&t1, src, 4);
-      memcpy (&t2, src + 4, 4);
-      memcpy (&t3, src + 8, 4);
-      memcpy (&t4, src + 12, 4);
-      t1 = __dec_byte_swap (t1);
-      t2 = __dec_byte_swap (t2);
-      t3 = __dec_byte_swap (t3);
-      t4 = __dec_byte_swap (t4);
-      memcpy (dst, &t4, 4);
-      memcpy (dst + 4, &t3, 4);
-      memcpy (dst + 8, &t2, 4);
-      memcpy (dst + 12, &t1, 4);
-    }
-  else
-    memcpy (dst, src, 16);
-}
-
 void
 __host_to_ieee_128 (_Decimal128 in, decimal128 *out)
 {
-  __swap128 ((char *) &in, (char *) out);
+  memcpy (out, &in, 16);
 }
 
 void
 __ieee_to_host_128 (decimal128 in, _Decimal128 *out)
 {
-  __swap128 ((char *) &in, (char *) out);
+  memcpy (out, &in, 16);
 }
 #endif /* L_conv_td */
 
Index: gcc/Makefile.in
===================================================================
--- gcc/Makefile.in	(revision 128254)
+++ gcc/Makefile.in	(working copy)
@@ -815,7 +815,8 @@
 CPPLIB_H = $(srcdir)/../libcpp/include/line-map.h \
 	$(srcdir)/../libcpp/include/cpplib.h
 DECNUM_H = $(DECNUM)/decContext.h $(DECNUM)/decDPD.h $(DECNUM)/decNumber.h \
-	$(DECNUMFMT)/decimal32.h $(DECNUMFMT)/decimal64.h $(DECNUMFMT)/decimal128.h
+	$(DECNUMFMT)/decimal32.h $(DECNUMFMT)/decimal64.h \
+	$(DECNUMFMT)/decimal128.h $(DECNUMFMT)/decimal128Local.h
 MKDEPS_H = $(srcdir)/../libcpp/include/mkdeps.h
 SYMTAB_H = $(srcdir)/../libcpp/include/symtab.h
 CPP_ID_DATA_H = $(CPPLIB_H) $(srcdir)/../libcpp/include/cpp-id-data.h
Index: libgcc/Makefile.in
===================================================================
--- libgcc/Makefile.in	(revision 128254)
+++ libgcc/Makefile.in	(working copy)
@@ -488,7 +488,7 @@
 		 bid128_to_int32 bid128_to_int64 \
 		 bid128_to_uint32 bid128_to_uint64
 else
-dfp-filenames += decContext decNumber decExcept decRound decLibrary decUtility
+dfp-filenames += decContext decNumber decExcept decRound decLibrary decDouble decPacked decQuad decSingle
 endif
 endif
 
Index: libdecnumber/Makefile.in
===================================================================
--- libdecnumber/Makefile.in	(revision 128254)
+++ libdecnumber/Makefile.in	(working copy)
@@ -56,7 +56,7 @@
 
 ALL_CFLAGS = $(CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(CPPFLAGS)
 
-libdecnumber_a_OBJS = decNumber.o decContext.o decUtility.o \
+libdecnumber_a_OBJS = decNumber.o decContext.o \
 	decimal32.o decimal64.o decimal128.o
 
 ifeq ($(enable_decimal_float),bid)
@@ -66,7 +66,6 @@
 
 libdecnumber_a_SOURCES = decContext.c decContext.h decDPD.h \
 	decNumber.c decNumber.h decNumberLocal.h \
-	decUtility.c decUtility.h \
 	dpd/decimal128.c dpd/decimal128.h \
 	dpd/decimal32.c dpd/decimal32.h \
 	dpd/decimal64.c dpd/decimal64.h \
@@ -113,19 +112,25 @@
 
 # Dependencies.
 
-decContext.o: decContext.c decContext.h decNumberLocal.h
-decNumber.o:  decNumber.c decNumber.h decContext.h decNumberLocal.h
+decContext.o: decContext.c decContext.h decNumberLocal.h \
+	decContextSymbols.h
+decNumber.o:  decNumber.c decNumber.h decContext.h decNumberLocal.h \
+	decNumberSymbols.h
 decimal32.o:  $(enable_decimal_float)/decimal32.c \
    $(enable_decimal_float)/decimal32.h \
-   decNumber.h decContext.h decNumberLocal.h decUtility.h
+   $(enable_decimal_float)/decimal32Symbols.h \
+   decNumber.h decContext.h decNumberLocal.h
 	$(COMPILE) $<
 decimal64.o:  $(enable_decimal_float)/decimal64.c \
    $(enable_decimal_float)/decimal64.h \
-   decNumber.h decContext.h decNumberLocal.h decUtility.h
+   $(enable_decimal_float)/decimal64Symbols.h \
+   decNumber.h decContext.h decNumberLocal.h
 	$(COMPILE) $<
 decimal128.o:  $(enable_decimal_float)/decimal128.c \
    $(enable_decimal_float)/decimal128.h \
-   decNumber.h decContext.h decNumberLocal.h decUtility.h
+   $(enable_decimal_float)/decimal128Symbols.h\
+   $(enable_decimal_float)/decimal128Local.h\
+   decNumber.h decContext.h decNumberLocal.h 
 	$(COMPILE) $<
 bid2dpd_dpd2bid.o : bid/bid2dpd_dpd2bid.c bid/bid2dpd_dpd2bid.h
 	$(COMPILE) $<
Index: libdecnumber/decLibrary.c
===================================================================
--- libdecnumber/decLibrary.c	(revision 128254)
+++ libdecnumber/decLibrary.c	(working copy)
@@ -74,22 +74,3 @@
   decimal128ToNumber (&d128, &dn);
   return (decNumberIsInfinite (&dn));
 }
-
-uint32_t
-__dec_byte_swap (uint32_t in)
-{
-  uint32_t out = 0;
-  unsigned char *p = (unsigned char *) &out;
-  union {
-    uint32_t i;
-    unsigned char b[4];
-  } u;
-
-  u.i = in;
-  p[0] = u.b[3];
-  p[1] = u.b[2];
-  p[2] = u.b[1];
-  p[3] = u.b[0];
-
-  return out;
-}
Index: libdecnumber/decContextSymbols.h
===================================================================
--- libdecnumber/decContextSymbols.h	(revision 0)
+++ libdecnumber/decContextSymbols.h	(revision 0)
@@ -0,0 +1,22 @@
+#if !defined(DECCONTEXTSYMBOLS)
+#define DECCONTEXTSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decContextClearStatus __decContextClearStatus
+#define decContextDefault __decContextDefault
+#define decContextGetRounding __decContextGetRounding
+#define decContextGetStatus __decContextGetStatus
+#define decContextRestoreStatus __decContextRestoreStatus
+#define decContextSaveStatus __decContextSaveStatus
+#define decContextSetRounding __decContextSetRounding
+#define decContextSetStatus __decContextSetStatus
+#define decContextSetStatusFromString __decContextSetStatusFromString
+#define decContextSetStatusFromStringQuiet __decContextSetStatusFromStringQuiet
+#define decContextSetStatusQuiet __decContextSetStatusQuiet
+#define decContextStatusToString __decContextStatusToString
+#define decContextTestSavedStatus __decContextTestSavedStatus
+#define decContextTestStatus __decContextTestStatus
+#define decContextZeroStatus __decContextZeroStatus
+#endif
+
+#endif
Index: libdecnumber/decDoubleSymbols.h
===================================================================
--- libdecnumber/decDoubleSymbols.h	(revision 0)
+++ libdecnumber/decDoubleSymbols.h	(revision 0)
@@ -0,0 +1,84 @@
+#if !defined(DECDOUBLESYMBOLS)
+#define DECDOUBLESYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decDoubleAbs __decDoubleAbs
+#define decDoubleAdd __decDoubleAdd
+#define decDoubleAnd __decDoubleAnd
+#define decDoubleCanonical __decDoubleCanonical
+#define decDoubleClass __decDoubleClass
+#define decDoubleClassString __decDoubleClassString
+#define decDoubleCompare __decDoubleCompare
+#define decDoubleCompareSignal __decDoubleCompareSignal
+#define decDoubleCompareTotal __decDoubleCompareTotal
+#define decDoubleCompareTotalMag __decDoubleCompareTotalMag
+#define decDoubleCopy __decDoubleCopy
+#define decDoubleCopyAbs __decDoubleCopyAbs
+#define decDoubleCopyNegate __decDoubleCopyNegate
+#define decDoubleCopySign __decDoubleCopySign
+#define decDoubleDigits __decDoubleDigits
+#define decDoubleDivide __decDoubleDivide
+#define decDoubleDivideInteger __decDoubleDivideInteger
+#define decDoubleFMA __decDoubleFMA
+#define decDoubleFromBCD __decDoubleFromBCD
+#define decDoubleFromInt32 __decDoubleFromInt32
+#define decDoubleFromPacked __decDoubleFromPacked
+#define decDoubleFromString __decDoubleFromString
+#define decDoubleFromUInt32 __decDoubleFromUInt32
+#define decDoubleFromWider __decDoubleFromWider
+#define decDoubleGetCoefficient __decDoubleGetCoefficient
+#define decDoubleGetExponent __decDoubleGetExponent
+#define decDoubleInvert __decDoubleInvert
+#define decDoubleIsCanonical __decDoubleIsCanonical
+#define decDoubleIsFinite __decDoubleIsFinite
+#define decDoubleIsInfinite __decDoubleIsInfinite
+#define decDoubleIsInteger __decDoubleIsInteger
+#define decDoubleIsNaN __decDoubleIsNaN
+#define decDoubleIsNormal __decDoubleIsNormal
+#define decDoubleIsSignaling __decDoubleIsSignaling
+#define decDoubleIsSignalling __decDoubleIsSignalling
+#define decDoubleIsSigned __decDoubleIsSigned
+#define decDoubleIsSubnormal __decDoubleIsSubnormal
+#define decDoubleIsZero __decDoubleIsZero
+#define decDoubleLogB __decDoubleLogB
+#define decDoubleMax __decDoubleMax
+#define decDoubleMaxMag __decDoubleMaxMag
+#define decDoubleMin __decDoubleMin
+#define decDoubleMinMag __decDoubleMinMag
+#define decDoubleMinus __decDoubleMinus
+#define decDoubleMultiply __decDoubleMultiply
+#define decDoubleNextMinus __decDoubleNextMinus
+#define decDoubleNextPlus __decDoubleNextPlus
+#define decDoubleNextToward __decDoubleNextToward
+#define decDoubleOr __decDoubleOr
+#define decDoublePlus __decDoublePlus
+#define decDoubleQuantize __decDoubleQuantize
+#define decDoubleRadix __decDoubleRadix
+#define decDoubleReduce __decDoubleReduce
+#define decDoubleRemainder __decDoubleRemainder
+#define decDoubleRemainderNear __decDoubleRemainderNear
+#define decDoubleRotate __decDoubleRotate
+#define decDoubleSameQuantum __decDoubleSameQuantum
+#define decDoubleScaleB __decDoubleScaleB
+#define decDoubleSetCoefficient __decDoubleSetCoefficient
+#define decDoubleSetExponent __decDoubleSetExponent
+#define decDoubleShift __decDoubleShift
+#define decDoubleShow __decDoubleShow
+#define decDoubleSubtract __decDoubleSubtract
+#define decDoubleToBCD __decDoubleToBCD
+#define decDoubleToEngString __decDoubleToEngString
+#define decDoubleToInt32 __decDoubleToInt32
+#define decDoubleToInt32Exact __decDoubleToInt32Exact
+#define decDoubleToIntegralExact __decDoubleToIntegralExact
+#define decDoubleToIntegralValue __decDoubleToIntegralValue
+#define decDoubleToPacked __decDoubleToPacked
+#define decDoubleToString __decDoubleToString
+#define decDoubleToUInt32 __decDoubleToUInt32
+#define decDoubleToUInt32Exact __decDoubleToUInt32Exact
+#define decDoubleToWider __decDoubleToWider
+#define decDoubleVersion __decDoubleVersion
+#define decDoubleXor __decDoubleXor
+#define decDoubleZero __decDoubleZero
+#endif
+
+#endif
Index: libdecnumber/decNumberSymbols.h
===================================================================
--- libdecnumber/decNumberSymbols.h	(revision 0)
+++ libdecnumber/decNumberSymbols.h	(revision 0)
@@ -0,0 +1,69 @@
+#if !defined(DECNUMBERSYMBOLS)
+#define DECNUMBERSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decNumberAbs __decNumberAbs
+#define decNumberAdd __decNumberAdd
+#define decNumberAnd __decNumberAnd
+#define decNumberClass __decNumberClass
+#define decNumberClassToString __decNumberClassToString
+#define decNumberCompare __decNumberCompare
+#define decNumberCompareSignal __decNumberCompareSignal
+#define decNumberCompareTotal __decNumberCompareTotal
+#define decNumberCompareTotalMag __decNumberCompareTotalMag
+#define decNumberCopy __decNumberCopy
+#define decNumberCopyAbs __decNumberCopyAbs
+#define decNumberCopyNegate __decNumberCopyNegate
+#define decNumberCopySign __decNumberCopySign
+#define decNumberDivide __decNumberDivide
+#define decNumberDivideInteger __decNumberDivideInteger
+#define decNumberExp __decNumberExp
+#define decNumberFMA __decNumberFMA
+#define decNumberFromInt32 __decNumberFromInt32
+#define decNumberFromString __decNumberFromString
+#define decNumberFromUInt32 __decNumberFromUInt32
+#define decNumberGetBCD __decNumberGetBCD
+#define decNumberInvert __decNumberInvert
+#define decNumberIsNormal __decNumberIsNormal
+#define decNumberIsSubnormal __decNumberIsSubnormal
+#define decNumberLn __decNumberLn
+#define decNumberLog10 __decNumberLog10
+#define decNumberLogB __decNumberLogB
+#define decNumberMax __decNumberMax
+#define decNumberMaxMag __decNumberMaxMag
+#define decNumberMin __decNumberMin
+#define decNumberMinMag __decNumberMinMag
+#define decNumberMinus __decNumberMinus
+#define decNumberMultiply __decNumberMultiply
+#define decNumberNextMinus __decNumberNextMinus
+#define decNumberNextPlus __decNumberNextPlus
+#define decNumberNextToward __decNumberNextToward
+#define decNumberNormalize __decNumberNormalize
+#define decNumberOr __decNumberOr
+#define decNumberPlus __decNumberPlus
+#define decNumberPower __decNumberPower
+#define decNumberQuantize __decNumberQuantize
+#define decNumberReduce __decNumberReduce
+#define decNumberRemainder __decNumberRemainder
+#define decNumberRemainderNear __decNumberRemainderNear
+#define decNumberRescale __decNumberRescale
+#define decNumberRotate __decNumberRotate
+#define decNumberSameQuantum __decNumberSameQuantum
+#define decNumberScaleB __decNumberScaleB
+#define decNumberSetBCD __decNumberSetBCD
+#define decNumberShift __decNumberShift
+#define decNumberSquareRoot __decNumberSquareRoot
+#define decNumberSubtract __decNumberSubtract
+#define decNumberToEngString __decNumberToEngString
+#define decNumberToInt32 __decNumberToInt32
+#define decNumberToIntegralExact __decNumberToIntegralExact
+#define decNumberToIntegralValue __decNumberToIntegralValue
+#define decNumberToString __decNumberToString
+#define decNumberToUInt32 __decNumberToUInt32
+#define decNumberTrim __decNumberTrim
+#define decNumberVersion __decNumberVersion
+#define decNumberXor __decNumberXor
+#define decNumberZero __decNumberZero
+#endif
+
+#endif
Index: libdecnumber/decPackedSymbols.h
===================================================================
--- libdecnumber/decPackedSymbols.h	(revision 0)
+++ libdecnumber/decPackedSymbols.h	(revision 0)
@@ -0,0 +1,9 @@
+#if !defined(DECPACKEDSYMBOLS)
+#define DECPACKEDSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decPackedFromNumber __decPackedFromNumber
+#define decPackedToNumber __decPackedToNumber
+#endif
+
+#endif
Index: libdecnumber/decQuadSymbols.h
===================================================================
--- libdecnumber/decQuadSymbols.h	(revision 0)
+++ libdecnumber/decQuadSymbols.h	(revision 0)
@@ -0,0 +1,82 @@
+#if !defined(DECQUADSYMBOLS)
+#define DECQUADSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decQuadAbs __decQuadAbs
+#define decQuadAdd __decQuadAdd
+#define decQuadAnd __decQuadAnd
+#define decQuadCanonical __decQuadCanonical
+#define decQuadClass __decQuadClass
+#define decQuadClassString __decQuadClassString
+#define decQuadCompare __decQuadCompare
+#define decQuadCompareSignal __decQuadCompareSignal
+#define decQuadCompareTotal __decQuadCompareTotal
+#define decQuadCompareTotalMag __decQuadCompareTotalMag
+#define decQuadCopy __decQuadCopy
+#define decQuadCopyAbs __decQuadCopyAbs
+#define decQuadCopyNegate __decQuadCopyNegate
+#define decQuadCopySign __decQuadCopySign
+#define decQuadDigits __decQuadDigits
+#define decQuadDivide __decQuadDivide
+#define decQuadDivideInteger __decQuadDivideInteger
+#define decQuadFMA __decQuadFMA
+#define decQuadFromBCD __decQuadFromBCD
+#define decQuadFromInt32 __decQuadFromInt32
+#define decQuadFromPacked __decQuadFromPacked
+#define decQuadFromString __decQuadFromString
+#define decQuadFromUInt32 __decQuadFromUInt32
+#define decQuadGetCoefficient __decQuadGetCoefficient
+#define decQuadGetExponent __decQuadGetExponent
+#define decQuadInvert __decQuadInvert
+#define decQuadIsCanonical __decQuadIsCanonical
+#define decQuadIsFinite __decQuadIsFinite
+#define decQuadIsInfinite __decQuadIsInfinite
+#define decQuadIsInteger __decQuadIsInteger
+#define decQuadIsNaN __decQuadIsNaN
+#define decQuadIsNormal __decQuadIsNormal
+#define decQuadIsSignaling __decQuadIsSignaling
+#define decQuadIsSignalling __decQuadIsSignalling
+#define decQuadIsSigned __decQuadIsSigned
+#define decQuadIsSubnormal __decQuadIsSubnormal
+#define decQuadIsZero __decQuadIsZero
+#define decQuadLogB __decQuadLogB
+#define decQuadMax __decQuadMax
+#define decQuadMaxMag __decQuadMaxMag
+#define decQuadMin __decQuadMin
+#define decQuadMinMag __decQuadMinMag
+#define decQuadMinus __decQuadMinus
+#define decQuadMultiply __decQuadMultiply
+#define decQuadNextMinus __decQuadNextMinus
+#define decQuadNextPlus __decQuadNextPlus
+#define decQuadNextToward __decQuadNextToward
+#define decQuadOr __decQuadOr
+#define decQuadPlus __decQuadPlus
+#define decQuadQuantize __decQuadQuantize
+#define decQuadRadix __decQuadRadix
+#define decQuadReduce __decQuadReduce
+#define decQuadRemainder __decQuadRemainder
+#define decQuadRemainderNear __decQuadRemainderNear
+#define decQuadRotate __decQuadRotate
+#define decQuadSameQuantum __decQuadSameQuantum
+#define decQuadScaleB __decQuadScaleB
+#define decQuadSetCoefficient __decQuadSetCoefficient
+#define decQuadSetExponent __decQuadSetExponent
+#define decQuadShift __decQuadShift
+#define decQuadShow __decQuadShow
+#define decQuadSubtract __decQuadSubtract
+#define decQuadToBCD __decQuadToBCD
+#define decQuadToEngString __decQuadToEngString
+#define decQuadToInt32 __decQuadToInt32
+#define decQuadToInt32Exact __decQuadToInt32Exact
+#define decQuadToIntegralExact __decQuadToIntegralExact
+#define decQuadToIntegralValue __decQuadToIntegralValue
+#define decQuadToPacked __decQuadToPacked
+#define decQuadToString __decQuadToString
+#define decQuadToUInt32 __decQuadToUInt32
+#define decQuadToUInt32Exact __decQuadToUInt32Exact
+#define decQuadVersion __decQuadVersion
+#define decQuadXor __decQuadXor
+#define decQuadZero __decQuadZero
+#endif
+
+#endif
Index: libdecnumber/decSingleSymbols.h
===================================================================
--- libdecnumber/decSingleSymbols.h	(revision 0)
+++ libdecnumber/decSingleSymbols.h	(revision 0)
@@ -0,0 +1,24 @@
+#if !defined(DECSINGLESYMBOLS)
+#define DECSINGLESYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decSingleFromBCD __decSingleFromBCD
+#define decSingleFromPacked __decSingleFromPacked
+#define decSingleFromString __decSingleFromString
+#define decSingleFromWider __decSingleFromWider
+#define decSingleGetCoefficient __decSingleGetCoefficient
+#define decSingleGetExponent __decSingleGetExponent
+#define decSingleRadix __decSingleRadix
+#define decSingleSetCoefficient __decSingleSetCoefficient
+#define decSingleSetExponent __decSingleSetExponent
+#define decSingleShow __decSingleShow
+#define decSingleToBCD __decSingleToBCD
+#define decSingleToEngString __decSingleToEngString
+#define decSingleToPacked __decSingleToPacked
+#define decSingleToString __decSingleToString
+#define decSingleToWider __decSingleToWider
+#define decSingleVersion __decSingleVersion
+#define decSingleZero __decSingleZero
+#endif
+
+#endif
Index: libdecnumber/bid/decimal128Symbols.h
===================================================================
--- libdecnumber/bid/decimal128Symbols.h	(revision 0)
+++ libdecnumber/bid/decimal128Symbols.h	(revision 0)
@@ -0,0 +1 @@
+#include "dpd/decimal128Symbols.h"
Index: libdecnumber/bid/decimal128Local.h
===================================================================
--- libdecnumber/bid/decimal128Local.h	(revision 0)
+++ libdecnumber/bid/decimal128Local.h	(revision 0)
@@ -0,0 +1 @@
+#include "dpd/decimal128Local.h"
Index: libdecnumber/bid/decimal32Symbols.h
===================================================================
--- libdecnumber/bid/decimal32Symbols.h	(revision 0)
+++ libdecnumber/bid/decimal32Symbols.h	(revision 0)
@@ -0,0 +1 @@
+#include "dpd/decimal32Symbols.h"
Index: libdecnumber/bid/decimal64Symbols.h
===================================================================
--- libdecnumber/bid/decimal64Symbols.h	(revision 0)
+++ libdecnumber/bid/decimal64Symbols.h	(revision 0)
@@ -0,0 +1 @@
+#include "dpd/decimal64Symbols.h"
Index: libdecnumber/bid/host-ieee128.c
===================================================================
--- libdecnumber/bid/host-ieee128.c	(revision 128254)
+++ libdecnumber/bid/host-ieee128.c	(working copy)
@@ -27,56 +27,22 @@
 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
 02110-1301, USA.  */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
-#include <limits.h>
 
-#include "config.h"
-#include "gstdint.h"
 #include "bid-dpd.h"
 #include "decimal128.h"
 
-extern uint32_t __dec_byte_swap (uint32_t);
 void __host_to_ieee_128 (_Decimal128 in, decimal128 *out);
 void __ieee_to_host_128 (decimal128 in, _Decimal128 *out);
 
-#ifndef WORDS_BIGENDIAN
-#define WORDS_BIGENDIAN 0
-#endif
-
-static void
-__swap128 (char *src, char *dst)
-{
-  uint32_t t1, t2, t3, t4;
-
-  if (!WORDS_BIGENDIAN)
-    {
-      memcpy (&t1, src, 4);
-      memcpy (&t2, src + 4, 4);
-      memcpy (&t3, src + 8, 4);
-      memcpy (&t4, src + 12, 4);
-      t1 = __dec_byte_swap (t1);
-      t2 = __dec_byte_swap (t2);
-      t3 = __dec_byte_swap (t3);
-      t4 = __dec_byte_swap (t4);
-      memcpy (dst, &t4, 4);
-      memcpy (dst + 4, &t3, 4);
-      memcpy (dst + 8, &t2, 4);
-      memcpy (dst + 12, &t1, 4);
-    }
-  else
-    memcpy (dst, src, 16);
-}
-
 void
 __host_to_ieee_128 (_Decimal128 in, decimal128 *out)
 {
-  __swap128 ((char *) &in, (char *) out);
+  memcpy ((char *) out, (char *) &in, 16);
 }
 
 void
 __ieee_to_host_128 (decimal128 in, _Decimal128 *out)
 {
-  __swap128 ((char *) &in, (char *) out);
+  memcpy ((char *) out, (char *) &in, 16);
 }
Index: libdecnumber/bid/host-ieee32.c
===================================================================
--- libdecnumber/bid/host-ieee32.c	(revision 128254)
+++ libdecnumber/bid/host-ieee32.c	(working copy)
@@ -37,69 +37,21 @@
 /* The intended way to use this file is to make two copies, add `#define '
    to one copy, then compile both copies and add them to libgcc.a.  */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
-#include <limits.h>
-
-#include "config.h"
-#include "gstdint.h"
 #include "bid-dpd.h"
 #include "decimal32.h"
 
-uint32_t __dec_byte_swap (uint32_t);
 void __host_to_ieee_32 (_Decimal32 in, decimal32 *out);
 void __ieee_to_host_32 (decimal32 in, _Decimal32 *out);
 
-#ifndef WORDS_BIGENDIAN
-#define WORDS_BIGENDIAN 0
-#endif
-
-uint32_t
-__dec_byte_swap (uint32_t in)
-{
-  uint32_t out = 0;
-  unsigned char *p = (unsigned char *) &out;
-  union {
-    uint32_t i;
-    unsigned char b[4];
-  } u;
-
-  u.i = in;
-  p[0] = u.b[3];
-  p[1] = u.b[2];
-  p[2] = u.b[1];
-  p[3] = u.b[0];
-
-  return out;
-}
-
 void
 __host_to_ieee_32 (_Decimal32 in, decimal32 *out)
 {
-  uint32_t t;
-
-  if (!WORDS_BIGENDIAN)
-    {
-      memcpy (&t, &in, 4);
-      t = __dec_byte_swap (t);
-      memcpy (out, &t, 4);
-    }
-  else
-    memcpy (out, &in, 4);
+  memcpy ((char *) out, (char *) &in, 4);
 }
 
 void
 __ieee_to_host_32 (decimal32 in, _Decimal32 *out)
 {
-  uint32_t t;
-
-  if (!WORDS_BIGENDIAN)
-    {
-      memcpy (&t, &in, 4);
-      t = __dec_byte_swap (t);
-      memcpy (out, &t, 4);
-    }
-  else
-    memcpy (out, &in, 4);
+  memcpy ((char *) out, (char *) &in, 4);
 }
Index: libdecnumber/bid/host-ieee64.c
===================================================================
--- libdecnumber/bid/host-ieee64.c	(revision 128254)
+++ libdecnumber/bid/host-ieee64.c	(working copy)
@@ -37,50 +37,21 @@
 /* The intended way to use this file is to make two copies, add `#define '
    to one copy, then compile both copies and add them to libgcc.a.  */
 
-#include <stdio.h>
-#include <stdlib.h>
 #include <string.h>
-#include <limits.h>
-
-#include "config.h"
-#include "gstdint.h"
 #include "bid-dpd.h"
 #include "decimal64.h"
 
-uint32_t __dec_byte_swap (uint32_t);
 void __host_to_ieee_64 (_Decimal64 in, decimal64 *out);
 void __ieee_to_host_64 (decimal64 in, _Decimal64 *out);
 
-#ifndef WORDS_BIGENDIAN
-#define WORDS_BIGENDIAN 0
-#endif
-
-static void
-__swap64 (char *src, char *dst)
-{
-  uint32_t t1, t2;
-
-  if (!WORDS_BIGENDIAN) 
-    {
-      memcpy (&t1, src, 4);
-      memcpy (&t2, src + 4, 4);
-      t1 = __dec_byte_swap (t1);
-      t2 = __dec_byte_swap (t2);
-      memcpy (dst, &t2, 4);
-      memcpy (dst + 4, &t1, 4);
-    }
-  else
-    memcpy (dst, src, 8);
-}
-
 void
 __host_to_ieee_64 (_Decimal64 in, decimal64 *out)
 {
-  __swap64 ((char *) &in, (char *) out);
+  memcpy ((char *) out, (char *) &in, 8);
 }
 
 void
 __ieee_to_host_64 (decimal64 in, _Decimal64 *out)
 {
-  __swap64 ((char *) &in, (char *) out);
+  memcpy ((char *) out, (char *) &in, 8);
 }
Index: libdecnumber/dpd/decimal32Symbols.h
===================================================================
--- libdecnumber/dpd/decimal32Symbols.h	(revision 0)
+++ libdecnumber/dpd/decimal32Symbols.h	(revision 0)
@@ -0,0 +1,16 @@
+#if !defined(DECIMAL32SYMBOLS)
+#define DECIMAL32SYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decDigitsFromDPD __decDigitsFromDPD
+#define decDigitsToDPD __decDigitsToDPD
+#define decimal32Canonical __decimal32Canonical
+#define decimal32FromNumber __decimal32FromNumber
+#define decimal32FromString __decimal32FromString
+#define decimal32IsCanonical __decimal32IsCanonical
+#define decimal32ToEngString __decimal32ToEngString
+#define decimal32ToNumber __decimal32ToNumber
+#define decimal32ToString __decimal32ToString
+#endif
+
+#endif
Index: libdecnumber/dpd/decimal64Symbols.h
===================================================================
--- libdecnumber/dpd/decimal64Symbols.h	(revision 0)
+++ libdecnumber/dpd/decimal64Symbols.h	(revision 0)
@@ -0,0 +1,16 @@
+#if !defined(DECIMAL64SYMBOLS)
+#define DECIMAL64SYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decDigitsFromDPD __decDigitsFromDPD
+#define decDigitsToDPD __decDigitsToDPD
+#define decimal64Canonical __decimal64Canonical
+#define decimal64FromNumber __decimal64FromNumber
+#define decimal64FromString __decimal64FromString
+#define decimal64IsCanonical __decimal64IsCanonical
+#define decimal64ToEngString __decimal64ToEngString
+#define decimal64ToNumber __decimal64ToNumber
+#define decimal64ToString __decimal64ToString
+#endif
+
+#endif
Index: libdecnumber/dpd/decimal128Symbols.h
===================================================================
--- libdecnumber/dpd/decimal128Symbols.h	(revision 0)
+++ libdecnumber/dpd/decimal128Symbols.h	(revision 0)
@@ -0,0 +1,16 @@
+#if !defined(DECIMAL128SYMBOLS)
+#define DECIMAL128SYMBOLS
+
+#ifdef IN_LIBGCC2
+#define decDigitsFromDPD __decDigitsFromDPD
+#define decDigitsToDPD __decDigitsToDPD
+#define decimal128Canonical __decimal128Canonical
+#define decimal128FromNumber __decimal128FromNumber
+#define decimal128FromString __decimal128FromString
+#define decimal128IsCanonical __decimal128IsCanonical
+#define decimal128ToEngString __decimal128ToEngString
+#define decimal128ToNumber __decimal128ToNumber
+#define decimal128ToString __decimal128ToString
+#endif
+
+#endif
Index: libdecnumber/dpd/decimal128Local.h
===================================================================
--- libdecnumber/dpd/decimal128Local.h	(revision 0)
+++ libdecnumber/dpd/decimal128Local.h	(revision 0)
@@ -0,0 +1,47 @@
+/* Local definitions for use with the decNumber C Library.
+   Copyright (C) 2007 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.  */
+
+#if !defined(DECIMAL128LOCAL)
+
+/* The compiler needs sign manipulation functions for decimal128 which
+   are not part of the decNumber package.  */
+
+/* Set sign; this assumes the sign was previously zero.  */
+#define decimal128SetSign(d,b) \
+  { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] |= ((unsigned) (b) << 7); }
+
+/* Clear sign.  */
+#define decimal128ClearSign(d) \
+  { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] &= ~0x80; }
+
+/* Flip sign.  */
+#define decimal128FlipSign(d) \
+  { (d)->bytes[FLOAT_WORDS_BIG_ENDIAN ? 0 : 15] ^= 0x80; }
+
+#endif



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]