RFA fix conversion of little-byte big-word floats to doublest

Daniel Jacobowitz drow@false.org
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 <drow@false.org>  
> wrote:
> > 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.

-- 
Daniel Jacobowitz



More information about the Gdb-patches mailing list