This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA/i387] improve the output of 'info float'


Hi all,

However, I personally still favor this version.

Regards,
Michael

Mark Kettenis wrote:
Date: Sun, 3 Jan 2010 09:32:13 +0400
From: Joel Brobecker <brobecker@adacore.com>

Michael,

I changed the subject to something meaningful; you have a *much* higher
chance of attracting the eye of the appropriate maintainer if you use
descriptive subjects.

Yup. I didn't notice it. So either I didn't receive the origional mail or I deleted it immediately based on the subject. Can you send the diff again?

I will let Mark tell you whether he likes your change of output or not.
Personally, I liked the previous output better - much more compact
and easier to read, there are too many decorations in your proposed
output and it's harder to isolate the relevant information.

If you send your diff again, can you include an example of how the output looks? I must warn you that I'm likely to agree with Joel here though.


diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 188347f..d747e79 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,15 @@
+2010-01-02  Michael Baars  <development@codenamezero.org>
+
+	* i387-tdep.c:
+	    (print_i387_status_word): Adapted the output such that the least 
+	      significant bits appear at the right and added a more 
+	      comprehensive description of the flags involved.
+	    (print_i387_control_word): Adapted the output such that the least
+	      significant bits appear at the right.
+	    
+	    naming conventions are conform the intel i387 dx programmer's 
+	    reference manual (1989)
+
 2010-01-01  Jan Kratochvil  <jan.kratochvil@redhat.com>
 
 	* cli/cli-script.c (process_next_line): Rename p1 as p_end and p2 as
diff --git a/gdb/i387-tdep.c b/gdb/i387-tdep.c
index 3fb5b56..419eb02 100644
--- a/gdb/i387-tdep.c
+++ b/gdb/i387-tdep.c
@@ -113,85 +113,86 @@ print_i387_ext (struct gdbarch *gdbarch,
     fputs_filtered (" Unsupported", file);
 }
 
-/* Print the status word STATUS.  */
-
-static void
-print_i387_status_word (unsigned int status, struct ui_file *file)
+// Print the numeric coprocessor extension (npx) status word.
+static void print_i387_status_word (unsigned int status, struct ui_file *file)
 {
-  fprintf_filtered (file, "Status Word:         %s",
-		    hex_string_custom (status, 4));
-  fputs_filtered ("  ", file);
-  fprintf_filtered (file, " %s", (status & 0x0001) ? "IE" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0002) ? "DE" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0004) ? "ZE" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0008) ? "OE" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0010) ? "UE" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0020) ? "PE" : "  ");
-  fputs_filtered ("  ", file);
-  fprintf_filtered (file, " %s", (status & 0x0080) ? "ES" : "  ");
-  fputs_filtered ("  ", file);
-  fprintf_filtered (file, " %s", (status & 0x0040) ? "SF" : "  ");
-  fputs_filtered ("  ", file);
-  fprintf_filtered (file, " %s", (status & 0x0100) ? "C0" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0200) ? "C1" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x0400) ? "C2" : "  ");
-  fprintf_filtered (file, " %s", (status & 0x4000) ? "C3" : "  ");
+    fprintf_filtered (file, "status word              : %s\n", hex_string_custom(status, 4));
 
-  fputs_filtered ("\n", file);
+    fprintf_filtered (file, "  exception flags        : ");
 
-  fprintf_filtered (file,
-		    "                       TOP: %d\n", ((status >> 11) & 7));
-}
+    fprintf_filtered (file, "%s ", (status & 0x0020) ? "PE" : "  ");	// precision
+    fprintf_filtered (file, "%s ", (status & 0x0010) ? "UE" : "  ");	// underflow
+    fprintf_filtered (file, "%s ", (status & 0x0008) ? "OE" : "  ");	// overflow
+    fprintf_filtered (file, "%s ", (status & 0x0004) ? "ZE" : "  ");	// zero divice
+    fprintf_filtered (file, "%s ", (status & 0x0002) ? "DE" : "  ");	// denormalized operand
+    fprintf_filtered (file, "%s ", (status & 0x0001) ? "IE" : "  ");	// invalid operation
 
-/* Print the control word CONTROL.  */
+    fprintf_filtered (file, "\n");
 
-static void
-print_i387_control_word (unsigned int control, struct ui_file *file)
+    fprintf_filtered (file, "  stack fault            : %s\n", (status & 0x0040) ? "SF" : "  ");
+    fprintf_filtered (file, "  error summary status   : %s\n", (status & 0x0080) ? "ES" : "  ");
+
+    fprintf_filtered (file, "  condition code         : ");
+
+    fprintf_filtered (file, "%s ", (status & 0x4000) ? "C3" : "  ");
+    fprintf_filtered (file, "%s ", (status & 0x0400) ? "C2" : "  ");
+    fprintf_filtered (file, "%s ", (status & 0x0200) ? "C1" : "  ");
+    fprintf_filtered (file, "%s ", (status & 0x0100) ? "C0" : "  ");
+    fprintf_filtered (file, "\n");
+
+    fprintf_filtered (file, "  top of stack (TOP)     : %d\n", ((status >> 11) & 7));
+}
+
+// Print the numeric coprocessor extension (npx) control word.
+static void print_i387_control_word (unsigned int control, struct ui_file *file)
 {
-  fprintf_filtered (file, "Control Word:        %s",
-		    hex_string_custom (control, 4));
-  fputs_filtered ("  ", file);
-  fprintf_filtered (file, " %s", (control & 0x0001) ? "IM" : "  ");
-  fprintf_filtered (file, " %s", (control & 0x0002) ? "DM" : "  ");
-  fprintf_filtered (file, " %s", (control & 0x0004) ? "ZM" : "  ");
-  fprintf_filtered (file, " %s", (control & 0x0008) ? "OM" : "  ");
-  fprintf_filtered (file, " %s", (control & 0x0010) ? "UM" : "  ");
-  fprintf_filtered (file, " %s", (control & 0x0020) ? "PM" : "  ");
+    fprintf_filtered (file, "control word             : %s\n", hex_string_custom(control, 4));
 
-  fputs_filtered ("\n", file);
+    fprintf_filtered (file, "  exception masks        : ");
+
+    fprintf_filtered (file, "%s ", (control & 0x0020) ? "PM" : "  ");   // precision
+    fprintf_filtered (file, "%s ", (control & 0x0010) ? "UM" : "  ");   // underflow
+    fprintf_filtered (file, "%s ", (control & 0x0008) ? "OM" : "  ");   // overflow
+    fprintf_filtered (file, "%s ", (control & 0x0004) ? "ZM" : "  ");   // zero divide
+    fprintf_filtered (file, "%s ", (control & 0x0002) ? "DM" : "  ");   // denormalized operand
+    fprintf_filtered (file, "%s ", (control & 0x0001) ? "IM" : "  ");   // invalid operation
+
+    fprintf_filtered (file, "\n");
 
-  fputs_filtered ("                       PC: ", file);
-  switch ((control >> 8) & 3)
+    fprintf_filtered (file, "  precision control (PC) : ");
+
+    switch ((control >> 8) & 3)
     {
-    case 0:
-      fputs_filtered ("Single Precision (24-bits)\n", file);
-      break;
-    case 1:
-      fputs_filtered ("Reserved\n", file);
-      break;
-    case 2:
-      fputs_filtered ("Double Precision (53-bits)\n", file);
-      break;
-    case 3:
-      fputs_filtered ("Extended Precision (64-bits)\n", file);
-      break;
+	case 0:
+	    fprintf_filtered (file, "24-bits (single precision)\n");
+	    break;
+	case 1:
+	    fprintf_filtered (file, "(reserved)\n");
+	    break;
+	case 2:
+	    fprintf_filtered (file, "53-bits (double precision)\n");
+	    break;
+	case 3:
+	    fprintf_filtered (file, "64-bits (extended precision)\n");
+	    break;
     }
-      
-  fputs_filtered ("                       RC: ", file);
-  switch ((control >> 10) & 3)
+
+    fprintf_filtered (file, "  rounding control (RC)  : ");
+
+    switch ((control >> 10) & 3)
     {
-    case 0:
-      fputs_filtered ("Round to nearest\n", file);
-      break;
-    case 1:
-      fputs_filtered ("Round down\n", file);
-      break;
-    case 2:
-      fputs_filtered ("Round up\n", file);
-      break;
-    case 3:
-      fputs_filtered ("Round toward zero\n", file);
-      break;
+	case 0:
+	    fprintf_filtered (file, "round to nearest or even\n");
+	    break;
+	case 1:
+	    fprintf_filtered (file, "round down (towards -inf)\n");
+	    break;
+	case 2:
+	    fprintf_filtered (file, "round up (toward +inf)\n");
+	    break;
+	case 3:
+	    fprintf_filtered (file, "chop (truncate toward zero)\n");
+	    break;
     }
 }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]