Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/lib/libc/gdtoa Via enh at google dot com in tech-userlevel. ...



details:   https://anonhg.NetBSD.org/src/rev/c15e56148373
branches:  trunk
changeset: 971034:c15e56148373
user:      christos <christos%NetBSD.org@localhost>
date:      Sat Apr 11 20:28:28 2020 +0000

description:
Via enh at google dot com in tech-userlevel. Fix handling of
EXT_FRAC{H,L}BITS (although we don't need to since we don't have them).

diffstat:

 lib/libc/gdtoa/hdtoa.c |  25 ++++++++++++++++++-------
 1 files changed, 18 insertions(+), 7 deletions(-)

diffs (66 lines):

diff -r a7b2d9d68ac9 -r c15e56148373 lib/libc/gdtoa/hdtoa.c
--- a/lib/libc/gdtoa/hdtoa.c    Sat Apr 11 17:52:01 2020 +0000
+++ b/lib/libc/gdtoa/hdtoa.c    Sat Apr 11 20:28:28 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: hdtoa.c,v 1.9 2011/07/04 11:46:41 mrg Exp $    */
+/*     $NetBSD: hdtoa.c,v 1.10 2020/04/11 20:28:28 christos Exp $      */
 
 /*-
  * Copyright (c) 2004, 2005 David Schultz <das%FreeBSD.ORG@localhost>
@@ -30,7 +30,7 @@
 #if 0
 __FBSDID("$FreeBSD: src/lib/libc/gdtoa/_hdtoa.c,v 1.4 2007/01/03 04:57:58 das Exp $");
 #else
-__RCSID("$NetBSD: hdtoa.c,v 1.9 2011/07/04 11:46:41 mrg Exp $");
+__RCSID("$NetBSD: hdtoa.c,v 1.10 2020/04/11 20:28:28 christos Exp $");
 #endif
 
 #include <float.h>
@@ -310,23 +310,34 @@
         */
        for (s = s0 + bufsize - 1; s > s0 + sigfigs - 1; s--)
                *s = 0;
-       for (; s > s0 + sigfigs - (EXT_FRACLBITS / 4) - 1 && s > s0; s--) {
+       for (; s > s0 + sigfigs -
+           (EXT_FRACLBITS / 4) - 1 && s > s0; s--) {
                *s = u.extu_ext.ext_fracl & 0xf;
                u.extu_ext.ext_fracl >>= 4;
        }
 #ifdef EXT_FRACHMBITS
-       for (; s > s0; s--) {
+       for (; s > s0 + sigfigs - 
+           ((EXT_FRACLBITS + EXT_FRACHMBITS) / 4) - 1; s--) {
                *s = u.extu_ext.ext_frachm & 0xf;
                u.extu_ext.ext_frachm >>= 4;
        }
+#else
+#define EXT_FRACHMBITS 0
 #endif
+
 #ifdef EXT_FRACLMBITS
-       for (; s > s0; s--) {
+       for (; s > s0 + sigfigs -
+           ((EXT_FRACLBITS + EXT_FRACHMBITS + EXT_FRACLMBITS) / 4) - 1; s--) {
+
                *s = u.extu_ext.ext_fraclm & 0xf;
                u.extu_ext.ext_fraclm >>= 4;
        }
+#else
+#define EXT_FRACLMBITS 0
 #endif
-       for (; s > s0; s--) {
+
+       for (; s > s0 + sigfigs -
+           ((EXT_FRACLBITS + EXT_FRACHMBITS + EXT_FRACLMBITS + EXT_FRACHBITS) / 4) - 1; s--) {
                *s = u.extu_ext.ext_frach & 0xf;
                u.extu_ext.ext_frach >>= 4;
        }
@@ -337,7 +348,7 @@
         * (partial) nibble, which is dealt with by the next
         * statement.  We also tack on the implicit normalization bit.
         */
-       *s = u.extu_ext.ext_frach | (1U << ((LDBL_MANT_DIG - 1) % 4));
+       *s = (u.extu_ext.ext_frach | (1U << ((LDBL_MANT_DIG - 1) % 4))) 0xf;
 
        /* If ndigits < 0, we are expected to auto-size the precision. */
        if (ndigits < 0) {



Home | Main Index | Thread Index | Old Index