]>
Commit | Line | Data |
---|---|---|
1 | --- _hdtoa.c.orig 2006-01-31 15:21:41.000000000 -0800 | |
2 | +++ _hdtoa.c 2006-01-31 23:37:12.000000000 -0800 | |
3 | @@ -223,6 +223,10 @@ | |
4 | union IEEEl2bits u; | |
5 | char *s, *s0; | |
6 | int bufsize; | |
7 | +#ifdef LDBL_HEAD_TAIL_PAIR | |
8 | + uint32_t bits[4]; | |
9 | + int i, pos; | |
10 | +#endif /* LDBL_HEAD_TAIL_PAIR */ | |
11 | ||
12 | u.e = e; | |
13 | *sign = u.bits.sign; | |
14 | @@ -270,6 +274,19 @@ | |
15 | */ | |
16 | for (s = s0 + bufsize - 1; s > s0 + sigfigs - 1; s--) | |
17 | *s = 0; | |
18 | +#ifdef LDBL_HEAD_TAIL_PAIR | |
19 | + _ldbl2array32dd(u, bits); | |
20 | + i = 0; | |
21 | + pos = 8; | |
22 | + for (; s > s0; s--) { | |
23 | + *s = bits[i] & 0xf; | |
24 | + bits[i] >>= 4; | |
25 | + if (--pos <= 0) { | |
26 | + i++; | |
27 | + pos = 8; | |
28 | + } | |
29 | + } | |
30 | +#else /* LDBL_HEAD_TAIL_PAIR */ | |
31 | for (; s > s0 + sigfigs - (LDBL_MANL_SIZE / 4) - 1 && s > s0; s--) { | |
32 | *s = u.bits.manl & 0xf; | |
33 | u.bits.manl >>= 4; | |
34 | @@ -278,6 +295,7 @@ | |
35 | *s = u.bits.manh & 0xf; | |
36 | u.bits.manh >>= 4; | |
37 | } | |
38 | +#endif /* LDBL_HEAD_TAIL_PAIR */ | |
39 | ||
40 | /* | |
41 | * At this point, we have snarfed all the bits in the | |
42 | @@ -285,7 +303,11 @@ | |
43 | * (partial) nibble, which is dealt with by the next | |
44 | * statement. We also tack on the implicit normalization bit. | |
45 | */ | |
46 | +#ifdef LDBL_HEAD_TAIL_PAIR | |
47 | + *s = bits[i]; | |
48 | +#else /* LDBL_HEAD_TAIL_PAIR */ | |
49 | *s = u.bits.manh | (1U << ((LDBL_MANT_DIG - 1) % 4)); | |
50 | +#endif /* LDBL_HEAD_TAIL_PAIR */ | |
51 | ||
52 | /* If ndigits < 0, we are expected to auto-size the precision. */ | |
53 | if (ndigits < 0) { |