aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/generic/printf_fphex.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/generic/printf_fphex.c')
-rw-r--r--sysdeps/generic/printf_fphex.c64
1 files changed, 4 insertions, 60 deletions
diff --git a/sysdeps/generic/printf_fphex.c b/sysdeps/generic/printf_fphex.c
index 9e9fd07dfc..53e3254286 100644
--- a/sysdeps/generic/printf_fphex.c
+++ b/sysdeps/generic/printf_fphex.c
@@ -106,8 +106,8 @@ __printf_fphex (FILE *fp,
const char *special = NULL;
/* Buffer for the generated number string for the mantissa. The
- maximal size for the mantissa is 64 bits. */
- char numbuf[16];
+ maximal size for the mantissa is 128 bits. */
+ char numbuf[32];
char *numstr;
char *numend;
int negative;
@@ -229,8 +229,6 @@ __printf_fphex (FILE *fp,
return done;
}
- /* We are handling here only 64 and 80 bit IEEE foating point
- numbers. */
if (info->is_long_double == 0 || sizeof (double) == sizeof (long double))
{
/* We have 52 bits of mantissa plus one implicit digit. Since
@@ -281,64 +279,10 @@ __printf_fphex (FILE *fp,
exponent = -(exponent - IEEE754_DOUBLE_BIAS);
}
}
+#ifdef PRINT_FPHEX_LONG_DOUBLE
else
- {
- /* The "strange" 80 bit format on ix86 and m68k has an explicit
- leading digit in the 64 bit mantissa. */
- unsigned long long int num;
-
- assert (sizeof (long double) == 12);
-
- num = (((unsigned long long int) fpnum.ldbl.ieee.mantissa0) << 32
- | fpnum.ldbl.ieee.mantissa1);
-
- zero_mantissa = num == 0;
-
- if (sizeof (unsigned long int) > 6)
- numstr = _itoa_word (num, numbuf + sizeof numbuf, 16,
- info->spec == 'A');
- else
- numstr = _itoa (num, numbuf + sizeof numbuf, 16, info->spec == 'A');
-
- /* Fill with zeroes. */
- while (numstr > numbuf + (sizeof numbuf - 64 / 4))
- *--numstr = '0';
-
- /* We use a full nibble for the leading digit. */
- leading = *numstr++;
-
- /* We have 3 bits from the mantissa in the leading nibble.
- Therefore we are here using `IEEE854_LONG_DOUBLE_BIAS + 3'. */
- exponent = fpnum.ldbl.ieee.exponent;
-
- if (exponent == 0)
- {
- if (zero_mantissa)
- expnegative = 0;
- else
- {
- /* This is a denormalized number. */
- expnegative = 1;
- /* This is a hook for the m68k long double format, where the
- exponent bias is the same for normalized and denormalized
- numbers. */
-#ifndef LONG_DOUBLE_DENORM_BIAS
-# define LONG_DOUBLE_DENORM_BIAS (IEEE854_LONG_DOUBLE_BIAS - 1)
+ PRINT_FPHEX_LONG_DOUBLE;
#endif
- exponent = LONG_DOUBLE_DENORM_BIAS + 3;
- }
- }
- else if (exponent >= IEEE854_LONG_DOUBLE_BIAS + 3)
- {
- expnegative = 0;
- exponent -= IEEE854_LONG_DOUBLE_BIAS + 3;
- }
- else
- {
- expnegative = 1;
- exponent = -(exponent - (IEEE854_LONG_DOUBLE_BIAS + 3));
- }
- }
/* Look for trailing zeroes. */
if (! zero_mantissa)