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