|
@@ -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;
|