RFA fix conversion of little-byte big-word floats to doublest
Sat Dec 4 16:57:00 GMT 2004
On Sat, Dec 04, 2004 at 03:46:24PM +0000, Richard Earnshaw wrote:
> On Sat, 04 Dec 2004 10:44:30 EST, Daniel Jacobowitz <email@example.com>
> > On Sat, Dec 04, 2004 at 02:38:00PM +0000, Richard Earnshaw wrote:
> > >
> > > This patch fixes a bug in get_field which meant that we incorrectly
> > > converted mixed-endian floats (ARM FPA style) into the internal doublest
> > > format. This short change fixes over 300 testsuite failures in a combined
> > > arm/thumb testsuite run on arm-elf.
> > >
> > > * doublest.c (get_field): Correctly extract floatformat_littebyte_bigwo
> > rd
> > > fields.
> > >
> > > OK?
> > Could you summarize for me how this is supposed to work? This means
> > that get_field treats littlebyte_bigword exactly the same as little.
> > There's another copy of get_field in libiberty (I don't know why there
> > are two) which treats it exactly the same as big, instead. I don't
> > know how that works either, but it seems the two ought to agree.
> The caller has pre-converted the word order into a pure little-endian
> format. See convert_format_to_doublest.
> Similar tricks are played on the reverse conversion.
Huh; it looks like the copy in libiberty is just broken for this case.
Is the code which does the swapping correct for the 96-bit format?
It converts ABCD EFGH IJKL to EFGH ABCD IJKL; I would have guessed that
pure little-endian representation would have been IJKL EFGH ABCD.
The swap-back code only swaps the first two words also.
Meanwhile, patch is OK; I'd appreciate it if you could add a comment in
get_field/put_field somewhere explaining what's going on.
More information about the Gdb-patches