/* ------------------------------------------------------------------ */
/* decQuad.c -- decQuad operations module                             */
/* ------------------------------------------------------------------ */
/* Copyright (c) IBM Corporation, 2000, 2010.  All rights reserved.   */
/*                                                                    */
/* This software is made available under the terms of the             */
/* ICU License -- ICU 1.8.1 and later.                                */
/*                                                                    */
/* The description and User's Guide ("The decNumber C Library") for   */
/* this software is included in the package as decNumber.pdf.  This   */
/* document is also available in HTML, together with specifications,  */
/* testcases, and Web links, on the General Decimal Arithmetic page.  */
/*                                                                    */
/* Please send comments, suggestions, and corrections to the author:  */
/*   mfc@uk.ibm.com                                                   */
/*   Mike Cowlishaw, IBM Fellow                                       */
/*   IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK         */
/* ------------------------------------------------------------------ */
/* This module comprises decQuad operations (including conversions)   */
/* ------------------------------------------------------------------ */


/* Constant mappings for shared code */
#define DECPMAX     DECQUAD_Pmax
#define DECEMIN     DECQUAD_Emin
#define DECEMAX     DECQUAD_Emax
#define DECEMAXD    DECQUAD_EmaxD
#define DECBYTES    DECQUAD_Bytes
#define DECSTRING   DECQUAD_String
#define DECECONL    DECQUAD_EconL
#define DECBIAS     DECQUAD_Bias
#define DECLETS     DECQUAD_Declets
#define DECQTINY   (-DECQUAD_Bias)

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

// Utilities and conversions (binary results, extractors, etc.)
#define decFloatFromBCD            decQuadFromBCD
#define decFloatFromInt32          decQuadFromInt32
#define decFloatFromPacked         decQuadFromPacked
#define decFloatFromPackedChecked  decQuadFromPackedChecked
#define decFloatFromString         decQuadFromString
#define decFloatFromUInt32         decQuadFromUInt32
#define decFloatFromWider          decQuadFromWider
#define decFloatGetCoefficient     decQuadGetCoefficient
#define decFloatGetExponent        decQuadGetExponent
#define decFloatSetCoefficient     decQuadSetCoefficient
#define decFloatSetExponent        decQuadSetExponent
#define decFloatShow               decQuadShow
#define decFloatToBCD              decQuadToBCD
#define decFloatToEngString        decQuadToEngString
#define decFloatToInt32            decQuadToInt32
#define decFloatToInt32Exact       decQuadToInt32Exact
#define decFloatToPacked           decQuadToPacked
#define decFloatToString           decQuadToString
#define decFloatToUInt32           decQuadToUInt32
#define decFloatToUInt32Exact      decQuadToUInt32Exact
#define decFloatToWider            decQuadToWider
#define decFloatZero               decQuadZero

// Computational (result is a decFloat)
#define decFloatAbs                decQuadAbs
#define decFloatAdd                decQuadAdd
#define decFloatAnd                decQuadAnd
#define decFloatDivide             decQuadDivide
#define decFloatDivideInteger      decQuadDivideInteger
#define decFloatFMA                decQuadFMA
#define decFloatInvert             decQuadInvert
#define decFloatLogB               decQuadLogB
#define decFloatMax                decQuadMax
#define decFloatMaxMag             decQuadMaxMag
#define decFloatMin                decQuadMin
#define decFloatMinMag             decQuadMinMag
#define decFloatMinus              decQuadMinus
#define decFloatMultiply           decQuadMultiply
#define decFloatNextMinus          decQuadNextMinus
#define decFloatNextPlus           decQuadNextPlus
#define decFloatNextToward         decQuadNextToward
#define decFloatOr                 decQuadOr
#define decFloatPlus               decQuadPlus
#define decFloatQuantize           decQuadQuantize
#define decFloatReduce             decQuadReduce
#define decFloatRemainder          decQuadRemainder
#define decFloatRemainderNear      decQuadRemainderNear
#define decFloatRotate             decQuadRotate
#define decFloatScaleB             decQuadScaleB
#define decFloatShift              decQuadShift
#define decFloatSubtract           decQuadSubtract
#define decFloatToIntegralValue    decQuadToIntegralValue
#define decFloatToIntegralExact    decQuadToIntegralExact
#define decFloatXor                decQuadXor

// Comparisons
#define decFloatCompare            decQuadCompare
#define decFloatCompareSignal      decQuadCompareSignal
#define decFloatCompareTotal       decQuadCompareTotal
#define decFloatCompareTotalMag    decQuadCompareTotalMag

// Copies
#define decFloatCanonical          decQuadCanonical
#define decFloatCopy               decQuadCopy
#define decFloatCopyAbs            decQuadCopyAbs
#define decFloatCopyNegate         decQuadCopyNegate
#define decFloatCopySign           decQuadCopySign

// Non-computational
#define decFloatClass              decQuadClass
#define decFloatClassString        decQuadClassString
#define decFloatDigits             decQuadDigits
#define decFloatIsCanonical        decQuadIsCanonical
#define decFloatIsFinite           decQuadIsFinite
#define decFloatIsInfinite         decQuadIsInfinite
#define decFloatIsInteger          decQuadIsInteger
#define decFloatIsLogical          decQuadIsLogical
#define decFloatIsNaN              decQuadIsNaN
#define decFloatIsNegative         decQuadIsNegative
#define decFloatIsNormal           decQuadIsNormal
#define decFloatIsPositive         decQuadIsPositive
#define decFloatIsSignaling        decQuadIsSignaling
#define decFloatIsSignalling       decQuadIsSignalling
#define decFloatIsSigned           decQuadIsSigned
#define decFloatIsSubnormal        decQuadIsSubnormal
#define decFloatIsZero             decQuadIsZero
#define decFloatRadix              decQuadRadix
#define decFloatSameQuantum        decQuadSameQuantum
#define decFloatVersion            decQuadVersion

/* And now the code itself */
#include "decContext.h"       // public includes
#include "decQuad.h"          // ..
#include "decNumberLocal.h"   // local includes (need DECPMAX)
#include "decCommon.c"        // non-arithmetic decFloat routines
#include "decBasic.c"         // basic formats routines