gdb/doublest.c: Use frexpl rather than ldfrexp.

Most modern systems have frexpl and gnulib provides an implementation
for those that don't, so use it instead of the generic but inaccurate
ldfrexp.

gdb/ChangeLog:

2013-06-21  Will Newton  <will.newton@linaro.org>

	* doublest.c (ldfrexp): Remove function.
	(convert_doublest_to_floatformat): Call frexpl instead of
	ldfrexp.
This commit is contained in:
Will Newton 2013-06-21 16:24:14 +00:00
parent 88b4890352
commit 85d3b769fc
2 changed files with 7 additions and 48 deletions

View File

@ -1,3 +1,9 @@
2013-06-21 Will Newton <will.newton@linaro.org>
* doublest.c (ldfrexp): Remove function.
(convert_doublest_to_floatformat): Call frexpl instead of
ldfrexp.
2013-06-21 Will Newton <will.newton@linaro.org>
* gnulib/update-gnulib.sh(IMPORTED_GNULIB_MODULES): Add frexpl.

View File

@ -336,53 +336,6 @@ put_field (unsigned char *data, enum floatformat_byteorders order,
}
}
#ifdef HAVE_LONG_DOUBLE
/* Return the fractional part of VALUE, and put the exponent of VALUE in *EPTR.
The range of the returned value is >= 0.5 and < 1.0. This is equivalent to
frexp, but operates on the long double data type. */
static long double ldfrexp (long double value, int *eptr);
static long double
ldfrexp (long double value, int *eptr)
{
long double tmp;
int exp;
/* Unfortunately, there are no portable functions for extracting the
exponent of a long double, so we have to do it iteratively by
multiplying or dividing by two until the fraction is between 0.5
and 1.0. */
if (value < 0.0l)
value = -value;
tmp = 1.0l;
exp = 0;
if (value >= tmp) /* Value >= 1.0 */
while (value >= tmp)
{
tmp *= 2.0l;
exp++;
}
else if (value != 0.0l) /* Value < 1.0 and > 0.0 */
{
while (value < tmp)
{
tmp /= 2.0l;
exp--;
}
tmp *= 2.0l;
exp++;
}
*eptr = exp;
return value / tmp;
}
#endif /* HAVE_LONG_DOUBLE */
/* The converse: convert the DOUBLEST *FROM to an extended float and
store where TO points. Neither FROM nor TO have any alignment
restrictions. */
@ -466,7 +419,7 @@ convert_doublest_to_floatformat (CONST struct floatformat *fmt,
}
#ifdef HAVE_LONG_DOUBLE
mant = ldfrexp (dfrom, &exponent);
mant = frexpl (dfrom, &exponent);
#else
mant = frexp (dfrom, &exponent);
#endif