OSDN Git Service

* decNumber.c (__NO_STRING_INLINES): Define to prevent glibc macro
[pf3gnuchains/gcc-fork.git] / libdecnumber / decNumberLocal.h
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
19    Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
20    02110-1301, USA.  */
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) */
104 extern 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