OSDN Git Service

Regenerate tree using Autoconf 2.64 and Automake 1.11.
[pf3gnuchains/gcc-fork.git] / libdecnumber / decContext.h
index f80d03c..ae0ca07 100644 (file)
@@ -1,32 +1,27 @@
 /* Decimal context header module for the decNumber C Library.
 /* Decimal context header module for the decNumber C Library.
-   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2005, 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
    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 2, or (at your option) any later
+   Software Foundation; either version 3, or (at your option) any later
    version.
 
    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.
 
    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.  */
+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/>.  */
 
 /* ------------------------------------------------------------------ */
 /* Decimal Context module header                                     */
 
 /* ------------------------------------------------------------------ */
 /* Decimal Context module header                                     */
@@ -34,7 +29,7 @@
 /*                                                                   */
 /* Context variables must always have valid values:                  */
 /*                                                                   */
 /*                                                                   */
 /* Context variables must always have valid values:                  */
 /*                                                                   */
-/*  status   -- [any bits may be cleared, but not set, by user]              */
+/*  status   -- [any bits may be cleared, but not set, by user]       */
 /*  round    -- must be one of the enumerated rounding modes         */
 /*                                                                   */
 /* The following variables are implied for fixed size formats (i.e.,  */
 /*  round    -- must be one of the enumerated rounding modes         */
 /*                                                                   */
 /* The following variables are implied for fixed size formats (i.e.,  */
   #define DECCONTEXT
   #define DECCNAME     "decContext"                    /* Short name */
   #define DECCFULLNAME "Decimal Context Descriptor"   /* Verbose name */
   #define DECCONTEXT
   #define DECCNAME     "decContext"                    /* Short name */
   #define DECCFULLNAME "Decimal Context Descriptor"   /* Verbose name */
-  #define DECCAUTHOR   "Mike Cowlishaw"                      /* Who to blame */
+  #define DECCAUTHOR   "Mike Cowlishaw"              /* Who to blame */
 
   #include "gstdint.h"            /* C99 standard integers           */
   #include <stdio.h>              /* for printf, etc.                */
 
   #include "gstdint.h"            /* C99 standard integers           */
   #include <stdio.h>              /* for printf, etc.                */
-  #include <signal.h>             /* for traps                       */
+  #include <signal.h>             /* for traps                       */
 
   /* Extended flags setting -- set this to 0 to use only IEEE flags   */
 
   /* Extended flags setting -- set this to 0 to use only IEEE flags   */
+  #if !defined(DECEXTFLAG)
   #define DECEXTFLAG 1            /* 1=enable extended flags         */
   #define DECEXTFLAG 1            /* 1=enable extended flags         */
+  #endif
 
   /* Conditional code flag -- set this to 0 for best performance      */
 
   /* Conditional code flag -- set this to 0 for best performance      */
+  #if !defined(DECSUBSET)
   #define DECSUBSET  0            /* 1=enable subset arithmetic      */
   #define DECSUBSET  0            /* 1=enable subset arithmetic      */
+  #endif
 
   /* Context for operations, with associated constants               */
   enum rounding {
     DEC_ROUND_CEILING,            /* round towards +infinity         */
 
   /* Context for operations, with associated constants               */
   enum rounding {
     DEC_ROUND_CEILING,            /* round towards +infinity         */
-    DEC_ROUND_UP,                 /* round away from 0               */
+    DEC_ROUND_UP,                 /* round away from 0               */
     DEC_ROUND_HALF_UP,            /* 0.5 rounds up                   */
     DEC_ROUND_HALF_EVEN,          /* 0.5 rounds to nearest even      */
     DEC_ROUND_HALF_DOWN,          /* 0.5 rounds down                 */
     DEC_ROUND_DOWN,               /* round towards 0 (truncate)      */
     DEC_ROUND_FLOOR,              /* round towards -infinity         */
     DEC_ROUND_HALF_UP,            /* 0.5 rounds up                   */
     DEC_ROUND_HALF_EVEN,          /* 0.5 rounds to nearest even      */
     DEC_ROUND_HALF_DOWN,          /* 0.5 rounds down                 */
     DEC_ROUND_DOWN,               /* round towards 0 (truncate)      */
     DEC_ROUND_FLOOR,              /* round towards -infinity         */
-    DEC_ROUND_05UP,               /* round for reround               */
+    DEC_ROUND_05UP,               /* round for reround               */
     DEC_ROUND_MAX                 /* enum must be less than this     */
     };
   #define DEC_ROUND_DEFAULT DEC_ROUND_HALF_EVEN;
 
   typedef struct {
     DEC_ROUND_MAX                 /* enum must be less than this     */
     };
   #define DEC_ROUND_DEFAULT DEC_ROUND_HALF_EVEN;
 
   typedef struct {
-    int32_t  digits;              /* working precision               */
-    int32_t  emax;                /* maximum positive exponent       */
-    int32_t  emin;                /* minimum negative exponent       */
+    int32_t  digits;              /* working precision               */
+    int32_t  emax;                /* maximum positive exponent       */
+    int32_t  emin;                /* minimum negative exponent       */
     enum     rounding round;      /* rounding mode                   */
     uint32_t traps;               /* trap-enabler flags              */
     uint32_t status;              /* status flags                    */
     enum     rounding round;      /* rounding mode                   */
     uint32_t traps;               /* trap-enabler flags              */
     uint32_t status;              /* status flags                    */
   #define DEC_MIN_EMIN -999999999
   #define DEC_MAX_MATH     999999 /* max emax, etc., for math funcs. */
 
   #define DEC_MIN_EMIN -999999999
   #define DEC_MAX_MATH     999999 /* max emax, etc., for math funcs. */
 
-  /* Classifications for decimal numbers, aligned with 754r (note     */
-  /* that 'normal' and 'subnormal' are meaningful only with a        */
-  /* decContext or a fixed size format).                             */
+  /* Classifications for decimal numbers, aligned with 754 (note that */
+  /* 'normal' and 'subnormal' are meaningful only with a decContext   */
+  /* or a fixed size format).                                        */
   enum decClass {
     DEC_CLASS_SNAN,
     DEC_CLASS_QNAN,
   enum decClass {
     DEC_CLASS_SNAN,
     DEC_CLASS_QNAN,
     #define DEC_Division_impossible  0x00000004
     #define DEC_Division_undefined   0x00000008
     #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */
     #define DEC_Division_impossible  0x00000004
     #define DEC_Division_undefined   0x00000008
     #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */
-    #define DEC_Inexact                     0x00000020
-    #define DEC_Invalid_context             0x00000040
+    #define DEC_Inexact             0x00000020
+    #define DEC_Invalid_context      0x00000040
     #define DEC_Invalid_operation    0x00000080
     #if DECSUBSET
     #define DEC_Lost_digits         0x00000100
     #endif
     #define DEC_Overflow            0x00000200
     #define DEC_Invalid_operation    0x00000080
     #if DECSUBSET
     #define DEC_Lost_digits         0x00000100
     #endif
     #define DEC_Overflow            0x00000200
-    #define DEC_Clamped                     0x00000400
-    #define DEC_Rounded                     0x00000800
+    #define DEC_Clamped             0x00000400
+    #define DEC_Rounded             0x00000800
     #define DEC_Subnormal           0x00001000
     #define DEC_Underflow           0x00002000
   #else
     #define DEC_Subnormal           0x00001000
     #define DEC_Underflow           0x00002000
   #else
     #define DEC_Division_impossible  0x00000010
     #define DEC_Division_undefined   0x00000010
     #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */
     #define DEC_Division_impossible  0x00000010
     #define DEC_Division_undefined   0x00000010
     #define DEC_Insufficient_storage 0x00000010 /* [when malloc fails] */
-    #define DEC_Inexact                     0x00000001
-    #define DEC_Invalid_context             0x00000010
+    #define DEC_Inexact             0x00000001
+    #define DEC_Invalid_context      0x00000010
     #define DEC_Invalid_operation    0x00000010
     #if DECSUBSET
     #define DEC_Lost_digits         0x00000000
     #endif
     #define DEC_Overflow            0x00000008
     #define DEC_Invalid_operation    0x00000010
     #if DECSUBSET
     #define DEC_Lost_digits         0x00000000
     #endif
     #define DEC_Overflow            0x00000008
-    #define DEC_Clamped                     0x00000000
-    #define DEC_Rounded                     0x00000000
+    #define DEC_Clamped             0x00000000
+    #define DEC_Rounded             0x00000000
     #define DEC_Subnormal           0x00000000
     #define DEC_Underflow           0x00000004
   #endif
 
     #define DEC_Subnormal           0x00000000
     #define DEC_Underflow           0x00000004
   #endif
 
-  /* IEEE 854 groupings for the flags                                */
+  /* IEEE 754 groupings for the flags                                */
   /* [DEC_Clamped, DEC_Lost_digits, DEC_Rounded, and DEC_Subnormal    */
   /* [DEC_Clamped, DEC_Lost_digits, DEC_Rounded, and DEC_Subnormal    */
-  /* are not in IEEE 854]                                            */
-  #define DEC_IEEE_854_Division_by_zero         (DEC_Division_by_zero)
+  /* are not in IEEE 754]                                            */
+  #define DEC_IEEE_754_Division_by_zero  (DEC_Division_by_zero)
   #if DECSUBSET
   #if DECSUBSET
-  #define DEC_IEEE_854_Inexact          (DEC_Inexact | DEC_Lost_digits)
+  #define DEC_IEEE_754_Inexact          (DEC_Inexact | DEC_Lost_digits)
   #else
   #else
-  #define DEC_IEEE_854_Inexact          (DEC_Inexact)
+  #define DEC_IEEE_754_Inexact          (DEC_Inexact)
   #endif
   #endif
-  #define DEC_IEEE_854_Invalid_operation (DEC_Conversion_syntax |     \
+  #define DEC_IEEE_754_Invalid_operation (DEC_Conversion_syntax |     \
                                          DEC_Division_impossible |   \
                                          DEC_Division_undefined |    \
                                          DEC_Insufficient_storage |  \
                                          DEC_Division_impossible |   \
                                          DEC_Division_undefined |    \
                                          DEC_Insufficient_storage |  \
-                                         DEC_Invalid_context |       \
+                                         DEC_Invalid_context |       \
                                          DEC_Invalid_operation)
                                          DEC_Invalid_operation)
-  #define DEC_IEEE_854_Overflow                 (DEC_Overflow)
-  #define DEC_IEEE_854_Underflow        (DEC_Underflow)
+  #define DEC_IEEE_754_Overflow         (DEC_Overflow)
+  #define DEC_IEEE_754_Underflow        (DEC_Underflow)
 
   /* flags which are normally errors (result is qNaN, infinite, or 0) */
 
   /* flags which are normally errors (result is qNaN, infinite, or 0) */
-  #define DEC_Errors (DEC_IEEE_854_Division_by_zero |                \
-                     DEC_IEEE_854_Invalid_operation |                \
-                     DEC_IEEE_854_Overflow | DEC_IEEE_854_Underflow)
+  #define DEC_Errors (DEC_IEEE_754_Division_by_zero |                \
+                     DEC_IEEE_754_Invalid_operation |                \
+                     DEC_IEEE_754_Overflow | DEC_IEEE_754_Underflow)
   /* flags which cause a result to become qNaN                       */
   /* flags which cause a result to become qNaN                       */
-  #define DEC_NaNs    DEC_IEEE_854_Invalid_operation
+  #define DEC_NaNs    DEC_IEEE_754_Invalid_operation
 
   /* flags which are normally for information only (finite results)   */
   #if DECSUBSET
 
   /* flags which are normally for information only (finite results)   */
   #if DECSUBSET
   #define DEC_Information (DEC_Clamped | DEC_Rounded | DEC_Inexact)
   #endif
 
   #define DEC_Information (DEC_Clamped | DEC_Rounded | DEC_Inexact)
   #endif
 
+  /* IEEE 854 names (for compatibility with older decNumber versions) */
+  #define DEC_IEEE_854_Division_by_zero  DEC_IEEE_754_Division_by_zero
+  #define DEC_IEEE_854_Inexact          DEC_IEEE_754_Inexact
+  #define DEC_IEEE_854_Invalid_operation DEC_IEEE_754_Invalid_operation
+  #define DEC_IEEE_854_Overflow         DEC_IEEE_754_Overflow
+  #define DEC_IEEE_854_Underflow        DEC_IEEE_754_Underflow
+
   /* Name strings for the exceptional conditions                     */
   #define DEC_Condition_CS "Conversion syntax"
   #define DEC_Condition_DZ "Division by zero"
   /* Name strings for the exceptional conditions                     */
   #define DEC_Condition_CS "Conversion syntax"
   #define DEC_Condition_DZ "Division by zero"
                                   /* including terminator            */
 
   /* Initialization descriptors, used by decContextDefault           */
                                   /* including terminator            */
 
   /* Initialization descriptors, used by decContextDefault           */
-  #define DEC_INIT_BASE                0
+  #define DEC_INIT_BASE        0
   #define DEC_INIT_DECIMAL32   32
   #define DEC_INIT_DECIMAL64   64
   #define DEC_INIT_DECIMAL128 128
   #define DEC_INIT_DECIMAL32   32
   #define DEC_INIT_DECIMAL64   64
   #define DEC_INIT_DECIMAL128 128
 
   #include "decContextSymbols.h"
 
 
   #include "decContextSymbols.h"
 
+  #ifdef __cplusplus
+  extern "C" {
+  #endif
+
   extern decContext  * decContextClearStatus(decContext *, uint32_t);
   extern decContext  * decContextDefault(decContext *, int32_t);
   extern enum rounding decContextGetRounding(decContext *);
   extern decContext  * decContextClearStatus(decContext *, uint32_t);
   extern decContext  * decContextDefault(decContext *, int32_t);
   extern enum rounding decContextGetRounding(decContext *);
   extern decContext  * decContextSetStatusFromStringQuiet(decContext *, const char *);
   extern decContext  * decContextSetStatusQuiet(decContext *, uint32_t);
   extern const char  * decContextStatusToString(const decContext *);
   extern decContext  * decContextSetStatusFromStringQuiet(decContext *, const char *);
   extern decContext  * decContextSetStatusQuiet(decContext *, uint32_t);
   extern const char  * decContextStatusToString(const decContext *);
+  extern int32_t       decContextTestEndian(uint8_t);
   extern uint32_t      decContextTestSavedStatus(uint32_t, uint32_t);
   extern uint32_t      decContextTestStatus(decContext *, uint32_t);
   extern decContext  * decContextZeroStatus(decContext *);
 
   extern uint32_t      decContextTestSavedStatus(uint32_t, uint32_t);
   extern uint32_t      decContextTestStatus(decContext *, uint32_t);
   extern decContext  * decContextZeroStatus(decContext *);
 
+  #ifdef __cplusplus
+  }
+  #endif
+
 #endif
 #endif