OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [libdecnumber/] [decNumber.h] - Diff between revs 154 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 154 Rev 816
/* Decimal Number module header for the decNumber C Library
/* Decimal Number module header for the decNumber C Library
   Copyright (C) 2005 Free Software Foundation, Inc.
   Copyright (C) 2005 Free Software Foundation, Inc.
   Contributed by IBM Corporation.  Author Mike Cowlishaw.
   Contributed by IBM Corporation.  Author Mike Cowlishaw.
 
 
   This file is part of GCC.
   This file is part of GCC.
 
 
   GCC is free software; you can redistribute it and/or modify it under
   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
   the terms of the GNU General Public License as published by the Free
   Software Foundation; either version 2, or (at your option) any later
   Software Foundation; either version 2, or (at your option) any later
   version.
   version.
 
 
   In addition to the permissions in the GNU General Public License,
   In addition to the permissions in the GNU General Public License,
   the Free Software Foundation gives you unlimited permission to link
   the Free Software Foundation gives you unlimited permission to link
   the compiled version of this file into combinations with other
   the compiled version of this file into combinations with other
   programs, and to distribute those combinations without any
   programs, and to distribute those combinations without any
   restriction coming from the use of this file.  (The General Public
   restriction coming from the use of this file.  (The General Public
   License restrictions do apply in other respects; for example, they
   License restrictions do apply in other respects; for example, they
   cover modification of the file, and distribution when not linked
   cover modification of the file, and distribution when not linked
   into a combine executable.)
   into a combine executable.)
 
 
   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
   GCC is distributed in the hope that it will be useful, but WITHOUT ANY
   WARRANTY; without even the implied warranty of MERCHANTABILITY or
   WARRANTY; without even the implied warranty of MERCHANTABILITY or
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
   for more details.
   for more details.
 
 
   You should have received a copy of the GNU General Public License
   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
   along with GCC; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
   02110-1301, USA.  */
   02110-1301, USA.  */
 
 
#if !defined(DECNUMBER)
#if !defined(DECNUMBER)
#define DECNUMBER
#define DECNUMBER
#define DECNAME     "decNumber" /* Short name */
#define DECNAME     "decNumber" /* Short name */
#define DECVERSION  "decNumber 3.24"    /* Version [16 max.] */
#define DECVERSION  "decNumber 3.24"    /* Version [16 max.] */
#define DECFULLNAME "Decimal Number Module"     /* Verbose name */
#define DECFULLNAME "Decimal Number Module"     /* Verbose name */
#define DECAUTHOR   "Mike Cowlishaw"    /* Who to blame */
#define DECAUTHOR   "Mike Cowlishaw"    /* Who to blame */
 
 
#if !defined(DECCONTEXT)
#if !defined(DECCONTEXT)
#include "decContext.h"
#include "decContext.h"
#endif
#endif
 
 
 
 
  /* Bit settings for decNumber.bits */
  /* Bit settings for decNumber.bits */
#define DECNEG    0x80          /* Sign; 1=negative, 0=positive or zero */
#define DECNEG    0x80          /* Sign; 1=negative, 0=positive or zero */
#define DECINF    0x40          /* 1=Infinity */
#define DECINF    0x40          /* 1=Infinity */
#define DECNAN    0x20          /* 1=NaN */
#define DECNAN    0x20          /* 1=NaN */
#define DECSNAN   0x10          /* 1=sNaN */
#define DECSNAN   0x10          /* 1=sNaN */
  /* The remaining bits are reserved; they must be 0 */
  /* The remaining bits are reserved; they must be 0 */
#define DECSPECIAL (DECINF|DECNAN|DECSNAN)      /* any special value */
#define DECSPECIAL (DECINF|DECNAN|DECSNAN)      /* any special value */
 
 
  /* DECNUMDIGITS is the default number of digits we can hold in the */
  /* DECNUMDIGITS is the default number of digits we can hold in the */
  /* structure.  If undefined, 1 is assumed and it is assumed that the */
  /* structure.  If undefined, 1 is assumed and it is assumed that the */
  /* structure will be immediately followed by extra space (if */
  /* structure will be immediately followed by extra space (if */
  /* required).  DECNUMDIGITS is always >0. */
  /* required).  DECNUMDIGITS is always >0. */
#if !defined(DECNUMDIGITS)
#if !defined(DECNUMDIGITS)
#define DECNUMDIGITS 1
#define DECNUMDIGITS 1
#endif
#endif
 
 
 
 
  /* Define the decNumber data structure.  The size and shape of the */
  /* Define the decNumber data structure.  The size and shape of the */
  /* units array in the structure is determined by the following */
  /* units array in the structure is determined by the following */
  /* constant.  This must not be changed without recompiling the */
  /* constant.  This must not be changed without recompiling the */
  /* decNumber library modules. */
  /* decNumber library modules. */
#define DECDPUN 4               /* Decimal Digits Per UNit [must be in */
#define DECDPUN 4               /* Decimal Digits Per UNit [must be in */
                                   /* range 1-9; power of 2 recommended]. */
                                   /* range 1-9; power of 2 recommended]. */
  /* The size (integer data type) of each unit is determined by the */
  /* The size (integer data type) of each unit is determined by the */
  /* number of digits it will hold. */
  /* number of digits it will hold. */
#if   DECDPUN<=2
#if   DECDPUN<=2
#define decNumberUnit uint8_t
#define decNumberUnit uint8_t
#elif DECDPUN<=4
#elif DECDPUN<=4
#define decNumberUnit uint16_t
#define decNumberUnit uint16_t
#else
#else
#define decNumberUnit uint32_t
#define decNumberUnit uint32_t
#endif
#endif
  /* The number of decNumberUnits we need is ceiling of DECNUMDIGITS/DECDPUN */
  /* The number of decNumberUnits we need is ceiling of DECNUMDIGITS/DECDPUN */
#define DECNUMUNITS ((DECNUMDIGITS+DECDPUN-1)/DECDPUN)
#define DECNUMUNITS ((DECNUMDIGITS+DECDPUN-1)/DECDPUN)
 
 
  /* The data structure... */
  /* The data structure... */
typedef struct
typedef struct
{
{
  int32_t digits;               /* Count of digits in the coefficient; >0 */
  int32_t digits;               /* Count of digits in the coefficient; >0 */
  int32_t exponent;             /* Unadjusted exponent, unbiased, in */
  int32_t exponent;             /* Unadjusted exponent, unbiased, in */
  /* range: -1999999997 through 999999999 */
  /* range: -1999999997 through 999999999 */
  uint8_t bits;                 /* Indicator bits (see above) */
  uint8_t bits;                 /* Indicator bits (see above) */
  decNumberUnit lsu[DECNUMUNITS];       /* Coefficient, from least significant unit */
  decNumberUnit lsu[DECNUMUNITS];       /* Coefficient, from least significant unit */
} decNumber;
} decNumber;
 
 
  /* Notes: */
  /* Notes: */
  /* 1. If digits is > DECDPUN then there will be more than one */
  /* 1. If digits is > DECDPUN then there will be more than one */
  /*    decNumberUnits immediately following the first element of lsu. */
  /*    decNumberUnits immediately following the first element of lsu. */
  /*    These contain the remaining (more significant) digits of the */
  /*    These contain the remaining (more significant) digits of the */
  /*    number, and may be in the lsu array, or may be guaranteed by */
  /*    number, and may be in the lsu array, or may be guaranteed by */
  /*    some other mechanism (such as being contained in another */
  /*    some other mechanism (such as being contained in another */
  /*    structure, or being overlaid on dynamically allocated storage). */
  /*    structure, or being overlaid on dynamically allocated storage). */
  /* */
  /* */
  /*    Each integer of the coefficient (except the possibly the last) */
  /*    Each integer of the coefficient (except the possibly the last) */
  /*    contains DECDPUN digits (e.g., a value in the range 0 through */
  /*    contains DECDPUN digits (e.g., a value in the range 0 through */
  /*    99999999 if DECDPUN is 8, or 0 through 9999 if DECDPUN is 4). */
  /*    99999999 if DECDPUN is 8, or 0 through 9999 if DECDPUN is 4). */
  /* */
  /* */
  /* 2. A decNumber converted to a string may need up to digits+14 */
  /* 2. A decNumber converted to a string may need up to digits+14 */
  /*    characters.  The worst cases (non-exponential and exponential */
  /*    characters.  The worst cases (non-exponential and exponential */
  /*    formats) are: -0.00000{9...}# */
  /*    formats) are: -0.00000{9...}# */
  /*             and: -9.{9...}E+999999999#   (where # is '\0') */
  /*             and: -9.{9...}E+999999999#   (where # is '\0') */
 
 
 
 
  /* ------------------------------------------------------------------ */
  /* ------------------------------------------------------------------ */
  /* decNumber public functions and macros                              */
  /* decNumber public functions and macros                              */
  /* ------------------------------------------------------------------ */
  /* ------------------------------------------------------------------ */
 
 
#ifdef IN_LIBGCC2
#ifdef IN_LIBGCC2
#define decNumberFromString __decNumberFromString
#define decNumberFromString __decNumberFromString
#define decNumberToString __decNumberToString
#define decNumberToString __decNumberToString
#define decNumberToEngString __decNumberToEngString
#define decNumberToEngString __decNumberToEngString
#define decNumberAbs __decNumberAbs
#define decNumberAbs __decNumberAbs
#define decNumberAdd __decNumberAdd
#define decNumberAdd __decNumberAdd
#define decNumberCompare __decNumberCompare
#define decNumberCompare __decNumberCompare
#define decNumberDivide __decNumberDivide
#define decNumberDivide __decNumberDivide
#define decNumberDivideInteger __decNumberDivideInteger
#define decNumberDivideInteger __decNumberDivideInteger
#define decNumberMax __decNumberMax
#define decNumberMax __decNumberMax
#define decNumberMin __decNumberMin
#define decNumberMin __decNumberMin
#define decNumberMinus __decNumberMinus
#define decNumberMinus __decNumberMinus
#define decNumberMultiply __decNumberMultiply
#define decNumberMultiply __decNumberMultiply
#define decNumberNormalize __decNumberNormalize
#define decNumberNormalize __decNumberNormalize
#define decNumberPlus __decNumberPlus
#define decNumberPlus __decNumberPlus
#define decNumberPower __decNumberPower
#define decNumberPower __decNumberPower
#define decNumberQuantize __decNumberQuantize
#define decNumberQuantize __decNumberQuantize
#define decNumberRemainder __decNumberRemainder
#define decNumberRemainder __decNumberRemainder
#define decNumberRemainderNear __decNumberRemainderNear
#define decNumberRemainderNear __decNumberRemainderNear
#define decNumberRescale __decNumberRescale
#define decNumberRescale __decNumberRescale
#define decNumberSameQuantum __decNumberSameQuantum
#define decNumberSameQuantum __decNumberSameQuantum
#define decNumberSquareRoot __decNumberSquareRoot
#define decNumberSquareRoot __decNumberSquareRoot
#define decNumberSubtract __decNumberSubtract
#define decNumberSubtract __decNumberSubtract
#define decNumberToIntegralValue __decNumberToIntegralValue
#define decNumberToIntegralValue __decNumberToIntegralValue
#define decNumberCopy __decNumberCopy
#define decNumberCopy __decNumberCopy
#define decNumberTrim __decNumberTrim
#define decNumberTrim __decNumberTrim
#define decNumberVersion __decNumberVersion
#define decNumberVersion __decNumberVersion
#define decNumberZero __decNumberZero
#define decNumberZero __decNumberZero
#endif
#endif
 
 
  /* Conversions */
  /* Conversions */
 
 
/* The following two functions are copied from later versions, since  */
/* The following two functions are copied from later versions, since  */
/* they are needed by GDB which shares this library.                  */
/* they are needed by GDB which shares this library.                  */
 
 
decNumber *decNumberFromInt32(decNumber *, int32_t);
decNumber *decNumberFromInt32(decNumber *, int32_t);
decNumber *decNumberFromUInt32(decNumber *, uint32_t);
decNumber *decNumberFromUInt32(decNumber *, uint32_t);
 
 
decNumber *decNumberFromString (decNumber *, const char *, decContext *);
decNumber *decNumberFromString (decNumber *, const char *, decContext *);
char *decNumberToString (const decNumber *, char *);
char *decNumberToString (const decNumber *, char *);
char *decNumberToEngString (const decNumber *, char *);
char *decNumberToEngString (const decNumber *, char *);
 
 
  /* Operators */
  /* Operators */
decNumber *decNumberAbs (decNumber *, const decNumber *, decContext *);
decNumber *decNumberAbs (decNumber *, const decNumber *, decContext *);
decNumber *decNumberAdd (decNumber *, const decNumber *,
decNumber *decNumberAdd (decNumber *, const decNumber *,
                         const decNumber *, decContext *);
                         const decNumber *, decContext *);
decNumber *decNumberCompare (decNumber *, const decNumber *,
decNumber *decNumberCompare (decNumber *, const decNumber *,
                             const decNumber *, decContext *);
                             const decNumber *, decContext *);
decNumber *decNumberDivide (decNumber *, const decNumber *,
decNumber *decNumberDivide (decNumber *, const decNumber *,
                            const decNumber *, decContext *);
                            const decNumber *, decContext *);
decNumber *decNumberDivideInteger (decNumber *, const decNumber *,
decNumber *decNumberDivideInteger (decNumber *, const decNumber *,
                                   const decNumber *, decContext *);
                                   const decNumber *, decContext *);
decNumber *decNumberMax (decNumber *, const decNumber *,
decNumber *decNumberMax (decNumber *, const decNumber *,
                         const decNumber *, decContext *);
                         const decNumber *, decContext *);
decNumber *decNumberMin (decNumber *, const decNumber *,
decNumber *decNumberMin (decNumber *, const decNumber *,
                         const decNumber *, decContext *);
                         const decNumber *, decContext *);
decNumber *decNumberMinus (decNumber *, const decNumber *, decContext *);
decNumber *decNumberMinus (decNumber *, const decNumber *, decContext *);
decNumber *decNumberMultiply (decNumber *, const decNumber *,
decNumber *decNumberMultiply (decNumber *, const decNumber *,
                              const decNumber *, decContext *);
                              const decNumber *, decContext *);
decNumber *decNumberNormalize (decNumber *, const decNumber *, decContext *);
decNumber *decNumberNormalize (decNumber *, const decNumber *, decContext *);
decNumber *decNumberPlus (decNumber *, const decNumber *, decContext *);
decNumber *decNumberPlus (decNumber *, const decNumber *, decContext *);
decNumber *decNumberPower (decNumber *, const decNumber *,
decNumber *decNumberPower (decNumber *, const decNumber *,
                           const decNumber *, decContext *);
                           const decNumber *, decContext *);
decNumber *decNumberQuantize (decNumber *, const decNumber *,
decNumber *decNumberQuantize (decNumber *, const decNumber *,
                              const decNumber *, decContext *);
                              const decNumber *, decContext *);
decNumber *decNumberRemainder (decNumber *, const decNumber *,
decNumber *decNumberRemainder (decNumber *, const decNumber *,
                               const decNumber *, decContext *);
                               const decNumber *, decContext *);
decNumber *decNumberRemainderNear (decNumber *, const decNumber *,
decNumber *decNumberRemainderNear (decNumber *, const decNumber *,
                                   const decNumber *, decContext *);
                                   const decNumber *, decContext *);
decNumber *decNumberRescale (decNumber *, const decNumber *,
decNumber *decNumberRescale (decNumber *, const decNumber *,
                             const decNumber *, decContext *);
                             const decNumber *, decContext *);
decNumber *decNumberSameQuantum (decNumber *, const decNumber *, const decNumber *);
decNumber *decNumberSameQuantum (decNumber *, const decNumber *, const decNumber *);
decNumber *decNumberSquareRoot (decNumber *, const decNumber *, decContext *);
decNumber *decNumberSquareRoot (decNumber *, const decNumber *, decContext *);
decNumber *decNumberSubtract (decNumber *, const decNumber *,
decNumber *decNumberSubtract (decNumber *, const decNumber *,
                              const decNumber *, decContext *);
                              const decNumber *, decContext *);
decNumber *decNumberToIntegralValue (decNumber *, const decNumber *, decContext *);
decNumber *decNumberToIntegralValue (decNumber *, const decNumber *, decContext *);
 
 
  /* Utilities */
  /* Utilities */
decNumber *decNumberCopy (decNumber *, const decNumber *);
decNumber *decNumberCopy (decNumber *, const decNumber *);
decNumber *decNumberTrim (decNumber *);
decNumber *decNumberTrim (decNumber *);
const char *decNumberVersion (void);
const char *decNumberVersion (void);
decNumber *decNumberZero (decNumber *);
decNumber *decNumberZero (decNumber *);
 
 
  /* Macros */
  /* Macros */
#define decNumberIsZero(dn)     (*(dn)->lsu==0 \
#define decNumberIsZero(dn)     (*(dn)->lsu==0 \
                                   && (dn)->digits==1 \
                                   && (dn)->digits==1 \
                                   && (((dn)->bits&DECSPECIAL)==0))
                                   && (((dn)->bits&DECSPECIAL)==0))
#define decNumberIsNegative(dn) (((dn)->bits&DECNEG)!=0)
#define decNumberIsNegative(dn) (((dn)->bits&DECNEG)!=0)
#define decNumberIsNaN(dn)      (((dn)->bits&(DECNAN|DECSNAN))!=0)
#define decNumberIsNaN(dn)      (((dn)->bits&(DECNAN|DECSNAN))!=0)
#define decNumberIsInfinite(dn) (((dn)->bits&DECINF)!=0)
#define decNumberIsInfinite(dn) (((dn)->bits&DECINF)!=0)
 
 
#endif
#endif
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.