Re: [patch/rfc] Don't include vector registers in ``info registers''

Elena Zannoni
2002-08-09T02:07:33Z

Ah, compare with what the rs6000-tdep.c has:
rs6000_do_registers_info().

I made the same change, but also added a skipping of the print of a
single vector register in decimal, it was taking up too much screen
real estate.

/* If not a vector register, print it also in decimal. */
if (!altivec_register_p (i))
{
printf_filtered ("\t");
val_print (REGISTER_VIRTUAL_TYPE (i), virtual_buffer, 0, 0,
gdb_stdout, 0, 1, 0, Val_pretty_default);
}

I also did something different: defining altivec_register_p(). I was
envisioning this predicate becoming an architecture method called
vector_register_p().

Another thing I've done in rs6000-tdep.c is the 'info vector' command
(even though it is called 'info altivec').

I'll be submitting shortly another powerpc variation (the e500) which
has vector registers, so I generalized things a bit in that file, wrt
vector registers.

Elena

Andrew Cagney writes:
> [With patch]
>
>
> > Hello,
> >
> > The attached patch modifies the generic ``info registsters'' command so that it precludes vector registers (in addition to floating-point registers). The online doco indicates:
> >
> > (gdb) help info registers
> > List of integer registers and their contents, for selected stack frame.
> > Register name as argument means describe only that register.
> > (gdb) help info all-registers
> > List of all registers and their contents, for selected stack frame.
> > Register name as argument means describe only that register.
> >
> > I think the change makes the behavour a better match for both the documentation and what I think is the intent of the command. Print a minimal set of registers.
> >
> > It will eventually affect the i386 -- I've a patch to change the type of xmm [and mmx] registers to true vectors. When that is in, ``info registers'' will stop displaying the xmm registers.
> >
> > Thoughts?
> >
> > enjoy,
> > Andrew
>
> 2002-08-08 Andrew Cagney <cagney@redhat.com>
>
> * infcmd.c (do_registers_info): Rename parameter ``fpregs'' to
> ``print_all''. Only print vector registers when ``print_all''.
>
> Index: infcmd.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/infcmd.c,v
> retrieving revision 1.49
> diff -u -r1.49 infcmd.c
> --- infcmd.c 3 Jul 2002 20:36:54 -0000 1.49
> +++ infcmd.c 8 Aug 2002 21:14:22 -0000
> @@ -1549,9 +1549,9 @@
> #ifdef REGISTER_NAMES
> char *gdb_register_names[] = REGISTER_NAMES;
> #endif
> -/* Print out the machine register regnum. If regnum is -1,
> - print all registers (fpregs == 1) or all non-float registers
> - (fpregs == 0).
> +/* Print out the machine register regnum. If regnum is -1, print all
> + registers (all == 1) or all non-float and non-vector registers (all
> + == 0).
>
> For most machines, having all_registers_info() print the
> register(s) one per line is good enough. If a different format
> @@ -1561,7 +1561,7 @@
> to provide that format. */
>
> void
> -do_registers_info (int regnum, int fpregs)
> +do_registers_info (int regnum, int print_all)
> {
> register int i;
> int numregs = NUM_REGS + NUM_PSEUDO_REGS;
> @@ -1570,11 +1570,17 @@
>
> for (i = 0; i < numregs; i++)
> {
> - /* Decide between printing all regs, nonfloat regs, or specific reg. */
> + /* Decide between printing all regs, non-float / vector regs, or
> + specific reg. */
> if (regnum == -1)
> {
> - if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT && !fpregs)
> - continue;
> + if (!print_all)
> + {
> + if (TYPE_CODE (REGISTER_VIRTUAL_TYPE (i)) == TYPE_CODE_FLT)
> + continue;
> + if (TYPE_VECTOR (REGISTER_VIRTUAL_TYPE (i)))
> + continue;
> + }
> }
> else
> {