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