2000-04-12 Mark Kettenis <kettenis@gnu.org>
authorMark Kettenis <kettenis@gnu.org>
Wed, 12 Apr 2000 00:22:56 +0000 (00:22 +0000)
committerMark Kettenis <kettenis@gnu.org>
Wed, 12 Apr 2000 00:22:56 +0000 (00:22 +0000)
* i387-tdep.c (print_i387_value): Avoid call to
floatformat_to_doublest if long double type is the same on host
and target.

gdb/ChangeLog
gdb/i387-tdep.c

index fe7f09ab8c1277f5e8624f55a6ee35b10c20578b..8a4824d4a5137cbba9b48dea362c09ce8ddfae6f 100644 (file)
@@ -1,3 +1,9 @@
+2000-04-12  Mark Kettenis  <kettenis@gnu.org>
+
+       * i387-tdep.c (print_i387_value): Avoid call to
+       floatformat_to_doublest if long double type is the same on host
+       and target.
+
 2000-04-11  Fernando Nasser  <fnasser@cygnus.com>
 
        * wrapper.h: Remove definitions of internal functions.
index 20e446d2ff43cd1bc831567779c280132b18f830..f887da95b2617a77819b380c9249f03dee225e29 100644 (file)
@@ -166,8 +166,21 @@ static void
 print_i387_value (char *raw)
 {
   DOUBLEST value;
-  
-  floatformat_to_doublest (&floatformat_i387_ext, raw, &value);
+
+  /* Avoid call to floatformat_to_doublest if possible to preserve as
+     much information as possible.  */
+
+#ifdef HAVE_LONG_DOUBLE
+  if (sizeof (value) == sizeof (long double)
+      && HOST_LONG_DOUBLE_FORMAT == &floatformat_i387_ext)
+    {
+      /* Copy straight over, but take care of the padding.  */
+      memcpy (&value, raw, FPU_REG_RAW_SIZE);
+      memset (&value + FPU_REG_RAW_SIZE, 0, sizeof (value) - FPU_REG_RAW_SIZE);
+    }
+  else
+#endif
+    floatformat_to_doublest (&floatformat_i387_ext, raw, &value);
 
   /* 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