This is the mail archive of the
binutils@sourceware.cygnus.com
mailing list for the binutils project.
Re: PATCH: minor hppa disasm cleanup
- To: law@cygnus.com
- Subject: Re: PATCH: minor hppa disasm cleanup
- From: "Jerry Quinn" <jquinn@nortelnetworks.com>
- Date: Wed, 16 Jun 1999 16:03:02 -0400
- CC: binutils@sourceware.cygnus.com
- Organization: Nortel Technology
- References: <1127.929431269@upchuck.cygnus.com>
Jeffrey A Law wrote:
>
> In message <199906011505.LAA08672@wmtl249c.us.nortel.com>you write:
> > In the pa disassembler, the 'E' code is always used for 0x0C opcodes
> > where only left register halves occur. So the L/R selection bit at 25
> > is always 0 and the test isn't required.
> >
> > This is patched against 990413, since I can't use cvs to update my
> > snapshot (restrictive firewall) and this is the last one I have.
> >
> > Changelog entry:
> >
> > Tue Jun 1 11:03:02 EDT 1999 Jerry Quinn <jquinn@nortelnetworks.com>
> >
> > * hppa-dis.c (print_insn_hppa): Remove unnecessary test in 'E'
> > code.
> Is this really correct? Consider xmpyu, fmpyfadd & fmpynfadd, none of which
> are 0xc opcodes, but all use 'E'
I think the 'E' code in these three instructions is incorrect. The
disassembler considers E to be 6:10,25 while J is 6:10,24. In the
assembler, the templates with 'J' are never used at all. Instead, the
template with 'E' detects if there is an R float reg and then flips the
opcode from 0xc to 0xe. It just happens that that opcode flip is safe
and does nothing for these three instructions.
My feeling for how it should work is that E is a left half float reg
code only. When that fails, the compiler would try to use the J
template and succeed. Also, the change from pa10 to pa11 could be
handled by the J templates being pa11 while E templates are pa10.
If that sounds OK, I'll see if I can find some time to reorganize the
code.
Jerry
--
Jerry Quinn Tel: (514) 761-8737
jquinn@nortelnetworks.com Fax: (514) 761-8505
Speech Recognition Research