vfieeefp.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include <ieeefp.h>
00033 #include <math.h>
00034 #include <float.h>
00035 #include <errno.h>
00036 #include <sys/config.h>
00037
00038 #ifdef __IEEE_LITTLE_ENDIAN
00039 #define IEEE_8087
00040 #endif
00041
00042 #ifdef __IEEE_BIG_ENDIAN
00043 #define IEEE_MC68k
00044 #endif
00045
00046 #ifdef __Z8000__
00047 #define Just_16
00048 #endif
00049
00050 #ifdef Unsigned_Shifts
00051 #define Sign_Extend(a,b) if (b < 0) a |= (__uint32_t)0xffff0000;
00052 #else
00053 #define Sign_Extend(a,b)
00054 #endif
00055
00056 #if defined(IEEE_8087) + defined(IEEE_MC68k) + defined(VAX) + defined(IBM) != 1
00057 Exactly one of IEEE_8087, IEEE_MC68k, VAX, or IBM should be defined.
00058 #endif
00059
00060 #ifdef WANT_IO_LONG_DBL
00061
00062
00063
00064
00065
00066 #ifdef IEEE_8087
00067 #if LDBL_MANT_DIG == 24
00068 struct ldieee
00069 {
00070 unsigned manh:23;
00071 unsigned exp:8;
00072 unsigned sign:1;
00073 };
00074 #elif LDBL_MANT_DIG == 53
00075 struct ldieee
00076 {
00077 unsigned manl:20;
00078 unsigned manh:32;
00079 unsigned exp:11;
00080 unsigned sign:1;
00081 };
00082 #elif LDBL_MANT_DIG == 64
00083 struct ldieee
00084 {
00085 unsigned manl:32;
00086 unsigned manh:32;
00087 unsigned exp:15;
00088 unsigned sign:1;
00089 };
00090 #elif LDBL_MANT_DIG > 64
00091 struct ldieee
00092 {
00093 unsigned manl3:16;
00094 unsigned manl2:32;
00095 unsigned manl:32;
00096 unsigned manh:32;
00097 unsigned exp:15;
00098 unsigned sign:1;
00099 };
00100 #endif
00101 #else
00102 #if LDBL_MANT_DIG == 24
00103 struct ldieee
00104 {
00105 unsigned sign:1;
00106 unsigned exp:8;
00107 unsigned manh:23;
00108 };
00109 #elif LDBL_MANT_DIG == 53
00110 struct ldieee
00111 {
00112 unsigned sign:1;
00113 unsigned exp:11;
00114 unsigned manh:32;
00115 unsigned manl:20;
00116 };
00117 #elif LDBL_MANT_DIG == 64
00118 struct ldieee
00119 {
00120 unsigned sign:1;
00121 unsigned exp:15;
00122 unsigned manh:32;
00123 unsigned manl:32;
00124 };
00125 #elif LDBL_MANT_DIG > 64
00126 struct ldieee
00127 {
00128 unsigned sign:1;
00129 unsigned exp:15;
00130 unsigned manh:32;
00131 unsigned manl:32;
00132 unsigned manl2:32;
00133 unsigned manl3;16;
00134 };
00135 #endif
00136 #endif
00137 #endif
00138
00139
00140
00141
00142
00143 union double_union
00144 {
00145 double d;
00146 __uint32_t i[2];
00147 };
00148
00149 #ifdef IEEE_8087
00150 #define word0(x) (x.i[1])
00151 #define word1(x) (x.i[0])
00152 #else
00153 #define word0(x) (x.i[0])
00154 #define word1(x) (x.i[1])
00155 #endif
00156
00157
00158
00159
00160
00161
00162
00163 #if defined(IEEE_8087) + defined(IEEE_MC68k)
00164 #if defined (_DOUBLE_IS_32BITS)
00165 #define Exp_shift 23
00166 #define Exp_shift1 23
00167 #define Exp_msk1 ((__uint32_t)0x00800000L)
00168 #define Exp_msk11 ((__uint32_t)0x00800000L)
00169 #define Exp_mask ((__uint32_t)0x7f800000L)
00170 #define P 24
00171 #define Bias 127
00172 #if 0
00173 #define IEEE_Arith
00174 #endif
00175 #define Emin (-126)
00176 #define Exp_1 ((__uint32_t)0x3f800000L)
00177 #define Exp_11 ((__uint32_t)0x3f800000L)
00178 #define Ebits 8
00179 #define Frac_mask ((__uint32_t)0x007fffffL)
00180 #define Frac_mask1 ((__uint32_t)0x007fffffL)
00181 #define Ten_pmax 10
00182 #define Sign_bit ((__uint32_t)0x80000000L)
00183 #define Ten_pmax 10
00184 #define Bletch 2
00185 #define Bndry_mask ((__uint32_t)0x007fffffL)
00186 #define Bndry_mask1 ((__uint32_t)0x007fffffL)
00187 #define LSB 1
00188 #define Sign_bit ((__uint32_t)0x80000000L)
00189 #define Log2P 1
00190 #define Tiny0 0
00191 #define Tiny1 1
00192 #define Quick_max 5
00193 #define Int_max 6
00194 #define Infinite(x) (word0(x) == ((__uint32_t)0x7f800000L))
00195 #undef word0
00196 #undef word1
00197
00198 #define word0(x) (x.i[0])
00199 #define word1(x) 0
00200 #else
00201
00202 #define Exp_shift 20
00203 #define Exp_shift1 20
00204 #define Exp_msk1 ((__uint32_t)0x100000L)
00205 #define Exp_msk11 ((__uint32_t)0x100000L)
00206 #define Exp_mask ((__uint32_t)0x7ff00000L)
00207 #define P 53
00208 #define Bias 1023
00209 #define IEEE_Arith
00210 #define Emin (-1022)
00211 #define Exp_1 ((__uint32_t)0x3ff00000L)
00212 #define Exp_11 ((__uint32_t)0x3ff00000L)
00213 #define Ebits 11
00214 #define Frac_mask ((__uint32_t)0xfffffL)
00215 #define Frac_mask1 ((__uint32_t)0xfffffL)
00216 #define Ten_pmax 22
00217 #define Bletch 0x10
00218 #define Bndry_mask ((__uint32_t)0xfffffL)
00219 #define Bndry_mask1 ((__uint32_t)0xfffffL)
00220 #define LSB 1
00221 #define Sign_bit ((__uint32_t)0x80000000L)
00222 #define Log2P 1
00223 #define Tiny0 0
00224 #define Tiny1 1
00225 #define Quick_max 14
00226 #define Int_max 14
00227 #define Infinite(x) (word0(x) == ((__uint32_t)0x7ff00000L))
00228 #endif
00229
00230 #else
00231 #undef Sudden_Underflow
00232 #define Sudden_Underflow
00233 #ifdef IBM
00234 #define Exp_shift 24
00235 #define Exp_shift1 24
00236 #define Exp_msk1 ((__uint32_t)0x1000000L)
00237 #define Exp_msk11 ((__uint32_t)0x1000000L)
00238 #define Exp_mask ((__uint32_t)0x7f000000L)
00239 #define P 14
00240 #define Bias 65
00241 #define Exp_1 ((__uint32_t)0x41000000L)
00242 #define Exp_11 ((__uint32_t)0x41000000L)
00243 #define Ebits 8
00244 #define Frac_mask ((__uint32_t)0xffffffL)
00245 #define Frac_mask1 ((__uint32_t)0xffffffL)
00246 #define Bletch 4
00247 #define Ten_pmax 22
00248 #define Bndry_mask ((__uint32_t)0xefffffL)
00249 #define Bndry_mask1 ((__uint32_t)0xffffffL)
00250 #define LSB 1
00251 #define Sign_bit ((__uint32_t)0x80000000L)
00252 #define Log2P 4
00253 #define Tiny0 ((__uint32_t)0x100000L)
00254 #define Tiny1 0
00255 #define Quick_max 14
00256 #define Int_max 15
00257 #else
00258 #define Exp_shift 23
00259 #define Exp_shift1 7
00260 #define Exp_msk1 0x80
00261 #define Exp_msk11 ((__uint32_t)0x800000L)
00262 #define Exp_mask ((__uint32_t)0x7f80L)
00263 #define P 56
00264 #define Bias 129
00265 #define Exp_1 ((__uint32_t)0x40800000L)
00266 #define Exp_11 ((__uint32_t)0x4080L)
00267 #define Ebits 8
00268 #define Frac_mask ((__uint32_t)0x7fffffL)
00269 #define Frac_mask1 ((__uint32_t)0xffff007fL)
00270 #define Ten_pmax 24
00271 #define Bletch 2
00272 #define Bndry_mask ((__uint32_t)0xffff007fL)
00273 #define Bndry_mask1 ((__uint32_t)0xffff007fL)
00274 #define LSB ((__uint32_t)0x10000L)
00275 #define Sign_bit ((__uint32_t)0x8000L)
00276 #define Log2P 1
00277 #define Tiny0 0x80
00278 #define Tiny1 0
00279 #define Quick_max 15
00280 #define Int_max 15
00281 #endif
00282 #endif
00283
00284