* mips-tdep.c (mips_float_register_p): New function.

(mips_convert_register_float_case_p): Use mips_float_register_p.
	(mips_register_type): Likewise.
	(mips_print_register): Likewise.
	(print_gp_register_row): Likewise.
	(mips_print_registers_info): Likewise.
This commit is contained in:
Maciej W. Rozycki 2012-04-20 23:31:39 +00:00
parent 7f0e6aaed2
commit 004159a2dc
2 changed files with 28 additions and 14 deletions

View File

@ -1,3 +1,13 @@
2012-04-20 Nigel Stephens <nigel@mips.com>
Maciej W. Rozycki <macro@codesourcery.com>
* mips-tdep.c (mips_float_register_p): New function.
(mips_convert_register_float_case_p): Use mips_float_register_p.
(mips_register_type): Likewise.
(mips_print_register): Likewise.
(print_gp_register_row): Likewise.
(mips_print_registers_info): Likewise.
2012-04-20 Shun-Yen Lu <dark.asparagus@gmail.com>
* mips-tdep.c (mips_elf_make_msymbol_special): Fix identification

View File

@ -179,6 +179,18 @@ mips_fpa0_regnum (struct gdbarch *gdbarch)
return mips_regnum (gdbarch)->fp0 + 12;
}
/* Return 1 if REGNUM refers to a floating-point general register, raw
or cooked. Otherwise return 0. */
static int
mips_float_register_p (struct gdbarch *gdbarch, int regnum)
{
int rawnum = regnum % gdbarch_num_regs (gdbarch);
return (rawnum >= mips_regnum (gdbarch)->fp0
&& rawnum < mips_regnum (gdbarch)->fp0 + 32);
}
#define MIPS_EABI(gdbarch) (gdbarch_tdep (gdbarch)->mips_abi \
== MIPS_ABI_EABI32 \
|| gdbarch_tdep (gdbarch)->mips_abi == MIPS_ABI_EABI64)
@ -717,10 +729,7 @@ mips_convert_register_float_case_p (struct gdbarch *gdbarch, int regnum,
{
return (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG
&& register_size (gdbarch, regnum) == 4
&& (regnum % gdbarch_num_regs (gdbarch))
>= mips_regnum (gdbarch)->fp0
&& (regnum % gdbarch_num_regs (gdbarch))
< mips_regnum (gdbarch)->fp0 + 32
&& mips_float_register_p (gdbarch, regnum)
&& TYPE_CODE (type) == TYPE_CODE_FLT && TYPE_LENGTH (type) == 8);
}
@ -843,9 +852,7 @@ static struct type *
mips_register_type (struct gdbarch *gdbarch, int regnum)
{
gdb_assert (regnum >= 0 && regnum < 2 * gdbarch_num_regs (gdbarch));
if ((regnum % gdbarch_num_regs (gdbarch)) >= mips_regnum (gdbarch)->fp0
&& (regnum % gdbarch_num_regs (gdbarch))
< mips_regnum (gdbarch)->fp0 + 32)
if (mips_float_register_p (gdbarch, regnum))
{
/* The floating-point registers raw, or cooked, always match
mips_isa_regsize(), and also map 1:1, byte for byte. */
@ -4761,7 +4768,7 @@ mips_print_register (struct ui_file *file, struct frame_info *frame,
struct value_print_options opts;
struct value *val;
if (TYPE_CODE (register_type (gdbarch, regnum)) == TYPE_CODE_FLT)
if (mips_float_register_p (gdbarch, regnum))
{
mips_print_fp_register (file, frame, regnum);
return;
@ -4830,8 +4837,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
{
if (*gdbarch_register_name (gdbarch, regnum) == '\0')
continue; /* unused register */
if (TYPE_CODE (register_type (gdbarch, regnum)) ==
TYPE_CODE_FLT)
if (mips_float_register_p (gdbarch, regnum))
break; /* End the row: reached FP register. */
/* Large registers are handled separately. */
if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
@ -4870,8 +4876,7 @@ print_gp_register_row (struct ui_file *file, struct frame_info *frame,
{
if (*gdbarch_register_name (gdbarch, regnum) == '\0')
continue; /* unused register */
if (TYPE_CODE (register_type (gdbarch, regnum)) ==
TYPE_CODE_FLT)
if (mips_float_register_p (gdbarch, regnum))
break; /* End row: reached FP register. */
if (register_size (gdbarch, regnum) > mips_abi_regsize (gdbarch))
break; /* End row: large register. */
@ -4926,8 +4931,7 @@ mips_print_registers_info (struct gdbarch *gdbarch, struct ui_file *file,
while (regnum < gdbarch_num_regs (gdbarch)
+ gdbarch_num_pseudo_regs (gdbarch))
{
if (TYPE_CODE (register_type (gdbarch, regnum)) ==
TYPE_CODE_FLT)
if (mips_float_register_p (gdbarch, regnum))
{
if (all) /* True for "INFO ALL-REGISTERS" command. */
regnum = print_fp_register_row (file, frame, regnum);