* i387-tdep.c (print_i387_value): Use extract_typed_floating to
authorMark Kettenis <kettenis@gnu.org>
Sun, 28 Oct 2001 14:07:35 +0000 (14:07 +0000)
committerMark Kettenis <kettenis@gnu.org>
Sun, 28 Oct 2001 14:07:35 +0000 (14:07 +0000)
convert RAW to a DOUBLEST instead of extract_floating.

gdb/ChangeLog
gdb/i387-tdep.c

index 87761f7857425bea93cfba64d4aecfe62a034a48..fad9d4a6a4bc1709d87e1726dcb8fce7707cc36a 100644 (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.
 
index 5842c004f62309737f8d8d063b4449aa7ccfc2b8..bb69b808453d259c85497ff547d36190546d08f8 100644 (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
This page took 0.030006 seconds and 4 git commands to generate.