From: ceriel Date: Mon, 3 Dec 1990 16:00:53 +0000 (+0000) Subject: Fixed con_float for non-IEEE machines X-Git-Tag: release-5-5~1366 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=17af2902ebcd54f7ea13cc9eaefe114f48c7b66f;p=ack.git Fixed con_float for non-IEEE machines --- diff --git a/mach/con_float b/mach/con_float index 19d1c4004..f8f1228e9 100644 --- a/mach/con_float +++ b/mach/con_float @@ -131,6 +131,37 @@ float_cst(str, sz, buf) e.flt_exp = 0; } } +#endif +#ifndef IEEEFLOAT + if (sz == 4 && (e.flt_mantissa.flt_h_32 & 0x80)) { + /* rounding */ + if ((e.flt_mantissa.flt_h_32 & 0xffffff00) == 0xffffff00) { + e.flt_exp++; + e.flt_mantissa.flt_h_32 = 0x80000000; + } + else { + e.flt_mantissa.flt_h_32 += 0x80; + } + } + if (sz == 8 && (e.flt_mantissa.flt_l_32 & 0x80)) { + /* rounding */ + if ((e.flt_mantissa.flt_l_32 & 0xffffff00) == 0xffffff00) { + e.flt_mantissa.flt_l_32 = 0; + if (e.flt_mantissa.flt_h_32 == 0xffffffff) { + e.flt_exp++; + e.flt_mantissa.flt_h_32 = 0x80000000; + } + else e.flt_mantissa.flt_h_32++; + } + else { + e.flt_mantissa.flt_l_32 += 0x80; + } + } + if (e.flt_exp > 255) { + overflow = 1; + e.flt_exp = 255; + e.flt_mantissa.flt_h_32 = e.flt_mantissa.flt_l_32 = 0xffffffff; + } #endif buf[I0] = (e.flt_sign << 7) | (e.flt_exp >> 1); buf[I1] = ((e.flt_exp&1) << 7) | @@ -157,10 +188,11 @@ float_cst(str, sz, buf) /* rounding */ if ((e.flt_mantissa.flt_l_32 & 0xfffff800) == 0xfffff800) { e.flt_mantissa.flt_l_32 = 0; - if ((e.flt_mantissa.flt_h_32 += 1) == 0) { + if (e.flt_mantissa.flt_h_32 == 0xffffffff) { e.flt_exp++; e.flt_mantissa.flt_h_32 = 0x80000000; } + else e.flt_mantissa.flt_h_32++; } else { e.flt_mantissa.flt_l_32 += 0x400;