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

Michael
2010-01-04T18:47:19Z

[-- Attachment #1: Type: text/plain, Size: 1001 bytes --]

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.
>
>

[-- Attachment #2: gdb2.diff --]
[-- Type: text/x-patch, Size: 7115 bytes --]

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;
}
}