* i387-tdep.c (print_i387_value): Use extract_typed_floating to

convert RAW to a DOUBLEST instead of extract_floating.
This commit is contained in:
Mark Kettenis 2001-10-28 14:07:35 +00:00
parent e371b258f8
commit 4583280ca5
2 changed files with 8 additions and 18 deletions

View File

@ -1,5 +1,8 @@
2001-10-28 Mark Kettenis <kettenis@gnu.org>
* i387-tdep.c (print_i387_value): Use extract_typed_floating to
convert RAW to a DOUBLEST instead of extract_floating.
* gdbtypes.c (_initialize_gdbtypes): Set floating-point type for
builtin_type_i387_ext to floatformat_i387_ext.

View File

@ -165,25 +165,12 @@ static void
print_i387_value (char *raw)
{
DOUBLEST value;
int len = TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT;
char *tmp = alloca (len);
/* This code only works on targets where ... */
gdb_assert (TARGET_LONG_DOUBLE_FORMAT == &floatformat_i387_ext);
/* Take care of the padding. FP reg is 80 bits. The same value in
memory is 96 bits. */
gdb_assert (FPU_REG_RAW_SIZE < len);
memcpy (tmp, raw, FPU_REG_RAW_SIZE);
memset (tmp + FPU_REG_RAW_SIZE, 0, len - FPU_REG_RAW_SIZE);
/* Extract the value as a DOUBLEST. */
/* Use extract_floating() rather than floatformat_to_doublest().
The latter is lossy in nature. Once GDB gets a host/target
independent and non-lossy FP it will become possible to bypass
extract_floating() and call floatformat*() directly. Note also
the assumptions about TARGET_LONG_DOUBLE above. */
value = extract_floating (tmp, len);
/* Using extract_typed_floating here might affect the representation
of certain numbers such as NaNs, even if GDB is running natively.
This is fine since our caller already detects such special
numbers and we print the hexadecimal representation anyway. */
value = extract_typed_floating (raw, builtin_type_i387_ext);
/* We try to print 19 digits. The last digit may or may not contain
garbage, but we'd better print one too many. We need enough room