]> git.ipfire.org Git - thirdparty/gcc.git/blame - libdecnumber/decNumberLocal.h
* decLibrary.c (__dec_byte_swap): Use uint32_t for argument and
[thirdparty/gcc.git] / libdecnumber / decNumberLocal.h
CommitLineData
e3f15eef 1/* decNumber package local type, tuning, and macro definitions.
2 Copyright (C) 2005 Free Software Foundation, Inc.
3 Contributed by IBM Corporation. Author Mike Cowlishaw.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING. If not, write to the Free
84d7eab9 19 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20 02110-1301, USA. */
e3f15eef 21
22/* ------------------------------------------------------------------ */
23/* This header file is included by all modules in the decNumber */
24/* library, and contains local type definitions, tuning parameters, */
25/* etc. It must only be included once, and should not need to be */
26/* used by application programs. decNumber.h must be included first. */
27/* ------------------------------------------------------------------ */
28
29#if !defined(DECNUMBERLOC)
30#define DECNUMBERLOC
31#define DECNLAUTHOR "Mike Cowlishaw" /* Who to blame */
32
33 /* Local names for common types -- decNumber modules do not use int or
34 long directly */
35#define Flag uint8_t
36#define Byte int8_t
37#define uByte uint8_t
38#define Short int16_t
39#define uShort uint16_t
40#define Int int32_t
41#define uInt uint32_t
42#define Unit decNumberUnit
43
44
45 /* Tuning parameter */
46#define DECBUFFER 36 /* Maximum size basis for local buffers. */
47 /* Should be a common maximum precision */
48 /* rounded up to a multiple of 4; must */
49 /* be non-negative. */
50
51 /* Conditional code flags -- set these to 0 for best performance */
52#define DECCHECK 0 /* 1 to enable robust checking */
53#define DECALLOC 0 /* 1 to enable memory allocation accounting */
54#define DECTRACE 0 /* 1 to trace critical intermediates, etc. */
55
56
57 /* Development use defines */
58#if DECALLOC
59 /* if these interfere with your C includes, just comment them out */
60#define int ? /* enable to ensure we do not use plain C */
61#define long ?? /* .. 'int' or 'long' types from here on */
62#endif
63
64 /* Limits and constants */
65#define DECNUMMAXP 999999999 /* maximum precision we can handle (9 digits) */
66#define DECNUMMAXE 999999999 /* maximum adjusted exponent ditto (9 digits) */
67#define DECNUMMINE -999999999 /* minimum adjusted exponent ditto (9 digits) */
68#if (DECNUMMAXP != DEC_MAX_DIGITS)
69#error Maximum digits mismatch
70#endif
71#if (DECNUMMAXE != DEC_MAX_EMAX)
72#error Maximum exponent mismatch
73#endif
74#if (DECNUMMINE != DEC_MIN_EMIN)
75#error Minimum exponent mismatch
76#endif
77
78 /* Set DECDPUNMAX -- the maximum integer that fits in DECDPUN digits */
79#if DECDPUN==1
80#define DECDPUNMAX 9
81#elif DECDPUN==2
82#define DECDPUNMAX 99
83#elif DECDPUN==3
84#define DECDPUNMAX 999
85#elif DECDPUN==4
86#define DECDPUNMAX 9999
87#elif DECDPUN==5
88#define DECDPUNMAX 99999
89#elif DECDPUN==6
90#define DECDPUNMAX 999999
91#elif DECDPUN==7
92#define DECDPUNMAX 9999999
93#elif DECDPUN==8
94#define DECDPUNMAX 99999999
95#elif DECDPUN==9
96#define DECDPUNMAX 999999999
97#elif defined(DECDPUN)
98#error DECDPUN must be in the range 1-9
99#endif
100
101
102 /* ----- Shared data ----- */
103 /* The powers of of ten array (powers[n]==10**n, 0<=n<=10) */
104extern const uInt powers[];
105
106 /* ----- Macros ----- */
107 /* ISZERO -- return true if decNumber dn is a zero */
108 /* [performance-critical in some situations] */
109#define ISZERO(dn) decNumberIsZero(dn) /* now just a local name */
110
111 /* X10 and X100 -- multiply integer i by 10 or 100 */
112 /* [shifts are usually faster than multiply; could be conditional] */
113#define X10(i) (((i)<<1)+((i)<<3))
114#define X100(i) (((i)<<2)+((i)<<5)+((i)<<6))
115
116 /* D2U -- return the number of Units needed to hold d digits */
117#if DECDPUN==8
118#define D2U(d) ((unsigned)((d)+7)>>3)
119#elif DECDPUN==4
120#define D2U(d) ((unsigned)((d)+3)>>2)
121#else
122#define D2U(d) (((d)+DECDPUN-1)/DECDPUN)
123#endif
124
125#else
126#error decNumberLocal included more than once
127#endif