+2008-01-25  Janis Johnson  <janis187@us.ibm.com>
+
+       * decCommonSymbols.h: Commit.
+       * decDPDSybmols.h: Commit.
+
+       * Makefile.in (libdecnumber_a_SOURCES): List Symbols headers.
+       * decCommonSymbols.h: New file.
+       * decCommon.c: Include it.
+       * decDPDSymbols.h: New file.
+       * decDPD.h: Include it.
+       * decNumberLocal.h: Include the two new files.
+       * decContextSymbols.h (DECPOWERS, DECSTICKYTAB): New.
+       * decNumberSymbols.h (LNnn, d2utable): New.
+       * dpd/decimal32Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New.
+       * dpd/decimal64Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New.
+       * dpd/decimal128Symbols.h (COMBEXP, COMBMSD, DPD2BIN, BIN2DPD): New.
+       * dpd/decimal32.c: Remove redefine of DPD2BIN, BIN2DPD.
+       * dpd/decimal64.c: Ditto.
+       * dpd/decimal128.c: Ditto.
+
 2007-11-26  Thiago Jung Bauermann  <bauerman@br.ibm.com>
 
        * Makefile.in (decimal32.o): Prepend $(srcdir) to dependencies
 
 
 libdecnumber_a_SOURCES = decContext.c decContext.h decDPD.h \
        decNumber.c decNumber.h decNumberLocal.h \
-       dpd/decimal128.c dpd/decimal128.h \
-       dpd/decimal32.c dpd/decimal32.h \
-       dpd/decimal64.c dpd/decimal64.h \
+       decContextSymbols.h decDPDSymbols.h decNumberSymbols.h \
+       dpd/decimal128.c dpd/decimal128.h dpd/decimal128Symbols.h \
+       dpd/decimal32.c dpd/decimal32.h dpd/decimal32Symbols.h \
+       dpd/decimal64.c dpd/decimal64.h dpd/decimal64Symbols.h \
        bid/decimal128.c bid/decimal128.h \
        bid/decimal32.c bid/decimal32.h \
        bid/decimal64.c bid/decimal64.h
 
 /* OR) or the rounding mode read; all other fields are ignored and */
 /* untouched. */
 
+#include "decCommonSymbols.h"
+
 /* names for simpler testing and default context */
 #if DECPMAX==7
   #define SINGLE     1
 
--- /dev/null
+#if !defined(DECCOMMONSYMBOLS)
+#define DECCOMMONSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define DECCOMBFROM __decCOMBFROM
+#define DECCOMBMSD __decCOMBMSD
+#endif
+
+#endif
 
 #define decContextTestSavedStatus __decContextTestSavedStatus
 #define decContextTestStatus __decContextTestStatus
 #define decContextZeroStatus __decContextZeroStatus
+#define DECPOWERS __decPOWERS
+#define DECSTICKYTAB __decSTICKYTAB
 #endif
 
 #endif
 
 /* ------------------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */
 /* For details, see: http://www2.hursley.ibm.com/decimal/DPDecimal.html            */
-/*                                                                         */
+
+#include "decDPDSymbols.h"
+
 /* This include file defines several DPD and BCD conversion tables:        */
 /*                                                                         */
 /*   uint16_t BCD2DPD[2458];    -- BCD -> DPD (0x999 => 2457)              */
 
--- /dev/null
+#if !defined(DECDPDSYMBOLS)
+#define DECDPDSYMBOLS
+
+#ifdef IN_LIBGCC2
+#define BCD2DPD __decBCD2DPD
+#define BIN2BCD8 __decBIN2BCD8
+#define BIN2CHAR __decBIN2CHAR
+#define BIN2DPD __decBIN2DPD
+#define DPD2BCD8 __decDPD2BCD8
+#define DPD2BIN __decDPD2BIN
+#define DPD2BINK __decDPD2BINK
+#define DPD2BINM __decDPD2BINM
+#endif
+
+#endif
 
   extern const uByte  DECSTICKYTAB[10]; /* re-round digits if sticky  */
   extern const uInt   DECPOWERS[10];   /* powers of ten table        */
   /* The following are included from decDPD.h                        */
+#include "decDPDSymbols.h"
   extern const uShort DPD2BIN[1024];   /* DPD -> 0-999               */
   extern const uShort BIN2DPD[1000];   /* 0-999 -> DPD               */
   extern const uInt   DPD2BINK[1024];  /* DPD -> 0-999000            */
   #define DFISSNAN(df)   ((DFWORD(df, 0)&0x7e000000)==0x7e000000)
 
   /* Shared lookup tables                                            */
+#include "decCommonSymbols.h"
   extern const uInt   DECCOMBMSD[64];  /* Combination field -> MSD   */
   extern const uInt   DECCOMBFROM[48]; /* exp+msd -> Combination     */
 
 
 #define decNumberVersion __decNumberVersion
 #define decNumberXor __decNumberXor
 #define decNumberZero __decNumberZero
+#define LNnn __decLNnn
+#define d2utable __decd2utable
 #endif
 
 #endif
 
 #include "decimal128.h"              /* our primary include */
 
 /* Utility routines and tables [in decimal64.c] */
-/* DPD2BIN and the reverse are renamed to prevent link-time conflict */
-/* if decQuad is also built in the same executable */
-#define DPD2BIN DPD2BINx
-#define BIN2DPD BIN2DPDx
 extern const uInt   COMBEXP[32], COMBMSD[32];
 extern const uShort DPD2BIN[1024];
 extern const uShort BIN2DPD[1000];     /* [not used] */
 
 #define decimal128ToEngString __decimal128ToEngString
 #define decimal128ToNumber __decimal128ToNumber
 #define decimal128ToString __decimal128ToString
+#define COMBEXP __decnnCOMBEXP
+#define COMBMSD __decnnCOMBMSD
+
+/* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128
+   and also in support for decSingle/decDouble/decQuad.  Rename them in case
+   both types of support are used in the same executable.  */
+#undef DPD2BIN
+#define DPD2BIN __decnnDPD2BIN
+#undef BIN2DPD
+#define BIN2DPD __decnnBIN2DPD
 #endif
 
 #endif
 
 #include "decimal32.h"       /* our primary include */
 
 /* Utility tables and routines [in decimal64.c] */
-/* DPD2BIN and the reverse are renamed to prevent link-time conflict */
-/* if decQuad is also built in the same executable */
-#define DPD2BIN DPD2BINx
-#define BIN2DPD BIN2DPDx
 extern const uInt   COMBEXP[32], COMBMSD[32];
 extern const uShort DPD2BIN[1024];
 extern const uShort BIN2DPD[1000];
 
 #define decimal32ToEngString __decimal32ToEngString
 #define decimal32ToNumber __decimal32ToNumber
 #define decimal32ToString __decimal32ToString
+#define COMBEXP __decnnCOMBEXP
+#define COMBMSD __decnnCOMBMSD
+
+/* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128
+   and also in support for decSingle/decDouble/decQuad.  Rename them in case
+   both types of support are used in the same executable.  */
+#undef DPD2BIN
+#define DPD2BIN __decnnDPD2BIN
+#undef BIN2DPD
+#define BIN2DPD __decnnBIN2DPD
 #endif
 
 #endif
 
 #include "decimal64.h"       /* our primary include */
 
 /* Utility routines and tables [in decimal64.c]; externs for C++ */
-/* DPD2BIN and the reverse are renamed to prevent link-time conflict */
-/* if decQuad is also built in the same executable */
-#define DPD2BIN DPD2BINx
-#define BIN2DPD BIN2DPDx
 extern const uInt COMBEXP[32], COMBMSD[32];
 extern const uShort DPD2BIN[1024];
 extern const uShort BIN2DPD[1000];
 
 #define decimal64ToEngString __decimal64ToEngString
 #define decimal64ToNumber __decimal64ToNumber
 #define decimal64ToString __decimal64ToString
+#define COMBEXP __decnnCOMBEXP
+#define COMBMSD __decnnCOMBMSD
+
+/* DPD2BIN and BIN2DPD are used in support for decimal32/decimal64/decimal128
+   and also in support for decSingle/decDouble/decQuad.  Rename them in case
+   both types of support are used in the same executable.  */
+#undef DPD2BIN
+#define DPD2BIN __decnnDPD2BIN
+#undef BIN2DPD
+#define BIN2DPD __decnnBIN2DPD
 #endif
 
 #endif