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