166e63ce3Schristos /* decSingle module header for the decNumber C Library.
2*07163879Schristos    Copyright (C) 2005-2018 Free Software Foundation, Inc.
366e63ce3Schristos    Contributed by IBM Corporation.  Author Mike Cowlishaw.
466e63ce3Schristos 
566e63ce3Schristos    This file is part of GCC.
666e63ce3Schristos 
766e63ce3Schristos    GCC is free software; you can redistribute it and/or modify it under
866e63ce3Schristos    the terms of the GNU General Public License as published by the Free
966e63ce3Schristos    Software Foundation; either version 3, or (at your option) any later
1066e63ce3Schristos    version.
1166e63ce3Schristos 
1266e63ce3Schristos    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
1366e63ce3Schristos    WARRANTY; without even the implied warranty of MERCHANTABILITY or
1466e63ce3Schristos    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1566e63ce3Schristos    for more details.
1666e63ce3Schristos 
1766e63ce3Schristos Under Section 7 of GPL version 3, you are granted additional
1866e63ce3Schristos permissions described in the GCC Runtime Library Exception, version
1966e63ce3Schristos 3.1, as published by the Free Software Foundation.
2066e63ce3Schristos 
2166e63ce3Schristos You should have received a copy of the GNU General Public License and
2266e63ce3Schristos a copy of the GCC Runtime Library Exception along with this program;
2366e63ce3Schristos see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
2466e63ce3Schristos <http://www.gnu.org/licenses/>.  */
2566e63ce3Schristos 
2666e63ce3Schristos /* ------------------------------------------------------------------ */
2766e63ce3Schristos /* decSingle.h -- Decimal 32-bit format module header		      */
2866e63ce3Schristos /* ------------------------------------------------------------------ */
2966e63ce3Schristos 
3066e63ce3Schristos #if !defined(DECSINGLE)
3166e63ce3Schristos   #define DECSINGLE
3266e63ce3Schristos 
3366e63ce3Schristos   #define DECSINGLENAME       "decSingle"	      /* Short name   */
3466e63ce3Schristos   #define DECSINGLETITLE      "Decimal 32-bit datum"  /* Verbose name */
3566e63ce3Schristos   #define DECSINGLEAUTHOR     "Mike Cowlishaw"	      /* Who to blame */
3666e63ce3Schristos 
3766e63ce3Schristos   /* parameters for decSingles */
3866e63ce3Schristos   #define DECSINGLE_Bytes    4	   /* length			      */
3966e63ce3Schristos   #define DECSINGLE_Pmax     7	   /* maximum precision (digits)      */
4066e63ce3Schristos   #define DECSINGLE_Emin   -95	   /* minimum adjusted exponent       */
4166e63ce3Schristos   #define DECSINGLE_Emax    96	   /* maximum adjusted exponent       */
4266e63ce3Schristos   #define DECSINGLE_EmaxD    3	   /* maximum exponent digits	      */
4366e63ce3Schristos   #define DECSINGLE_Bias   101	   /* bias for the exponent	      */
4466e63ce3Schristos   #define DECSINGLE_String  16	   /* maximum string length, +1       */
4566e63ce3Schristos   #define DECSINGLE_EconL    6	   /* exponent continuation length    */
4666e63ce3Schristos   #define DECSINGLE_Declets  2	   /* count of declets		      */
4766e63ce3Schristos   /* highest biased exponent (Elimit-1) */
4866e63ce3Schristos   #define DECSINGLE_Ehigh (DECSINGLE_Emax + DECSINGLE_Bias - (DECSINGLE_Pmax-1))
4966e63ce3Schristos 
5066e63ce3Schristos   /* Required includes						      */
5166e63ce3Schristos   #include "decContext.h"
5266e63ce3Schristos   #include "decQuad.h"
5366e63ce3Schristos   #include "decDouble.h"
5466e63ce3Schristos 
5566e63ce3Schristos   /* The decSingle decimal 32-bit type, accessible by all sizes */
5666e63ce3Schristos   typedef union {
5766e63ce3Schristos     uint8_t   bytes[DECSINGLE_Bytes];	/* fields: 1, 5, 6, 20 bits */
5866e63ce3Schristos     uint16_t shorts[DECSINGLE_Bytes/2];
5966e63ce3Schristos     uint32_t  words[DECSINGLE_Bytes/4];
6066e63ce3Schristos     } decSingle;
6166e63ce3Schristos 
6266e63ce3Schristos   /* ---------------------------------------------------------------- */
6366e63ce3Schristos   /* Routines -- implemented as decFloat routines in common files     */
6466e63ce3Schristos   /* ---------------------------------------------------------------- */
6566e63ce3Schristos 
6666e63ce3Schristos   #include "decSingleSymbols.h"
6766e63ce3Schristos 
6866e63ce3Schristos   /* Utilities (binary argument(s) or result, extractors, etc.) */
6966e63ce3Schristos   extern decSingle * decSingleFromBCD(decSingle *, int32_t, const uint8_t *, int32_t);
7066e63ce3Schristos   extern decSingle * decSingleFromPacked(decSingle *, int32_t, const uint8_t *);
7166e63ce3Schristos   extern decSingle * decSingleFromPackedChecked(decSingle *, int32_t, const uint8_t *);
7266e63ce3Schristos   extern decSingle * decSingleFromString(decSingle *, const char *, decContext *);
7366e63ce3Schristos   extern decSingle * decSingleFromWider(decSingle *, const decDouble *, decContext *);
7466e63ce3Schristos   extern int32_t     decSingleGetCoefficient(const decSingle *, uint8_t *);
7566e63ce3Schristos   extern int32_t     decSingleGetExponent(const decSingle *);
7666e63ce3Schristos   extern decSingle * decSingleSetCoefficient(decSingle *, const uint8_t *, int32_t);
7766e63ce3Schristos   extern decSingle * decSingleSetExponent(decSingle *, decContext *, int32_t);
7866e63ce3Schristos   extern void	     decSingleShow(const decSingle *, const char *);
7966e63ce3Schristos   extern int32_t     decSingleToBCD(const decSingle *, int32_t *, uint8_t *);
8066e63ce3Schristos   extern char	   * decSingleToEngString(const decSingle *, char *);
8166e63ce3Schristos   extern int32_t     decSingleToPacked(const decSingle *, int32_t *, uint8_t *);
8266e63ce3Schristos   extern char	   * decSingleToString(const decSingle *, char *);
8366e63ce3Schristos   extern decDouble * decSingleToWider(const decSingle *, decDouble *);
8466e63ce3Schristos   extern decSingle * decSingleZero(decSingle *);
8566e63ce3Schristos 
8666e63ce3Schristos   /* (No Arithmetic routines for decSingle) */
8766e63ce3Schristos 
8866e63ce3Schristos   /* Non-computational */
8966e63ce3Schristos   extern uint32_t     decSingleRadix(const decSingle *);
9066e63ce3Schristos   extern const char * decSingleVersion(void);
9166e63ce3Schristos 
9266e63ce3Schristos   /* decNumber conversions; these are implemented as macros so as not  */
9366e63ce3Schristos   /* to force a dependency on decimal32 and decNumber in decSingle.    */
9466e63ce3Schristos   /* decSingleFromNumber returns a decimal32 * to avoid warnings.      */
9566e63ce3Schristos   #define decSingleToNumber(dq, dn) decimal32ToNumber((decimal32 *)(dq), dn)
9666e63ce3Schristos   #define decSingleFromNumber(dq, dn, set) decimal32FromNumber((decimal32 *)(dq), dn, set)
9766e63ce3Schristos 
9866e63ce3Schristos #endif
99