xref: /qemu/include/libdecnumber/dpd/decimal32.h (revision 0f2d3732202818fb85c09d1c204a08c4d79b70bc)
172ac97cdSTom Musta /* Decimal 32-bit format module header for the decNumber C Library.
272ac97cdSTom Musta    Copyright (C) 2005, 2007 Free Software Foundation, Inc.
372ac97cdSTom Musta    Contributed by IBM Corporation.  Author Mike Cowlishaw.
472ac97cdSTom Musta 
572ac97cdSTom Musta    This file is part of GCC.
672ac97cdSTom Musta 
772ac97cdSTom Musta    GCC is free software; you can redistribute it and/or modify it under
872ac97cdSTom Musta    the terms of the GNU General Public License as published by the Free
972ac97cdSTom Musta    Software Foundation; either version 2, or (at your option) any later
1072ac97cdSTom Musta    version.
1172ac97cdSTom Musta 
1272ac97cdSTom Musta    In addition to the permissions in the GNU General Public License,
1372ac97cdSTom Musta    the Free Software Foundation gives you unlimited permission to link
1472ac97cdSTom Musta    the compiled version of this file into combinations with other
1572ac97cdSTom Musta    programs, and to distribute those combinations without any
1672ac97cdSTom Musta    restriction coming from the use of this file.  (The General Public
1772ac97cdSTom Musta    License restrictions do apply in other respects; for example, they
1872ac97cdSTom Musta    cover modification of the file, and distribution when not linked
1972ac97cdSTom Musta    into a combine executable.)
2072ac97cdSTom Musta 
2172ac97cdSTom Musta    GCC is distributed in the hope that it will be useful, but WITHOUT ANY
2272ac97cdSTom Musta    WARRANTY; without even the implied warranty of MERCHANTABILITY or
2372ac97cdSTom Musta    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2472ac97cdSTom Musta    for more details.
2572ac97cdSTom Musta 
2672ac97cdSTom Musta    You should have received a copy of the GNU General Public License
2772ac97cdSTom Musta    along with GCC; see the file COPYING.  If not, write to the Free
2872ac97cdSTom Musta    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
2972ac97cdSTom Musta    02110-1301, USA.  */
3072ac97cdSTom Musta 
3172ac97cdSTom Musta /* ------------------------------------------------------------------ */
3272ac97cdSTom Musta /* Decimal 32-bit format module header				      */
3372ac97cdSTom Musta /* ------------------------------------------------------------------ */
3472ac97cdSTom Musta 
3572ac97cdSTom Musta #if !defined(DECIMAL32)
3672ac97cdSTom Musta   #define DECIMAL32
3772ac97cdSTom Musta   #define DEC32NAME	"decimal32"		      /* Short name   */
3872ac97cdSTom Musta   #define DEC32FULLNAME "Decimal 32-bit Number"	      /* Verbose name */
3972ac97cdSTom Musta   #define DEC32AUTHOR	"Mike Cowlishaw"	      /* Who to blame */
4072ac97cdSTom Musta 
4172ac97cdSTom Musta   /* parameters for decimal32s */
4272ac97cdSTom Musta   #define DECIMAL32_Bytes  4		/* length		      */
4372ac97cdSTom Musta   #define DECIMAL32_Pmax   7		/* maximum precision (digits) */
4472ac97cdSTom Musta   #define DECIMAL32_Emax   96		/* maximum adjusted exponent  */
4572ac97cdSTom Musta   #define DECIMAL32_Emin  -95		/* minimum adjusted exponent  */
4672ac97cdSTom Musta   #define DECIMAL32_Bias   101		/* bias for the exponent      */
4772ac97cdSTom Musta   #define DECIMAL32_String 15		/* maximum string length, +1  */
4872ac97cdSTom Musta   #define DECIMAL32_EconL  6		/* exp. continuation length   */
4972ac97cdSTom Musta   /* highest biased exponent (Elimit-1)				      */
5072ac97cdSTom Musta   #define DECIMAL32_Ehigh  (DECIMAL32_Emax+DECIMAL32_Bias-DECIMAL32_Pmax+1)
5172ac97cdSTom Musta 
5272ac97cdSTom Musta   /* check enough digits, if pre-defined			      */
5372ac97cdSTom Musta   #if defined(DECNUMDIGITS)
5472ac97cdSTom Musta     #if (DECNUMDIGITS<DECIMAL32_Pmax)
5572ac97cdSTom Musta       #error decimal32.h needs pre-defined DECNUMDIGITS>=7 for safe use
5672ac97cdSTom Musta     #endif
5772ac97cdSTom Musta   #endif
5872ac97cdSTom Musta 
5972ac97cdSTom Musta   #ifndef DECNUMDIGITS
6072ac97cdSTom Musta     #define DECNUMDIGITS DECIMAL32_Pmax /* size if not already defined*/
6172ac97cdSTom Musta   #endif
6272ac97cdSTom Musta   #ifndef DECNUMBER
63*0f2d3732STom Musta     #include "libdecnumber/decNumber.h"
6472ac97cdSTom Musta   #endif
6572ac97cdSTom Musta 
6672ac97cdSTom Musta   /* Decimal 32-bit type, accessible by bytes */
6772ac97cdSTom Musta   typedef struct {
6872ac97cdSTom Musta     uint8_t bytes[DECIMAL32_Bytes];	/* decimal32: 1, 5, 6, 20 bits*/
6972ac97cdSTom Musta     } decimal32;
7072ac97cdSTom Musta 
7172ac97cdSTom Musta   /* special values [top byte excluding sign bit; last two bits are   */
7272ac97cdSTom Musta   /* don't-care for Infinity on input, last bit don't-care for NaN]   */
7372ac97cdSTom Musta   #if !defined(DECIMAL_NaN)
7472ac97cdSTom Musta     #define DECIMAL_NaN	    0x7c	/* 0 11111 00 NaN	      */
7572ac97cdSTom Musta     #define DECIMAL_sNaN    0x7e	/* 0 11111 10 sNaN	      */
7672ac97cdSTom Musta     #define DECIMAL_Inf	    0x78	/* 0 11110 00 Infinity	      */
7772ac97cdSTom Musta   #endif
7872ac97cdSTom Musta 
7972ac97cdSTom Musta   /* ---------------------------------------------------------------- */
8072ac97cdSTom Musta   /* Routines							      */
8172ac97cdSTom Musta   /* ---------------------------------------------------------------- */
8272ac97cdSTom Musta 
8372ac97cdSTom Musta 
8472ac97cdSTom Musta   /* String conversions						      */
8572ac97cdSTom Musta   decimal32 * decimal32FromString(decimal32 *, const char *, decContext *);
8672ac97cdSTom Musta   char * decimal32ToString(const decimal32 *, char *);
8772ac97cdSTom Musta   char * decimal32ToEngString(const decimal32 *, char *);
8872ac97cdSTom Musta 
8972ac97cdSTom Musta   /* decNumber conversions					      */
9072ac97cdSTom Musta   decimal32 * decimal32FromNumber(decimal32 *, const decNumber *,
9172ac97cdSTom Musta 				  decContext *);
9272ac97cdSTom Musta   decNumber * decimal32ToNumber(const decimal32 *, decNumber *);
9372ac97cdSTom Musta 
9472ac97cdSTom Musta   /* Format-dependent utilities					      */
9572ac97cdSTom Musta   uint32_t    decimal32IsCanonical(const decimal32 *);
9672ac97cdSTom Musta   decimal32 * decimal32Canonical(decimal32 *, const decimal32 *);
9772ac97cdSTom Musta 
9872ac97cdSTom Musta #endif
99