/* decDouble module for the decNumber C Library.
   Copyright (C) 2007, 2009 Free Software Foundation, Inc.
   Contributed by IBM Corporation.  Author Mike Cowlishaw.

   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 3, or (at your option) any later
   version.

   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.

Under Section 7 of GPL version 3, you are granted additional
permissions described in the GCC Runtime Library Exception, version
3.1, as published by the Free Software Foundation.

You should have received a copy of the GNU General Public License and
a copy of the GCC Runtime Library Exception along with this program;
see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
<http://www.gnu.org/licenses/>.  */

/* ------------------------------------------------------------------ */
/* decDouble.c -- decDouble operations module			      */
/* ------------------------------------------------------------------ */
/* This module comprises decDouble operations (including conversions) */
/* ------------------------------------------------------------------ */

#include "decContext.h"       /* public includes */
#include "decDouble.h"	      /* .. */

/* Constant mappings for shared code */
#define DECPMAX     DECDOUBLE_Pmax
#define DECEMIN     DECDOUBLE_Emin
#define DECEMAX     DECDOUBLE_Emax
#define DECEMAXD    DECDOUBLE_EmaxD
#define DECBYTES    DECDOUBLE_Bytes
#define DECSTRING   DECDOUBLE_String
#define DECECONL    DECDOUBLE_EconL
#define DECBIAS     DECDOUBLE_Bias
#define DECLETS     DECDOUBLE_Declets
#define DECQTINY    (-DECDOUBLE_Bias)
/* parameters of next-wider format */
#define DECWBYTES   DECQUAD_Bytes
#define DECWPMAX    DECQUAD_Pmax
#define DECWECONL   DECQUAD_EconL
#define DECWBIAS    DECQUAD_Bias

/* Type and function mappings for shared code */
#define decFloat		   decDouble	  /* Type name */
#define decFloatWider		   decQuad	  /* Type name */

/* Utilities and conversions (binary results, extractors, etc.) */
#define decFloatFromBCD 	   decDoubleFromBCD
#define decFloatFromInt32	   decDoubleFromInt32
#define decFloatFromPacked	   decDoubleFromPacked
#define decFloatFromPackedChecked  decDoubleFromPackedChecked
#define decFloatFromString	   decDoubleFromString
#define decFloatFromUInt32	   decDoubleFromUInt32
#define decFloatFromWider	   decDoubleFromWider
#define decFloatGetCoefficient	   decDoubleGetCoefficient
#define decFloatGetExponent	   decDoubleGetExponent
#define decFloatSetCoefficient	   decDoubleSetCoefficient
#define decFloatSetExponent	   decDoubleSetExponent
#define decFloatShow		   decDoubleShow
#define decFloatToBCD		   decDoubleToBCD
#define decFloatToEngString	   decDoubleToEngString
#define decFloatToInt32 	   decDoubleToInt32
#define decFloatToInt32Exact	   decDoubleToInt32Exact
#define decFloatToPacked	   decDoubleToPacked
#define decFloatToString	   decDoubleToString
#define decFloatToUInt32	   decDoubleToUInt32
#define decFloatToUInt32Exact	   decDoubleToUInt32Exact
#define decFloatToWider 	   decDoubleToWider
#define decFloatZero		   decDoubleZero

/* Computational (result is a decFloat) */
#define decFloatAbs		   decDoubleAbs
#define decFloatAdd		   decDoubleAdd
#define decFloatAnd		   decDoubleAnd
#define decFloatDivide		   decDoubleDivide
#define decFloatDivideInteger	   decDoubleDivideInteger
#define decFloatFMA		   decDoubleFMA
#define decFloatInvert		   decDoubleInvert
#define decFloatLogB		   decDoubleLogB
#define decFloatMax		   decDoubleMax
#define decFloatMaxMag		   decDoubleMaxMag
#define decFloatMin		   decDoubleMin
#define decFloatMinMag		   decDoubleMinMag
#define decFloatMinus		   decDoubleMinus
#define decFloatMultiply	   decDoubleMultiply
#define decFloatNextMinus	   decDoubleNextMinus
#define decFloatNextPlus	   decDoubleNextPlus
#define decFloatNextToward	   decDoubleNextToward
#define decFloatOr		   decDoubleOr
#define decFloatPlus		   decDoublePlus
#define decFloatQuantize	   decDoubleQuantize
#define decFloatReduce		   decDoubleReduce
#define decFloatRemainder	   decDoubleRemainder
#define decFloatRemainderNear	   decDoubleRemainderNear
#define decFloatRotate		   decDoubleRotate
#define decFloatScaleB		   decDoubleScaleB
#define decFloatShift		   decDoubleShift
#define decFloatSubtract	   decDoubleSubtract
#define decFloatToIntegralValue    decDoubleToIntegralValue
#define decFloatToIntegralExact    decDoubleToIntegralExact
#define decFloatXor		   decDoubleXor

/* Comparisons */
#define decFloatCompare 	   decDoubleCompare
#define decFloatCompareSignal	   decDoubleCompareSignal
#define decFloatCompareTotal	   decDoubleCompareTotal
#define decFloatCompareTotalMag    decDoubleCompareTotalMag

/* Copies */
#define decFloatCanonical	   decDoubleCanonical
#define decFloatCopy		   decDoubleCopy
#define decFloatCopyAbs 	   decDoubleCopyAbs
#define decFloatCopyNegate	   decDoubleCopyNegate
#define decFloatCopySign	   decDoubleCopySign

/* Non-computational */
#define decFloatClass		   decDoubleClass
#define decFloatClassString	   decDoubleClassString
#define decFloatDigits		   decDoubleDigits
#define decFloatIsCanonical	   decDoubleIsCanonical
#define decFloatIsFinite	   decDoubleIsFinite
#define decFloatIsInfinite	   decDoubleIsInfinite
#define decFloatIsInteger	   decDoubleIsInteger
#define decFloatIsNaN		   decDoubleIsNaN
#define decFloatIsNormal	   decDoubleIsNormal
#define decFloatIsSignaling	   decDoubleIsSignaling
#define decFloatIsSignalling	   decDoubleIsSignalling
#define decFloatIsSigned	   decDoubleIsSigned
#define decFloatIsSubnormal	   decDoubleIsSubnormal
#define decFloatIsZero		   decDoubleIsZero
#define decFloatRadix		   decDoubleRadix
#define decFloatSameQuantum	   decDoubleSameQuantum
#define decFloatVersion 	   decDoubleVersion

#include "decNumberLocal.h"   /* local includes (need DECPMAX) */
#include "decCommon.c"	      /* non-arithmetic decFloat routines */
#include "decBasic.c"	      /* basic formats routines */

